我已经在 AWS 的一个区域和使用 OpenStack 实现的数据中心之间建立了 VPN 连接:
|---AWS------------------| |-----OpenStack----------|
Private IP EIP Float. IP Private IP
10.2.10.250 <-> 35.x.255.x TUNNEL 75.x.65.x <-> 172.16.0.156
如果我尝试从 OpenStack 中的一台主机 ping 到 AWS 中的另一台主机,则不会收到任何回复。这是在 10.2.10.250 VPN 服务器中运行的 tcpdump 中的一行:
3:04:01.523351 IP 172.16.0.156 > 10.2.10.27: ICMP echo request, id 9407, seq 8, length 64
问题是我 ping 的服务器不是 172.16.0.156,而是 172.16.0.125 之类的。所以我认为 OpenStack 网络中有东西在强制 SNAT。我已刷新两台主机上的所有 iptables。我在两个 AWS 区域中重现了该环境,ping 成功,源 IP 正确。
这是 /etc/ipsec.conf 文件:
config setup
charondebug="all"
uniqueids=yes
strictcrlpolicy=no
conn %default
ike=aes256-sha2_256-modp1024!
esp=aes256-sha2_256!
keyingtries=0
ikelifetime=1h
lifetime=8h
dpddelay=30
dpdtimeout=120
dpdaction=restart
auto=start
keyexchange=ikev2
type=tunnel
conn uswest2-x-to-x-x
leftfirewall=yes
leftcert=device-x-x_cert.pem
leftid="C=CH, O=strongSwan, CN=device-x-x"
rightid="C=CH, O=strongSwan, CN=device-uswest2-x-a"
left=172.16.0.156
leftsubnet=172.16.0.0/24
right=35.x.255.x
rightsubnet=10.2.0.0/16
和 iptables:
# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain DOCKER (0 references)
target prot opt source destination
Chain DOCKER-ISOLATION (0 references)
target prot opt source destination