我正在尝试配置一个测试 VPN 设置,以将 ping 路由到实例的公共 IP。我们正在连接的一家公司供应商已在他们那边保留了所有私人空间。我不确定我需要哪些 NAT 规则才能从 VPN 路由器实例获取流量,以便根据其公共地址(而不是私有地址)将流量转发到其后面的相应实例。
我有类似的拓扑
A-服务器<-> A-VPN<--互联网--> B-VPN<-> B-服务器。
VPN 隧道已建立,我可以通过私有 IP 顺利地 ping 任一侧。Ping 公共 IP 确实到达了“另一侧”的 VPN 计算机,但在那里停止了(我想这是通过“$ ip xfrm monitor”中的活动指示的?)。
两个 VPN 实例在左侧/右侧适当的允许子网中均具有 A-Server 公共 IP/32。
遵循 A-VPN 实例上的 NAT 规则似乎不起作用,我不确定我是否误用了它们或者如何进一步调试。
iptables -t nat -A POSTROUTING -s <A-Server PRIVATE IP>/32 -d <B-Server PRIVATE IP>/32 -j SNAT --to-source <A-Server PUBLIC IP>
iptables -t nat -A PREROUTING -s <B-Server PRIVATE IP>/32 -d <A-Server PUBLIC IP>/32 -j DNAT --to-destination <A-Server PRIVATE IP>
A-VPN 的现行规则:
# iptables-save
# Generated by iptables-save v1.4.21 on Fri Feb 15 11:12:15 2019
*nat
:PREROUTING ACCEPT [2:168]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [21:1848]
:POSTROUTING ACCEPT [23:2016]
-A PREROUTING -s 172.31.24.75/32 -d <A-Server PUBLIC IP>/32 -j DNAT --to-destination 10.0.10.15
-A POSTROUTING -s 10.0.0.34/32 -d 172.31.24.75/32 -j SNAT --to-source <A-Server PUBLIC IP>
COMMIT
# Completed on Fri Feb 15 11:12:15 2019
# Generated by iptables-save v1.4.21 on Fri Feb 15 11:12:15 2019
*filter
:INPUT ACCEPT [104381:64450743]
:FORWARD ACCEPT [189:13956]
:OUTPUT ACCEPT [89586:3506732]
COMMIT
# Completed on Fri Feb 15 11:12:15 2019
答案1
经过阅读和支持后,我设法解决了这个问题。
采取的步骤:
'左边:
- 创建了一个新的 ElasticIP 但没有将其分配给实例。
- 添加
<unallocated EIP>
到 A-VPN.conf 文件的 leftsubnets。 - 向 A-VPN 添加了以下 iptables 规则:
- iptables -t nat -A PREROUTING -d
<unallocated EIP>
-j DNAT --到目的地<A-Server PRIVATE IP>
- iptables -t nat -A POSTROUTING -d
<B-Server PRIVATE IP>
-j SNAT --to-source<unallocated EIP>
- iptables -t nat -A PREROUTING -d
'右边:
- 添加
<unallocated EIP>
到 B-VPN.conf 文件的 rightsubnets。 - 添加了 VPC 子网路由表规则,以将流量指向
<unallocated EIP>
通过 B-VPN 的目的地。
两台 VPN 机器:
- 重新启动 ipsec。
此时,当通过公网 IP 从 B 服务器 ping 到 A 服务器时,所有机器上的 tcpdump 均显示路由正确,所有机器上的 ip 重写也正确<unallocated EIP>