Carsten: OpenVpn Tunnel hinter NAT-Router

Moin,

ich brauche einen VPN-Tunnel, bei dem einer der beiden Tunnelausgänge hinter einem NAT(Masquerading)-Router liegt.

Eigentlich ganz einfach?
Irgendwie wohl doch nicht, die gängigen Beschreibungen gehen alle davon aus, das man letzlich:

a)den VPN-Tunnelausgang in den NAT(Masquerading)-Router[2] verlegt oder

b)den Router[2] den openvpn-Port auf den Router[3] forwarden lässt, der den Tunnelausgang bereitstellt.

Das ist aber gemogelt! Mein Tunnelausgang muß hinter dem Masquerading-Rechner liegen, ohne auf dem irgendwas zu ändern.

+-------------+
|  Netz A     |
+-----+-------+
      |
      |  internes Netz A, 192.168.0.0/24
      |
+-----+-------+
|   Router 1  |
|  VPN-Tunnel |
|  'Eingang'  |
+-----+-------+
      |  dyndns (quasi-feste), öffentliche IP
      |
      |
      |  Internet
      |
      |
      |  feste, öffentlich IP
+-----+-------+
|#############|
|    NAT      |
|Masquerading | <=== kein Port-Forwarding möglich!
|#############|
|  Router 2   |
+-------------+
      |
      |  internes Netz X, 10.0.0.0/24
      |
+-----+-------+
|  VPN Tunnel |
|   Ausgang   |
|   Router 3  |
+-----+-------+
      |
      |  internes Netz B, 172.16.0.0/16
      |
+-----+-------+
| Netz B      |
+-------------+

Geht das überhaupt und wenn ja wie?

Das Problem zeigt sich in der openvpn Konfiguration übrigens einfach darin, dass man auf Router[3] einen Empfangs-Port angeben _muß_, was aber prinzipiell Unsinn ist, denn der kann ja definitiv nicht erreicht werden.

Es muß übrigens nicht openvpn sein, freie Software ist aber definitiv bevorzugt.

Gruß,
  Carsten

  1. Moin!

    Eigentlich ganz einfach?
    Irgendwie wohl doch nicht, die gängigen Beschreibungen gehen alle davon aus, das man letzlich:

    a)den VPN-Tunnelausgang in den NAT(Masquerading)-Router[2] verlegt oder

    b)den Router[2] den openvpn-Port auf den Router[3] forwarden lässt, der den Tunnelausgang bereitstellt.

    Das ist aber gemogelt! Mein Tunnelausgang muß hinter dem Masquerading-Rechner liegen, ohne auf dem irgendwas zu ändern.

    Das funktioniert nicht. Alle VPN-Implementationen gehen davon aus, dass man von beiden Seiten aus jederzeit zur Gegenstelle Kontakt aufnehmen kann, und das erfordert im Falle von NAT zwingend ein Port-Forwarding. Andernfalls könnte die Gegenstelle niemals eine Verbindung zu dir initiiern.

    Was ich bislang über VPN gelesen habe, entspricht dein Setup so im Groben der Variante "Road Warrior", weil deine eine Gegenstelle eine dynamische IP hat. Bedenke, dass DynDNS dir nur einen festen DNS-Namen verschafft, aber keine feste IP. VPN arbeitet aber mit IPs. Diese Road Warrior Konstruktion erfordert aber auch mindestens eine feste Gegenstelle, also feste IP und Erreichbarkeit aus dem Internet.

    Das einzigste, was ich mir bei deiner Konstruktion denken könnte, wäre ein SSH-Tunnel, der von der nicht-forwardbaren Seite her aufgebaut wird zur DynDNS-Gegenstelle. Das ist dann auch verschlüsselt und nicht belauschbar, aber es ist eben auch nicht von beiden Seiten her on demand aufbaubar, sondern erfordert immer, dass die eine Seite den Kontakt herstellt. Aufgrund welcher Veranlassung das geschieht, ist damit ja nicht gesagt.

    - Sven Rautenberg

    1. Hi Sven,

      Das die Verbindung nur von der NAT-Seite aufgebaut werden kann ist (mir) klar und auch mit den Problemen die aus Dyndns/IP-Wechsel enstehen können komme ich zurecht. (Openvpn lässt sich auch mit dynamischen IPs auf beiden Seiten machen, dafür gibt es auf der Openvpn Seite eine Anleitung).

      ...einiges googlen später...

      zumindest habe ich jetzt eine Stelle gefunden wo dieser Fall beschrieben wird, und zwar als funktionierend:
      http://sites.inka.de/sites/bigred/devel/cipe-doc/cipe_5.html#SEC32
      Fall 2-4
      Der Trick ist wohl, das die NAT-Seite die andere anpingt um die Verbindung anzustossen. (Das ist dann (u.a.) bei jedem Wechsel der dynamischen IP nötig).
      Wäre jetzt nur noch schön wenn ich das meinem Openvpn beigebracht kriege, sonst muß ich doch auf CIPE wechseln.

      Gruß,
        Carsten

      1. Hi,

        kurze Erfolgsmeldung:

        wenn man alles richtig macht funktioniert es.

        Es war ein trivialer Fehler in der Konfiguration (flascher Hostname).

        Das openvpn bindet durchaus auf den (fixen) Port an den Router[3], aber da muß nix ankommen.
        Das openvpn auf der NAT Seite 'kennt' die Gegenstelle (--remote mein-rechner.home-ip.de) und versucht dann auch gleich eine Verbindung zu dieser aufzubauen (erfolgreich). Das ist also tatsächlich nix anderes als die 'Roadwarrior'-Konfiguration.
        Der _darf_ also einfach hinter einem Masquerading-Router sitzen.

        Gruß,
          Carsten