Iptables

如何允許 iptables 正確使用隧道而不是 NAT?

  • April 5, 2017

我有兩個通過點對點隧道連接的 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 有一個公共 IPeth0和一個私有 IP 10.110.1.1vmbr0並通過 ptp VPN 通過網際網路與機器 B 連接,機器 B 有一個公共 IPen0和一個私有 IP en1(以及許多其他私有網路)

兩個 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 上的主機建立連接(EG10.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/16iptables 規則,然後甚至在我認為當事情不起作用時不需要它們的地方,仍然無法從網​​絡 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

  1. 10.100.10.50我執行nc -kl 60321偵聽埠 60321 上的連接時(我選擇了一個我知道我們執行的服務沒有使用的隨機埠,以最大程度地減少噪音tcpdump
  2. 在機器 A 和 BI 上執行tcpdump -s0 -X -i $dev port 60321,我設置$dev為 NAT’ed 網路的介面(vmbr0vmx0)或 ptp 介面(tun0
  3. 10.110.1.2我發送數據以10.100.10.50使用:echo -e "test1\ntest2\ntest3" | nc 10.100.10.50 60321
  4. 我看到機器 A 的 LAN 上的流量,包括機器 A 和 B 的tun0介面,但沒有在機器 B 的 LAN 上,這意味著問題出在機器 B 上的路由/防火牆上
  5. 我面對並添加了缺少的防火牆規則

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