Meu roteador doméstico é uma máquina virtual executando o OPNsense. Eu tenho um servidor dedicado com uma sub-rede IPv4 roteada para ele e configurei um túnel GRE do meu servidor dedicado para o meu roteador doméstico para poder usar os endereços IP em casa.
No servidor dedicado, configurei a sub-rede para ser roteada através do 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 o endereço de origem traduzido. No cliente que tem NAT 1:1 configurado, 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, apenas o primeiro ping retorna.
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 um bug ou fiz algo errado? Ele deveria traduzir o IP de origem de todos os pacotes, mas só faz isso para alguns. (se você deixar o ping rodando por um tempo, um pacote será traduzido novamente e então ele irá parar de traduzir os pacotes depois disso.)
Responder1
Infelizmente, há apenas uma solução alternativa que consegui usar com êxito.
Na época em que a pergunta foi feita -e ainda hoje-, há 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, até onde eu sei, o OPNsense não pode trabalhar com isso, então mudei para uma VM Ubuntu dedicada para isso. Agora tudo funciona bem.