возник вопрос перенаправления UDP протокола из вне во внутреннюю сеть предприятия.
настроен pf.подключено 3 PPPoE соединения на одного провайдера через pppd.
tun0 - xxx.xxx.xxx.65
tun1 - xxx.xxx.xxx.51
tun2 - xxx.xxx.xxx.52default route ходит через tun0., route add default xxx.xxx.xxx.242.
установлено еще 3 сетевых карты, одна смотри в первую DMZ зону друга во вторую DMZ, а третья в локальную сеть.
настройки pf
ext_if52 = "tun2"
int_if = "fxp0"
dmz1_if = "fxp1"
dmz2_if = "fxp2"dmz2_server = "192.168.5.2"
dmz2_port = "44444"
....
rdr pass on $ext_if52 proto udp from any to ($ext_if52) port $dmz2_port -> $dmz2_server
....запускаю tcpdump на интерфейсе tun2 и fxp2 на порт 44444.
tcpdump -i tun2 -v port 44444tcpdump -i fxp2 -v port 44444
вижу подключения на порт 44444 с обоих сторон, в ответ сервер отвечает на порт с которого клиент отправлял данные.
на tun2 вижу следующее к примеру:
123.123.123.123.3145 > xxx.xxx.xxx.52.44444
а на fxp2:
192.168.5.2.44444 > 123.123.123.123.44444
но до клиента данные не доходят, подозреваю что из за того что данные он пытается отправить через tun0 так как он указан route по умолчанию.Вообщем вопрос, что я делаю не так.
Нашел проблему Сам! оказалось, что необходимо указать через какой интерфейс надо испускать ответные пакеты, добавлением в конструкцию pass in опции reply-to, как говорить надо лучше изучать документацию :)Итого получили конструкцию вида:
rdr on $ext_if52 proto udp from any to ($ext_if52) port $dmz2_port tag DMZ2 -> $dmz2_server
nat on $ext_if52 from dmz_if2:network to any -> ($ext_if52)
pass in on $ext_if52 reply-to $ext_if52 proto udp tagged DMZ2 keep state
pass out on $ext_if52 proto udp tagged DMZ2 keep state