>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