Nat
ip.route iptable 不 nat
|--------------| |--------------| |--------------| | 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 上收聽我可以看到這樣的數據包
No. time mac source destination protocol length info 285 106.310258 N/A 10.5.0.2 10.8.0.1 ICMP 84 Echo (ping) request id=0x8114, seq=0/0, ttl=63 (no response found!)
我不明白為什麼我在介面 tun0 上得到 ip 10.5.0.2
正如評論中所解釋的,你不應該在這裡做 NAT。您應該只使用正常 IP 路由。
但是,要解決 NAT 的問題,請更改
-A POSTROUTING -o wlan0 -j MASQUERADE
到
-A POSTROUTING -o tun0 -j MASQUERADE
在您的 IPTables 規則中。