Talvez alguém possa me esclarecer ... Eu acho que tenho um problema no IPTables, mas não faço mais ideia ...
Eu tenho um túnel IPSEC site-2-site entre um servidor pfSense e uma máquina virtual com strongswan.
Estou usando o iptables para encaminhar o tráfego do host em que a máquina virtual está sendo executada para a máquina virtual
regras de iptables:
iptables -t nat -A POSTROUTING -m policy --pol ipsec --dir out -j ACCEPT<br/>
iptables -t nat -A PREROUTING -i eno1 -p udp -d externalip --dport 500 -j DNAT --to-destination 10.49.10.35<br/>
iptables -t nat -A PREROUTING -i eno1 -p udp -d externalip --dport 4500 -j DNAT --to-destination 10.49.10.35<br/>
iptables -A FORWARD -p udp -d 10.49.10.35 --dport 500 -j ACCEPT<br/>
iptables -A FORWARD -p udp -d 10.49.10.35 --dport 4500 -j ACCEPT<br/>
iptables -t nat -A POSTROUTING -p udp -s 10.49.10.35 --sport 500 -j SNAT --to-source externalip<br/>
iptables -t nat -A POSTROUTING -p udp -s 10.49.10.35 --sport 4500 -j SNAT --to-source <externalip>
O túnel IPSEC está configurado corretamente (eu acho) porque quando ele está conectado eu posso pingar a máquina pfsense e a VM com o endpoint IPSec usando o ip interno de um lado para o outro.
Da máquina pfsense para a VM:
ping -S 10.130.20.1 10.49.30.35
PING 10.49.30.35 (10.49.30.35) from 10.130.20.1: 56 data bytes
64 bytes from 10.49.30.35: icmp_seq=0 ttl=64 time=12.248 ms
64 bytes from 10.49.30.35: icmp_seq=1 ttl=64 time=12.265 ms
64 bytes from 10.49.30.35: icmp_seq=2 ttl=64 time=12.327 ms
64 bytes from 10.49.30.35: icmp_seq=3 ttl=64 time=12.286 ms
Da VM IPSEC para o pfSense
PING 10.130.20.1 (10.130.20.1) 56(84) bytes of data.
64 bytes from 10.130.20.1: icmp_seq=1 ttl=64 time=12.2 ms
64 bytes from 10.130.20.1: icmp_seq=2 ttl=64 time=12.2 ms
64 bytes from 10.130.20.1: icmp_seq=3 ttl=64 time=12.1 ms
64 bytes from 10.130.20.1: icmp_seq=4 ttl=64 time=12.1 ms
Para que tudo pareça Ok, mas quando eu inserir uma máquina extra na configuração por trás do ping IPSecVM, etc. não será mais possível.
Eu configurei net.ipv4.ip_forward = 1
no IPSecVM.
Agora, quando faço um ping pfsense para minha nova máquina de teste (10.49.10.36)
ping -S 10.130.20.1 10.49.30.36
PING 10.49.30.36 (10.49.30.36) from 10.130.20.1: 56 data bytes
^C
--- 10.49.30.36 ping statistics ---
4 packets transmitted, 0 packets received, 100.0% packet loss
Quando executo tcpdump -i ens19 host 10.130.20.1
em minha máquina de teste, vejo o tráfego chegando, mas nenhuma resposta está sendo enviada
12:48:03.432489 IP 10.130.20.1 > 10.49.30.36: ICMP echo request, id 2145, seq 0, length 64
12:48:04.434735 IP 10.130.20.1 > 10.49.30.36: ICMP echo request, id 2145, seq 1, length 64
12:48:05.435699 IP 10.130.20.1 > 10.49.30.36: ICMP echo request, id 2145, seq 2, length 64
12:48:06.443736 IP 10.130.20.1 > 10.49.30.36: ICMP echo request, id 2145, seq 3, length 64
12:48:07.454943 IP 10.130.20.1 > 10.49.30.36: ICMP echo request, id 2145, seq 4, length 64
Do que pensar que era sobre roteamento
Eu adicionei uma rota no testvm:
route add -net 10.130.20.0/24 gw 10.49.10.35
Mas, ainda assim, nenhum tráfego está sendo enviado de volta ...
A razão que eu acho que tem algo a ver com o iptables é que eu tenho configurações similares onde o strongswan é executado diretamente na máquina host em vez de uma VM e então tudo funciona.
Eu provavelmente estou esquecendo de algo estúpido, mas depois de alguns dias pensando, eu simplesmente não vejo mais isso.
Espero que alguém possa me ajudar.