Mein Heimrouter ist eine virtuelle Maschine, auf der OPNsense läuft. Ich habe einen dedizierten Server, zu dem ein IPv4-Subnetz geroutet ist, und ich habe einen GRE-Tunnel von meinem dedizierten Server zu meinem Heimrouter eingerichtet, damit ich die IP-Adressen zu Hause verwenden kann.
Auf dem dedizierten Server habe ich das Subnetz so eingerichtet, dass es durch den GRE-Tunnel geleitet wird.
In OPNsense habe ich den GRE-Tunnel eingerichtet und die virtuellen IPs hinzugefügt.
Das Problem ist, dass bei der Einrichtung von 1:1 NAT nur bei einigen Paketen die Quelladresse übersetzt wird. Auf dem Client, der 1:1 NAT eingerichtet hat, lautet die interne IP 192.168.254.106
und die externe IP (zum Beispiel):176.9.x.x
Immer wenn ich es ping 8.8.8.8
auf dem Client ausführe, wird nur der erste Ping zurückgegeben.
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
Das ist, was ich sehe, wenn ich es tcpdump -i gre0 icmp
auf dem OPNsense-Router laufen lasse. ( gre0
Es handelt sich um den GRE-Tunnel)
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
Gibt es einen Fehler oder habe ich etwas falsch gemacht? Es soll die Quell-IP aller Pakete übersetzen, tut dies aber nur bei einigen. (Wenn Sie den Ping eine Weile laufen lassen, wird ein Paket erneut übersetzt und danach wird die Übersetzung der Pakete beendet.)
Antwort1
Leider gibt es nur einen Workaround, den ich erfolgreich anwenden konnte.
Als die Frage gestellt wurde – und auch heute noch – gab es einen Fehler in den Modems meines ISPs, der dazu führte, dass sie bei der Verarbeitung von GRE oder IPIP abstürzten. Die Lösung ist Foo über UDP mit GRE darin, was gut funktioniert. OPNsense kann damit jedoch meines Wissens nicht arbeiten, also bin ich auf eine dedizierte Ubuntu-VM dafür umgestiegen. Jetzt funktioniert alles einwandfrei.