Meu roteador doméstico é uma máquina virtual executando o OPNsense. Tenho um servidor dedicado com uma sub-rede IPv4 roteada para ele e configurei um túnel GRE de meu servidor dedicado para meu roteador doméstico para poder usar os endereços IP em casa.
No servidor dedicado, configurei a sub-rede para ser roteada pelo túnel GRE.
No OPNsense, configurei o túnel GRE e adicionei os IPs virtuais.
O problema é que, quando configuro o NAT 1:1, apenas alguns pacotes têm seu endereço de origem traduzido. No cliente configurado como NAT 1:1, o IP interno é 192.168.254.106
e o IP externo é (por exemplo),176.9.x.x
Sempre que executo ping 8.8.8.8
no cliente, retorna apenas o primeiro ping.
ubuntu@ubuntu:~$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=55 time=32.8 ms
^C
--- 8.8.8.8 ping statistics ---
6 packets transmitted, 1 received, 83% packet loss, time 5081ms
rtt min/avg/max/mdev = 32.875/32.875/32.875/0.000 ms
Isso é o que vejo quando executo tcpdump -i gre0 icmp
no roteador OPNsense. ( gre0
sendo o túnel GRE)
root@core1:~ # tcpdump -i gre0 icmp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on gre0, link-type NULL (BSD loopback), capture size 262144 bytes
12:26:35.361531 IP 176.9.x.x > google-public-dns-a.google.com: ICMP echo request, id 1784, seq 1, length 64
12:26:35.393693 IP google-public-dns-a.google.com > 176.9.x.x: ICMP echo reply, id 1784, seq 1, length 64
12:26:36.362530 IP 192.168.254.106 > google-public-dns-a.google.com: ICMP echo request, id 1784, seq 2, length 64
12:26:37.371299 IP 192.168.254.106 > google-public-dns-a.google.com: ICMP echo request, id 1784, seq 3, length 64
12:26:38.395302 IP 192.168.254.106 > google-public-dns-a.google.com: ICMP echo request, id 1784, seq 4, length 64
12:26:39.419105 IP 192.168.254.106 > google-public-dns-a.google.com: ICMP echo request, id 1784, seq 5, length 64
12:26:40.443423 IP 192.168.254.106 > google-public-dns-a.google.com: ICMP echo request, id 1784, seq 6, length 64
Existe algum bug ou fiz algo errado? É suposto traduzir o IP de origem de todos os pacotes, mas só está fazendo isso para alguns. (se você deixar o ping rodando por um tempo, um pacote será traduzido novamente e parará de traduzir os pacotes depois disso.)
Infelizmente, há apenas uma solução alternativa que consegui usar com sucesso.
Na época em que a pergunta foi feita -e ainda hoje-, existe um bug nos modems do meu ISP que os faz quebrar ao lidar com GRE ou IPIP. A solução é Foo sobre UDP com GRE, que funciona bem. No entanto, o OPNsense não pode trabalhar com isso até onde eu sei, então mudei para uma VM Ubuntu dedicada para isso. Agora tudo funciona bem.