URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 77355
[ Назад ]

Исходное сообщение
"pf nat"

Отправлено naphta , 15-Ноя-07 15:19 
всем привет!

есть шлюз, на нем два канала в инет и локалка
не получается натить второй канал, один только работает и все, хоть ты тресни

который не получается натить с внешним ипом

в pf.conf

scrub in all

nat on $ext_if1 from $lan_net to any -> ($ext_if1)
nat on $ext_if2 from $lan_net to any -> ($ext_if2)

снизу все разрешено

в таблице роутинга два статик роута в подсети провайлеров
деволтовый роут один(первого провайдера), если канал на нем падает, скриптом переключается на резерв.

не пойму в чем бок!
помогите дельным советом. заранее благодарен


Содержание

Сообщения в этом обсуждении
"pf nat"
Отправлено ShyLion , 15-Ноя-07 19:52 
>scrub in all
>
>nat on $ext_if1 from $lan_net to any -> ($ext_if1)
>nat on $ext_if2 from $lan_net to any -> ($ext_if2)
>в таблице роутинга два статик роута в подсети провайлеров
>деволтовый роут один(первого провайдера), если канал на нем падает, скриптом переключается на
>резерв.

этого мало
несмотря на то, что ты маршрут переключил, для ната используется все равно первое правило
а раз ты роут переключаешь на другого провайдера, то к нему приходят пакеты с адресом источника от первого провайдера, в лучшем случае они не вернутся, в худшем провайдер их отфильтрует сразу. Тебе скриптом надо переключать еще и $lan_net
для этого можно использовать таблицы

например так

table <isp1_users> persist { $lan_net }
table <isp2_users> persist

nat on $ext_if1 from <isp1_users> to any -> ($ext_if1)
nat on $ext_if2 from <isp2_users> to any -> ($ext_if2)

pass in quick route-to ($ext_if1 $isp1_route) from <isp1_users> to any keep state
pass in quick route-to ($ext_if2 $isp2_route) from <isp2_users> to any keep state

и т.д.
таблицами манипулировать можно из скрипта так

pfctl -t isp1_users -Tdel 192.168.0.0/16
pfctl -t isp2_users -Tadd 192.168.0.0/16
pfctl -Fs