Tipps & Tricks: OpenVPN auf dd-wrt Router

Discussion in 'Router' started by Loreas, Jun 6, 2015.

Tags:
  1. Loreas

    Loreas Member

    Inhalt:
    1. OpenVPN Setup
    2. Durchleiten einer einzelnen IP ohne OpenVPN

    3. USB-Stick als Cert-Speicher verwenden
    4. Einkaufs-Guide
    5. Sonstiges...

    Einleitend zum Thema dd-wrt will ich sagen, dass man unter ftp://ftp.dd-wrt.com/betas/ die aktuellste Firmware bekommt. Es gibt auch ein dd-wrt Wiki und eine dd-wrt Datenbank. Beide sind leider total veraltet.
    Wenn ihr die aktuellste dd-wrt Version haben wollt, bitte den ftp-Link verwenden.

    1. OpenVPN Setup

    1. Download the Config-Files for Android/iOS
    2. Everything we need is in the .ovpn file. Choose your server.

    3. Go to the dd-wrt Webinerface:

    Setup
    Basic Setup
    WAN-Connection Type
    Automatic Setup - DHCP

    Router IP

    Lokal IP: 192.168.1.1
    Network Mask: 255.255.255.0
    Gateway: 0.0.0.0
    Lokal DNS: 0.0.0.0

    Network Address Server Settings (DHCP)

    DHCP Type: DHCP Server
    DHCP Server: activate
    For static DNS 1/2/3 choose one of those DNS provided by OpenNIC https://www.opennicproject.org/
    and put them in into Static DNS 1, 2 & 3
    Not recommended but can be also a Google DNS 8.8.8.8 & 8.8.4.4

    untick Use DNSMasq for DHC
    untick Use DNSMasq for DNS
    untick DHCP-Authoritative

    Clock Setup
    NTP-Client: activate
    Time Zone: "your time zone"
    Server-IP/Name: de.pool.ntp.org
    and Save
    Setup
    IPv6
    IPv6-Support
    IPv6: enable
    Radvd: enable
    and Save
    Services
    VPN
    OpenVPN-Client:

    Start OpenVPN -> Enable
    Server IP/Name: xxx.perfect-privacy.com
    Port: 1149 (UDP)
    Tunnel Device: TUN
    Tunnel Protocol: UDP
    Encryption Cipher: AES-256 CBC
    Hash Algorithm: SHA512
    User Pass Authentication -> Enable
    Username: your username
    Password: your password
    Advanced Options -> Enable
    TLS Cipher: None (will be edited in "Additional Config")
    LZO Compression: Adaptive
    NAT -> enable
    MTU: 1500
    UDP Fragment: 1300
    Tunnel UDP MSS-Fix: Disable
    nsCertType verification: enable
    Open the .ovpn-File with a text-editor
    copy the content
    TLS Auth Key (in the .ovpn-file: <tls-auth> )
    #
    # 2048 bit OpenVPN static key
    #
    -----BEGIN OpenVPN Static key V1-----
    -----END OpenVPN Static key V1-----
    Additional Config:​
    Code:
    redirect-gateway def1
    reneg-sec 86400
    mssfix
    float
    persist-remote-ip
    route-method exe
    tls-cipher DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-CAMELLIA256-SHA:DHE-RSA-AES256-SHA:DHE-RSA-CAMELLIA128-SHA:DHE-RSA-AES128-SHA
    route-delay 2
    tls-timeout 5
    hand-window 120
    inactive 604800
    ping 5
    ping-restart 90
    replay-window 512 60
    mute-replay-warnings
    
    CA Cert (in the .ovpn-file: <ca> )
    copy from .ovpn-file
    -----BEGIN CERTIFICATE-----
    -----END CERTIFICATE-----​
    Public Client Cert (in the .ovpn-file: <cert> )
    copy from .ovpn-file
    -----BEGIN CERTIFICATE-----
    -----END CERTIFICATE-----​
    Private Client Key (in the .ovpn-file: <key> )
    copy from .ovpn-file
    -----BEGIN RSA PRIVATE KEY-----
    -----END RSA PRIVATE KEY-----​
    Save Settings

    Go to
    Administation
    Commands
    First of all run that command in the shell:
    Code:
    ifconfig
    If you have tun0, you have to edit the firewall command down under.
    In my case i have tun1.

    Paste this into your Command Shell:
    Code:
    iptables -P FORWARD DROP
    iptables -I FORWARD -i br0 -o tun1 -j ACCEPT
    iptables -I FORWARD -i tun1 -o br0 -j ACCEPT
    iptables -I FORWARD -i br0 -o vlan2 -j DROP
    iptables -I INPUT -i tun1 -j DROP
    iptables -t nat -A POSTROUTING -o tun1 -j MASQUERADE
    
    and press the "Save Firewall" button.

    Paste this into your Command Shell:
    Code:
    #!/bin/sh
    /usr/sbin/openvpn --config /tmp/openvpncl/openvpn.conf --route-up /tmp/openvpncl/route-up.sh --down-pre /tmp/openvpncl/route-down.sh --daemon
    and press the "Save Startup Script" button.
    Finally go to:
    Administration
    Management
    and press the "Reboot Router" button.
    Finished...

    2. Das Durchleiten bestimmter IPs ohne VPN

    Dort wo die "Additional config" eingegeben wird ist ein Kästchen darunter, wo "Policy Based Routing" bzw. "Richtlinienbasiertes Routen" steht.

    View attachment 153

    Dieses Kästchen kann man mit allen internen IPs füttern, die sich über VPN verbinden sollen. (eine IP pro Zeile)

    IPs, die ohne VPN rausgehen sollen, müsst ihr natürlich in der Firewall auch eintragen.

    Code:
    iptables -P FORWARD DROP
    iptables -I FORWARD -i br0 -o tun1 -j ACCEPT
    iptables -I FORWARD -i tun1 -o br0 -j ACCEPT
    iptables -I FORWARD -i br0 -o vlan2 -j DROP
    iptables -I FORWARD -i br0 -s 192.168.1.xyz -j ACCEPT
    iptables -I FORWARD -o br0 -d 192.168.1.xyz -j ACCEPT
    iptables -I INPUT -i tun1 -j DROP
    iptables -t nat -A POSTROUTING -o tun1 -j MASQUERADE

    Tipp: Wenn man über einen USB-Steckplatz am Router verfügt, kann man diesen als Speicher nutzen.Vorausgesetzt eure dd-wrt Version bzw. Version für den Router verfügt über USB-Speicherunterstützung könnt ihr die certs für die Server dort ablegen.

    3. USB-Speicher als Ablage für Zertifikate

    Ich will hier mal einen bequemeren Weg vorstellen Zertifikate auf dem Router zu hinterlegen. Allerdings funktioniert das nur auf dd-wrt-Versionen, die USB-Port haben.

    Am PC:
    • Zuerst nehmt einen beliebig großen USB-Stick und legt darauf 2 Partitionen an. Die erste Partition könnt ihr als swap-Speicher (ca.512 MB), den Rest könnt ihr als ext3 formatieren und als kleinen NAS-Speicher verwenden.
    • Die ext3-Partition muss mit "jffs" benannt werden. Denn nur so wird der USB-Stick automatisch gemountet.
    Am Router:
    • Die Einstellung unter dd-wrt sieht wie folgt aus: USB-ddwrt.png
    • Weiter unten m Fenster "Services -> USB" seht ihr einen kleinen Log wen der USB-Stick angesteckt wird. Hier sucht ihr die UUID-Nummer der jffs-Partition raus und kopiert diese in das Kästchen "Diese Partition als /jffs einbinden"
    Zurück am PC:
    • Um jetzt auf dem USB-Stick, der jetzt am Router steckt, die Config abzulegen, muss man mit der Router-IP zB. 192.168.1.1/jffs verbinden.
    • Legt dort den Ordner "openvpn" und einen Unterordner "config" an. (Ordnung muss sein... ;) )
    • Der USB-Stick verhält sich jetzt wie ein normaler NAS-Speicher. Kopiert die .crt und .key Dateien auf den USB-Stick in den einen neu angelegten Ordner.
    und wieder zum Router:
    • Unter Services -> VPN könnt ihr nun in der OpenVPN-Konfiguration diese Pfade angeben, die zu den Schlüssel führen.
    Code:
    ca /jffs/openvpn/config/ca.crt
    cert /jffs/openvpn/config/xxx_cl.crt
    key /jffs/openvpn/config/xxx_cl.key
    tls-auth /jffs/openvpn/config/xxx_ta.key 1
    (Achtung: den 1er nach dem ..._ta.key nicht vergessen)

    FERTIG! Nun könnt ihr bequem zwischen den Servern herum wechseln, ohne aufwendig alle Certs etc. rauszusuchen.
    4. Einkaufsguide

    Wenn der Router wirklich mit vernünftigem Speed über OpenVPN durchleiten soll, benötigt es einen Dualcore. Natürlich geht es mit nem Singlecore auch, aber langsamer.
    Zum Glück sind 2015 hier (endlich) einige Modelle auf den Markt gekommen.

    Beispiele hierfür wären:
    • Netgear R6300 V2 @ 2x800 MHz um ca. 120€
    • Asus RT-AC56U @ 2x800 MHz um ca. 100€
    • Netgear R7000 @ 2x1 GHz um ca. 140€
    • Asus RT-AC87U @ 2x1 GHz um ca. 200€
    • Linksys WRT1900AC @ 2x1,2 GHz um ca. 220€
    • Linksys WRT1900ACS @ 2x1,6 GHz um ca. 230€
    (Preise laut geizhals.de - Stand 12/2015)

    Wenn euch dd-wrt nicht so gefällt, das kann ja vorkommen, dann achtet auch darauf, welche anderen Custom Firmwares es für das Gerät der Wahl gibt. z.B. Geht nicht bei allen OpenWRT, Merlin nur bei Asus, R7000 taugt für TomatoUSB Mod, etc.
    2016 werden sicher noch weitere Alternativen kommen. Man darf gespannt sein, welche CPUs darin noch verbaut werden.

    Als Referenz: Bei 2x1GHz schafft man ca. 20-24 MBit/s

    5. Sonstiges

    Don't forget to keep your Router up to date!
    Here you'll get your updated firmware:
    ftp://ftp.dd-wrt.com/betas/


    So, ich hoffe es ist jetzt mal übersichtlich genug zusammengefasst.

    Vorteil wenn man über Router verbindet:
    - DNS-Leaks sind Geschichte
    - ALLES was im Netzwerk auf Internet zugreift geht über OpenVPN raus
    Nachteil:
    - Bei manchen Banken sollte man aufpassen, da die IP-Adressen sperren könnten wenn man aus dem Ausland zugreift

    PS: Danke @Gerd, für deinen Tipp mit der Additional Config und den Fixed Parameters in dd-wrt
    http://www.dd-wrt.com/wiki/index.php/OpenVPN#Fixed_Parameters
    Danke @JackCarver für die iptables Erklärungen

    Bitte eine Nachricht schreiben wenn etwas unklar ist oder falsch.
    Dieser Beitrag wird von mir aktuell gehalten.
     
    Last edited: Feb 12, 2016
  2. peter-privacy

    peter-privacy Junior Member

    Welches build hast du hierfür benutzt?
     
  3. Loreas

    Loreas Member

  4. peter-privacy

    peter-privacy Junior Member

    hab das mal nach gemacht. wenn ich es mit deiner additional config mache, bekomme ich folgende Fehlermeldung:
    wenn ich die additional config weglasse und anstatt bei tls sipher: none ( wie bei dir angegeben) den tls cipher vorgebe. dann funktioniert es.

    woran liegt das?
     
  5. peter-privacy

    peter-privacy Junior Member

    ok. hab mal alles neu gemacht und den neuesten build von brainslayer aufgesetzt ( 27745).
    bei der ersten anmeldung bzw. beim passwort setzten bekam ich folgende Fehlermeldung:

    Ich hatte kein Zugriff auf den Router, wieso auch immer das so ist. Für den workarround gibt es 2 Möglichkeiten:
    1: via telnet
    Code:
    nvram set no_crossdetect=1
    nvram commit 
    2: via firefox:
    Sobald ich diese Hürde genommen habe, lief deine Anleitung wie oben beschrieben. Danke hierfür.

    PS: hattest du auch das Problem mit der Fehlermeldung und weisst du oder jemand anderes wieso das so ist?
    PSPS: ich hatte es via firefox gemacht. Fühlte sich besser an.
     
  6. peter-privacy

    peter-privacy Junior Member

    Update:
    Nach ein paar Testdurchläufen muss ich sagen, dass es mit der oben genannten Anleitung nicht ganz rund läuft. Nach einem router reboot, habe ich keine vpn Verbindung hinbekommen. Musste mich dann in den Router einloggen und apply drücken. Dann erst kam die Verbindung zustande. Wie oben schon erwähnt. Wenn ich die additional config weglasse und den tls cipher im Menü auswähle geht es problemlos. Kann rebooten so oft ich will, die vpn Verbindung kommt safe zustande. Jetzt meine Frage: ist die additional config wichtig und hätte ich diese eventuell anpassen müssen? und wie wichtig ist für die anonymität das abwählen von Use DNSMasq for DHC/Use DNSMasq for DNS und DHCP-Authoritative?
     
  7. Loreas

    Loreas Member

    Zu dem Startup-Problem einfach unter Administration -> Diagnose in Startup folgendes speichern:
    Code:
    #!/bin/sh
    /usr/sbin/openvpn --daemon

    Das sind ziemlich wichtige Konfigurations-Parameter. Die sollte man schon verwenden.

    Leider kann ich hierzu keine Angabe machen. Weiß ich leider nicht.
     
  8. peter-privacy

    peter-privacy Junior Member

    Ich geb´s auf. Ich hatte es mal mit einer anderen config-datei (mac/os) versucht und hatte 3 Tage Ruhe. Heute wieder hat es sich aufgehängt. Ich kann zB über Tunnelblick eine Verbindung mit Erfurt zustande bringen. Aber nicht mit Frankfurt (was auf dem Router drauf ist)
    Ich bekomme den Fehler Tls Handshake failed. Das wird sich jetzt ca. eine Std. hinziehen und dann wird es irgendwann mal laufen.

    In wie fern muss ich die additional config anpassen? Denn mit der additional config bekomme ich unter status/openvpn gar kein Warnhinweis geschweige denn eine Verbindung hin. Da ist einfach alles leer. Wie oben erwähnt, lass ich sie weg und wähle den tls cipher von Hand aus. Dann gehts, aber auch nur eine bestimmte Zeit dann hauts mich raus und ich kann mich für eine Weile mit den Server nicht mehr verbinden. Weder mit dem Router noch mit Tunnelblick.

    Ich muss dazu sagen, dass mein Router fast 2 Jahre problemlos lief. Das Problem tauchte erst vor 1-2 Montaten auf. Worauf ich diesen Thread aufgesucht habe. Leider ohne wirklichen Erfolg.

    Wo steckt der Wurm?!

    Ps:
    Code:
    #!/bin/sh
    /usr/sbin/openvpn --daemon
    hat auch keine Abhilfe geschaffen
     
  9. PP Frank

    PP Frank Staff Member

    Prüfe mal ob die Systemzeit passt. Ausserdem versuche mal einen anderen Server auf dem Router
     
  10. peter-privacy

    peter-privacy Junior Member

    Die Systemzeit in openvpn passt. Allerdings ist mir aufgefallen das unter der syslog die Zeit 2 Std. hinterher ist (ntp client ist enabled, Berlin ausgewählt und de.pool.ntp.org eingetragen). Würde ungern auf ein anderen Server wechseln. Da ich wie erwähnt schon eine weile den Frankfurt Server als mein Standard Server benutze.

    Weisst du Frank wie und ob ich die oben gezeigte additional config anpassen muss? Da ich mit der oben gezeigten config nix zustande bekomme.
     
  11. G

    Gerd Junior Member

    Edit:
    Die Perfect-Privacy User können mit der .ovpn Datei ins Internet. Das bedeutet für mich das alle notwendigen Einstellungen in der .ovpn Datei für eine erfolgreiche Router-Konfiguration stehen.

    Öffne eine UDP oder TCP .ovpn Datei und stelle die Einstellungen in der DD-WRT OpenVPN Client Konfiguration so wie du es für richtig hältst.
    (Auch auf die Fixed Parameters achten) Wenn alles eingestellt wurde wechsel zu "Administration-> Commands" und gib dort ein:

    Code:
    cat /tmp/openvpncl/openvpn.conf
    und führe es mit 'Run Commands' aus.

    Gleiche die Einstellungen vom DD-WRT OpenVPN Client Menü mit der .ovpn Datei von Perfect-Privacy und mit der Ausgabe vom Commands Fenster so lange ab, bis es zum größten Teil übereinstimmt. Wenn danach die OpenVPN Verbindung immer noch nicht aufgebaut wird, dann weißt du das es nicht an der OpenVPN Client Konfiguration liegen wird, sondern an etwas anderem.

    Das ist der einfachste Trick bei der DD-WRT Konfiguration, ohne große Kenntnisse über OpenVPN zu haben.
     
    Last edited: Sep 29, 2015
  12. peter-privacy

    peter-privacy Junior Member

    ich hatte meinen router auf einen alten build von kong zurückgesetzt und alles neu eingerichtet ( frankfurt ). lief eigentlich ganz ok, für 1 oder 2 wochen. ab und zu mal ein hänger, aber damit konnte ich leben. seit gestern aber, bekomme ich ein connected succes, aber dafür keine internet verbindung. habe alles mögliche versucht und dann doch aufgegeben (vielleicht was eingestellt was so nicht sein sollte) und den router neu geflasht mit dem neuesten kong build. Ich habe jetzt im neu geflashten router nur die internetverbindungsdaten eingegeben und das wlan eingerichtet. Just for fun hab ich mal den tunnelblick gestartet und versucht mich mit frankfurt zu verbinden. GEHT NICHT. ?! wtf! liegt das problem etwa bei euch?

    edit: amsterdam über tunnelblick z.B geht
     
  13. G

    Gerd Junior Member

    Ich weiß nicht wie zur Zeit deine Konfiguration aussieht und kann nur vorschlagen von der Konfiguration die Bilder reinzuposten. Also von DNS Server, DNSMasq bis iptables. Der Teufel steckt oft im Detail.

    Z.B. hatte ich die Fehlermeldung mit "Tls......" ebenfalls. Ich habe letztendlich die 3 Optionen von DNSMasq unter "Basic Setup" deaktiviert.

    Edit:
    Was ich im Vergleich zu der Konfiguration von Loreas anders machen würde, wäre die Option "key-direction 1" von Additional Config rauszunehmen, weil die wahrscheinlich von TCP config stammt.

    Mit ifconfig, tun0 oder tun1 fand ich auch etwas zu umständlich. Ich habe einfach die iptables von TomatoUSB genommen.
     
    Last edited: Oct 25, 2015
  14. peter-privacy

    peter-privacy Junior Member

    Ich hau jetzt mal hier meine configs rein. So langsam sehe ich den Wald vor lauter Bäumen nicht. Das Problem. Ich bekomme zwar ein connected success. Aber entweder lahmt die Verbindung bis hin zum Verbindungsfehler oder es kommt erst gar keine Zustande. Was mir auch schleierhaft ist, dass wenn ich eine Verbindung habe und diese auf check-ip testen will, dauert es ewig oder es kommt ein Verbindungsfehler zustande.

    Code:
    ca /tmp/openvpncl/ca.crt
    cert /tmp/openvpncl/client.crt
    key /tmp/openvpncl/client.key
    management 127.0.0.1 16
    float
    management-log-cache 50
    verb 4
    mute 5
    syslog
    client
    resolv-retry infinite
    nobind
    persist-key
    persist-tun
    script-security 2
    tls-client
    fast-io

    Code:
    iptables -P INPUT DROP
    iptables -P FORWARD DROP
    iptables -I FORWARD -i br0 -o tun1 -j ACCEPT
    iptables -I FORWARD -i tun1 -o br0 -j ACCEPT
    iptables -I FORWARD -i br0 -o vlan2 -j DROP
    iptables -I INPUT -i tun1 -j REJECT
    iptables -t nat -A POSTROUTING -o tun1 -j MASQUERADE
     

    Attached Files:

    • 01.png
      01.png
      File size:
      88.3 KB
      Views:
      22
    • 11.png
      11.png
      File size:
      102.9 KB
      Views:
      25
  15. G

    Gerd Junior Member

    Ich nehme an das Du die Ausgabe von Additional Config mit "cat /tmp/openvpncl/openvpn.conf" gemacht hast. Die Ausgabe scheint mir auf den ersten Blick unvollständig zu sein.
    1. Nimm Additional Config von Loreas und entferne dort "key-direction 1".
    2. Versuch erstmal die iptables von Tomato, also:

    Code:
    iptables --flush FORWARD
    iptables -P FORWARD DROP
    iptables -I FORWARD -o tun+ -j ACCEPT
    iptables -I FORWARD -i tun+ -j ACCEPT
    iptables -t nat -I POSTROUTING -o tun+ -j MASQUERADE
    Wenn später alles wieder funktioniert, kannst Du immer noch zu den ursprünglichen iptables wechseln.

    Hast Du noch ein Startup Script eingetragen gehabt?

    3. Wenn nach dieser Konfiguration die Verbindung immer noch abbricht, poste bitte die Ausgabe von der Log Datei die unter dem Menü Status-> OpenVPN zu finden ist.
     
    Last edited: Nov 1, 2015
  16. Loreas

    Loreas Member

    * "key-direction 1" entfernt aus den additional configs ;)
     
  17. Loreas

    Loreas Member

    Weil im TomatoUSB Mod Bereich die Frage aufgetaucht ist, wie auf dd-wrt das Policy Based Routing funktioniert:
    Policy Based Routing auf dd-wrt funktioniert so:

    Dort wo die "Additional config" eingegeben wird ist ein Kästchen darunter, wo "Policy Based Routing" bzw. "Richtlinienbasiertes Routen" steht.

    Bildschirmfoto1.png

    Dieses Kästchen kann man mit allen internen IPs füttern, die sich über VPN verbinden sollen. (eine IP pro Zeile)

    Jedoch muss dazu die Firewall-Einstellung gelöscht werden, da diese ansonsten trotzdem alles wieder über VPN routet.
    Selber getestet, es funktioniert...

    ABER:
    Ich weiß nicht wie sicher bzw. unsicher das ohne Firewall-Einstellung ist und lass das erstmal so im Raum stehen.
     
  18. G

    Gerd Junior Member

    Da bräuchte man wieder zusätzliche iptables Regeln zu den Firewallregeln.
    Wenn die IP 192.168.1.150 in "Richtlinienbasiertes Routen" aufgenommen wird, dann bräuchte man wahrscheinlich folgende iptables.
    Ich weiß aber nicht ob sie richtig geschrieben sind.

    Code:
    iptables -I FORWARD -i br0 -s 192.168.1.150 -j ACCEPT
    iptables -I FORWARD -o br0 -d 192.168.1.150 -j ACCEPT
     
  19. JackCarver

    JackCarver Junior Member

    Kommt ja auch drauf an, welche Regeln du löscht. Ob alle oder nur die Regeln aus der NAT Tabelle, die NAT Regeln haben nichts mit dem Filtern des Traffics an sich zu tun, dafür ist die Tabelle Filter zuständig. Nur die Regeln aus der Filter Table sind für das Filtern deines Traffics zuständig und wenn du die unangetastet lässt, ist es so sicher wie vorher.

    Die Regeln aus der Table Filter tragen auch nicht dazu bei, dass irgendwas über VPN geroutet wird, dazu ist die Table NAT zusammen mit der Routing Tabelle des jeweiligen Systems zuständig.
     
  20. Loreas

    Loreas Member

    @JackCarver *zustimmend nickend* jedoch keinen Plan von was du hier redest.

    Von welchen Filtern redest du hier? Hab nichts in NAT stehen und "Tabelle Filter" gibts hier in dd-wrt auch nicht. Kannst du für mich oder uns das jetzt vielleicht nochmal praxisnaher erklären anhand von dd-wrt? plz...