如何允許 iptables 正確使用隧道而不是 NAT?
我有兩個通過點對點隧道連接的 NAT 網路,如下所示:
| Machine A | | Machine B | | 1.2.3.4 |<-10.101.3.2-------tun------10.101.3.1-> | 4.5.6.7 | | 10.110.0.1 | | 10.100.1.1 | -----+-------- --------+----- | | [ 10.110.1.0/24 net ] [ 10.100.0.0/16 net]
機器 A 有一個公共 IP
eth0
和一個私有 IP10.110.1.1
,vmbr0
並通過 ptp VPN 通過網際網路與機器 B 連接,機器 B 有一個公共 IPen0
和一個私有 IPen1
(以及許多其他私有網路)兩個 LAN 上都有客戶端使用帶有兩個公共 IP 的 NAT。這工作正常。(使用機器 A 上的 iptables 和機器 B 上的 pfSense 完成)
路由設置為機器 A 可以 ping 機器 B 的私有 ip
10.100.1.1
,並且可以訪問網路 B 上的所有主機10.100.0.0/16
。同樣,機器 B(以及網路 B 上的所有主機)可以訪問機器 A,以及網路 A 上的所有主機10.110.1.0/16
但是,網路 A 上的主機無法與網路 B 上的主機建立連接(EG
10.110.1.2
無法 ping 或 SSH 到10.100.10.50
)我懷疑這與 A 上的 iptables 設置有關,因為 SSH from
10.100.10.50
to10.110.1.2
可以工作,但我不能然後反向 SSH。這對我說,我的 iptables FILTER 規則RELATED,ESTABLISHED
有效,但不知何故,我懷疑機器 A 正在嘗試 NAT 並eth0
用於新連接。我在我認為需要它們的所有地方添加了
ACCEPT destination 10.100.0.0/16
iptables 規則,然後甚至在我認為當事情不起作用時不需要它們的地方,仍然無法從網絡 A 到網路 B 的傳出連接正常工作。如何使用 iptables 通過點對點隧道正確連接兩個經過 NAT 的專用網路?
附加資訊:
機器 A 上的 iptables:
Chain PREROUTING (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere 10.100.0.0/16 DNAT tcp -- anywhere anywhere tcp dpt:http to:10.110.1.3:80 DNAT tcp -- anywhere anywhere tcp dpt:https to:10.110.1.3:443 DNAT tcp -- anywhere anywhere tcp dpt:xmpp-client to:10.110.1.4:5222 DNAT tcp -- anywhere anywhere tcp dpt:5281 to:10.110.1.4:5281 DNAT tcp -- anywhere anywhere tcp dpt:64738 to:10.110.1.4:64738 DNAT udp -- anywhere anywhere udp dpt:64738 to:10.110.1.4:64738 DNAT udp -- anywhere anywhere udp multiport dports isakmp,ipsec-nat-t to:10.110.1.10:1194 Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination Chain POSTROUTING (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere 10.100.0.0/16 ACCEPT all -- anywhere 10.101.0.0/16 MASQUERADE all -- 10.110.1.0/24 anywhere MASQUERADE all -- 10.110.1.0/24 anywhere MASQUERADE all -- 10.110.1.0/24 anywhere
Sooo,這是我的一個愚蠢的錯誤!機器 A 上的一切都設置正確,實際上是機器 B 的防火牆規則阻止了這一點。機器 B 有一條允許來自 的流量的規則,
10.101.3.2
但缺少允許來自 的流量的規則10.110.1.0/24
。添加該規則更正了該問題。我使用以下方法發現了
tcpdump
問題nc
:
- 在
10.100.10.50
我執行nc -kl 60321
偵聽埠 60321 上的連接時(我選擇了一個我知道我們執行的服務沒有使用的隨機埠,以最大程度地減少噪音tcpdump
)- 在機器 A 和 BI 上執行
tcpdump -s0 -X -i $dev port 60321
,我設置$dev
為 NAT’ed 網路的介面(vmbr0
或vmx0
)或 ptp 介面(tun0
)- 在
10.110.1.2
我發送數據以10.100.10.50
使用:echo -e "test1\ntest2\ntest3" | nc 10.100.10.50 60321
- 我看到機器 A 的 LAN 上的流量,包括機器 A 和 B 的
tun0
介面,但沒有在機器 B 的 LAN 上,這意味著問題出在機器 B 上的路由/防火牆上- 我面對並添加了缺少的防火牆規則