我有一个linux,有2个接口,例如eth0和eth1,一个是“外部”,另一个是“内部”,我想将一个端口从外部接口重定向到内部接口,但我对包的返回有一些问题。但是,如果我将其从外部转发到外部就没有问题了。在外部到外部工作并执行此操作的 iptables 代码是:
iptables -t nat -A PREROUTING -p tcp --dport (port number) -j DNAT --to-destination (ipdestiny internal):(port destiny who are listening in the host in this case is the same of dport)
iptables -t nat -A POSTROUTING -p tcp -d (ipdestiny internal) --dport (port number) -j SNAT --to-source (ip external)
如果我在“内部 eth”中执行了 tcpdump: TCPdump:
09:53:55.099904 IP (tos 0x8, ttl 127, id 21212, offset 0, flags [DF], proto TCP (6), length 52)
ipexternal.(61236 port origin) > ipinternal.(port destiny): Flags [S], cksum 0x1aba (correct), seq 3030159247, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
0x0000: 4508 0034 52dc 4000 7f06 832b 0ac8 2840 E..4R.@....+..(@
0x0010: c0a8 3204 ef34 0050 b49c 8f8f 0000 0000 ..2..4.P........
0x0020: 8002 faf0 1aba 0000 0204 05b4 0103 0308 ................
0x0030: 0101 0402
正如我所看到的,内部转发的流量有效,但没有任何内容从内部“返回”到外部。我检查了 /etc/sysctl.conf 该行:
net.ipv4.ip_forward=1
而且它没有注释。
这是我查看 nat 表的方式:
iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:(port number listening on "external") to:(destiny ip "internal"):(port destiny in the "internal")
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
SNAT tcp -- 0.0.0.0/0 (ip destiny) tcp dpt:(port number listening on "external") to:(ip "external")
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
答案1
客户端可能正在接收流量,但不知道将返回流量发送到哪里。在客户端计算机上,定义静态路由或默认网关。