Eu estabeleci uma conexão VPN entre uma região na AWS e um datacenter implementado com o OpenStack:
|---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
Se eu tentar fazer ping de um host no OpenStack para outro host na AWS, não receberei resposta. Esta é uma linha do tcpdump em execução no servidor VPN 10.2.10.250:
3:04:01.523351 IP 172.16.0.156 > 10.2.10.27: ICMP echo request, id 9407, seq 8, length 64
O problema é que o servidor do qual estou pingando não é 172.16.0.156, mas é algo como 172.16.0.125. Então eu acho que na rede OpenStack algo está forçando o SNAT. Eu limpei todos os iptables em ambos os hosts. Eu reproduzi o ambiente em duas regiões da AWS e o ping funciona, o IP de origem está correto.
Este é o arquivo /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
E 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