我有两个通过点对点隧道连接的NATnetworking,如下所示:
| 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在eth0
上有一个公共IP,在vmbr0
上有一个私有IP 10.110.1.1
,通过一个ptp VPN与机器B连接,机器B在en0
上有一个公共IP,在en1
上有一个私有IP其他专用networking)
在两个公用IP上使用NAT的两个局域网上都有客户端。 这工作正常。 (它使用机器A上的iptables和机器B上的pfSense完成)
路由设置使得机器A可以ping机器B的私有IP 10.100.1.1
并且可以访问networkingB 10.100.0.0/16
上的所有主机。 同样,机器B(以及networkingB上的所有主机 )可以访问机器A以及networkingA 10.110.1.0/16
上的所有主机
但是,networkingA上的主机无法与networkingB上的主机build立连接(EG 10.110.1.2
无法ping通,也无法通过SSH连接到10.100.10.50
)
我怀疑这与A上的iptables安装有关,因为从 10.100.10.50
到10.110.1.2
SSH都能正常工作,但是我不能以相反的方向进行SSH安装。 这对我说,我的iptables FILTER规则RELATED,ESTABLISHED
作品,但不知何故,我怀疑机器A试图NAT和使用eth0
新的连接。
我添加了ACCEPT destination 10.100.0.0/16
iptables规则到处都是我认为他们需要的,然后即使在我认为不需要的地方,当事情不起作用,仍然无法从networkingA传出连接到networkingB工作。
如何通过使用iptables的点对点隧道来正确连接两个NAT的专用networking?
附加信息:
机器上的iptables A:
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
stream量,但是缺less允许来自10.110.1.0/24
stream量的规则。 添加该规则纠正了这个问题。
我使用tcpdump
和nc
发现了这个问题,如下所示:
10.100.10.50
我执行了nc -kl 60321
来侦听端口60321上的连接(我select了一个随机的端口,我知道这个端口并没有被我们运行的服务使用,以便尽量减lesstcpdump
噪声) tcpdump -s0 -X -i $dev port 60321
其中我将$dev
设置$dev
NAT'ednetworking接口( vmbr0
或vmx0
)或ptp接口( tun0
) 10.110.1.2
我发送数据到10.100.10.50
使用: echo -e "test1\ntest2\ntest3" | nc 10.100.10.50 60321
echo -e "test1\ntest2\ntest3" | nc 10.100.10.50 60321
tun0
接口,而不是机器B的局域网,所以这意味着问题是机器B上的路由/防火墙