OpenSwan VPN 路由/NAT

OpenSwan VPN 路由/NAT

我正在为我们的一位客户网络设置 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。

相关内容