Raspberry Pi: OpenVPN-Routingproblem

  • Hallo, ich möchte gerne meinen Raspberry Pi zu einem OpenVPN-Router im lokalen Netzwerk machen. Das heißt, dass mein Desktop-Rechner die lokale IP-Adresse des Raspberry Pi als Gateway zugewiesen bekommt. Diese Verbindung funktioniert auch bereits. Der Raspberry Pi hat das IP-Forwarding aktiviert und leitet den Traffic auch ganz normal weiter. Wenn ich auf dem Raspberry Pi den OpenVPN-Service starte, so dass er automatisch die Routingtabellen ändert und jeglichen Traffic (auch lokal vom Pi selbst) über das tun0-Interface routet, dann funktioniert das auch prima vom Desktop-PC, sofern ich eine bestimmte IPTables-Regel auf dem Pi gesetzt habe.


    Code
    iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE


    Ich möchte es aber etwas spezieller:
    Ich habe die systemd-Konfigurationsdatei für den OpenVPN-Service so angepasst, dass die Option --route-noexec mit angegeben wird. Das bedeutet, dass der OpenVPN-Service beim Start die Routingtabellen nicht mehr anfasst und nur zusätzlich das Interface tun0 auftaucht, ohne dass irgendetwas von irgendwo automatisch über tun0 geroutet wird. Und ich möchte jetzt, dass jeglicher eingehender Datenverkehr am Raspberry Pi aus dem internen Netzwerk mit IPTables über das tun0-Interface geroutet wird (der Traffic vom Pi selbst, also wenn ich per SSH auf dem Pi bin und ein curl google.com mache, soll natürlich weiterhin über eth0 rausgehen; ich möchte nämlich später die IPTables-Regeln so anpassen, dass SSH-Verbindungen vom Desktop-Rechner ins Internet über eth0 gehen).


    Aber genau das ist das Problem: Ich habe hunderte Beispiele ausprobiert aber es hat einfach keinen Effekt. Der Desktop-Rechner kommt weiterhin über den Raspberry Pi ins Internet aber lediglich über eth0 mit der normalen IP-Adresse vom ISP. Es funktioniert einfach nicht, dass der Raspberry Pi den eingehenden Traffic, den er weiterleiten soll, über das tun0-Interface schickt. Im Folgenden ein paar detaillierte Informationen:


    [Raspberry Pi]

    Code
    Lokale IPv4: 192.168.0.200


    [Desktop-Rechner]

    Code
    Lokale IPv4: 192.168.0.100
    Gateway: 192.168.0.200 (<- Raspberry Pi; Verbindung an sich funktioniert!)


    [Routingtabelle auf dem Raspberry Pi]

    Code
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 eth0
    0.0.0.0         192.168.0.1     0.0.0.0         UG    202    0        0 eth0
    10.114.0.0      0.0.0.0         255.255.0.0     U     0      0        0 tun0
    192.168.0.0     0.0.0.0         255.255.255.0   U     202    0        0 eth0
    192.168.0.0     0.0.0.0         255.255.252.0   U     0      0        0 eth0


    Falls ihr weitere Informationen benötigt, teilt mir dies bitte mit. Ich hoffe, dass ihr mir vielleicht helfen könnt und ich vielleicht irgendetwas total vergessen habe.

  • So ganz verstanden habe ich das noch nicht. Mal eine andere Frage: Was genau bezweckst Du damit?


    Was soll wann/wie/wo empfangen werden und wie/wo ankommen? Im Moment bin ich etwas verwirrt… :)



    MfG Christian

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Hallo, okay, ich versuche es noch einmal zu erklären:


    Der Raspberry Pi soll als Gateway für alle Rechner im lokalen Netzwerk dienen. Also alle Rechner im lokalen Netzwerk sollen als Gateway die IP-Adresse des Raspberry Pi bekommen. Der Raspberry Pi soll jetzt folgende Aufgabe übernehmen: Er soll hingehen und den Datenverkehr von den lokalen Rechnern über sein VPN-Interface tun0 routen. An sich funktioniert das ganze wenn ich die Option --route-noexec weglasse, so dass er die Routingtabelle auf dem Pi ändert und sowieso alles über tun0 rausgeht. Ich möchte aber später, wenn das so funktioniert, wie ich es mir vorstelle, auch hingehen können und beim Pi sagen können:


    Wenn hier ein Client eine SSH-Verbindung ins Internet aufbauen will dann tunnel das bitte nicht über den VPN sondern schicke das über eth0 raus.


    Das Problem ist nur: Da ich die Option --route-noexec angegeben habe, verändert der Pi seine Routingtabelle nicht mehr und schickt den Datenverkehr weiterhin über eth0 raus. Und das soll eben nicht so sein: Der Traffic aus dem Netzwerk (von den Rechnern, die den Pi als Gateway benutzen) soll über das VPN-Interface rausgehen (und wenn das erst einmal funktioniert dann möchte ich noch eine Regel haben, die eben besagt, dass SSH-Verbindungen auf Port XY ebenfalls direkt ins Internet dürfen, ohne VPN).


    Der Pi soll das Ganze managen. Hast du es jetzt verstanden? :)