VPN 路由到本地网络中的公共 IP 的 NAT 规则

VPN 路由到本地网络中的公共 IP 的 NAT 规则

我正在尝试配置一个测试 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>

'右边:

  • 添加<unallocated EIP>到 B-VPN.conf 文件的 rightsubnets。
  • 添加了 VPC 子网路由表规则,以将流量指向<unallocated EIP>通过 B-VPN 的目的地。

两台 VPN 机器:

  • 重新启动 ipsec。

此时,当通过公网 IP 从 B 服务器 ping 到 A 服务器时,所有机器上的 tcpdump 均显示路由正确,所有机器上的 ip 重写也正确<unallocated EIP>

相关内容