Имею вашинку с тремя интерфейсами (третий неважен так как смотрит в локалку).
Внешние интерфейсы (оба D-Link DFE-520TX):
vr0
ifconfig_vr0="inet 222.222.33.146 netmask 255.255.255.252"
(шлюз для этого интерфейса 222.222.33.145)
vr1
ifconfig_vr1="inet 111.111.15.40 netmask 255.255.255.240"
(шлюз для этого интерфейса 111.111.15.33)defaultrouter="111.111.15.33"
На мащине включен gateway_enable="YES"
Форвардингом в ipfw делаю так, чтобы пакет, пришедший на адрес интерфейса
vr0 (который не является шлюзом по умолчанию) уходили через него наружу:
# ipfw -a list
00010 1322 110992 fwd 222.222.33.145 ip from 222.222.33.146 to any out not via vr0
65535 36586 3307927 allow ip from any to any
все замичательно работает и уходит через нужный интерфес.
пинги прекрасно ходят:
# ping 111.111.15.19
PING 111.111.15.19 (111.111.15.19): 56 data bytes
64 bytes from 111.111.15.19: icmp_seq=0 ttl=63 time=0.875 ms
64 bytes from 111.111.15.19: icmp_seq=1 ttl=63 time=0.871 ms
64 bytes from 111.111.15.19: icmp_seq=2 ttl=63 time=0.769 ms
через интерфейс не являющийся шлюзом по умолчанию:
# ping -S 222.222.33.146 111.111.15.19
PING 111.111.15.19 (111.111.15.19) from 222.222.33.146: 56 data bytes
64 bytes from 111.111.15.19: icmp_seq=0 ttl=58 time=105.057 ms
64 bytes from 111.111.15.19: icmp_seq=1 ttl=58 time=58.239 ms
64 bytes from 111.111.15.19: icmp_seq=2 ttl=58 time=61.192 ms
также я вижу tcpdump'ом что все идет через нужный интерфейс.
НО!
Если выдернуть шнурок из сетевухи которая является шлюзом по умолчанию (vr1)
и дать команду:
# ping 111.111.15.19
то через некоторое врямя получаем:
ping: sendto: No buffer space available
ping: sendto: No buffer space available
ping: sendto: No buffer space available
...
те как я понимаю забивается буфер отправки интерфейса
команда пинга через интерфейс не являющийся шлюзом по умолчанию
дает тот же результат:
# ping -S 222.222.33.146 111.111.15.19
ping: sendto: No buffer space available
ping: sendto: No buffer space available
ping: sendto: No buffer space available
при этом шлюз данного интерфеса пингуется:
# ping 222.222.33.145
PING 222.222.33.145 (222.222.33.145): 56 data bytes
64 bytes from 222.222.33.145: icmp_seq=0 ttl=255 time=0.760 ms
64 bytes from 222.222.33.145: icmp_seq=1 ttl=255 time=0.621 ms
64 bytes from 222.222.33.145: icmp_seq=2 ttl=255 time=0.588 ms
те его буфер не забит
Если положить дефолтный интерфейс в down:
# ifconfig vr1 down
по все начинает ходить (через vr0 с его scr адресом)
- как я понимаю пакеты уже не копятся в буфере vr1, а дропаются.
Если обратно поднять интерфейс:
# ifconfig vr1 up
то через некоторое врямя ситуация повторяется, снова забивает буфер vr1.
Если воткнуть сетевой шнурок в любой хабик/свитч ни с чем не соединенный
(те чисто чтобы получить линк на сетевухе) то проблема исчезает - те пакеты
также дропаются
Что это может быть? Почему пакеты интерфейса в состоянии link down
копятся в буфере? Или как скажем настроить интерфейс чтобы он сам уходил в down
при потери линка?
Не могу понять куда копать ... туплю сафсем )