我面临的问题是,当我将操作系统从 Ubuntu 8.04 更改为 Debian Squeeze 后,我的 iptables 规则不再起作用。
我正在尝试通过以下方式进行端口转发
iptables -t nat -A PREROUTING -d $extip -i eth0 -p tcp -m tcp --dport 5777 -j DNAT --to-destination 192.168.10.169:5777
/proc/sys/net/ipv4/ip_forwarding is set
All policies are set to ACCEPT
192.168.10.169 is in FORWARD chain
tcpdump 输出:
IP some_ip.33517 > ext_ip.5777: Flags [S], seq 3521672809, win 14600, options [mss 1450,sackOK,TS val 1691129923 ecr 0,nop,wscale 7], length 0
IP ext_ip.5777 > some_ip.33517: Flags [R.], seq 0, ack 3521672810, win 0, length 0
如您所见,SYN 之后发送了一个 RST。我不知道为什么会发生这种情况。
我希望有人能帮助我。提前致谢。
答案1
我最终自己解决了这个问题。经过几个小时的尝试,几乎所有方法都试过了,结果发现是接口参数的问题。
所以这在旧机器上有效
iptables -t nat -A PREROUTING -d $extip -i eth0 -p tcp -m tcp --dport 5777 -j DNAT --to-destination 192.168.10.169:5777
但在新机器上,它只有在没有 -i eth0 的情况下才能工作,即使接口具有相同的名称
iptables -t nat -A PREROUTING -d $extip -p tcp -m tcp --dport 5777 -j DNAT --to-destination 192.168.10.169:5777
感谢所有提供帮助的人。