Atualmente, estou configurando uma VPN multisite (3 sites).
Aqui está um desenho rápido:
Até agora a configuração está boa e funcionando conforme o esperado. O ping de 10.10.20.1 <-> 10.10.10.1 e também de 10.10.30.1 <-> 10.10.10.1 está funcionando bem.
Agora quero descobrir como conectar de 10.10.20.1 a 10.10.30.1.
Acho que preciso usar iptables
para fazer isso, correto?
Se alguém puder explicar quais etapas são necessárias e por que me ajudaria muito!
Responder1
Não faça NAT. NAT é um erro que deve ser evitado sempre que possível. Ele quebra o princípio ponta a ponta usado como base do TCP/IP.
Com rotas estáticas você precisa apontá-las para o túnel. Se os roteadores trocarem informações de roteamento (OSPF, ...) as rotas deverão surgir automaticamente. Para ativar os túneis, podem ser necessárias rotas estáticas (o roteamento dinâmico só é atualizado quando o túnel estiver ativo).
Responder2
Eu descobri. Aqui está minha solução longa e rápida:
solução longa (não exatamente)
No servidor inferior:
iptables -A FORWARD -s 10.10.30.0/24 -d 10.10.20.0/24 -i enp2s0 -m policy --dir in --pol ipsec --reqid 2 --proto esp -j ACCEPT
iptables -A FORWARD -s 10.10.20.0/24 -d 10.10.30.0/24 -o enp2s0 -m policy --dir out --pol ipsec --reqid 2 --proto esp -j ACCEPT
iptables -A FORWARD -s 10.10.20.0/24 -d 10.10.30.0/24 -i enp2s0 -m policy --dir in --pol ipsec --reqid 1 --proto esp -j ACCEPT
iptables -A FORWARD -s 10.10.30.0/24 -d 10.10.20.0/24 -o enp2s0 -m policy --dir out --pol ipsec --reqid 1 --proto esp -j ACCEPT
No servidor superior esquerdo:
ip route add 10.10.30.0/24 via 138.x.x.1 dev eth0 proto static src 10.10.20.1 table 220
iptables -A FORWARD -s 10.10.30.0/24 -d 10.10.20.0/24 -i eth0 -m . policy --dir in --pol ipsec --reqid 2 --proto esp -j ACCEPT
iptables -A FORWARD -s 10.10.20.0/24 -d 10.10.30.0/24 -o eth0 -m policy --dir out --pol ipsec --reqid 2 --proto esp -j ACCEPT
No servidor superior direito:
ip route add 10.10.20.0/24 via 108.x.x.1 dev eth0 proto static src 10.10.30.1 table 220
iptables -A FORWARD -s 10.10.20.0/24 -d 10.10.30.0/24 -i eth0 -m policy --dir in --pol ipsec --reqid 2 --proto esp -j ACCEPT
iptables -A FORWARD -s 10.10.30.0/24 -d 10.10.20.0/24 -o eth0 -m policy --dir out --pol ipsec --reqid 2 --proto esp -j ACCEPT
Embora funcione, o roteamento do cisne forte está proibindo conexões como um tcpdump revelou.
[bottom]$ tcpdump -nni enp2s0 icmp
15:35:22.512437 IP 109.x.x.x > 85.x.x.x: ICMP host 109.x.x.x unreachable - admin prohibited, length 48
solução rápida
Esta solução é muito legal porque o Strongswan/IPsec gerencia todas as rotas iptable e estáticas para você e também permite acesso às sub-redes especificadas.
No servidor inferior:
# /etc/ipsec.conf
conn top-left-to-bottom
...
leftsubnet=10.10.10.0/24,10.10.30.0/24
...
conn top-right-to-bottom
...
leftsubnet=10.10.10.0/24,10.10.20.0/24
...
No servidor superior esquerdo:
# /etc/ipsec.conf
conn top-left-to-bottom
...
rightsubnet=10.10.10.0/24,10.10.30.0/24
...
No servidor superior direito:
# /etc/ipsec.conf
conn top-right-to-bottom
...
rightsubnet=10.10.10.0/24,10.10.20.0/24
...
Esta é a aparência de um ping tcpdumped bem-sucedido:
[bottom]$ tcpdump -nni enp2s0 icmp
15:52:37.160859 IP 10.10.20.1 > 10.10.30.1: ICMP echo request, id 1296, seq 1, length 64
15:52:37.164971 IP 10.10.30.1 > 10.10.20.1: ICMP echo reply, id 1296, seq 1, length 64