Есть сервер с поднятым openvpn, подключенный к интернет через двух провайдеров.
Код: Выделить всё
root@vpnsrv:/etc # uname -a
FreeBSD vpnsrv 9.1-RELEASE-p1 FreeBSD 9.1-RELEASE-p1 #0: Mon Mar 18 12:28:27 MSK 2013
Код: Выделить всё
root@vpnsrv:/etc # cat /etc/rc.local
# define default routes
setfib 0 route delete default
setfib 0 route add default 1.1.1.1
setfib 1 route delete default
setfib 1 route add default 2.2.2.1
# assing route tables to interfaces
ipfw -f flush
ipfw add allow ip from any to any via lo0
ipfw add setfib 0 ip from any to any via ext0
ipfw add setfib 1 ip from any to any via ext1
ipfw add allow ip from any to any
Код: Выделить всё
...
pass in on $ext_if_1 inet proto icmp from any to $ext_if_1 icmp-type $icmp_types
pass in on $ext_if_1 inet proto udp from any to $ext_if_1 port 33433><33626
pass in on $ext_if_2 inet proto icmp from any to $ext_if_2 icmp-type $icmp_types
pass in on $ext_if_2 inet proto udp from any to $ext_if_2 port 33433><33626
pass in on $ext_if_1 inet proto tcp from any to $ext_if_1 port ssh
pass in on $ext_if_2 inet proto tcp from any to $ext_if_2 port ssh
pass in on $ext_if_1 proto { tcp, udp } from any to $ext_if_1 port 1194
pass in on $ext_if_2 proto { tcp, udp } from any to $ext_if_2 port 1194
...
- сервер пингуется снаружи через оба внешних интерфейса
- traceroute снаружи до сервера работает также через обоих провайдеров
- к серверу можно подключиться снаружи по ssh через оба канала
- клиенты могут подключаться к openvpn по tcp через обоих провайдеров
- клиенты могут подключиться к openvpn по udp только через первого провайдера
С помощью tcpdump было выявлено, что udp-пакеты, приходящие от openvpn-клиента на второй канал, назад через него не возвращаются. Ещё раз обращаю внимание, что если в конфиге openvpn заменить proto udp на proto tcp, всё начинает работать, как надо: сервер даёт подключаться клиентам через оба интернет-канала.
Вопрос: что не так и можно ли заставить работать openvpn-сервер по протоколу udp через два wan-интерфейса.
Похожие темы уже были, но я что-то не нашёл окончательного решения проблемы.