pc1 —— fw —— pc2
pc1 192.168.20.128
fw nic1 20.129 nic2 30.129
pc2 192.168.30.130

1 在pc2上開80端口
nc -l 80
2 fw上清空所有規則,配置:
iptables -t nat -I PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to 9999
iptables -t mangle -I INPUT -p tcp --dport 9999 -j LOG --log-prefix "mangle-input 9999 "
3 在pc1上 訪問192.168.30.130 80端口
nc 192.168.30.130 80
4 觀察結果
tcpdump -i eth0 -nne
eth0收到的五元組 (192.168.20.128 58758 -- 192.168.30.130 80)
dmesg
mangle-input 9999 IN=ens34 OUT= MAC=00:0c:29:d8:08:7c:00:0c:29:c2:4d:fe:08:00 SRC=192.168.20.128 DST=192.168.20.129 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=54663 DF PROTO=TCP SPT=58758 DPT=9999 WINDOW=29200 RES=0x00 SYN URGP=0
通過dmesg(tcpdump看不到redirect后的報文)可以看到dst從192.168.30.130變成了192.168.20.129!!!
端口變成了9999(意料之中)。
也就是說REDIRECT同時改變了ip和port。
更進一步
去看內核源碼你就知道為什么了!!!(目的ip會改成報文從哪個網卡進來的ip,平時沒發現那是因為目的ip就是網卡的ip,即使替換了也看不出來)
