Wie Portforwarding über 2 miteinander verbundenen pfSense realisieren
Mahlzeit,
ich bin nach wie vor dabei, eine Lösung zu erarbeiten um meine Portforwardings, welche bei der Telekom durch die IPv4 möglich waren auf meinen neu dazugekommenen CG-Nat Anschluss der Deutschen Glasfaser umzusetzen.
Da die Telekom leide rnur 2 Mbit anbietet, war das leider keine Alternative.
Ich habe mir bisher den Thread "Feste IP via GRE" und selbiges über Wireguard angesehen, werde da aber noch nicht so ganz schlau draus.
Ich möchte nicht sämtlichen Traffic eines Gerätes über eines Gerätes über den Tunnel laufen lassen.
So sieht es bisher aus.
Ich habe gerade mal wieder eine zweite pfSense auf dem VPS laufen.
Der Wireguard Tunnel steht, die Gateways sind eingerichtet.
Ich kann von der VPS pfSense die 192.168.1.45 pingen.
Der Traffic läuft also dann über den Tunnel. Nach meinem Verständnis funktioniert der VPN Teil.
Nun möchte ich vereinzelte Ports wie bisher weiterleiten.
In dem Test hängt an der 192.168.1.45 ein kleiner Shelly, der Port 80 offen hat.
Bisher konnte ich bei der Telekom-Leitung via NAT festlegen, dass der Traffic über WAN ankommt und mir Port 6666 auf Port 80 umgesetzt werden soll.
Dementsprechend konnte man von überall aus im Browser mittels DDNS oder IP:6666 direkt auf den Webserver zugreifen.
Nun habe ich mangels der mir zugeteilten IPv4 den VPS am laufen und ich möchte eigentlich nur das selbe wie früher erreichen.
IPdesVPS:6666, der Traffic soll dann, da 192.168.1.45 über den Tunnel laufen und auf dem Endgerät den Webserver zur Verfügung stellen.
Wie gesagt der Tunnel steht und aktuell ist beim Wireguard auch eine Scheunentor Regel.
Was für Regeln bedarf es um den Traffic einzuschleusen?
ich bin nach wie vor dabei, eine Lösung zu erarbeiten um meine Portforwardings, welche bei der Telekom durch die IPv4 möglich waren auf meinen neu dazugekommenen CG-Nat Anschluss der Deutschen Glasfaser umzusetzen.
Da die Telekom leide rnur 2 Mbit anbietet, war das leider keine Alternative.
Ich habe mir bisher den Thread "Feste IP via GRE" und selbiges über Wireguard angesehen, werde da aber noch nicht so ganz schlau draus.
Ich möchte nicht sämtlichen Traffic eines Gerätes über eines Gerätes über den Tunnel laufen lassen.
So sieht es bisher aus.
Ich habe gerade mal wieder eine zweite pfSense auf dem VPS laufen.
Der Wireguard Tunnel steht, die Gateways sind eingerichtet.
Ich kann von der VPS pfSense die 192.168.1.45 pingen.
Der Traffic läuft also dann über den Tunnel. Nach meinem Verständnis funktioniert der VPN Teil.
Nun möchte ich vereinzelte Ports wie bisher weiterleiten.
In dem Test hängt an der 192.168.1.45 ein kleiner Shelly, der Port 80 offen hat.
Bisher konnte ich bei der Telekom-Leitung via NAT festlegen, dass der Traffic über WAN ankommt und mir Port 6666 auf Port 80 umgesetzt werden soll.
Dementsprechend konnte man von überall aus im Browser mittels DDNS oder IP:6666 direkt auf den Webserver zugreifen.
Nun habe ich mangels der mir zugeteilten IPv4 den VPS am laufen und ich möchte eigentlich nur das selbe wie früher erreichen.
IPdesVPS:6666, der Traffic soll dann, da 192.168.1.45 über den Tunnel laufen und auf dem Endgerät den Webserver zur Verfügung stellen.
Wie gesagt der Tunnel steht und aktuell ist beim Wireguard auch eine Scheunentor Regel.
Was für Regeln bedarf es um den Traffic einzuschleusen?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1161214871
Url: https://administrator.de/forum/wie-portforwarding-ueber-2-miteinander-verbundenen-pfsense-realisieren-1161214871.html
Ausgedruckt am: 26.12.2024 um 20:12 Uhr
88 Kommentare
Neuester Kommentar
Es bedarf lediglich einer Port Forwarding Regel unter Firewall - NAT - Port Forward
Int: WAN, Protocol TCP, Source Addr.: *, Source Port: *, Destination: WAN Address, Port: 6666, Redirect Traget IP: Single Host IP:192.168.1.45, Redirect Traget Port: 80, Add associated Filter Rule
Der Zugang mit TCP 6666 auf die WAN Port IP von Any sollte erlaubt sein wird aber sofern du das automatische Ruleset Erstellen nicht deaktiviert hast im Security Setup automatisch passieren.
Int: WAN, Protocol TCP, Source Addr.: *, Source Port: *, Destination: WAN Address, Port: 6666, Redirect Traget IP: Single Host IP:192.168.1.45, Redirect Traget Port: 80, Add associated Filter Rule
Der Zugang mit TCP 6666 auf die WAN Port IP von Any sollte erlaubt sein wird aber sofern du das automatische Ruleset Erstellen nicht deaktiviert hast im Security Setup automatisch passieren.
Auf der Heim-pfSense kommt doch der Traffic dann nicht über Wan, sondern über den Wireguard Tunnel, oder?
Richtig !Die neue Ziel Adresse ist nach dem Port Forwarding ja nicht mehr die WAN IP der VPS pfSense sondern die 192.168.1.45 die du ja als Target IP angibst. Die pfSense "sieht" dann in ihre Routing Tabelle über welches Interface sie gehen muss um das 192.168.1.0er IP Netz zu erreichen und dort sollte das wg0 Tunnel Interface des Wireguard stehen zum Ziel.
Das kannst du dir auch selber ansehen wenn du dir in der pfSense unter "Diagnostics" einmal die Routing Tabelle ansiehst.
Fürs Troubleshooting hilfreich ist auch mal über das gleiche Menü die Packet Capture Funktion zu aktivieren und das WAN Interface zu belauschen. Den .pcap File siehst du dir dann mit dem Wireshark an. Dort solltest du dann die eingehenden TCP 6666 Frames sehen und wenn du das gleiche auf dem wg0 Interface machst solltest du die weiter gerouteten TCP 80 Frames zum Shelly sehen.
Brauchen die auch Beidseitig eine Regel?
Du hast doch geschrieben das die beide einen any zu any Regel haben. Damit lassen sie ja dann alles durch.
Die Maske der Allowed IPs im WG Tunnel ist falsch. Die sollte auf /32 stehen für die jeweils gegenüberliegenden Tunnel Interfaces. Siehe Wireguard Anleitung hier. Richtig lesen und umsetzen hilft also wirklich !
Für den WebGUI Zugriff via WG Tunnel benötigst du keine Regel auf dem WAN Port. Das wäre ja auch unlogisch, denn am WAN Port kommt der verschlüsselte WG Tunnel an und das WAN Interface kann niemals in den verschlüsselten Tunnel sehen und dort irgendwelche Regelwerke auf die im VPN Tunnel transportverschlüsselten IP Pakete ausführen. Das wäre Unsinn und würde ein VPN ja ad absurdum führen wenn das ginge. Das WAN Interface "sieht" vom VPN ja nur verschlüsselten Traffic.
Relevant ist dafür immer nur das Tunnel Interface, denn nur dort kommen ja die unverschlüsselten VPN Daten raus und das steht bei dir eh auf any any, erlaubt also erstmal alles.
Da musst du wohl noch etwas Finetuning am Setup machen...
Für den WebGUI Zugriff via WG Tunnel benötigst du keine Regel auf dem WAN Port. Das wäre ja auch unlogisch, denn am WAN Port kommt der verschlüsselte WG Tunnel an und das WAN Interface kann niemals in den verschlüsselten Tunnel sehen und dort irgendwelche Regelwerke auf die im VPN Tunnel transportverschlüsselten IP Pakete ausführen. Das wäre Unsinn und würde ein VPN ja ad absurdum führen wenn das ginge. Das WAN Interface "sieht" vom VPN ja nur verschlüsselten Traffic.
Relevant ist dafür immer nur das Tunnel Interface, denn nur dort kommen ja die unverschlüsselten VPN Daten raus und das steht bei dir eh auf any any, erlaubt also erstmal alles.
Da musst du wohl noch etwas Finetuning am Setup machen...
Und dass er den Bereich 192.168.1.0 erreicht erfährt er dann über die Static Routes?
Nein, die Routen werden bei WireGuard automatisch übermittelt. Statische Routen sind nicht erforderlich. Nennt sich dort Cryptokey_Routing.Kannst du bei aktivem Tunnel auch in der Routung Tabelle und Diagnostics sehen.
Statische Routen haben, wie du als Admin Profi ja selber weisst, immer die höhere Priorität. Sie "töten" damit also dynamisch gelernte Routen. Passt man hier nicht auf killt man damit also seine IP Connectivity im VPN. Wenn das Protokoll also eine dynmaische Route Propagation macht sollte man dort besser nicht mit eigenen Routen sowas "verschlimmbessern"
Besser also immer sich an die Original Anleitung des WG Entwicklers halten. 😉
Besser also immer sich an die Original Anleitung des WG Entwicklers halten. 😉
Das ist gut möglich, denn der offizielle Support ist in der 2.5.2 Version ja entfernt worden und kann derzeit nur über ein Beta Package extern nachinstalliert werden.
Ggf. als Alternative dann OPNsense nehmen, denn dort ist es weiterhin nativ enthalten. OPNsense nutzt einen aktuelleren BSD Kernel und WG Kernel Support.
Ggf. als Alternative dann OPNsense nehmen, denn dort ist es weiterhin nativ enthalten. OPNsense nutzt einen aktuelleren BSD Kernel und WG Kernel Support.
Die Kardinalsfrage ist immer ob ein Port Forwarding auf eine nicht lokale IP Adresse auf einem Gerät funktioniert bzw. im Routing Prozess dann weiter geroutet wird. Einfache Konsumer Router wie z.B. auch die FritzBox scheitern an sowas. Cisco, Mikrotik und Co. können das aber problemlos.
Bis dato selber noch nie auf einer pfSense gemacht deshalb fehlt mir da jetzt die Erfahrung. Ich setze das hier im Lab mal auf und checke das mal.
Bis dato selber noch nie auf einer pfSense gemacht deshalb fehlt mir da jetzt die Erfahrung. Ich setze das hier im Lab mal auf und checke das mal.
und schafft höheren Durchsatz.
Im Vergleich zu OpenVPN ist das richtig. Zu IPsec ists gleich.Ich glaube der Xeon D1518
Oha, naja, kommt drauf an. Wenn du 1000 oder 2000 Clients bedienen musst oder ne 10G oder 40G Leitung passt das wieder ! 🤣Ohne das du Rahmenbedingungen nennst kann man doch nur wild rumraten, weisst du auch selber !
Dafür reicht ein einfaches APU4 Board allemal aus oder ein kleiner Intel
https://www.varia-store.com/de/produkt/103563-pc-engines-apu4d2-embedded ...
https://www.ipu-system.de/produkte/ipu450.html
Alles drüber ist natürlich nicht schlechter...
https://www.varia-store.com/de/produkt/103563-pc-engines-apu4d2-embedded ...
https://www.ipu-system.de/produkte/ipu450.html
Alles drüber ist natürlich nicht schlechter...
Das ist so etwas wie im Startpost oder?
Ja, die Zeichung reicht.... Nur um das nochmal zu rekapitulieren:
- VPS Firewall und lokale Firewall haben eine Site-to-Site VPN Verbindung ( Tunnel intern 10.0.0.0 /24)
- Lokales LAN der lokalen Firewall 192.168.0.0 /24
- Du möchtest ein Port Forwarding machen auf der VPS Firewall z.B. TCP 80 auf einen HTTP Host im 192.168.0.0er Netz, richtig ?
Generell klappen sollte es. Zumindestens wenn man nach "pfsense port forwarding via vpn tunnel" sucht gibt es diverse Hits.
https://forum.netgate.com/topic/130335/port-forwarding-into-remote-vpn-n ...
Checken wir das also mal...
Heute mal ein Test mit IPsec gemacht aber das schlägt fehl. Ist auch irgendwie erwartbar, denn für die IPs existieren keine SD in der Phase 2.
Captured man den Tunneltraffic mit über die Capture Funktion unter Diagnostics wird das auch bestätigt. Der geforwardete Traffic kommt erst gar nicht erst in den Tunnel. Wie gesagt unter IPsec ist das verständlich. Allerdings müsste man das realistischerweise nochmal mit VTI Interfaces testen. Gut möglich das es damit klappt. Im normalen IPsec Tunnel Mode dürfte das nicht erwartungsgemäß supportet sein.
Siehe dazu auch hier: https://forum.opnsense.org/index.php?topic=17381.0
Allerdings verweist der o.a. Foreneintrag auch auf einen Workaround mit dem es dennoch funktionieren soll über statische BINAT Einträge:
https://docs.opnsense.org/manual/how-tos/ipsec-s2s-binat.html
So oder so ist das bei OpenVPN eine völlig andere Situation, da es ein SSL basiertes VPN ist mit völlig anderem Protokoll Handling ohne diese SD Problematik wie oben.
Der o.a. Link beschreibt ja auch das das fehlerfrei klappen soll...zumindestens mit der pfSense.
Es ist also einen zweiten Versuch mit OpenVPN wert !
Eine Suche nach "pfsense port forward openvpn" ergibt auch einige Treffer.
Captured man den Tunneltraffic mit über die Capture Funktion unter Diagnostics wird das auch bestätigt. Der geforwardete Traffic kommt erst gar nicht erst in den Tunnel. Wie gesagt unter IPsec ist das verständlich. Allerdings müsste man das realistischerweise nochmal mit VTI Interfaces testen. Gut möglich das es damit klappt. Im normalen IPsec Tunnel Mode dürfte das nicht erwartungsgemäß supportet sein.
Siehe dazu auch hier: https://forum.opnsense.org/index.php?topic=17381.0
Allerdings verweist der o.a. Foreneintrag auch auf einen Workaround mit dem es dennoch funktionieren soll über statische BINAT Einträge:
https://docs.opnsense.org/manual/how-tos/ipsec-s2s-binat.html
So oder so ist das bei OpenVPN eine völlig andere Situation, da es ein SSL basiertes VPN ist mit völlig anderem Protokoll Handling ohne diese SD Problematik wie oben.
Der o.a. Link beschreibt ja auch das das fehlerfrei klappen soll...zumindestens mit der pfSense.
Es ist also einen zweiten Versuch mit OpenVPN wert !
Eine Suche nach "pfsense port forward openvpn" ergibt auch einige Treffer.
So, hier die OpenVPN Variante mit der es, wie zu erwarten, fehlerfrei klappt...zumindestens "fast" fehlerfrei...
Routing Tabelle:
Ein Paket Capture auf der anderen Seite (pfsense-1) zeigt ebenso das auch da diese Pakete fehlerfrei ankommen.
Das zeigt dann ein Wireshark Trace am Webserver:
(Nicht wundern die Webserver IP ist auf .104) geändert worden !)
Der tcpdump Output direkt vom Webserver zeigt das Dilemma ebenfalls:
Der via VPN Server geforwardete Client aus dem Internet (hier simuliert 10.99.1.142) kommt wunderbar am Webserver an, wie man ja auch oben an den Wireshark und tcpdump Traces sehen kann. Der Webserver antwortet auf dieses Client Paket auch vorschriftsmässig. Das ACK, WIN, ACK geht aber endlos so weiter weil das Server Antwort Paket am Client immer verworfen wird.
Warum ist das so....?!
Die Antwort Ziel IP Adresse des Paketes vom Webserver ist korrekt, nämlich die des Clients also 10.99.1.142.
Die lokale Firewall pfsense-1 muss aber nun nach ihrer lokalen Routing Tabelle gehen um das Paket zum Client zu routen und die besagt eben nicht das das Antwortpaket über den Tunnel zur pfsense-2 geht (was es eigentlich müsste) sondern direkt über ihre lokale Default Route zum Provider. (OpenVPN macht hier Split Tunneling im Site-to-Site Mode)
Damit bekommt sie durch das Outbound NAT der lokalen pfsense-1 jetzt als Absender IP aber die WAN IP 10.99.1.99 !
Der Client (10.99.1.142) aber erwartet natürlich eine Antwort IP vom Server 10.11.1.149 weil er sein TCP 8080 Paket ja DA hingesendet hat. Draufhin killt der TCP/IP Stack im Client sofort die TCP Session und die Verbindung kommt nicht zustande....
Fazit: So wird es also NICHT klappen...
Ein OpenVPN Gateway Redirect wäre zwar eine Lösung, denn das würde den gesamten Traffic der pfSense-1 durch den Tunnel routen. Praxistauglich ist das aber natürlich nicht, denn sämtlicher Outbound Traffic der pfSense-1 auch lokaler müsste sich durch den VPN Tunnel zur pfSense-2 quälen.
Jetzt wird auch klar warum die Lösung der o.a. Links nur mit bidirectional NAT (1:1) klappen kann, denn das per Port Forwarding in den Tunnel weitergeleitete Paket darf NICHT die ursprüngliche Absender IP behalten sondern muss per BINAT eine lokale Absender IP aus der Firewall bekommen die das Port Forwarding macht um wieder über den Tunnel zurückgeroutet zu werden und dann von dort ins Internet zu gehen.
Nur so ist sichergestellt das die Rückroute auch wieder mit der richtigen Absender IP am Client ankommt !!
Hoffe das bringt für dich etwas Licht ins Dunkel und bestätigt letztlich die Lösung wie sie ja auch im pfSense Forum und in der Knowledgebase diskutiert wurde.
Testaufbau:
Setup OVPN Serverseite mit Port Forwarding:
OpenVPN Tunnel zur pfsense-2 up an running...Routing Tabelle:
Sniffer Trace der NAT Pakete Serverseite:
Hier kann man sehen das die eingehenden Pakete sauber in den OpenVPN Tunnel geroutet werden, denn der Packet Capture wurde schon auf dem OpenVPN Tunnelinterface auf der Serverseite gezogen.Ein Paket Capture auf der anderen Seite (pfsense-1) zeigt ebenso das auch da diese Pakete fehlerfrei ankommen.
Warum es nicht klappen kann...
zumindestens nicht ohne die Lösung von @colinardo.Das zeigt dann ein Wireshark Trace am Webserver:
(Nicht wundern die Webserver IP ist auf .104) geändert worden !)
Der tcpdump Output direkt vom Webserver zeigt das Dilemma ebenfalls:
root@webserver:/home# tcpdump -i eth0 port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
16:53:28.846279 IP 10.99.1.142.53161 > 192.168.1.104.http: Flags [S], seq 491464061, win 64240, options [mss 1288,nop,wscale 8,nop,nop,sackOK], length 0
16:53:28.846518 IP 192.168.1.104.http > 10.99.1.142.53161: Flags [S.], seq 3474302136, ack 491464062, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 6], length 0
16:53:29.096687 IP 10.99.1.142.58231 > 192.168.1.104.http: Flags [S], seq 3289310713, win 64240, options [mss 1288,nop,wscale 8,nop,nop,sackOK], length 0
16:53:29.096922 IP 192.168.1.104.http > 10.99.1.142.58231: Flags [S.], seq 1728949974, ack 3289310714, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 6], length 0
16:53:29.848864 IP 10.99.1.142.53161 > 192.168.1.104.http: Flags [S], seq 491464061, win 64240, options [mss 1288,nop,wscale 8,nop,nop,sackOK], length 0
16:53:29.849052 IP 192.168.1.104.http > 10.99.1.142.53161: Flags [S.], seq 3474302136, ack 491464062, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 6], length 0
Warum ist das so....?!
Die Antwort Ziel IP Adresse des Paketes vom Webserver ist korrekt, nämlich die des Clients also 10.99.1.142.
Die lokale Firewall pfsense-1 muss aber nun nach ihrer lokalen Routing Tabelle gehen um das Paket zum Client zu routen und die besagt eben nicht das das Antwortpaket über den Tunnel zur pfsense-2 geht (was es eigentlich müsste) sondern direkt über ihre lokale Default Route zum Provider. (OpenVPN macht hier Split Tunneling im Site-to-Site Mode)
Damit bekommt sie durch das Outbound NAT der lokalen pfsense-1 jetzt als Absender IP aber die WAN IP 10.99.1.99 !
Der Client (10.99.1.142) aber erwartet natürlich eine Antwort IP vom Server 10.11.1.149 weil er sein TCP 8080 Paket ja DA hingesendet hat. Draufhin killt der TCP/IP Stack im Client sofort die TCP Session und die Verbindung kommt nicht zustande....
Fazit: So wird es also NICHT klappen...
Ein OpenVPN Gateway Redirect wäre zwar eine Lösung, denn das würde den gesamten Traffic der pfSense-1 durch den Tunnel routen. Praxistauglich ist das aber natürlich nicht, denn sämtlicher Outbound Traffic der pfSense-1 auch lokaler müsste sich durch den VPN Tunnel zur pfSense-2 quälen.
Jetzt wird auch klar warum die Lösung der o.a. Links nur mit bidirectional NAT (1:1) klappen kann, denn das per Port Forwarding in den Tunnel weitergeleitete Paket darf NICHT die ursprüngliche Absender IP behalten sondern muss per BINAT eine lokale Absender IP aus der Firewall bekommen die das Port Forwarding macht um wieder über den Tunnel zurückgeroutet zu werden und dann von dort ins Internet zu gehen.
Nur so ist sichergestellt das die Rückroute auch wieder mit der richtigen Absender IP am Client ankommt !!
Hoffe das bringt für dich etwas Licht ins Dunkel und bestätigt letztlich die Lösung wie sie ja auch im pfSense Forum und in der Knowledgebase diskutiert wurde.
Es kommt sogar noch schlimmer.... aber wie schon gesagt @colinardo hat unten schon die einfache Lösung dafür parat! 😉
Ich habe einmal einen Wireshark Trace auf dem Client PC im Internet gemacht der den Zugriff via Port Forwarding und Tunnel in der pfSense-2 macht:
Du kannst an der Mac Adresse des Webserver Antwort Frames Nummer 4 (gelbe Markierung) auf den SYN des Clients deutlich sehen das dieser ACK Antwortframe des Webservers (192.168.1.104) auch direkt am Test-Client (10.99.1.141) wieder ankommt und das der Absender damit in der Tat die pfSense-1 (WAN Port) ist. Genau also wie oben beschrieben.
Der Antwortframe geht also de facto NICHT zurück über den Tunnel was er aber müsste !!
Was noch übler ist, ist die Tatsache das vermutlich durch das im TCP Antwortframe gesetzte ACK Bit der Antwortframe NICHT über den NAT Prozess der pfSense-1 rennt sondern direkt geroutet wird. Du kannst das deutlich am ACK Antwortframe des Servers erkennen, denn der nutzt als Absender IP die interne RFC 1918 IP 192.168.1.104 im Internet (rote Markierung). Diese IP darf normal niemals im Internet auftauchen. Der Antwortframe wird also NICHT geNATet von der Firewall !!
Im realen Internet Leben würdest du am Client diesen ACK Frame niemals mehr sehen, denn am Providerport an dem die Firewall ja klemmt werden in real Life alle diese privaten RFC 1918 Frames sofort weggelöscht durch ACLs auf den Provider Routern. Man sieht das (falsche) Verhalten also nur im Labor so. In real würde der ACK Frame gar nicht am Client ankommen.
Fazit vom Fazit:
Ohne BINAT wird das nix !
Im Ernst, die DG kann wohl nix dafür oder zumindestens waren sie zu langsam. Grund ist:
https://www.heise.de/newsticker/meldung/Das-war-s-mit-IPv4-Adressen-in-E ...
Ggf. pfiffig sein. Da wo Glasfaser ist nutzt diese im Tandem auch die Telekom und die hat noch jede Menge freie IPv4 Adressen.
Ich habe einmal einen Wireshark Trace auf dem Client PC im Internet gemacht der den Zugriff via Port Forwarding und Tunnel in der pfSense-2 macht:
Du kannst an der Mac Adresse des Webserver Antwort Frames Nummer 4 (gelbe Markierung) auf den SYN des Clients deutlich sehen das dieser ACK Antwortframe des Webservers (192.168.1.104) auch direkt am Test-Client (10.99.1.141) wieder ankommt und das der Absender damit in der Tat die pfSense-1 (WAN Port) ist. Genau also wie oben beschrieben.
Der Antwortframe geht also de facto NICHT zurück über den Tunnel was er aber müsste !!
Was noch übler ist, ist die Tatsache das vermutlich durch das im TCP Antwortframe gesetzte ACK Bit der Antwortframe NICHT über den NAT Prozess der pfSense-1 rennt sondern direkt geroutet wird. Du kannst das deutlich am ACK Antwortframe des Servers erkennen, denn der nutzt als Absender IP die interne RFC 1918 IP 192.168.1.104 im Internet (rote Markierung). Diese IP darf normal niemals im Internet auftauchen. Der Antwortframe wird also NICHT geNATet von der Firewall !!
Im realen Internet Leben würdest du am Client diesen ACK Frame niemals mehr sehen, denn am Providerport an dem die Firewall ja klemmt werden in real Life alle diese privaten RFC 1918 Frames sofort weggelöscht durch ACLs auf den Provider Routern. Man sieht das (falsche) Verhalten also nur im Labor so. In real würde der ACK Frame gar nicht am Client ankommen.
Fazit vom Fazit:
Ohne BINAT wird das nix !
Einfach schade, dass die Deutsche Glasfaser keine IPv4 anbietet
Jeder bekommt halt den Provider den er verdient und die DG ist für diese IP Adressproblematik berühmt berüchtigt ! Im Ernst, die DG kann wohl nix dafür oder zumindestens waren sie zu langsam. Grund ist:
https://www.heise.de/newsticker/meldung/Das-war-s-mit-IPv4-Adressen-in-E ...
Ggf. pfiffig sein. Da wo Glasfaser ist nutzt diese im Tandem auch die Telekom und die hat noch jede Menge freie IPv4 Adressen.
Vermutlich gilt das generell für alle VPN Protokolle. Der Link oben beschreibt das ja auch anhand der modernenren VTI Interfaces.
Die haben den großen Vorteil das sie genau wie physische Interface zu konfigurieren sind und sich auch so verhalten.
Dieses Tutorial behandelt das Thema VTI: Cisco, Mikrotik, pfSense VPN Standort Vernetzung mit dynamischem Routing
Das wäre in der Tat nochmal einen Versuch wert.
Die haben den großen Vorteil das sie genau wie physische Interface zu konfigurieren sind und sich auch so verhalten.
Dieses Tutorial behandelt das Thema VTI: Cisco, Mikrotik, pfSense VPN Standort Vernetzung mit dynamischem Routing
Das wäre in der Tat nochmal einen Versuch wert.
aber wie erstellt man sonst eine virtuelle Schnittstelle?
Wireguard und OpenVPN machen das ja automatisch. IPsec mit VTIs auch. Bei Cisco Routern sagst du ganz einfach int tunnel 1 in der Konfig und schon ist das Interface erstellt. Eigentlich ganz easy...
Oder ist IPsec auch eine Option für mich?
Wie ist das gemeint ?? Generell oder bezogen auf dein ganz spezielles Anforderungsprofil oben ?? Wenn Letzteres, dann nur mit VTIs.bei Wireguard die Verbindung zum VPS auf die statische IP aufbaue
Jein. Es könnte ja auch eine DynDNS IP sein wenn du mit DynDNS Hostnamen arbeitest geht das auch. Die andere Seite kann komplett mit dynamischen IPs arbeiten. Wenn der Server immer Responder ist und die remoten Endpunkte immer die Initiators ist deren IP völlig egal. Das ist analog wie bei OpenVPN. Beides sind SSL basierte VPN Protokolle wo sowas problemlos ist.
WARUM sendest du Posts 2mal ???
Wegen der einfachen Handhabe wären SSL Protokolle aber primär vorzuziehen. Da es mit OpenVPN ja generell sauber klappt wäre das also erste Anlaufstelle. Wenn's damit klappt, klappt es sehr wahrscheinlich auch mit WG.
Ist ja kein Cisco Router
Geht bei allen anderen doch mehr oder wenger immer genau so.Dorthin Natten und die leitet in den Tunnel zu der Gegenseite auf die virtuelle, die wiederum zum Client?
Jepp, genau das ist der Plan und ja auch im obigen Link mit BINAT so beschrieben als Lösung.Wegen der einfachen Handhabe wären SSL Protokolle aber primär vorzuziehen. Da es mit OpenVPN ja generell sauber klappt wäre das also erste Anlaufstelle. Wenn's damit klappt, klappt es sehr wahrscheinlich auch mit WG.
Das mit dem doppelten war keine Absicht.
Warum löscht du denn solche Fauxpas' nicht ? Verwirrt ja nur...dieses dann wiederum auf die ZielIP?
Nein, falsch !Es reicht ein einfaches 1:1 NAT am VPS. Das kann auf eine Tunnel IP erledigt werden. Dadurch bekommt das dort von extern eingehende Paket eine lokale Absender IP eines der VPS Interfaces. Mit dieser IP wird es dann vom Ziel wieder in den Tunnel zurückgeroutet und eben NICHT lokal. Dann geht das Paket vom VPS Server wieder an den Client mit der gleichen Absender IP.
Es reicht also ein stinknormales 1:1 NAT am VPS.
Servus @fnbalu ,
es ist so wie @aqui auch schon geschrieben hat. Ich möchte es dir aber anhand des Packet-Flows nochmal erläutern damit du verstehst was da genau abläuft.
Ich gehe jetzt mal bei meiner Beschreibung von folgendem Setup aus:
Ziel: UserA möchte mit seinem Client über die IP 1.2.3.4 Port 6666 den Webserver auf 192.168.1.45 Port 80 erreichen.
Die Abfolge der Pakete ist nun folgende:
1. User A initiiert die Verbindung auf 1.2.3.4:6666
2. Das Paket kommt auf der pfSense des VPS an und muss nun per DSTNAT an den Zielhost 192.168.1.45:80 weitergeleitet werden.
3. Bei DSTNAT wird dabei die Zieladresse des Pakets auf die 192.168.1.45 und der Port auf 80 umgeschrieben, dabei bleibt die SRC-Adresse von User A gleich und wird nicht verändert.
4. Da die Policy des Wireguard-Clients in der allowedips aber nur Pakete von 10.0.0.0/24 erwartet und andere nicht erlaubt bleiben die geforwardeten Pakete von User A schon im Tunnel hängen und erreichen den Wireguard Client an der Home pfSense erst gar nicht. Somit ist die Kommunikation schon abgewürgt. Würde man stattdessen in der Policy any akzeptieren, dann würden die Pakete zwar den Server erreichen dieser würde aber wiederum die Pakete über sein Default GW und nicht den Wireguard Tunnel zurück schicken, was dann zu einem asynchronem Routing führt, und @aqui oben schon erläutert hat.
5. Um diesen Umstand zu beheben kann man nun einfach ein SRCNAT (auf der pfSense nennt sich das OUTBOUND-NAT) auf dem Wireguard Interface machen das die Quell-Adresse dieser Pakete auf die IP 10.0.0.1 des Wireguard Interfaces des VPS umschreibt. Ist das erledigt haben die Pakete des Clients im Tunnel nun die Absender-Adresse 10.0.0.1 und als Zieladresse weiterhin 192.168.1.45:80.
6. Nun gelangt das Paket beim Client erfolgreich am Ziel 192.168.1.45:80 an. Da nun die Quelladresse des Pakets auf 10.0.0.1 lautet routet die 192.168.1.45:80 seine Pakete zurück an sein DefaultGW (die Home pfSense) und die wiederum routet das Paket zurück über den Tunnel an das Wireguard VPS Interface 10.0.0.1. Dort angekommen wird durch die NAT State Tabelle die Quell-Adresse des Pakets wieder auf die WAN Adresses des VPS umgeschrieben und die Zieladresse auf die Ursprüngliche von User A.
Was du also brauchst sind zwei Regeln einmal ein DSTNAT für die eingehenden Pakete und ein OUTBOUND NAT zum Umschreiben Quell-Adresse zur Weiterleitung in den Wireguard-Tunnel, beides nur auf der pfSsense beim VPS.
Das sieht dann in der Praxis auf der pfSense beim VPS so aus
Damit kommt das ganze dann auf Anhieb zum fliegen.
Das selbe geht natürlich auch mit anderen Ports, hier mal ein Schaubild über den Aufbau und der beispielhafte Packet-Flow
Ich persönlich mache etwas ähnliches, aber ich mache das mit meinem Mikrotik RB4011 über eine IPSEC-Verbindung zu einem vServer und statt dem SRCNAT wie oben beschrieben installiere ich am Mikrotik dann eine IPSEC Policy auf 0.0.0.0/0 die aber Pakete von bestimmten Clients und Quell-Ports dann wieder automatisch über den Tunnel routet. Hier muss man dann aber darauf achten das man für die lokal erreichbaren Subnetze IPSEC Policies erstellt bei der Encryption auf "None" gestellt ist, sonst erreicht man den Server lokal nicht mehr weil er sonst Antworten generell über den Tunnel schickt.
Man kann alternativ auch mit Routing-Tags arbeiten mit denen man Traffic von bestimmten Clients oder Verbindungen explizit markiert und dann über den Wireguard Tunnel routet.
Grüße Uwe
es ist so wie @aqui auch schon geschrieben hat. Ich möchte es dir aber anhand des Packet-Flows nochmal erläutern damit du verstehst was da genau abläuft.
Ich gehe jetzt mal bei meiner Beschreibung von folgendem Setup aus:
- WAN-IP VPS = 1.2.3.4
- WG TUNNEL IP VPS = 10.0.0.1/24
- WG TUNNEL IP HOME = 10.0.0.2/24
- HOME SUBNET = 192.168.1.0/24
Ziel: UserA möchte mit seinem Client über die IP 1.2.3.4 Port 6666 den Webserver auf 192.168.1.45 Port 80 erreichen.
Die Abfolge der Pakete ist nun folgende:
1. User A initiiert die Verbindung auf 1.2.3.4:6666
2. Das Paket kommt auf der pfSense des VPS an und muss nun per DSTNAT an den Zielhost 192.168.1.45:80 weitergeleitet werden.
3. Bei DSTNAT wird dabei die Zieladresse des Pakets auf die 192.168.1.45 und der Port auf 80 umgeschrieben, dabei bleibt die SRC-Adresse von User A gleich und wird nicht verändert.
4. Da die Policy des Wireguard-Clients in der allowedips aber nur Pakete von 10.0.0.0/24 erwartet und andere nicht erlaubt bleiben die geforwardeten Pakete von User A schon im Tunnel hängen und erreichen den Wireguard Client an der Home pfSense erst gar nicht. Somit ist die Kommunikation schon abgewürgt. Würde man stattdessen in der Policy any akzeptieren, dann würden die Pakete zwar den Server erreichen dieser würde aber wiederum die Pakete über sein Default GW und nicht den Wireguard Tunnel zurück schicken, was dann zu einem asynchronem Routing führt, und @aqui oben schon erläutert hat.
5. Um diesen Umstand zu beheben kann man nun einfach ein SRCNAT (auf der pfSense nennt sich das OUTBOUND-NAT) auf dem Wireguard Interface machen das die Quell-Adresse dieser Pakete auf die IP 10.0.0.1 des Wireguard Interfaces des VPS umschreibt. Ist das erledigt haben die Pakete des Clients im Tunnel nun die Absender-Adresse 10.0.0.1 und als Zieladresse weiterhin 192.168.1.45:80.
6. Nun gelangt das Paket beim Client erfolgreich am Ziel 192.168.1.45:80 an. Da nun die Quelladresse des Pakets auf 10.0.0.1 lautet routet die 192.168.1.45:80 seine Pakete zurück an sein DefaultGW (die Home pfSense) und die wiederum routet das Paket zurück über den Tunnel an das Wireguard VPS Interface 10.0.0.1. Dort angekommen wird durch die NAT State Tabelle die Quell-Adresse des Pakets wieder auf die WAN Adresses des VPS umgeschrieben und die Zieladresse auf die Ursprüngliche von User A.
Was du also brauchst sind zwei Regeln einmal ein DSTNAT für die eingehenden Pakete und ein OUTBOUND NAT zum Umschreiben Quell-Adresse zur Weiterleitung in den Wireguard-Tunnel, beides nur auf der pfSsense beim VPS.
Das sieht dann in der Praxis auf der pfSense beim VPS so aus
DSTNAT:
OUTBOUND NAT
Damit kommt das ganze dann auf Anhieb zum fliegen.
Das selbe geht natürlich auch mit anderen Ports, hier mal ein Schaubild über den Aufbau und der beispielhafte Packet-Flow
Ich persönlich mache etwas ähnliches, aber ich mache das mit meinem Mikrotik RB4011 über eine IPSEC-Verbindung zu einem vServer und statt dem SRCNAT wie oben beschrieben installiere ich am Mikrotik dann eine IPSEC Policy auf 0.0.0.0/0 die aber Pakete von bestimmten Clients und Quell-Ports dann wieder automatisch über den Tunnel routet. Hier muss man dann aber darauf achten das man für die lokal erreichbaren Subnetze IPSEC Policies erstellt bei der Encryption auf "None" gestellt ist, sonst erreicht man den Server lokal nicht mehr weil er sonst Antworten generell über den Tunnel schickt.
Man kann alternativ auch mit Routing-Tags arbeiten mit denen man Traffic von bestimmten Clients oder Verbindungen explizit markiert und dann über den Wireguard Tunnel routet.
Grüße Uwe
Zitat von @fnbalu:
Dort die höchstwahrscheinlich irrtümlich eingebene IP 192.168.50.12 um beim Beispiel zu bleiben auf 192.168.1.45 ändern.
Uups ja das war mein Fehler, ändere das noch. => done.Dort die höchstwahrscheinlich irrtümlich eingebene IP 192.168.50.12 um beim Beispiel zu bleiben auf 192.168.1.45 ändern.
Jawoll, das fliegt.
👍
Dank an @colinardo für den ausführlichen Post zu dem Thema. 👍
Ich war mal so frei den Link in die pfSense/OPNsense VPN Tutorials aufzunehmen, da so ein Setup ja sicher öfter mal vorkommt.
Ich war mal so frei den Link in die pfSense/OPNsense VPN Tutorials aufzunehmen, da so ein Setup ja sicher öfter mal vorkommt.
ich mache das mit meinem Mikrotik RB4011 über eine IPSEC-Verbindung zu einem vServer
Das ist ja nochmal ein klasse Stoff für ein entsprechendes Tutorial !!! 😉
Uuuuhhh, wie gruselig, du willst das Setup GUI für den öffentlichen Zugriff am WAN öffnen ?? Keine wirklich gute Idee !!
Aber das geht normal im Regelwerk am WAN Port dann mit einer einfachen IPv6 Regel die Port 443 von Any auf die v6 IP des WAN Ports freigibt. Du willst ja, wenn überhaupt, hoffentlich nur HTTPS machen, oder ?!
Aber das geht normal im Regelwerk am WAN Port dann mit einer einfachen IPv6 Regel die Port 443 von Any auf die v6 IP des WAN Ports freigibt. Du willst ja, wenn überhaupt, hoffentlich nur HTTPS machen, oder ?!
Zitat von @fnbalu:
Eine Regel, die bei Dual Stack auf diese Firewall selbst beläuft, für OpenVPN oder warum auch immer um das GUI zu öffnen, wie lautet die Regel da?
Du meinst um das WebGUI der pfSense freizugeben? Das würde ich nur innerhalb des VPNs tun, also eine Regel die nur auf dem OpenVPN Abschnitt der Firewall wirkt, so dass auch nur Clients innerhalb des VPNs daruf zugreifen dürfen.Eine Regel, die bei Dual Stack auf diese Firewall selbst beläuft, für OpenVPN oder warum auch immer um das GUI zu öffnen, wie lautet die Regel da?
Zitat von @fnbalu:
Dafür wird ja der Port auf die Firewall selbst freigeben über NAT. 1194 whatever.
Ich würde OpenVPN jedoch auf der lokalen Firewall lassen und nach dem obigen Muster 1194 mit outbound NAT u.s.w. forwarden
Das sind zwar 2 Tunnel, sollte aber gehen denke ich.
Zumal die Rechenleistung zu Hause für die Tunnel potenter ist.
Kann man aber denk dabei an die MTU, die wird entsprechend weit geringer ausfallen und somit auch der mögliche Durchsatz. Du erzeugst da ja ein Tunnel in einem Tunnel, würde ich wo es geht vermeiden und immer am Perimeter terminieren, das NATen kostet ja auch CPU.Dafür wird ja der Port auf die Firewall selbst freigeben über NAT. 1194 whatever.
Ich würde OpenVPN jedoch auf der lokalen Firewall lassen und nach dem obigen Muster 1194 mit outbound NAT u.s.w. forwarden
Das sind zwar 2 Tunnel, sollte aber gehen denke ich.
Zumal die Rechenleistung zu Hause für die Tunnel potenter ist.
Ja, aber ich persönlich würde kein OpenVPN mehr nutzen,der Overhead ist mir persönlich zu groß. Wireguard gibt es ja inzwischen für jegliche Art Device. Alternativ geht natürlich immer ein reiner IPSec-Tunnel mittels Strongswan-Client, aber das muss jeder selbst entscheiden.
Das ändert sich wohl alle 24 Stunden.
Nee, die v6 Adress- und Prefix Gültigkeit dauert in der Regel länger ca. 1-2 Monate. Du wirst aber noch ein anderes Problem haben. Du bekommst auch immer einen neuen v6 Prefix und damit ändert sich dann auch immer dein lokales v6 IP Netz was dann ein v6 VPN unmöglich macht.Wenn du die Netze mit v6 VPN koppeln willst musst du zusätzlich zum offiziellen Prefix Netz im LAN noch Unique local v6 Adressen vergeben. Das sind die privaten IP Netze bei v6 mit dem Refix fc00::/7 RFC-4193.
Bei v6 kein Problem denn dort sind mehrere Adressen pro Interface üblich.
Da denkt man sich ja ein Subnet für aus meine ich
Für die Freundin dann etwas Lustiges wie fd::bad:babe:b00b:1 /64Danach dann aber schnell in Deckung gehen... 🤣
http://sophiedogg.com/funny-ipv6-words/
Bekommt man das überhaupt über den Wireguard Tunnel hin
Ja, die Konfig und das grundsätzliche Verhalten ist vollkommen identisch zu OpenVPN da beides ja SSL VPNs sind die über virtuelle Tunnel Interfaces arbeiten. WG ist etwas performanter was den Durchsatz anbetrifft. Aber dein Vorgehen ist richtig. Erstmal alles zum Fliegen bringen, testen, dann gff. umstellen.am OpenVPN lokal mal kurzzeitig was gezuckt
Da müssen wir jetzt mal frei raten was du mit "zucken" wohl meinst...?!Zitat von @fnbalu:
Ich möchte mich ja über Wireguard mittels IPv4 auf OpenVPN verbinden.
Es soll also der Port identisch geforwardet werden.
Wireguard ist das Netz 10.20.30.0 natürlich bekannt gemacht worden.
Brauchst du nur wenn die OpenVPN Clients über OpenVPN auf das VPS Netz zugreifen können sollen ansonsten ist das überflüssig denn diese kommen mit diesem Netz per Default nicht in Kontakt.Ich möchte mich ja über Wireguard mittels IPv4 auf OpenVPN verbinden.
Es soll also der Port identisch geforwardet werden.
Wireguard ist das Netz 10.20.30.0 natürlich bekannt gemacht worden.
Der Forward ging also von der 1194 auf die LAN IP 192.168.1.1 der pfSense.
Du terminierst das VPN am einfachsten gleich auf dem Wireguard Interface (10.0.0.2), wo du auch die Firewall Regel für das Öffnen des Ports 1194 anlegst.Zusätzlich stelle sicher das OpenVPN auch auf dem Wireguard Interface überhaupt lauscht und nicht nur auf dem WAN-Interface.
Also entweder auf ANY stellen wenn du sowohl über das WAN Interface als auch das WG Interface connecten willst, oder eben nur noch über den WG Tunnel.
Auf VPS Seite natürlich daran Denken das dort OpenVPN deaktiviert oder auf einem anderen Ports läuft, nicht das du dort parallel einen Server auf dem VPS und intern fährst der auf dem gleichen Port läuft, das gibt dann natürlich Hickhack.
Habe das ganze hier übrigens auch erfolgreich getestet, läuft wie erwartet problemlos. Man muss nur penibel alle Schritte durchgehen, gerne vergisst man mal in den Portweiterleitungen oder den Firewall Regeln auf UDP statt TCP festzulegen, das sind so kleine Fallstricke, aber hat man sie mal alle gemeistert läuft das wie erwartet.
So, das ist jetzt inzwischen doch Off-Topic. Lass uns hier doch bitte zu einem Ende kommen, das eigentliche Thema wurde ja gelöst. Merci.
Grüße und weiterhin viel Erfolg.
Uwe
Zitat von @fnbalu:
Läuft, Danke.
Nun google ich mal etwas wie ich das OpenVPN beschleunige. Egal wie herum man schaut, ich denke 5 Mbit sind zu mager
Läuft, Danke.
Nun google ich mal etwas wie ich das OpenVPN beschleunige. Egal wie herum man schaut, ich denke 5 Mbit sind zu mager
Da wird wohl wie oben gesagt die MTU zu heftigen Fragmentierung führen, da hilft es meist die MTU in der OpenVPN Config erst mal runter zu schrauben und sich dann hoch zu arbeiten.
fragmentation 1300mssfix 1300
Paket-Fragmentierung kannst du leicht mittels Ping und do not fragment bit oder einem Wireshark trace prüfen.
Wireguard selbst reduziert ja die MTU im Tunnel schon auf 1420. Sicherstellen sollte man immer das ICMP Pakete für die Ermittlung der MTU an die Gegenstellen erlaubt sind damit die PMTU-Ermittlung funktioniert.
...und besser einen neuen Thread dafür eröffnen wie Kollege @colinardo schon angemerkt hat.