Self-Hosted Portmapper

francy_space

Ensign
Registriert
Juni 2020
Beiträge
169
Hallo Leute,


ich habe einen DS-Lite Router von Unitymedia. Ich habe einen externen vServer (mit öffentlicher Ipv4/-und Ipv6-Adresse) auf dem ich meine Geräte per VPN-Tunnel fernzugreifen will. Bevor ich mich zur Installation des VPN aufmache, muss ich erstmal einen Portmapper-Service startklar machen. Funktionieren tut dies mit der Anwendung „6tunnel“. Dies ist anwendbar auf diversen Linux-Servern. Ich habe einen vServer von Ionos und eine IP-Kamera an meinen Heimrouter per Ethernet angeschlossen. Die IP-Kamera hat per DHCP eine Ipv4 und Ipv6-Adresse von meinem Router zugewiesen bekommen. Ich möchte dem lokalen IP-Port einen extern erreichbaren IP-Port zuweisen. Die Fernverbindung soll auf Basis von VPN und TCP geschehen.


Man nehme an: Die lokale Ipv6 meiner Kamera ist x:y:z und der lokale RTSP-Port meiner Kamera ist 412. Ich möchte diese lokale IP-Port über die IP-Adresse des VServers und des Ports 2354 extern zugreifbar machen.


Würde der 6tunnel dann so aussehen:
6tunnel 412 x:y:z 2354


Zur Info: der lokale RTSP-Port ist der Port, der auf der Konfigurationsübersicht meiner Kamera hinterlegt ist. Am Router habe ich als Ziel-Ipv6 die lokale Ipv6-Adresse der Kamera eingegeben. Als Ziel-Port habe ich 2354 definiert. Hätte ich als Ziel-Ipv6 vielleicht die Ipv6-Adresse des vServers hinterlegen müssen? Da ich einen DS-Lite Router habe, kann ich nur Ports von Ipv6-Adressen freigeben.
 
francy_space schrieb:
Die lokale Ipv6 meiner Kamera ist x:y:z und der lokale RTSP-Port meiner Kamera ist 412. Ich möchte diese lokale IP-Port über die IP-Adresse des VServers und des Ports 2354 extern zugreifbar machen.
Dann müssen die Port-Nummern vertauscht werden: 6tunnel 2354 x:y:z 412 Das schickt Traffic der am Server auf 2354 ankommt an x:z:y:412.
Im Router muss dann natürlich Port 412 für die Kamera freigebenden sein.
 
  • Gefällt mir
Reaktionen: francy_space
Das ist ein interessantes Thema und würde mich ebenfalls interessieren... ich wollte nämlich auch einen '6tunnel' für eine OpenVPN Verbindung herstellen, aber das klappte irgendwie nicht. Die reine IPv6 Verbindung klappte, aber irgendwo scheint da eine Firewall zwischen gefunkt zu haben, obwohl 'iptables' keine "reject" Regeln drin hatte.

Wenn es bei dir klappt, gib doch bitte mal ein Feedback :)
 
als kleiner Tipp: ich weiß nicht was der 6to4 Tunnel kostet, aber versuch mal die PowerUpload (doppelter Upload) Funktion zu buchen, kostet ca 3€/mtl. und du kannst dir dann damit ein natives Dual Stack geben lassen mit eigener IPv4.

Ansonsten geht es auch mit der KomfortOption (Fritxbox) für 5€/mtl.
 
  • Gefällt mir
Reaktionen: up.whatever
@TheCadillacMan: Muss ich bei der Portfreigabe im Router als Quell-Ipv6 und Quell-Port was singuläres eingeben oder einfach auf "beliebig" stehen lassen?
 
Der Quell-Port sollte beliebig sein, da der mit jeder Verbindung wechseln kann. Die Quell-IP kannst du auf beliebig lassen, wenn du auch mal direkt per IPv6 (z. B. von einem IPv6-Anschluss aus) zugreifen willst.
 
TheCadillacMan schrieb:
Im Router muss dann natürlich Port 412 für die Kamera freigebenden sein.
Das ergibt so keinen Sinn. Der Traffic kommt ja als IPv6 am heimischen Router an, da gibts keine Portfreigaben.
Die Kamera muss IPv6 beherrschen und der Traffic muss an diese IPv6 weitergeleitet werden.
francy_space schrieb:
Die Fernverbindung soll auf Basis von VPN und TCP geschehen.
Von wo nach wo geht das VPN in deinem Denkansatz?
Vom Client zum vServer?

Nutze doch einfach ein IPv6 fähiges VPN direkt in dein heimisches Netz. Wenn du VPN hast, brauchst du keinen Portmapper, außer du kommst von einer IPv4 only Quelle.
 
@TheCadillacMan
Hallo, die letzten Tagen habe ich zum Anlass genommen, was es heißt einen Portmapper auf einem vSerer aufzusetzen. Letzendlich tut der Portmapper nichts anderes, als Informationen (Pakete ?) von einem Port des vServers zu einem Port des Heimrouters weiterzuleiten.

Sprich: Er baut ein Tunnel von Rechenzentrum, wo der vServer sitzt, zum Heimrouter auf.

Befehlstechnisch sieht das ganze vereinfacht so aus:

6tunnel | extern erreichbarer vServer-Port | öffentliche Ipv6-Adresse des Heimrouters | lokaler Port innerhalb des Heimnetzwerkes

Real würde es so aussehen, wenn x:y:z stellvertretend für die öffentliche Ipv6-Adresse des Routers stehen würde:

6tunnel 1194 x:y:z 1194

Der vServer schickt die Pakete, die extern auf seiner IP-Adresse und seinem Port eintreffen zum Heimnetzwerk samt Router und Port weiter.

So fern, so gut.

Die Gesetze der Logik sagen mir aber, dass ich auf meinem DS-Lite Router (ConnectBox) noch Anpassungen vornehmen muss. Eingehend werden vom vServer Pakete an einen bestimmten Port des Routers verschickt. Damit diese Pakete auch beim Port des Routers ankommen, muss ich an der ConnectBox folgendermaßen die Portfreigabe einrichten:

Protokoll: TCP
Quell-Ipv6: Ipv6-Adresse des vServers
Quell-Port: extern erreichbarer vServer-Port (siehe 6tunnel-Befehl oben)
Ziel-Ipv6: öffentliche IP-Adresse des Heimrouters
Ziel-Port: gewünschter Port. wohin die Pakete innerhalb des Heimnetzwerks weitergeleitet werden sollen

Die Gesetze der Logik sagen mir aber auch, dass ausgehend vom Heimrouter Pakete an den vServer verschickt werden können.
Das heißt: Ich müsste auf der ConnectBox eine 2. Portfreigabe einrichten. Diesmal ist die Quell-IP die öffentliche Ipv6-Adresse des Heimrouters. Die Ziel-IP ist demnach die Ipv6-Adresse des vServers.

Denke ich zu kompliziert oder ist die Logik richtig, die ich bei der Portfreigabe beachten muss?
 
francy_space schrieb:
6tunnel | extern erreichbarer vServer-Port | öffentliche Ipv6-Adresse des Heimrouters | lokaler Port innerhalb des Heimnetzwerkes
Es ist nicht die öffentliche Adresse des Routers sondern die des Zielgeräts. Jedes IPv6-Gerät in deinem Heimnetz hat eine öffentliche IPv6-Adresse die über 6tunnel angesprochen werden kann.
Port-Weiterleitungen (aka NAT) wie bei IPv4 üblich ist mit IPv6 sehr unüblich. Die öffentliche IPv6 des Routers gibst du nur an wenn du einen Dienst erreichen willst der direkt auf dem Router läuft.

francy_space schrieb:
Quell-Port: extern erreichbarer vServer-Port (siehe 6tunnel-Befehl oben)
Der Port auf dem 6tunnel externe Verbindungen annimmt muss nicht dem Port zur Kommunikation mit deinem Netzwerk identisch sein.
Das kann so sein (ich weiß nicht wie 6tunnel hier arbeitet). Es ist aber auch möglich, dass jede Verbindung einen zufälligen Quell-Port hat.

francy_space schrieb:
Ziel-Ipv6: öffentliche IP-Adresse des Heimrouters
Nein, siehe oben.

francy_space schrieb:
Ziel-Port: gewünschter Port. wohin die Pakete innerhalb des Heimnetzwerks weitergeleitet werden sollen
Der Port muss der sein auf dem der gewünschte Dienst auf dem Ziel-Host im Netzwerk läuft.

francy_space schrieb:
Die Gesetze der Logik sagen mir aber auch, dass ausgehend vom Heimrouter Pakete an den vServer verschickt werden können.
Das heißt: Ich müsste auf der ConnectBox eine 2. Portfreigabe einrichten. Diesmal ist die Quell-IP die öffentliche Ipv6-Adresse des Heimrouters. Die Ziel-IP ist demnach die Ipv6-Adresse des vServers.
Sehr wahrscheinlich nicht.
Port-Freigaben/-Weiterleitungen werden bei Consumer-Routern nur in eingehender Richtung benötigt.
6tunnel initiiert die Verbindung vom vServer aus über die oben genannte Freigabe. Den Rückweg erlaubt die Firewall am Router automatisch weil sie die Verbindung dann schon kennt.
Wenn du im Internet surfst musst du ja auch keine Freigabe einrichten ob die Webserver ständig Daten zu deinem PC schicken.
 
  • Gefällt mir
Reaktionen: francy_space
@TheCadillacMan Vielen Dank für deine Erklärung. Meine verbesserten Erkenntnisse und Denkschritte habe ich erneut aufgeschrieben. Erstmal auf ein Stück Papier, und jetzt dir. Dabei tauchten neue Fragestellungen auf.
____

Ich möchte von meinem VPN-Client extern auf meinen VPN-Server zugreifen, der daheim an meinem Router per LAN angeschlossen ist. Als VPN-Server fungiert ein Raspberry Pi.
Die Herausforderung ist, dass mein Router daheim ein DS-Lite Router von Unitymedia ist (ConnectBox).

Die letzten Tagen habe ich zum Anlass genommen, was es heißt einen Portmapper auf einem vSerer aufzusetzen. Letzendlich tut der Portmapper nichts anderes, als das ich extern von meinem VPN-Client aus über IPv4 den VPN-Server bei mir im Heimnetz abrufen kann.

Befehlstechnisch sieht das ganze vereinfacht so aus:

6tunnel | extern erreichbarer vServer-Port | öffentliche Ipv6-Adresse des VPN-Clients | lokaler Port innerhalb des Heimnetzwerkes

Real würde es so aussehen, wenn x:y:z stellvertretend für die öffentliche Ipv6-Adresse des VPN-Clients stehen würde:

6tunnel 1194 x:y:z 1194

Der Portmapper baut ein Tunnel von Rechenzentrum, wo der vServer sitzt, zum VPN-Client auf.

So fern, so gut.

Ich möchte meine Sicht der Logik schildern, die bei solch einer VPN-Verbindung von Statten geht:

1. Der VPN-Client schickt eine Anfrage über IPv4 an den vServer
2. Der vServer nimmt diese Anfrage an und verschickt die Pakete an die öffentliche IPv6-Adresse des Clients
3. Bevor diese Pakete beim Client ankommen, müssen sie erstmal durch den Heimrouter und den VPN-Server
4. Beim VPN-Server angekommen werden die Pakete per VPN durch das Internet zum Client getunnelt

Stimmt diese Logik?

Wenn ja, so möchte ich einen Schritt weitergehen. An meinem DS-Lite Router muss ich zwei Portweiterleitungen konfigurieren.

1a) Einmal ist die Ziel-Ipv6 die öffentliche IPv6-Adresse des VPN-Clients, mit dem Zielport:1194. Die Quell-IPv6 ist die IPv6-Adresse des vServers, mit dem Quellport 1194.

1b) Zum anderen müssen die Pakete, die am Router bei Port 1194 ankommen, zum VPN-Server weitergeleitet werden. Sprich die Quell-IPv6 wäre die die IPv6-Adresse des vServers. Die Ziel-Ipv6 ist die lokale IPv6-Adresse des VPN-Servers. Hier brauche ich nicht die öffentliche IPv6-Adresse des VPN-Servers einzugeben. Da bei Schritt 1a) bereits die Richtung festgelegt wurde. Quell- und Zielport wären jeweils 1194.
 
Zurück
Oben