Routing

Aus OpenVPN Wiki

Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Kurze Anleitung

Folgender Artikel soll den korrekten Umgang mit dem Begriff "Routing" erleichtern. Bei diesen Ausführungen zum "Routing" handelt es sich um eine komprimierte Einführung in die Thematik. Sie erhebt keinerlei Anspruch auf Vollständigkeit. Ich verweise stattdessen auf einschlägige Literatur, die ich am Ende des Artikels nenne. Der Schwerpunkt dieses Artikels ist VPN (Virtuelles Privates Netzwerk). Also, wie man eine Routing-Tabelle an VPN anpasst. VPN ist zwar ein virtuelles Netzwerk, aber ein Netzwerk! Man sollte mit dem VPN genau so wie mit einem normalen Netzwerk arbeiten. Viel Spaß beim Lesen!

Grundlagen von TCP/IP

TCP/IP ist ein Netzwerkprotokoll und dient der Verbindung von Rechnern in Netzwerken untereinander. Das Internet ist solch ein Netzwerk und besteht aus verschiedenen Teilen, von LAN (wie z.B. Ethernet, Token Ring) bis WAN (wie z.B. NSFNET). In diesem Abschnitt beschreiben wir die Verbindung verschiedener Netze (wie z.B. Verbindung des VPN mit dem „normalen“ Netzwerk). Wir betrachten dazu kurz, wie die IP-Pakete von verschiedenen Anwendungen an einen anderen Rechner im Netzwerk verschickt werden.

Zur Veranschaulichung des Prozesses betrachten wir folgendes Schema:

                   ---------------------------------
                   |      Anwendungsschicht        |
                   |   ... \ | / .... \ | / ...    |
                   |      -------    -------       |
                   |      | TCP |    | UDP |       |
                   |      -------    -------       |
                   |            \    /             |
                   |            ------             |
                   |            | IP |  -------    |
                   |            ----*-  | ARP |    |
                   |                |   -------    |
                   |                |    /         |
                   |                --------       |
                   |                | ENET |       |
                   |                ---@----       |
                   |                   |           |
                   --------------------|------------
                                       |
                                    ---o---------------
                                           Ethernet 1
              
                            				

Eine Anwendung möchte ein Paket an einen anderen Rechner im Netzwerk verschicken. Je nachdem, welche Anwendung, geht das Paket zuerst an TCP-Modul oder UDP-Modul. Diese Module fügen dem Paket die Information zu, von was für einem Typ das Paket ist. Was die Module mit dem Paket genau machen, möchte ich in diesem Artikel nicht beschreiben. Danach wird das Paket zum IP-Modul verschickt. IP-Modul fügt dem Paket die IP-Adresse des Absenders und des Empfängers zu und verschickt das Paket zum ENET-Modul. ENET-Modul sucht mit Hilfe der IP-Adresse die ENET-Adresse (die MAC-Adresse) des Empfängers aus und verschickt das Paket an den Empfänger. Der Empfänger bekommt das Paket und liest die Information, die mit dem Paket gekommen ist: Die IP-Adresse des Absenders, die MAC-Adresse des Absenders, die IP-Adresse des Empfängers , die MAC-Adresse des Empfängers, Typ des Paketes und das eigentliche Paket. Er vergleicht die IP-Adresse des Empfängers mit seiner IP-Adresse (ob er das Paket selber bearbeiten soll oder ob er das Paket weiter schicken soll. Dazu kommen wir später). Und dann bearbeitet er das Paket (oder schickt das Paket weiter). Das war ein kurzer Überblick, wie die IP-Pakete überhaupt im Netzwerk verschickt/empfangen werden. Die Kenntnisse helfen uns zu verstehen, wozu überhaupt eine Routing-Tabelle dient. Falls ein Element mehrere Netzwerkkarten besitzt, sieht das obige Schema ein wenig anders aus. Das Prinzip des Verschickens der Pakete ist aber das selbe:

                   ---------------------------------
                   |      Anwendungsschicht        |
                   |   ... \ | / .... \ | / ...    |
                   |      -------    -------       |
                   |      | TCP |    | UDP |       |
                   |      -------    -------       |
                   |            \    /             |
                   |            ------             |
                   |   -------  | IP |  -------    |
                   |   | ARP |  -*--*-  | ARP |    |
                   |   -------   |  |   -------    |
                   |        \    |  |    /         |
                   |      --------  --------       |
                   |      | ENET |  | ENET |       |
                   |      ---@----  ---@----       |
                   |         |         |           |
                   ----------|---------|------------
                             |         |
                             |      ---o---------------
               --------------o----          Ethernet 2
               Ethernet 1

Ethernet

Jedes ENET-Element (also jede Netzwerkkarte) im Netzwerk „Ethernet“ bekommt vom Hersteller eine ENET-Adresse (so genannte MAC-Adresse). Sie besteht aus 6 byte. z.B. meine Netzwerkkarte hat die MAC-Adresse: 00:30:05:CA:A9:9F. OpenVPN vergibt z.B. einem TAP-Device auch eine (virtuelle) MAC-Adresse. TAP-Device kann man also auch als eine Netzwerkkarte betrachten.

ARP

In diesem Abschnitt wird erklärt, wie aus einem verschickten IP-Paket die zugehörige MAC-Adresse des Empfängers bestimmt wird. Um aus einer IP-Adresse eine MAC-Adresse zu ermitteln wird das "Address Resolution Protocol" (ARP) benutzt. Die Verknüpfung von IP-Adresse und MAC-Adresse geschieht mit Hilfe der ARP-Tabelle. In dieser Tabelle befinden sich alle IP-Adressen von Elementen eines Netzwerkes. Jeder IP-Adresse wird eine MAC-Adresse zugewiesen.

Hier ein Beispiel einer ARP-Tabelle (in der Konsole den Befehl "arp" ausführen):

                          ---------------------------------------------
                          |      IP-Adresse         Ethernet-Adresse  |
                          ---------------------------------------------
                          |     223.1.2.1          08:00:39:00:2F:C3  |
                          |     223.1.2.3          08:00:5A:21:A7:22  |
                          |     223.1.2.4          08:00:10:99:AC:54  |
                          ---------------------------------------------

Eine ARP-Tabelle ist notwendig, weil IP-Adressen frei wählbar sind und MAC-Adressen vom Hersteller der Netzwerkkarten in das ROM der Karten nicht veränderbar "eingebrannt" werden. Es gibt keine bestimmte Methode, keinen bestimmten Algorithmus, um jeder MAC-Adresse eine IP-Adresse zuzuweisen. Wie wird die Tabelle zusammengestellt? ENET-Modul bekommt vom IP-Modul das Paket mit der Information des Empfängers und sucht einen entsprechenden Eintrag in der ARP-Tabelle. Hat ENET-Modul keinen Eintrag für die IP-Adresse des Empfängers gefunden, wird das IP-Paket in eine Warteliste gestellt und ARP sendet an alle Elemente des Netzwerkes die Frage: „Kennt jemand die MAC-Adresse des Elementes mit der IP-Adresse (IP-Adresse des Empfängers)?“ Der Empfänger sieht seine IP-Adresse und meldet zurück: „Ja, ich bin es! Meine MAC-Adresse lautet!“ Zusammen mit der Anfrage verschickt das ARP die IP-Adresse und die MAC-Adresse des Absenders, damit der Empfänger einen entsprechenden Eintrag in seine ARP-Tabelle vornehmen kann. Die MAC-Adresse des Empfängers ist nun bekannt und wird in die ARP-Tabelle eingetragen.

Das Internet Protokoll (IP)

Jetzt kommen wir zum IP-Modul. Der wichtigste Teil des IP-Moduls ist seine Routing-Tabelle. Um die Technik der Verbindung der Elemente eines Netzwerkes zu verstehen, muss man verstehen, wie die Routing Tabelle benutzt wird. Das Wissen ist einfach unabdingbar für die erfolgreiche Administration der Netzwerke. Für das Wort „Routing“ möchte ich ein deutsches Wort dazu benutzen, und zwar „Verkehrslenkung“. Die deutsche Sprache ist für mich nicht die Muttersprache,deshalb fällt es mir ein wenig schwer, Worte aus verschiedenen Sprachen in einem Text zu verwenden. Ich gebe mir aber Mühe.

Beispiel: direkte Verkehrslenkung.

Auf dem Schema unten ist ein einfaches Netzwerk von Elementen „development“ A,B,C abgebildet.

                                A      B      C
                                |      |      |
                  --------------o------o------o------
                   Ethernet 1
                   IP-Netzwerk "development"


Wenn das Element A dem Element B ein Paket schickt, dann enthält der Kopf des Pakets folgende Information: IP-Adresse und die MAC-Adresse des Absenders und die IP-Adresse mit der MAC-Adresse der Empfängers. Das kann man mit Hilfe folgender Tabelle darstellen:

       -----------------------------------------------------
       |         Adresse           Absender     Empfänger  |
       -----------------------------------------------------
       |   IP-Adresse                  A            B      |
       |   MAC-Adresse                 A            B      |
       -----------------------------------------------------


In diesem einfachen Beispiel ist die Verkehrslenkung-Tabelle eigentlich überflüssig. Wenn das IP-Modul des Elements B das Paket bekommt, vergleicht es die IP-Adresse des Empfängers mit seiner eigenen Adresse und ,falls die IP-Adressen übereinstimmen, übergibt es das Paket dem Protokoll oberer Schicht. (z.B. dem TCP oder UDP)

Beispiel: indirekte Verkehrslenkung.

Auf dem Schema unten ist ein Netzwerk aus verschiedenen Netzwerken dargestellt.

                            ----- D -------
          A     B     C     |     |       |     E     F     G
          |     |     |     |     |       |     |     |     |
      ----o-----o-----o-----o--   |     --o-----o-----o-----o---
       Ethernet 1                 |          Ethernet 2
   IP-Netzwerk "development"      |          IP-Netzwerk "accounting"
                                  |
                                  |    H     I     J
                                  |    |     |     |
                                --o----o-----o-----o----------
                                            Ethernet 3
                                            IP-Netzwerk "fuctory"

Der Verbindungsaufbau zwischen den Elementen, die in dem selben Netzwerk sind, haben wir bereits in dem Beispiel oben beschrieben. Das Element D befindet sich quasi in allen drei Netzwerken (Es hat drei verschiedenen Netzwerkkarten und dementsprechend drei verschiedenen IP-Adressen, aber vorsichtig! Es hat nur ein IP-Modul) Die Verbindung zwischen D und z.B. C ist direkt, sowie zwischen D mit E und D mit H. Allerdings die Verbindung zwischen C und E z.B. ist logischerweise indirekt. Wie funktioniert denn dann die Verbindung zwischen zwei Elementen in verschiedenen Netzwerken? Wenn das Element A aus dem Netzwerk „development“ ein Paket dem Element E aus dem Netzwerk „accounting“ schicken möchte, muss es das Paket über das Element D schicken, das eine direkte Verbindung zu sowohl A als auch E hat. Jetzt enthält der Kopf des Pakets im IP-Modul auf A folgende Information: IP-Adresse mit der MAC-Adresse des Elements A, IP-Adresse des Element E und die MAC-Adresse des Elements D (also das Paket muss über D laufen). Das ganze lässt sich mit Hilfe folgender Tabelle darstellen:

       ----------------------------------------------------
       |         Adresse           Absender     Empfänger  |
       -----------------------------------------------------
       |   IP-Adresse                  A            E      |
       |   MAC-Adresse                 A            D      |
       -----------------------------------------------------


Vergleiche dazu die Tabelle bei direkter Verkehrslenkung. Das IP-Modul auf D bekommt das Paket und entscheidet sich, was es mit dem Paket anfangen soll. Dazu vergleicht es die IP-Adresse des Empfängers und stellt fest, dass es nicht seine IP-Adresse ist und verschickt dann das Paket direkt an den Empfänger E. Die Tabelle auf D würde dann so aussehen:

       -----------------------------------------------------
       |         Adresse           Absender     Empfänger  |
       -----------------------------------------------------
       |   IP-Adresse                  A            E      |
       |   MAC-Adresse                 D            E      |
       -----------------------------------------------------


Das war eine ganz einfache Erklärung, wie Elemente aus verschiedenen Netzwerken verbunden werden. Jetzt betrachten wir diese Regeln genauer. Wir haben gesehen, dass das IP-Modul des Absender die Entscheidung treffen soll, wie es das Paket direkt oder indirekt verschicken soll. Die Information findet es in der Verkehrslenkung-Tabelle.

IP-Adresse

IP-Adresse besteht aus 32 bit (4 byte). Sie wird jedem Element des Netzwerkes vom Administrator zugewiesen (statisch oder dynamisch). Es gibt verschiedene Klasse von IP-Adressen:

               0              8         16          24        31
              ---------------------------------------------------
     Klasse A |0| Das Netz   |            Element des Netzes    |
              ---------------------------------------------------
              ---------------------------------------------------
     Klasse B |10|      Das Netz        |   Element des Netzes  |
              ---------------------------------------------------
              ---------------------------------------------------
     Klasse C |110|          Das Netz              | Element d.N|
              ---------------------------------------------------
              ---------------------------------------------------
     Klasse D |1110|            Adresse der Gruppe              |
              ---------------------------------------------------
              ---------------------------------------------------
     Klasse E |11110|           reserviert	                 |
              ---------------------------------------------------
      
      ---------------------------------------------------------
      | Klasse Intervall vom     Mögliche An    Mögliche An    |
      |        ersten byte      zahl der Netze zahl d.Elemente |
      ---------------------------------------------------------
      |   A       1 - 126           126          16777214      |
      |   B       128-191          16382           65534       |
      |   C       192-223         2097150           254        |
      |   D       224-239            -             2**28       |
      |   E       240-247            -             2**27       |
      ---------------------------------------------------------

Sie sehen ja schon das die Klasse C eigentlich ziemlich oft in kleineren Netzwerken benutzt wird. Manche IP-Adresse sind für verschiedene Ziele reserviert und werden nicht verteilt (bzw. passiert das vom Betriebssystem automatisch)

   ------------------------------
   |         überall Null       |  DAS Element
   ------------------------------
   ------------------------------
   |  Das Netz   |überall Null  |  DAS IP-Netzwerk
   ------------------------------
   ------------------------------
   | überall Null|das Element   |  DAS Element im Netzwerk
   ------------------------------
   ------------------------------
   |      überall eins          |  ALLE Elemente im Netzwerk
   ------------------------------
   ------------------------------
   | Das Netz    |überall eins  |  ALLE Elemente in dem bestimmten Netzwerk
   ------------------------------
   ------------------------------
   | 127 | irgendwas, oft eins  |  "Schleife"
   ------------------------------

Die Bedeutung dieser IP-Adresse möchte ich nicht erklären. Sie können ja das im Internet finden.

Jeder IP-Adresse kann man auch einen Namen zuweisen. Für die Menschen ist es leichter mit Namen wie "zimmer107" zu arbeiten, als mit IP-Adressen wie z.B. 192.168.1.107 .

Zurück zu der direkten Verkehrslenkung.

Betrachten wir genauer die direkte Verkehrslenkung am folgenden Beispiel:

              -------------------           -------------------
              |   alpha         |           |    beta         |
              | 223.1.2.1       |           | 223.1.2.2       |
              | Netzwerkkarte 1 |           | Netzwerkkarte 1 |
              -------------------           -------------------
                    |                       |
              ------o-----------------------o-------
                   Ethernet 1
                   IP-Netzwerk "development"   223.1.2


Die Verkehrslenkung-Tabelle sieht auf dem Element alpha folgendermaßen aus:

    ----------------------------------------------------------
    |  Netzwerk      Art der         Anschluss     Nummer der|
    |              Verkehrslenkung              Netzwerkkarte|
    ----------------------------------------------------------
    | development     direkt         <leer>          1       |
    ----------------------------------------------------------

Oder das selbe, aber jetzt nicht unter Verwendung eines Namens des Netzes, sondern der IP-Adresse des Netzes:

    ---------------------------------------------------------
    |  Netzwerk      Art der         Anschluss     Nummer der|
    |              Verkehrslenkung              Netzwerkkarte|
    ----------------------------------------------------------
    | 223.1.2         direkt         <leer>          1       |
    ---------------------------------------------------------

Die Verkehrslenkung-Tabelle besagt dem Element „alpha“: „Du kannst das Netzwerk mit der IP-Adresse 223.1.2 direkt mit deiner Netzwerkkarte Nummer 1 erreichen!“ Das Verschicken eines Paket läuft dann so ab (vergleiche dazu das oben beschrieben Beispiel „direkte Verkehrslenkung“): Das Element „alpha“ mit der IP-Adresse 223.1.2.1 verschickt ein Paket dem Element „beta“ mit der IP-Adresse 223.1.2.2 . Das Paket befindet sich im IP-Modul des Elements alpha und enthält die IP-Adresse des Elements beta. Das IP-Modul schneidet mit Hilfe der Maske des Netzes (255.255.255.0) die IP-Adresse des Elements beta aus und sucht eine entsprechende Zeile in der Verkehrslenkung-Tabelle (also 223.1.2). Falls die Zeile gefunden wurde, wird dann die MAC-Adresse des Elements beta in der ARP-Tabelle gesucht und das Paket wird dann direkt an den Empfänger über die Netzwerkkarte Nummer 1 verschickt.

Zurück zur indirekten Verkehrslenkung.

Und jetzt ein anderes, ein wenig schwierigeres Beispiel:

                            -------------
                            |   delta   |
     -------------          | 223.1.2.4 |         -------------
     |   alpha   |          | 223.1.4.1 |         |  epsilon  |
     | 223.1.2.1 |          | 223.1.3.1 |         | 223.1.3.2 |
     |  if 1     |          | 1   2   3 |         |   if 1    |
     -------------          -------------         -------------
           |                  |   |   |                 |
     ------o------------------o-  |  -o-----------------o---------
      Ethernet 1                  |      Ethernet 2
      IP-Netz "development"       |      IP-Netz "accounting"
               223.1.2            |               223.1.3
                                  |
                                  |    -------------
                                  |    |    iota   |
                                  |    | 223.1.4.2 |
                                  |    |  if 1     |
                                  |    -------------
                                  |          |
                               ---o----------o-------------------
                                      Ethernet 3
                                      IP-Netz "factory"
                                               223.1.4


Die Verkehrslenkung-Tabelle auf dem „alpha“ sieht dann so aus:

    ----------------------------------------------------------
    |  Netzwerk      Art der         Anschluss     Nummer der|
    |              Verkehrslenkung              Netzwerkkarte|
    ----------------------------------------------------------
    | 223.1.2          direkt        <leer>          1       |
    | 223.1.3         indirekt     223.1.2.4        1       |
    | 223.1.4         indirekt     223.1.2.4        1       |
    ----------------------------------------------------------


Diese Verkehrslenkung-Tabelle besagt dem Element „alpha“: „Du kannst das Netzwerk 223.1.2 direkt mit deiner Netzwerkkarte Nummer 1 erreichen. Das Netzwerk 223.1.3 erreichst du aber indirekt über Anschluss (gateway) 223.1.2.4 mit deiner Netzwerkkarte Nummer 1. Das Netzwerk 223.1.4 ist auch indirekt über Anschluss (gateway) 223.1.2.4 mit deiner Netzwerkkarte Nummer 1 zu erreichen. Das Verschicken der Pakete läuft dann so ab (vergleiche dazu das oben beschriebe Beispiel „indirekte Verkehrslenkung“): Das Element „alpha“ mit der IP-Adresse 223.1.2.1 verschickt ein Paket dem Element „epsilon“ mit der IP-Adresse 223.1.3.2. Das IP-Paket befindet sich noch im IP-Modul und enthält die IP-Adresse vom Element „epsilon“. IP-Modul schneidet die IP-Adresse des Netzes des Empfängers „epsilon“ mit Hilfe der Maske des Netzes (255.255.255.0) aus und sucht dann entsprechende Zeile in der Verkehrslenkung-Tabelle. Also die Zeile: „Du erreichst das Netz mit der IP-Adresse 223.1.3 indirekt über Anschluss (gateway) 223.1.2.4 mit deiner Netzwerkkarte Nummer 1“. In der ARP-Tabelle wird dann die MAC-Adresse des Element „delta“ mit der IP-Adresse 223.1.2.4 gesucht. Wird die MAC-Adresse gefunden, wird dann das Paket verschickt. Das Paket enthält jetzt die IP-Adresse mit der MAC-Adresse des Elements „alpha“ und die IP-Adresse des Elements „epsilon“ mit der MAC-Adresse des Elements „delta“. Element „delta“ bekommt das Paket vom Element „alpha“ und stellt fest, dass es nicht seiner IP-Adresse ist und trifft die Entscheidung das Paket an ein Element (es weiß noch nicht an welches) mit der IP-Adresse 223.1.3.2 weiter zu leiten. Mit der Maske des Netzes schneidet er die IP-Adresse des Netzes, also 223.1.3, und sucht eine entsprechende Zeile in der Verkehrslenkung-Tabelle. Die Tabelle bei ihm sieh so aus:

    ----------------------------------------------------------
    |  Netzwerk      Art der         Anschluss     Nummer der|
    |              Verkehrslenkung              Netzwerkkarte|
    ----------------------------------------------------------
    | 223.1.2         direkt         <leer>          1       |
    | 223.1.3	       direkt 	      <leer>          2	      |
    | 223.1.4	       direkt         <leer>          3	      |
    ----------------------------------------------------------

Also, die Elemente im Netzwerk 223.1.3 sind direkt mit der Netzwerkkarte Nummer 2 zu erreichen. Dann sucht es eine entsprechende Zeile in der ARP-Tabelle aus und verschickt das Paket an das Element (er weiß bereits an welches Element) mit der IP-Adresse 223.1.3.2.

Änderung der Verkehrslenkung-Tabelle:

Und jetzt mit unserem Wissen über das Verbinden verschiedener Netzwerke kommen wir zu unserem eigentlichen Ziel: Anpassen der Verkehrslenkung-Tabelle an VPN-Netzwerk. Es ist jetzt für uns überhaupt kein Problem dies zu erledigen. Die Änderung der Verkehrslenkung-Tabelle wird mit folgenden Befehlen durchgeführt: Unter Linux:

route add -net 192.168.1.0 netmask 255.255.255.0 gw 218.1.31.186 dev eth0 metric 1

Unter Windows glaube ich, muss man noch -p dazu schreiben.

route -p ADD 192.168.1.0 MASK 255.255.255.0 218.1.31.186 if 1 metric 1

Wobei, 192.168.1.0 die IP-Adresse des Netzwerkes, 255.255.255.0 die Maske des Netzwerkes (wir wissen schon, wozu die benötigt wird) und 218.1.31.186 die IP-Adresse des Anschlusses (gateway), eth0 der Name der Netzwerkkarte und metric bedeutet die Anzahl der Anschlüsse zwischen den Elementen..(also wenn es dazwischen mehrere Routers oder Rechner gibt)

Erstes Beispiel für OpenVPN:

Es soll folgendes Netz aufgebaut werden:


„OpenVPN“ IP-Netz: 10.0.0.0/24

          --------- o --------------------- o --------
         10.0.0.2   |            10.0.0.1   |             
              -------------           -------------       ------------
              |   alpha   |           |    beta   |       |   delta  |
              | 223.1.2.1 |           | 223.1.2.2 |       | 223.1.2.3|
              |     1     |           |     1     |       |     1    | 
              |TAP Device |           |TAP Device |       |          |
              ------o------           ------o------       ------o------
                    |                       |                   |
              ------o-----------------------o------------------ o ------------
                                               „Ethernet“, IP-Netz: 223.1.2.0/24
     223.1.2.0/24 bedeutet das IP-Netz 223.1.2.0 mit der Maske des Netzes 255.255.255.0.

Also, es gibt drei Rechner in einem Netzwerk mit der IP-Adresse 223.1.2.0/24 . Zwei davon müssen VPN-getunnelt werden. Unser Ziel ist es z.B. das Netzwerk so einzurichten, dass die Pakete vom Element „delta“ an das Element „alpha“ über das Element „beta“ verschlüsselt transportiert werden.(Die Daten bis zum „beta“ müssen z.B. nicht verschlüsselt sein). Element „beta“ sei in diesem Beispiel der OpenVPN-Server. „beta“ übernimmt dann im VP-Netzwerk quasi die Rolle eines DHCP-Server, der IP-Adresse an seinen Klienten vergibt. Der Server selbst bekommt dann eine VPN-IP-Adresse 10.0.0.1 und das Element „alpha“ 10.0.0.2. Dazu wird noch bei der Installation von OpenVPN auf beiden Elementen „alpha“ und „beta“ jeweils quasi eine virtuelle Netzwerkkarte „TAP Device“ erstellt. Die virtuelle Netzwerkkarte hat seine eigene virtuelle MAC-Adresse. So z.B. sieht die ARP-Tabelle auf dem Element „alpha“:


           ---------------------------------------------
           |      IP-Adresse         Ethernet-Adresse  |
           ---------------------------------------------
           |     223.1.2.1          08:00:39:00:2F:C3  |
           |     223.1.2.2          08:00:5A:21:A7:22  |
           |     223.1.2.3          08:00:10:99:AC:54  |
           |     10.0.0.1           08:FF:FF:99:AD:A7  |
           |     10.0.0.2           08:FC:FD:99:A7:00  | 
           ---------------------------------------------

Jetzt überlegen wir uns wie die Verkehrslenkung-Tabelle auf dem Element „alpha“ aussehen soll. Dazu vergleiche oben beschriebene Beispiele. Falls sie das gelesen haben und verstanden haben, sollte es überhaupt kein Problem sein. Und so müsste die Verkehrslenkung-Tabelle auf dem Element „alpha“ aussehen, um unser Ziel zu erreichen:

    ---------------------------------------------------------
    |  Netzwerk      Art der         Anschluss     Nummer der|
    |              Verkehrslenkung              Netzwerkkarte|
    ----------------------------------------------------------
    | 223.1.2         direkt         <leer>          1       |
    | 10.0.0          direkt         <leer>       TAP Device |
    ----------------------------------------------------------

So eine Tabelle wird von OpenVPN automatisch erzeugt. Und es muss also nichts geändert werden. Das einzige, was geändert werden muss, ist die Verkehrslenkung-Tabelle auf dem Element „delta“. Denn OpenVPN gibt nicht die VPN-IP-Adresse so einfach frei! Das ist das gute ja daran. Aber wir bräuchten trotzdem, dass „delta“ das VP-Netzwerk der beiden Elementen sieht. Also, die Verkehrslenkung-Tabelle sollte auf dem „delta“ so ausschauen:

    ----------------------------------------------------------
    |  Netzwerk      Art der         Anschluss     Nummer der|
    |              Verkehrslenkung              Netzwerkkarte|
    ----------------------------------------------------------
    | 223.1.2         direkt         <leer>          1       |
    | 10.0.0         indirekt       223.1.2.2        1       |
    ----------------------------------------------------------

Momentan sieht unsere Tabelle so aus:

    ----------------------------------------------------------
    |  Netzwerk      Art der         Anschluss     Nummer der|
    |              Verkehrslenkung              Netzwerkkarte|
    ----------------------------------------------------------
    | 223.1.2         direkt         <leer>          1       |
    ----------------------------------------------------------

Mit dem Befehl: route add -net 10.0.0.0 netmask 255.255.255.0 gw 223.1.2.2 dev 1 metric 1

und jetzt ping 10.0.0.1 und ping 10.0.0.2 sollen funktionieren.

In entgegengesetzte Richtung: „alpha“ sollte an „delta“ über „beta“ Pakete senden. Dann muss in der Verkehrslenkung-Tabelle vom „alpha“ folgende Zeile geändert werden:

    ----------------------------------------------------------
    |  Netzwerk      Art der         Anschluss     Nummer der|
    |              Verkehrslenkung              Netzwerkkarte|
    ----------------------------------------------------------
    | 223.1.2         indirekt       10.0.0.1        1       |
    | 10.0.0          direkt         <leer>       TAP Device |
    ----------------------------------------------------------

Und dann verschickt das Element „beta“ die Pakete ins „normale“ Netz über den OpenVPN-Server. ACHTUNG: Auf dem OpenVPN-Server muss dazu noch IP-Forwarding aktiviert sein. Manche benutzen die Begriffe „IP-Forwarding“ und „IP-Routing“ als Synonyme, was generell falsch ist. IP-Forwarding ist ein anderes Thema für einen anderen Artikel.

An dieser Stelle möchte ich ein anderes Beispiel für VPN-Verbindungen beschreiben. Bevor ich damit anfange, möchte ich Ihnen erklären, welches Schema ich für unterschiedliche Netzwerke benutze:


Aufbauschema

Beim Aufbau solcher (komplizierten) Netzwerke benutze ich folgendes Schema:


1.

Auf einem Zettel Papier zeichne ich den Aufbau des Netzes, so wie ich das oben schon mal gemacht habe.

2.

Danach schreibe ich punktweise das benötigte Szenario für das Netzwerk auf. z.B. :Also, es gibt drei Rechner in einem Netzwerk mit der IP-Adresse 223.1.2.0/24 . Zwei davon müssen VPN-getunnelt werden. Unser Ziel ist es z.B. das Netzwerk so einzurichten, dass die Pakete vom Element „delta“ an das Element „alpha“ über das Element „beta“ verschlüsselt transportiert werden.(Die Daten bis zum „beta“ müssen z.B. nicht verschlüsselt sein).

3.

Nachdem ich das Szenario im Kopf durchgearbeitet habe, zeichne ich ARP-Tabellen und Verkehrslenkung-Tabellen für jedes Element (aber wirklich für jedes Element des Netzwerkes, es sei denn, natürlich, dass Netzwerk besteht aus 100 Elementen oder so. In dem Fall bestimme ich die Elemente, die im gleichen Netzwerk sind und auf gleiche weise erreichbar sein sollten. Dann nehme ich eins davon und zeichne für dieses Element die Tabellen. Die Tabelle für die anderen Elementen werden, dann fast gleich aussehen) Die gezeichneten Tabellen sind jetzt quasi im „SOLL-Zustand“ gezeichnet worden.

4.

Ich ermittle die „IST-Tabellen“ auf den Elementen und vergleiche mit den „SOLL-Tabellen“ und ändere dann die „IST-Tabellen“ mit entsprechenden Befehlen zu „SOLL-Tabellen“


Zweites Beispiel für OpenVPN:

1. Schritt: Zeichnung des Aufbaus des Netzes:

              -------------           ------------        -----------
              |   alpha   |           |    beta   |       |   delta  |
              | 223.1.2.1 |           | 223.1.2.2 |       | 223.1.2.3|
              | 223.1.3.1 |           |           |       |          | 
              |  1 und 2  |           |     1     |       |     1    | 
              |TAP Device |           |           |       |          |
              ------------            -------------        -----------
          10.0.0.1  |   |                    |			 |
                    o   o--------------------o----------------- o ------------
                    |   | 				„Ethernet 1“ IP-Netz: 223.1.2.0
                    |   |
                    |   |  <---  „Ethernet 2“ IP-Netz: 223.1.3.0
                    |   |
                    |   |
           ---------o   o--------------
                    |   | <---  „Ethernet 2“ IP-Netz: 223.1.3.2
       -------------o---o-
       |    notebook     |
       |  223.1.3.2      |
       |      1          |
       |      TAP Device |
       -------------------		


2. Schritt: das benötigte Szenario aufschreiben: Wir haben ein Netzwerk aus n Rechnern (in unserem Beispiel sind es drei. Lässt sich aber auf n mal erweitern. Das Prinzip ist aber das selbe). Das Netzwerk hat den Namen „Ethernet 1“ mit der IP des Netzes 223.1.2.0/24. Zu einem Rechner wird ein anderer Rechner mit Hilfe der zweiten Netzwerkkarte angeschlossen. (z.B. ein Laptop über Wireless LAN zum Rechner „alpha“). Das entstandene Netzwerk heißt „Ethernet 2“ und hat z.B. die IP des Netzes 223.1.3.0/24. Die Verbindung (notebook -> alpha) soll mit OpenVPN gesichert sein, so dass jedes Element im Netzwerk „Ethernet 1“ für das Element „notebook“ erreichbar sein soll. Das heißt, wenn das Element „notebook“ ein Paket an das Element „beta“ schicken möchte, sollte dann das zu versendende Paket zu „alpha“ verschlüsselt verschickt und dann an „beta“ weitergeleitet werden. Und in die entgegengesetzte Richtung („beta“ -> „notebook“) sollte es auch auf die selbe Weise funktionieren.

3. Schritt: Verkehrslenkung-Tabellen im „SOLL-Zustand“ Die Verkehrslenkung-Tabelle auf dem Element „notebook“ sollte für unsere Anforderungen folgendermaßen aussehen:

    ----------------------------------------------------------
    |  Netzwerk      Art der         Anschluss     Nummer der|
    |              Verkehrslenkung              Netzwerkkarte|
    ----------------------------------------------------------
    | 223.1.3         direkt         <leer>          1       |
    | 223.1.2         indirekt       10.0.0.1     TAP Device |
    | 10.0.0.0        direkt         <leer>       TAP Device |
    ----------------------------------------------------------

Die Verkehrslenkung-Tabelle auf dem Element „alpha“ sollte für unsere Anforderungen folgendermaßen aussehen:

    ----------------------------------------------------------
    |  Netzwerk      Art der         Anschluss     Nummer der|
    |              Verkehrslenkung              Netzwerkkarte|
    ----------------------------------------------------------
    | 223.1.2         direkt         <leer>          1       |
    | 223.1.3         direkt         <leer>          2       |
    | 10.0.0.0        direkt         <leer>       TAP Device |
    ----------------------------------------------------------

Die Verkehrslenkung-Tabelle auf dem Element „beta“ (sowie auf jedem weiteren Element im Netzwerk „Ethernet 1“) sollte für unsere Anforderungen folgendermaßen aussehen:

    ----------------------------------------------------------
    |  Netzwerk      Art der         Anschluss     Nummer der|
    |              Verkehrslenkung              Netzwerkkarte|
    ----------------------------------------------------------
    | 223.1.2         direkt         <leer>          1       |
    | 223.1.3         indirekt       223.1.2.1       1       |
    | 10.0.0.0        indirekt       223.1.2.1       1       |
    ----------------------------------------------------------

Kurze Beschreibung der Funktionsweise: Das Element „notebook“ möchte ein Paket an das Element „beta“ schicken. Das Paket befindet sich noch im IP-Modul des Elements „notebook“ und enthält die IP-Adresse (223.1.2.2) des Elements „beta“. Mit Hilfe der Maske des Netzes (255.255.255.0) scheidet das IP-Modul die IP-Adresse des Netzes aus und sucht eine entsprechende Zeile in der Verkehrslenkung-Tabelle. IP-Modul findet dann raus, dass das Pakete an 223.1.2.2 über das Element „alpha“ mit der IP-Adresse 10.0.0.1 verschickt werden kann. (Den Schritt mir der ARP-Tabelle lasse ich raus) Danach wird das Paket mit der Information verschickt: Die Information des Absenders, die IP-Adresse des Empfängers (223.1.2.2) und die MAC-Adresse des Elements „alpha“ (die MAC-Adresse vom TAP Device des Elements „alpha“ natürlich). Das Element „alpha“ bekommt das Paket und vergleicht die IP-Adresse des Empfängers mit seiner eigenen und stellt fest, dass es nicht seine IP-Adresse ist und leitet das Paket an den Empfänger weiter. Unser eigentliche Ziel (dass die Daten vom „notebook“ zu „alpha“ verschlüsselt geschickt werden) wird durch die Zeile „223.1.2.0 indirekt 10.0.0.1 TAP Device“ erreicht. Die Daten an ein Element aus „Ethernet 1“ werden nicht über die IP-Adresse vom „alpha“ 223.1.3.1 verschickt. (Die Daten wären dann unverschlüsselt)

4. Schritt : „SOLL-Zustand“ und „IST-Zustand“ der Tabellen. Nachdem wir die Verkehrslenkung-Tabelle im „SOLL-Zustand“ aufgeschrieben haben, vergleichen wir dann unsere Tabelle mit tatsächlichen Tabellen auf den Elementen „notebook“, „alpha“, „beta“ (sowie auf jedem anderen Element des Netzwerkes „Ethernet 1“) und ändern die „IST-Tabelle“ zu „SOLL-Tabellen“ (mit dem Befehl route) Denken Sie bitte an IP-Forwarding, Firewall, Router usw.

Drittes Beispiel für OpenVPN:

Ein weiteres Beispiel beschreibt eine VPN-getunnelte Verbindung zwischen zwei Netzwerken. Ich benutze dazu das oben beschriebene Schema.

1. Schritt: Zeichnung des Aufbaus des Netzes:

              -------------           ------------        -----------
              |   alpha   |           |    beta   |       |   delta  |
              | 223.1.2.1 |           | 223.1.2.2 |       | 223.1.2.3|
              | 223.1.3.1 |           |           |       |          | 
              |  1 und 2  |           |     1     |       |     1    | 
              |TAP Device |           |           |       |          |
              ------------            -------------        -----------
          10.0.0.1  |   |                    |			 |
                    o   o--------------------o----------------- o ------------
                    |   | 				„Ethernet 1“ IP-Netz: 223.1.2.0/24
                    |   |
                    |   |  <---  „Ethernet 3“ IP-Netz: 223.1.3.0
                    |   |         „OpenVPN“ 10.0.0.0/24
                    |   |
                    |   |
                    |   |                                                      „Ethernet 2“ 223.1.4.0/24
           ---------o   o--------------o---------------------------o---------------------------
            10.0.0.2|   |              |                           |
       -------------o---o-      -----------------            --------------
       |    epsilon      |      |     gamma      |           |    omega    |
       |  223.1.3.2      |      |  223.1.4.2     |           |  223.1.4.3  |
       |  223.1.4.1      |      |        1       |           |      1      |
       |      1 und 2    |      |                |           |             |
       |      TAP Device |      |                |           |             |
       -------------------      ------------------           ---------------


2. Schritt: das benötigte Szenario aufschreiben: Vorhanden sind zwei Netzwerke: „Ethernet 2“ mit der IP-Adresse 223.1.4.0/24 und „Ethernet 1“ 223.1.2.0/24. (Die Netzwerke können aus n Elementen bestehen. Bei diesem Beispiel aber jeweils 3 Elemente). Unser Ziel, die Netzwerke über „alpha“ und „epsilon“, die ja zwei Netzwerkkarten haben, zu verbinden. Die Verbindung muss auch VPN-getunnelt sein, so dass die Pakete von delta zu omega zuerst zu „alpha“ (unverschlüsselt) kommen, dann zu „epsilon“ (verschlüsselt) und dann zu „omega“ (unverschlüsselt).

3. Schritt: Verkehrslenkung-Tabellen im „SOLL-Zustand“

Die Verkehrslenkung-Tabelle auf dem Element „alpha“ (alpha ist OpenVPN-Server) sollte für unsere Anforderungen folgendermaßen aussehen:

    ---------------------------------------------------------
    |  Netzwerk      Art der         Anschluss     Nummer der|
    |              Verkehrslenkung              Netzwerkkarte|
    ----------------------------------------------------------
    | 223.1.2.0        direkt         <leer>          1      |
    | 223.1.3.0        direkt         <leer>          2      |
    |  10.0.0.0        direkt         <leer>     TAP Device  |
    | 223.1.4.0        indirekt      10.0.0.2    TAP Device  |
    ----------------------------------------------------------


Die Verkehrslenkung-Tabelle auf dem Element „epsilon“ (OpenVPN-Client) sollte für unsere Anforderungen folgendermaßen aussehen:

    ----------------------------------------------------------
    |  Netzwerk      Art der         Anschluss     Nummer der|
    |              Verkehrslenkung              Netzwerkkarte|
    ----------------------------------------------------------
    | 223.1.4.0      direkt           <leer>           1     |
    | 223.1.3.0      direkt           <leer>           2     |
    | 10.0.0.0       direkt           <leer>      TAP Device |
    | 223.1.2.0      indirekt         10.0.0.1    TAP Device |
    ----------------------------------------------------------

Die Verkehrslenkung-Tabelle auf dem Element „beta“ (sowie auf jedem Element im Netzwerk „Ethernet 1“) sollte für unsere Anforderungen folgendermaßen aussehen:

    ----------------------------------------------------------
    |  Netzwerk      Art der         Anschluss     Nummer der|
    |              Verkehrslenkung              Netzwerkkarte|
    ----------------------------------------------------------
    | 223.1.2.0       direkt          <leer>           1     |
    | 223.1.3.0       indirekt        223.1.2.1        1     |
    | 223.1.4.0       indirekt        223.1.2.1        1     |
    ----------------------------------------------------------

Die Verkehrslenkung-Tabelle auf dem Element „gamma“ (sowie auf jedem Element im Netzwerk „Ethernet 2“) sollte für unsere Anforderungen folgendermaßen aussehen:


    ----------------------------------------------------------
    |  Netzwerk      Art der         Anschluss     Nummer der|
    |              Verkehrslenkung              Netzwerkkarte|
    ----------------------------------------------------------
    | 223.1.4.0      direkt            <leer>          1     |
    | 223.1.3.0      indirekt          223.1.4.1       1     |
    | 223.1.2.0      indirekt          223.1.4.1       1     |
    ----------------------------------------------------------


Kurze Anmerkung: Das Gute daran ist, dass die Elemente in den beiden Netzwerken (außer natürlich den Elementen, die die beiden Netzwerken verbinden) müssen nicht unbedingt wissen, dass es ein Netz mit der IP-Adresse 10.0.0.0/24 gibt.

4. Schritt: „SOLL-Zustand“ und „IST-Zustand“ der Tabellen. Jetzt vergleichen wir unsere SOLL-Tabellen mit den tatsächlichen Verkehrslenkung-Tabelle auf allen Elementen in beiden Netzwerken und ändern die Tabelle zu „SOLL-Tabelle“ Und wie immer, denken Sie bitte an IP-Forwarding, Firewall, Router und andere Sachen, die im Wege stehen.

Fazit

Hiermit habe ich die meisten Fälle beschrieben, wo OpenVPN eingesetzt wird. Ihre Netzwerke können aber auch anders aufgebaut sein. Wer diesen Artikel von Anfang bis zum Ende gelesen hat und wer die Theorie verstanden hat, muss jetzt jedes Netzwerk problemlos an seine Anforderungen anpassen können.

Bei OpenVPN besteht noch eine Möglichkeit alle Verkehrslenkung-Tabellen der OpenVPN-Klienten mit einer Zeile zu ändern. Also, in der Configdatei vom Server entsprechende 'push' Anweisungen für die Klienten und 'route'-Anweisungen für den Server. Diese 'push' , 'route'-Anweisungen sind sehr praktisch wenn sie einen Server mit 100 Klienten haben. Dann müssen Sie nicht auf jedem Klient die Verkehrslenkung-Tabelle ändern. Das macht für Sie der OpenVPN-Server. Dazu muss in die Client-Config der pull Befehl !


Wer sich in das Thema „TCP/IP“ vertiefen möchte, würde ich das Buch „TCP/IP Grundlagen von Gerhard Lienemann“ empfehlen. Ein sehr gelungenes Buch!

Ich wünsche Ihnen viel Erfolg bei Ihren Netzwerken. Falls Sie Fragen haben, stehe ich gerne zur Verfügung oder wenden Sie sich zu Onkel "google".

Persönliche Werkzeuge