|--------------| |--------------| |--------------|
| computer A | eth0| computer B | | computer C |internet
| (10.5.0.2) |----------| (10.5.0.1) | | (x.x.x.x) |--------
| | | | | ^ |
| | | NAT | | | NAT | |
| | | ˇ | tun0 | |
| | | (10.8.0.14) |----------| (10.8.0.1) |
|--------------| |--------------| |--------------|
这是我构建的网络示意图。
我的问题是当我尝试在 B 计算机中配置 NAT 时
“bash root@computerB#cat /proc/sys/net/ipv4/ip_forward 1
root@computerB# iptables-save
*nat
:PREROUTING ACCEPT [13:1108]
:INPUT ACCEPT [10:600]
:OUTPUT ACCEPT [6708:457650]
:POSTROUTING ACCEPT [5782:389727]
-A POSTROUTING -o wlan0 -j MASQUERADE
COMMIT
# Completed on Sat Apr 27 23:56:29 2019
# Generated by iptables-save v1.6.0 on Sat Apr 27 23:56:29 2019
*filter
:INPUT ACCEPT [1235765:1640284761]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [759264:248481682]
-A FORWARD -i eth0 -j ACCEPT
COMMIT
# Completed on Sat Apr 27 23:56:29 2019
- 当我从计算机 A ping 10.5.0.1 时,一切正常
- 当我从计算机 A ping 10.8.0.14 时,它成功了
当我想要从计算机 A ping 10.8.0.1 时,它不工作,
所以我用我的朋友 wireshark 开始在 tun0 上监听,我可以看到类似的数据包编号时间mac源目标协议长度信息285 106.310258 N/A 10.5.0.2 10.8.0.1 ICMP 84 Echo(ping)请求id=0x8114,seq=0/0,ttl=63(未找到响应!)
我不明白为什么我在接口 tun0 上获得 ip 10.5.0.2
答案1
正如评论中所述,您不应该在这里进行 NAT。您应该只使用常规 IP 路由。
但是,要解决 NAT 问题,请更改
-A POSTROUTING -o wlan0 -j MASQUERADE
到
-A POSTROUTING -o tun0 -j MASQUERADE
在您的 IPTables 规则中。