TUN 和以太网网络接口之间的 NAT

TUN 和以太网网络接口之间的 NAT

对设置和我迄今为止的调试工作有详细的解释,但主要问题在底部。

我有一个像这样的设置:

  • 机器 A有两个网络接口:()和eth0(),其中有一条到 0.0.0.0/0 的路由,并且是一个在网状网络中使用的 TUN 接口。192.168.159.60mesh010.255.0.1eth0mesh0
  • 机器 B有一个网络接口:(mesh010.255.0.2,其中mesh0也是TUN接口。
  • mesh0A以及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正在将收到的数据包转发mesh0eth0。如果我运行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 eth0A. 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 回显响应路由到哪里。问题:我需要 NATAmesh0eth0

问题: 如何在mesh0和之间实现 NAT eth0,以便外部机器(例如8.8.8.8)的响应数据包被路由回,eth0从而可以转发到mesh0

相关内容