Может у кого-то есть готовое решение для двух шлюзов в round-robin в конфигурации биллинга "всё в одном"? Поделитесь, пожалуйста... Спрашиваю, т.г. гугл не помог, а в pf и ipfw не силён.
P.S.: Дело не с pf.conf, здесь я разобрался. Правило вида:
[root@gateway /etc]# cat pf.conf
set limit states 128000
set optimization aggressive
lan_net = "192.168.0.0/16"
int_if = "xl0"
ext_if1 = "vr0"
ext_if2 = "vr1"
ext_gw1 = "192.168.88.1"
ext_gw2 = "192.168.99.1"
# nat outgoing connections on each internet interface
nat on $ext_if1 from $lan_net to any -> ($ext_if1)
nat on $ext_if2 from $lan_net to any -> ($ext_if2)
# default deny
###block in from any to any
###block out from any to any
# pass all outgoing packets on internal interface
pass out on $int_if from any to $lan_net
# pass in quick any packets destined for the gateway itself
pass in quick on $int_if from $lan_net to $int_if
# load balance outgoing tcp traffic from internal network.
pass in on $int_if route-to \
{ ($ext_if1 $ext_gw1), ($ext_if2 $ext_gw2) } round-robin \
proto tcp from $lan_net to any flags S/SA modulate state
# load balance outgoing udp and icmp traffic from internal network
pass in on $int_if route-to \
{ ($ext_if1 $ext_gw1), ($ext_if2 $ext_gw2) } round-robin \
proto { udp, icmp } from $lan_net to any keep state
# general "pass out" rules for external interfaces
pass out on $ext_if1 proto tcp from any to any flags S/SA modulate state
pass out on $ext_if1 proto { udp, icmp } from any to any keep state
pass out on $ext_if2 proto tcp from any to any flags S/SA modulate state
pass out on $ext_if2 proto { udp, icmp } from any to any keep state
# route packets from any IPs on $ext_if1 to $ext_gw1 and the same for
# $ext_if2 and $ext_gw2
pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 to any
pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to any
Абсолютно не понятно как прикрутить к ipfw.
P.P.S.: И всё же вроде нашёл ход:
в /etc/rc.firewall
добавил (омечено плюсом):
ifOut='vr0'
+ifOur='vr1'
${f} add 200 skipto 500 ip from any to any via ${ifOut}
+${f} add 200 skipto 500 ip from any to any via ${ifOur}
${f} add 400 skipto 450 ip from any to any recv ${ifOut}
+${f} add 400 skipto 450 ip from any to any recv ${ifOur}
${f} add 2050 deny ip from any to any via ${ifOut}
+${f} add 2050 deny ip from any to any via ${ifOur}
Да, может и смешно реализовано, но оно же работает. Вроде как...