Meu problema estava nas limitações do OpenVz vps. Quando eu corro o mesmo túnel ipsec em vps com hipervisor KVM , o problema foi resolvido.
Eu tento conectar minha estação de trabalho do Windows 7 à Internet através do túnel ipsec.
Eu tenho:
192.168.88.251 - win7 workstation
192.168.88.1 - my mikrotik router
VPN_IPSEC - my vpn with ipsec address
VPN_TEST - my 2nd vpn for connectiviti testing
Configuração StrongSwan em VPN_IPSEC:
config setup
charondebug="ike 1, knl 1, cfg 0"
uniqueids=no
conn ikev2-vpn
auto=add
compress=no
type=tunnel
keyexchange=ikev2
fragmentation=yes
forceencaps=yes
ike=aes256-sha-modp1024
esp=aes256-sha-modp1024
dpdaction=clear
dpddelay=300s
rekey=no
left=%any
leftid=VPN_IPSEC_IP
leftsendcert=always
leftsubnet=0.0.0.0/0
right=%any
rightid=%any
authby=secret
rightsubnet=192.168.88.251/24
rightdns=8.8.8.8,8.8.4.4
No lado do mikrotik eu tenho configuração correspondente
Saída do comando ipsec status:
ikev2-vpn[1]: ESTABLISHED 110 minutes ago,
VPN_IPSEC_IP[VPN_IPSEC_IP]...MY_PUB_IP[MY_PUB_IP]
ikev2-vpn{1}: INSTALLED, TUNNEL, ESP SPIs: ca494e15_i 099301b9_o
ikev2-vpn{1}: 0.0.0.0/0 === 192.168.88.251/32
Aparentemente, o meu túnel ipsec funciona corretamente. Em VPN_IPSEC, faço ping 192.168.88.251 e vejo ping. Ao mesmo tempo Quando no win7 eu faço ping 8.8.8.8, vejo o tráfego na seção SA instalada no mikrotik, e se eu criar algumas regras de firewall no VPN_IPSEC que opera com 192.168.88.251, vejo os contadores correspondentes crescerem.
No VPN_IPSEC eu tenho esta configuração inicial do firewall:
Chain INPUT (policy ACCEPT 936 packets, 92296 bytes)
Chain FORWARD (policy ACCEPT 483 packets, 29148 bytes)
Chain OUTPUT (policy ACCEPT 306 packets, 30108 bytes)
O NAT da tabela é o mesmo: todos aceitam
Agora, agora que o tráfego criptografado do win7 chega a VPN_IPSEC. Quero agora que ele foi encaminhado para fora do VPN_IPSEC.
No win7 eu faço
ping VPN_TEST
Em VPN_IPSEC eu faço
tcpdump -nni venet0 icmp
Eu vejo:
IP 192.168.88.251 > VPN_TEST_IP: ICMP echo request, id 512, seq 21277, length 40
IP 192.168.88.251 > VPN_TEST_IP: ICMP echo request, id 512, seq 49949, length 40
ou seja, sem resposta
agora adiciono a regra POSTROUTING:
iptables -t nat -A POSTROUTING -s 192.168.88.0/24 -o venet0 -j MASQUERADE
IP 192.168.88.251 > VPN_TEST_IP: ICMP echo request, id 25095, seq 301, length 64
IP 185.69.52.31 > VPN_TEST_IP: ICMP echo request, id 25095, seq 301, length 64
IP 192.168.88.251 > VPN_TEST_IP: ICMP echo request, id 25095, seq 302, length 64
IP 185.69.52.31 > VPN_TEST_IP: ICMP echo request, id 25095, seq 302, length 64
ou seja, sem resposta, mas vejo que os pacotes são mascarados
Ao mesmo tempo no VPN_TEST eu faço:
tcpdump -nni eth0 icmp
e não vejo pings da minha VPN_IPSEC, mas vejo pings aleatórios de hosts da Internet.
Eu também faço no win7:
ping 8.8.8.8
E não recebo resposta.
Ao mesmo tempo, quando faço em VPN_IPSEC
ping VPN_TEST
Eu vejo todos os pings nos dois tcpdumps e vejo resposta
i.e., o tráfego do meu túnel permanece em VPN_IPSEC
Como é o gato?
Como posso configurar o firewall no VPN_IPSEC corretamente.
UPD: Eu sei que para compartilhamento de conexão com a Internet eu deveria criar regras de mascaramento e encaminhamento. Também deveria ter net.ipv4.ip_forward = 1. Eu já tenho. E eu tentei muitas máscaras e encaminhamento de regras no mix. NÃO RESULTADO.
Neste momento, só quero ver por enquanto, que meus pings do túnel vão para o meu VPN_TEST e voltam para o VPN_IPSEC.
Meu problema estava nas limitações do OpenVz vps. Quando eu corro o mesmo túnel ipsec em vps com hipervisor KVM , o problema foi resolvido.