Nat

ip.route iptable 不 nat

  • April 30, 2019
|--------------|          |--------------|          |--------------|
|  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 規則中。

引用自:https://serverfault.com/questions/964887