我希望一个熟悉IP表的人能给我一些指点。
我正在尝试一个带有2个接口的DNAT,基本上,我想做的是,从一个接口到另一个特定的IP,任何东西都需要被推送,流量需要双向流动。
接口是ens19和ens18。
ens19的ip为10.0.0.10,从ens19上的10.0.0.10到ens18上的192.168.110.120,则需要在ens19上将192.168.110.120的任何响应推回10.0.0.10。
到目前为止,我所拥有的是,
sudo iptables -t nat -A POSTROUTING -o ens18 -j MASQUERADE,
sudo iptables -A FORWARD -i ens19 -j ACCEPT,
sudo iptables -t nat -A PREROUTING -i ens19 -p tcp -j DNAT --to 192.168.120.110似乎半途而废,
只是将图像封装起来不起作用,下面是tcp转储在esn19上的输出
*nat是ubuntu机器的192.168.120.175 ip。
10:59:28.061230 IP (tos 0x2,ECT(0), ttl 122, id 4932, offset 0, flags [DF], proto TCP (6), length 52)
10.180.9.221.60497 > nat.502: Flags [SEW], cksum 0x005c (correct), seq 915671938, win 8192, options [mss 1200,nop,wscale 8,nop,nop,sackOK], length 0
10:59:34.064183 IP (tos 0x0, ttl 122, id 9853, offset 0, flags [DF], proto TCP (6), length 48)
10.180.9.221.60497 > nat.502: Flags [S], cksum 0x152b (correct), seq 915671938, win 8192, options [mss 1200,nop,nop,sackOK], length 0以下是ens18上tcpdump的输出
11:02:01.078007 IP (tos 0x2,ECT(0), ttl 121, id 4808, offset 0, flags [DF], proto TCP (6), length 52)
nat.61244 > 192.168.120.110.502: Flags [SEW], cksum 0x2b46 (correct), seq 2455055900, win 8192, options [mss 1200,nop,wscale 8,nop,nop,sackOK], length 0
11:02:01.079093 IP (tos 0x0, ttl 64, id 64830, offset 0, flags [DF], proto TCP (6), length 44)
192.168.120.110.502 > nat.61244: Flags [S.], cksum 0x71f0 (correct), seq 935635538, ack 2455055901, win 8192, options [mss 1460], length 0看起来,192.168.120.110响应的是来自10.0.0.10的请求,但是当我捕获ens19上的流量时,我只看到原始请求,而不是响应。
我还设置了sysctl -w net.ipv4.ip_forward=1
编辑*
sudo iptables -L -n -t nat -v的输出是
Chain PREROUTING (policy ACCEPT 3419 packets, 853K bytes)
pkts bytes target prot opt in out source destination
239 12428 DNAT tcp -- ens19 * 0.0.0.0/0 0.0.0.0/0 to:192.168.120.110
Chain INPUT (policy ACCEPT 5 packets, 388 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 81 packets, 6116 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 45 packets, 3340 bytes)
pkts bytes target prot opt in out source destination
275 15204 MASQUERADE all -- * ens18 0.0.0.0/0 0.0.0.0/0sudo iptables -L -n -v | grep "Chain FORWARD"输出
Chain FORWARD (policy ACCEPT 1273 packets, 56132 bytes)iptables -L FORWARD -v的输出是
Chain FORWARD (policy ACCEPT 1208 packets, 53272 bytes)
pkts bytes target prot opt in out source destination
726 36884 ACCEPT all -- ens19 any anywhere anywhere感谢你的时间!
*编辑,在以前的捕获中,我暂时将ens18的IP更改为192.168.110.170 nat。
下面是来自ens18的捕获,它看起来像是对来自ens19 10.0.0.10的三路握手请求(我可能错了)的响应,但是响应不是通过ens19上的10.0.0.10返回的。
ens18捕获
14:47:13.068871 IP 192.168.120.170.57553 > 192.168.120.110.502: Flags [SEW], seq 729326537, win 8192, options [mss 1200,nop,wscale 8,nop,nop,sackOK], length 0
14:47:13.069312 IP 192.168.120.110.502 > 192.168.120.170.57553: Flags [S.], seq 3632495411, ack 729326538, win 8192, options [mss 1460], length 0
14:47:16.015114 IP 192.168.120.110.502 > 192.168.120.170.57553: Flags [S.], seq 3632495411, ack 729326538, win 8192, options [mss 1460], length 0ens19捕获
14:58:19.066653 IP 10.180.9.221.60553 > 10.0.0.10.502: Flags [SEW], seq 1069361213, win 8192, options [mss 1200,nop,wscale 8,nop,nop,sackOK], length 0
14:58:25.077211 IP 10.180.9.221.60553 > 10.0.0.10.502: Flags [S], seq 1069361213, win 8192, options [mss 1200,nop,nop,sackOK], length 0有没有一种方法可以将来自ens18的192.168.110.120流量路由到ens19上的10.0.0.10流量?
*编辑
感谢大家的投入,问题解决了!
发布于 2022-09-27 18:42:47
根据所提供的信息,您正在错误地预测NAT (网络地址翻译)。目前,192.168.120.110不知道正确的回复地址,因此它不正确地回复192.168.120.170。192.168.120.170的服务器不知道如何处理发送给它的数据包。通过逆转NAT方向:删除以下内容:
sudo iptables -t nat -A POSTROUTING -o ens18 -j MASQUERADE然后用这个代替:
sudo iptables -t nat -A POSTROUTING -o ens19 -j MASQUERADE但是,我自己,只要网卡上的IP地址是静态的和已知的,我就会使用SNAT而不是MASQUERADE:
sudo iptables -t nat -A POSTROUTING -o ens19 -j SNAT to 10.0.0.10因为默认的转发策略是接受,所以实际上不需要这样做:
sudo iptables -A FORWARD -i ens19 -j ACCEPT顺便说一句,tcpdump清单上的时间戳并不相关,这让人感到困惑。最好同时在两个终端中运行两个实例,这样就可以使用时间戳来帮助理解。
使用此更改,您应该观察到类似于:
ens19 IP 10.180.9.221.60553 > 10.0.0.10.502:
ens18 IP 10.180.9.221.60553 > 192.168.120.110.502:
ens18 IP 192.168.120.110.502 > 10.180.9.221.60553:
ens19 IP 10.0.0.10.502 > 10.180.9.221.60553:
ens19 ...而192.168.120.110需要知道192.168.120.170 (或.175)要么是默认网关,要么是可能到达ens19的IP地址的网关。
https://askubuntu.com/questions/1432506
复制相似问题