Здравствуйте.
Есть маршрутизатор с FreeBSD 7.0 на борту, используется ipfw.
Возникла задача пробросить некоторую часть трафика до определённого узла через альтернативный маршрут.ifconfig -a :
vlan900: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=3<RXCSUM,TXCSUM>
ether 00:13:20:c4:b0:85
inet 192.168.0.22 netmask 0xfffffe00 broadcast 192.168.1.255
media: Ethernet autoselect (1000baseTX <full-duplex>)
status: active
vlan: 900 parent interface: em0
Дефолтный шлюз: 192.168.0.24
sk0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=b<RXCSUM,TXCSUM,VLAN_MTU>
ether 00:17:9a:06:1b:dc
inet 192.168.22.1 netmask 0xffffff00 broadcast 192.168.22.255
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
Здесь есть адсл-модем, настроеный рутером, ip 192.168.22.2, его интернет адрес 89.###.###.3
/etc/rc.firewall :
/sbin/ipfw -q flush
${ipfw} add pass tcp from any to any established
${ipfw} add check-state
${ipfw} add divert natd log tcp from me to 77.###.###.158 80 out
${ipfw} add fwd 192.168.22.2 log tcp from me to 77.###.###.158 80
${ipfw} add divert natd log ip from any to 192.168.22.1 in
Natd запущен просто natd -a 192.168.22.1
Какая получается картина:
Пакеты форвардятся через модем и доходят до хоста 77.###.###.158 нормально, о чем свидетельствует netstat, на том хосте.
netstat -na --inet
tcp 0 0 77.###.###.158:80 89.###.###.3:53542 SYN_RECV
natd с параметром -v показывает, что исходящие пакеты дивертятся нормально.
Out {default}[TCP] [TCP] 192.168.0.22:53542 -> 77.###.###.158:80 aliased to
[TCP] 192.168.22.1:53542 -> 77.###.###.158:80
но tcpdump на интерфейсе sk0(с адсл модемом) показывает только входящие пакеты, из чего я делаю вывод, что они не попадают в natd по какой-то причине.
08:54:55.468904 IP 77.###.###.158.80 > 192.168.22.1.53542: S 916117243:916117243(0) ack 4200163278 win 5792 <mss 1452,sackOK,timestamp 40956577 309862263,nop,wscale 0>