我的 nat 规则有问题。您可以在这里查看路线

从所有可能的设备(PC、EVB 1、EVB 2)都可以 ping 到公共 IP,例如 8.8.8.8。

但是 EVB 2 发送了 UDP/TCP 请求,但没有响应。PC 和 EVB 1 可以按预期通过 TCP/UDP 进行通信。我使用 DNS 请求对内部 DNS 服务器进行了测试,并看到了这种行为。在我看来,PC 端的 nat 规则不起作用。源 IP 地址未转换为 10.61.128.97,因此 DNS 服务器无法响应。

PC:enp0s31f6 上的 tcpdump(在 EVB 2 上 ping google.com):

192.168.21.85.49640 > 10.61.8.3.53: [bad udp cksum 0xd1cc -> 0x0495!] 15613+ A? google.com. (28)
192.168.21.85.49640 > 10.61.8.3.53: [bad udp cksum 0xd1cc -> 0x0495!] 15613+ A? google.com. (28)

PC:enp0s31f6 上的 cpdump (在 EVB 1 上 ping google.com):

09:16:37.078577 IP 10.61.128.97.44859 > 10.61.8.3.53: 38709+ A? google.com. (28)
09:16:37.078587 IP 10.61.128.97.44859 > 10.61.8.3.53: 29483+ AAAA? google.com. (28)
09:16:37.078901 IP 10.61.8.3.53 > 10.61.128.97.44859: 29483 2/0/0 CNAME forcesafesearch.google.com., AAAA 2001:4860:4802:32::78 (86)
09:16:37.078902 IP 10.61.8.3.53 > 10.61.128.97.44859: 38709 2/0/0 CNAME forcesafesearch.google.com., A 216.239.38.120 (74)

低于我的自然规则

### PC NAT rules
# Generated by iptables-save v1.8.4 on Wed Oct 9 09:25:47 2024
*filter
:INPUT ACCEPT [1388199:1181620222]
:FORWARD ACCEPT [68:6201]
:OUTPUT ACCEPT [557234:439242392]
-A INPUT -j LOG --log-prefix "IPTables-TOBIAS "
-A FORWARD -p udp -m udp --dport 53 -j ACCEPT
-A FORWARD -p tcp -m tcp --dport 53 -j ACCEPT
-A FORWARD -p udp -m udp --dport 53 -j ACCEPT
-A FORWARD -p tcp -m tcp --dport 53 -j ACCEPT
COMMIT
# Completed on Wed Oct 9 09:25:47 2024
# Generated by iptables-save v1.8.4 on Wed Oct 9 09:25:47 2024
*nat
:PREROUTING ACCEPT [318544:51408181]
:INPUT ACCEPT [72160:10063570]
:OUTPUT ACCEPT [16277:1250798]
:POSTROUTING ACCEPT [16277:1250798]
-A POSTROUTING -s 192.168.21.85/32 -o enp0s31f6 -j MASQUERADE
-A POSTROUTING -j LOG --log-prefix "POSTROUTING: "
COMMIT

### EVB 1 NAT rules 
Generated by iptables-save v1.6.0 on Thu Oct 3 04:49:47 2024
*nat
:PREROUTING ACCEPT [22:1393]
:INPUT ACCEPT [6:373]
:OUTPUT ACCEPT [38:2824]
:POSTROUTING ACCEPT [38:2824]
-A POSTROUTING -s 192.168.10.2/32 -o eth0 -j MASQUERADE
COMMIT
# Completed on Thu Oct 3 04:49:47 2024
# Generated by iptables-save v1.6.0 on Thu Oct 3 04:49:47 2024
*filter
:INPUT ACCEPT [206599:417912866]
:FORWARD ACCEPT [164:13190]
:OUTPUT ACCEPT [262956:228460301]
-A FORWARD -p udp -m udp --dport 53 -j ACCEPT
-A FORWARD -p tcp -m tcp --dport 53 -j ACCEPT
COMMIT

我还测试了“-j SNAT –to 10.61.128.97”,但没有成功。


我在 PC 端插入了一些 iptable 记录器,可以在包计数中看到表“mangle PREROUTING”获取了包,但“nat PREROUTING”没有。有什么进一步调试的想法吗?

日志信息看起来非常相似…

坏情况:在 EVB 2 上 ping google.com

[698811.241010] PREROUTING mangle IN=enx84c9b2cfcc21 OUT= MAC=84:c9:b2:cf:cc:21:f4:50:eb:df:5d:6f:08:00 SRC=192.168.21.85 DST=10.61.8.3 LEN=56 TOS=0x00 PREC=0x00 TTL=63 ID=14231 DF PROTO=UDP SPT=34132 DPT=53 LEN=36

好的例子:在 EVB 1 上 ping google.com

[698412.706114] PREROUTING mangle IN=enx84c9b2cfcc21 OUT= MAC=84:c9:b2:cf:cc:21:f4:50:eb:df:5d:6f:08:00 SRC=192.168.21.85 DST=10.61.8.3 LEN=56 TOS=0x00 PREC=0x00 TTL=64 ID=5697 DF PROTO=UDP SPT=36677 DPT=53 LEN=36 
[698412.706124] PREROUTING NAT Src 192.168.21IN=enx84c9b2cfcc21 OUT= MAC=84:c9:b2:cf:cc:21:f4:50:eb:df:5d:6f:08:00 SRC=192.168.21.85 DST=10.61.8.3 LEN=56 TOS=0x00 PREC=0x00 TTL=64 ID=5697 DF PROTO=UDP SPT=36677 DPT=53 LEN=36

2

  • 您是否真的需要所有这些 NAT 层?似乎在 EVB 之间进行简单路由就足够了?


    – 

  • 但是如何呢?我在 PC 端插入了一些 iptable 记录器,可以在包计数中看到表“mangle PREROUTING”获取了包,但“nat PREROUTING”没有。有什么进一步调试的想法吗?


    – 

0