首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IP表NAT ens19 <> ens18

IP表NAT ens19 <> ens18
EN

Ask Ubuntu用户
提问于 2022-09-27 09:29:32
回答 1查看 174关注 0票数 0

我希望一个熟悉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。

到目前为止,我所拥有的是,

代码语言:javascript
复制
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

似乎半途而废,

ens18上的流量

只是将图像封装起来不起作用,下面是tcp转储在esn19上的输出

*nat是ubuntu机器的192.168.120.175 ip。

代码语言:javascript
复制
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的输出

代码语言:javascript
复制
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的输出是

代码语言:javascript
复制
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/0

sudo iptables -L -n -v | grep "Chain FORWARD"输出

代码语言:javascript
复制
Chain FORWARD (policy ACCEPT 1273 packets, 56132 bytes)

iptables -L FORWARD -v的输出是

代码语言:javascript
复制
    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捕获

代码语言:javascript
复制
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 0

ens19捕获

代码语言:javascript
复制
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流量?

*编辑

感谢大家的投入,问题解决了!

EN

回答 1

Ask Ubuntu用户

回答已采纳

发布于 2022-09-27 18:42:47

根据所提供的信息,您正在错误地预测NAT (网络地址翻译)。目前,192.168.120.110不知道正确的回复地址,因此它不正确地回复192.168.120.170192.168.120.170的服务器不知道如何处理发送给它的数据包。通过逆转NAT方向:删除以下内容:

代码语言:javascript
复制
sudo iptables -t nat -A POSTROUTING -o ens18 -j MASQUERADE

然后用这个代替:

代码语言:javascript
复制
sudo iptables -t nat -A POSTROUTING -o ens19 -j MASQUERADE

但是,我自己,只要网卡上的IP地址是静态的和已知的,我就会使用SNAT而不是MASQUERADE

代码语言:javascript
复制
sudo iptables -t nat -A POSTROUTING -o ens19 -j SNAT to 10.0.0.10

因为默认的转发策略是接受,所以实际上不需要这样做:

代码语言:javascript
复制
sudo iptables -A FORWARD -i ens19 -j ACCEPT

顺便说一句,tcpdump清单上的时间戳并不相关,这让人感到困惑。最好同时在两个终端中运行两个实例,这样就可以使用时间戳来帮助理解。

使用此更改,您应该观察到类似于:

代码语言:javascript
复制
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地址的网关。

票数 0
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/1432506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档