对设置和我迄今为止的调试工作有详细的解释,但主要问题在底部。
我有一个像这样的设置:
- 机器 A有两个网络接口:()和
eth0
(),其中有一条到 0.0.0.0/0 的路由,并且是一个在网状网络中使用的 TUN 接口。192.168.159.60
mesh0
10.255.0.1
eth0
mesh0
- 机器 B有一个网络接口:(
mesh0
)10.255.0.2
,其中mesh0
也是TUN接口。 mesh0
在A以及mesh0
乙无线连接。
我希望能够从乙, 通过A,到一些外部机器。本质上,A是乙。
ip route
为了A:
default via 192.168.144.1 dev eth0
10.255.0.0/16 dev mesh0 proto kernel scope link src 10.255.0.1
10.255.0.2 via 10.255.0.2 dev mesh0 proto 100 src 10.255.0.1 metric 2 onlink
192.168.144.0/20 dev eth0 proto kernel scope link src 192.168.159.60
ip route
为了乙:
default via 10.255.0.1 dev mesh0 proto 100 src 10.255.0.2 metric 2 onlink
10.255.0.0/16 dev mesh0 proto kernel scope link src 10.255.0.2
10.255.0.1 via 10.255.0.1 dev mesh0 proto 100 src 10.255.0.2 metric 2 onlink
步骤1:验证来自的数据包A到乙
之间的联系A和乙工作正常。如果我ping -I mesh0 8.8.8.8
运行乙,然后我sudo tcpdump --interface mesh0
继续乙,它输出:
21:08:59.701208 IP 10.255.0.2 > dns.google: ICMP echo request, id 43, seq 374, length 64
所以我知道我的数据包来自乙到A。
第2步:验证数据包转发A
接下来我检查了A正在将收到的数据包转发mesh0
到eth0
。如果我运行sudo tcpdump --interface eth0
,我会看到:
21:15:00.581098 IP 10.255.0.2 > dns.google: ICMP echo request, id 44, seq 5, length 64
所以我知道数据包转发A工作正常。但是,没有相应的 ICMP 回应。出于某种原因,请求已在 上发出eth0
,但没有返回任何响应。
步骤3:测试相同的 pingA
为了确认这不是外部服务器或eth0
接口本身的问题,我运行了ping -I eth0 8.8.8.8
和 sudo tcpdump --interface eth0
在A. tcpdump 显示:
21:12:45.878014 IP 192.168.159.60 > dns.google: ICMP echo request, id 11669, seq 6, length 64
21:12:45.882465 IP dns.google > 192.168.159.60: ICMP echo reply, id 11669, seq 6, length 64
ping 成功了。所以我知道这不是eth0
我尝试 ping 的接口或服务器的问题。
所有这些让我得出结论,问题在于下一跳不知道将 ICMP 回显响应路由到哪里。问题:我需要 NATA从mesh0
到eth0
。
问题:
如何在mesh0
和之间实现 NAT eth0
,以便外部机器(例如8.8.8.8
)的响应数据包被路由回,eth0
从而可以转发到mesh0
?