была следующая сеть:
(локальная 192.168.1.0/24) - (192.168.1.1/24 маршрутизатор 192.168.10.2/24) - (192.168.10.1/24 adsl модем в режиме роутера) - (интернет)

фрибсд режет трафик пайпами, даёт доступ к www серверу.
в ядре добавлены IPFIREWALL, DUMMYNET, IPFIREWALL_FORWARD, IPDIVERT, pf, ALTQ
подключились ещё к одному провайдеру. pppoe, статический адрес.

хочется балансировать нагрузку между каналами, подключаться на второй внешний адрес.
добавил в /etc/ppp/ppp.conf
Код: Выделить всё
skynet:
set device PPPoE:vr0
set authname username_of_skynet
set authkey password_of_skynet
set dial
set login
подключаюсь через /etc/rc.local
Код: Выделить всё
ppp -ddial skynet
Код: Выделить всё
#ifconfig
fxp0 -- интерфейс "старого" провайдера
fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=4219b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,WOL_MAGIC,VLAN_HWTSO>
inet 192.168.10.2 netmask 0xffffff00 broadcast 192.168.10.255
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
vr0 -- интерфейс, в который включен "новый" провайдер
vr0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=2808<VLAN_MTU,WOL_UCAST,WOL_MAGIC>
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
rl0 -- локальная сеть
rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=3808<VLAN_MTU,WOL_UCAST,WOL_MCAST,WOL_MAGIC>
inet 192.168.1.1 netmask 0xffffff00 broadcast 192.168.1.255
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
plip0: flags=108810<POINTOPOINT,SIMPLEX,MULTICAST,NEEDSGIANT> metric 0 mtu 1500
pflog0: flags=0<> metric 0 mtu 33204
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x6
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
pfsync0: flags=0<> metric 0 mtu 1460
syncpeer: 224.0.0.240 maxupd: 128
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1492
inet 6.6.6.6 --> 192.168.192.2 netmask 0xffffffff
Opened by PID 1477
ping -S 6.6.6.6 http://www.ya.ru
ping -S 192.168.10.2 http://www.ya.ru
пинги проходят, с существенно различным лагом ответа
пытаюсь извне пинговать адрес 6.6.6.6, ответ приходит с адреса первого провайдера.

пытаюсь организовать условную балансировку трафика следующим скриптом:
Код: Выделить всё
ip1=192.168.10.2
ip2=6.6.6.6
if1=fxp0
if2=tun0
gw1=192.168.10.1
gw2=6.6.6.6
ipfw -q flush
natd -p 8668 -a $ip1 -u -redirect_port tcp 192.168.1.2:80 80 -l -log_denied -use_sockets -same_ports
natd -p 8669 -u -n tun0
ipfw add divert 8668 ip from any to $ip1 recv $if1
ipfw add divert 8669 ip from any to $ip2 recv $if2
ipfw add check-state
ipfw add prob 0.5 divert 8668 ip from 192.168.1.0/24 to any xmit $if1 keep-state
ipfw add divert 8669 ip from 192.168.1.0/24 to any xmit $if2 keep-state
ipfw add fwd $gw1 log ip from $ip1 to any out xmit $if1
ipfw add fwd $gw2 log ip from $ip2 to any out xmit $if2
ipfw add allow log ip from any to any
кроме того, как только начинаю извне обращаться на проброшенный сервис -- резко растёт количество счётчиков на правиле с prob 0.5 и natd начинает есть всё процессорное время.
подскажите, что можно поправить? куда лучше смотреть?
от сервера не очень близко, поэтому ошибки конфигурирования исправляю перезагрузкой (или сервера или правил фаервола) по команде at. (естественно, при потере связи с сервером)