我正在为我们的一位客户网络设置 VPN。由于他们那边的要求,我们不能让流量(看起来)来自私有 IP 地址。我已经能够与我们的客户建立隧道设置,但在让 NAT 正常工作方面遇到了问题。为了进行测试,我使用 2 个 VPC 模拟了 AWS 中的环境,并使用 tcpdump 或 tshark 观察流量,以查看源 IP 地址是什么。以下是具有不同 IP 地址的设置的副本。
(Simulated Customer Side VPC - 172.16.0.0/16)
Customer Test Server - 172.16.0.20
AWS Hardware VPN - 1.1.1.1
|
|
|
(Internet)
|
|
|
(Our VPC - 10.10.10.0/16)
OpenSwan VPN server - 2.2.2.2 and 10.10.10.10
Internal Test Server - 10.10.10.20
OpenSwan 的 ipsec.conf 文件....
conn Tunnel1
authby=secret
auto=start
left=%defaultroute
leftid=2.2.2.2
right=1.1.1.1
type=tunnel
ikelifetime=8h
keylife=1h
phase2alg=aes128-sha1;modp1024
ike=aes128-sha1;modp1024
auth=esp
keyingtries=%forever
keyexchange=ike
leftsubnet=10.10.10.0/16
rightsubnet=172.16.0.0/16
dpddelay=10
dpdtimeout=30
dpdaction=restart_by_peer
并且秘密文件看起来像......
2.2.2.2 1.1.1.1: PSK "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
我还在 /etc/sysctl.conf 中设置了以下值
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.accept_source_route = 0
这样做可以让隧道“启动”,并且我可以使用另一台测试器的私有 IP 地址(从两侧)在测试实例之间进行通信。这显示(对于 ping 和 ssh)通信来自另一台测试服务器的私有 IP 地址。例如,从 10.10.10.20 到 172.16.0.20 的 ping 显示(通过 tshark)来自 10.10.10.20 的 ping。
为了让流量看起来像是来自 OpenSwan 服务器的外部 IP 地址,我在 OpenSwan 实例中添加了一个 IP 表条目。
iptables -t nat -I POSTROUTING -s 10.10.10.0/16 -d 172.16.0.0/16 -o eth0 -j SNAT --to-source 2.2.2.2
然后,当我从 10.10.10.20 ping 到 172.16.0.20 时,ping 来自 2.2.2.2。这是我所希望的行为,但是当我尝试从 10.10.10.20 ssh 到 172.16.0.20 时,流量永远不会到达那里。客户测试服务器上的 tshark 显示没有来自 10.10.10.20 或 2.2.2.2 的 ssh 流量,而 OpenSwan 服务器上的 tcpdump 显示流量没有被 NAT 到 2.2.2.2(它只显示 10.10.10.20 -> 172.16.0.20:22 的数据包)。
我尝试过多种不同的配置(挣扎了好几天)来设置 left、leftsubnet、leftsourceip、leftnexthop,以及使用 SNAT 和 MASQUERADE 和其他不同的 iptables 条目,但都无法让流量达到所需的效果。
我需要做什么才能让客户网络中的传入流量看起来像是来自外部 IP 地址?任何帮助都非常感谢。谢谢。
如果您需要额外的 tcpdump 或 tshark 日志,我也可以提供这些。
并且,FWIW,我确实在客户测试 VPC 中设置了 AWS 路由表,以便 2.2.2.2 和 10.10.10.0/16 流量流向 VPN 网关,并且我们的 VPC 中的路由表将所有 172.16.0.0/16 流量流向 OpenSwan 实例的 ENI。