Есть примерно такой pf.conf
Код: Выделить всё
ifSp1="ae0"
gwSp1="..."
ifSp2="re0"
gwSp2="..."
ifLan="em0"
ifVpn="tun0"
netLan="10.0.1.0/24"
netVpn="10.0.7.0/24"
table <nat_1> {...}
table <nat_2> {...}
set block-policy drop
set skip on lo0
set skip on $ifVpn
nat on $ifSp1 from <nat_1> to any -> ($ifSp1)
nat on $ifSp2 from <nat_2> to any -> ($ifSp2)
block all
#services
#icmp
pass in on $ifSp2 reply-to ($ifSp2 $gwSp2) inet proto icmp from any to $ifSp2 keep state
pass in on $ifSp1 reply-to ($ifSp1 $gwSp1) inet proto icmp from any to $ifSp1 keep state
#sshd
pass in quick on $ifSp2 reply-to ($ifSp2 $gwSp2) inet proto tcp from any to $ifSp2 port 16122 keep state
pass in quick on $ifSp1 reply-to ($ifSp1 $gwSp1) inet proto tcp from any to $ifSp1 port 16122 keep state
#openvpn
pass in quick on $ifSp2 reply-to ($ifSp2 $gwSp2) inet proto {tcp,udp} from any to $ifSp2 port 1194 keep state
pass in quick on $ifSp1 reply-to ($ifSp1 $gwSp1) inet proto {tcp,udp} from any to $ifSp1 port 1194 keep state
#nginx
pass in quick on $ifSp2 reply-to ($ifSp2 $gwSp2) inet proto tcp from any to $ifSp2 port {80,8081,8011,443} keep state
pass in quick on $ifSp1 reply-to ($ifSp1 $gwSp1) inet proto tcp from any to $ifSp1 port {80,8081,8011,443} keep state
#dns
pass out quick on $ifSp2 from ($ifSp2) to 8.8.8.8 keep state
pass out quick on $ifSp1 from ($ifSp1) to 8.8.8.8 keep state
#vpn <-> lan
pass out quick on $ifLan from $netVpn to $netLan keep state
pass in quick on $ifLan from $netLan to $netVpn keep state
# ssh and nginx from lan
pass in quick on $ifLan inet proto tcp from $netLan to ($ifLan) port {80,8011,8081,443} keep state
pass in quick on $ifLan inet proto tcp from any to ($ifLan) port 16122 keep state
pass out quick on $ifLan from ($ifLan) to $netLan keep state
# redirecting LAN clients to different route tables
pass in on $ifLan route-to ($ifSp1 $gwSp1) inet from <nat_1> to any keep state
pass in on $ifLan route-to ($ifSp2 $gwSp2) inet from <nat_2> to any keep state
pass out on $ifSp1 from $ifSp1 to any keep state
pass out on $ifSp2 from $ifSp2 to any keep state
#local guys
pass in quick on $ifLan from $netLan to ($ifLan)
НО :
пропал инет от того прова, который defaultrouter (ну тупо электричество с другой стороны упало, и статус у сетевухи стал no-carrier) - сразу отваливаются оба(!) инета. Если выдернуть другой кабель (тот который fib 1) - то первый инет продолжает работать.
Знающие люди, объясните плз почему так происходит и как с этим бороцца ?
(Пока что, кроме как мониторинга доступности дефолтного канала каким нить скриптом, и при падении менять дефолтроут и таблицу правил - ничего в голову не приходит. Но это прямо какие то костыли велосипедные.)
ps. Мне тут уже предлагали смотреть в сторону лялиха и iproute2 ... но пока не хочется так кардинально поступать. В своё время от этого (лялиха) как раз и ушел.