IT-MÜCKE

FreeNAS und OpenVPN [Update]

Beitragsdatum 01.01.2011
Letzte Aktualisierung 08.02.2019
Betrifft NAS4Free 9.2, 11.x, XigmaNAS 11.x u.a.

NAS4Free und XigmaNAS sind quasi identisch - nur der Name hat sich geändert.
Dieser Artikel gilt daher für beide Systeme (und eingeschränkt auch für FreeNAS).

FreeNAS1) bietet von Haus aus noch keine OpenVPN-Unterstützung an (0.7.2 stable). Aber dennoch kann OpenVPN nachgerüstet werden.

Um eine FreeNAS-Installation um OpenVPN zu erweitern, sollte FreeNAS als Full-Installation installiert worden sein - sonst vergisst FreeNAS nach dem nächsten Reboot die OpenVPN-Erweiterung.

In einem Test habe ich die Full-Installation auf einem USB-Stick durchgeführt. Welche Auswirkung das auf die Lebenserwartung des Stick hat kann ich noch nicht sagen.

OpenVPN

Ein paar Worte zu OpenVPN:
OpenVPN ermöglicht eine Arbeit über das Internet innerhalb eines geschützten internen Netzwerkes - z.B. kann ein Außendienstmitarbeiter so an seinem Laptop arbeiten, als wäre er innerhalb der Firma an seinem Arbeitsplatz. So können auch Ordnerfreigaben von außen zugänglich sein. Es gibt zwei virtuelle Tunnel-Netzwerk-Geräte bei OpenVPN: tun für verschlüsselte IP-Protokolle, tap für verschlüsselte nicht-IP-Protokolle.
Als Techniken werden Standards benutzt, die entsprechend bekannt und sicherer sind (TLS, SSL usw.).

Die Authentifizierung eines Nutzers kann über Benutzername und Passwort geschehen (aufwändiger, da jeder Nutzer auf dem OpenVPN-Server angelegt werden muss) oder zusätzlich (bzw. auch nur über) Zertifikate, die sich mit Passwörtern schützen lassen.

WICHTIG: die IP-Adresse des Clients muss aus einem anderen Netz stammen, als die IP-Adressen für das VPN-Netz sowie aus einem anderen Netz, als das Netzwerk des Servers. In meinem Beispiel setzen ich das wie folgt um:

  • IP-Bereich im LAN des OpenVPN-Servers und FreeNAS: 192.168.1.0/24
  • IP-Bereich im LAN des Clients: 192.168.178.0/24
  • virtueller IP-Bereich im VPN: 10.0.0.0/24

[UPDATE] Mögliche Adressbereiche sind bei Wikipedia beschrieben.

Ich habe mich an den Artikel Virtuell vernetzt mit OpenVPN aus c't kompakt 01/11 Linux (S.26ff.) gehalten.


Server einrichten

Meine Zusammenfassung für Routing (dev tun):

  • FreeNAS full installieren und konfigurieren (siehe FreeNAS-Blog-Beiträge)
  • ssh-Zugang für root einrichten (Dienste → ssh → aktivieren und „Root Login zulassen“ aktivieren)
  • per ssh auf die FreeNAS-Installation zugreifen (wobei [host] die IP-Adresse des FreeNAS ist):
    ssh root@[host]
  • Das Repository richtig setzen:
    setenv PACKAGESITE ftp://ftp-archive.freebsd.org/pub/FreeBSD-Archive/ports/i386/packages-7.3-release/Latest/
  • OpenVPN und Openssl installieren:
    # NAS4Free 9.2:
    pkg_add -r openvpn
    pkg_add -r openssl
    
    # NAS4Free 11.0:
    pkg install openvpn
    pkg install openssl
  • Nun muss OpenVPN auf dem PC installiert werden. Ich mache das auf einem Ubuntu (Linux) Rechner.
  • OpenVPN auf dem eigenem Rechner installieren:
    sudo apt-get install openvpn
  • Ordner für die openvpn-Konfiguration anlegen, z.B. ~/tmpovpn
  • Datei server.conf in ~/tmpovpn mit folgenden Einträgen erstellen:
    # OpenVPN-Conf
    # SERVER
    # Device
    # dev tun oder dev tap (tap = bridging)
    dev tun
    # Protokoll
    # proto tcp oder proto udp
    proto udp
    # Port
    port 1194
    # use compression
    comp-lzo
    # User/Group des OpenVPN Servers
    user nobody
    group nogroup
    # Persits
    persist-tun
    persist-key
    # Server-Konfiguration
    # fuer dev tun
    # server [vpn ip-bereich] [maske]
    server 10.0.0.0 255.255.255.0
    ifconfig-pool-persist ipp.txt
    # push "route [vpn ip-bereich] [maske]"
    push "route 10.0.0.0 255.255.255.0"
    # Zertifikate fuer die Authetifizierung
    dh /usr/local/etc/openvpn/dh1024.pem
    
    # bei pkcs12-Dateien:
    pkcs12 server.p12
    
    # bei key- und crt-Dateien:
    #key server.key
    #ca ca.crt
    #cert server.crt
    
    # Logging
    log-append openvpn.log
    status /usr/local/etc/openvpn/openvpn-status.log
    # Set the appropriate level of log
    # file verbosity:
    #
    # 0 is silent, except for fatal errors
    # 4 is reasonable for general usage
    # 5 and 6 can help to debug connection problems
    # 9 is extremely verbose
    verb 5
  • Auf dem Server eine Datei für die Verschlüsselung erzeugen:
    /usr/local/bin/openssl dhparam -out /usr/local/etc/openvpn/dh1024.pem 1024

TinyCA für die Zertifikatsverwaltung

[Update, 23.09.2017]

Anstatt TinyCA kann auch easy-rsa benutzt werden. Dieses Skript-Paket eignet sich optimal für den Einsatz mit OpenVPN. Eine kurze Anleitung stelle ich im Blog-Beitrag easy-rsa: OpenVPN für Server und Clients einrichten zur Verfügung.

Der folgende Abschnitt kann veraltet sein.

  • Ein schöner Bericht dazu ist frei verfügbar unter: admin-magazin.de (Heft 2009/01)
  • TinyCA installieren (für die Zertifikat- und Schlüsselverwaltung):
    sudo apt-get install tinyca
  • TinyCA starten (tinyca2):
    • CA anlegen
    • Anforderung anlegen (je Server, je Nutzer, mit Passwort)
    • Anforderungen sofort danach signieren mit der CA (Passwort der CA)
    • weitere Anforderung anlegen (darauf achten, dass eine neue Anforderung erstellt wird und nicht die aktuelle irgendwie aktiviert ist)
    • exportieren der Zertifikate im Format PKCS#12 (funktioniert nicht mit dem Gnome Network-Manager OpenVPN-Plugin) und OHNE Passwort, Passwort für den Export ist das CA-Passwort
  • Server-Datei (*.p12) von TinyCA auf den Server kopieren (/usr/local/etc/openvpn/)

Clients einrichten

  • Datei client.conf erstellen (z.B. in ~/tmpovpn/client.conf):
    • Je Client eine Conf-Datei erstellen, am besten Deckungsgleich mit Benutzerzertifikat benennen.
      # OpenVPN-Conf
      # Client
      client
      # Network-Device definieren (wie bei server.conf)
      ;dev tap
      dev tun
      # Server definieren (z.B. Adresse bei DynDNS-Anbieter)
      remote server.no-ip.org 1194
      
      # Bei pkcs12-Dateien: PKCS#12-Schluessel aktivieren und bestimmen
      pkcs12 /pfad/client.p12
      
      # Bei crt- und key-Dateien:
      #key client.key
      #cert client.crt
      #ca ca.crt
      
      # Kompression einschalten
      comp-lzo
      verb 5
  • FreeNAS muss nun eingerichtet werden. Dazu unter „System“ → „Erweitert“ → „rc.conf“ einen neuen Eintrag anlegen
    • Variable: openvpn_enable
      Wert: YES
    • Variable: openvpn_if
      Wert: tun
    • Änderungen übernehmen nicht vergessen!
    • Nun zu „„System““ → „„Erweitert““ → „„Befehlsskript““ und folgendes Skript hinzufügen:
      • Befehl: /usr/local/etc/rc.d/openvpn start
        Typ: PostInit
  • Prüfen auf dem Server, ob die Datei /usr/local/etc/rc.d/openvpn ausführbar ist (ll /usr/local/etc/rc.d/openvpn). Sonst mit einem
    $ chmod a+x /usr/local/etc/rc.d/openvpn

    entsprechend anpassen.

  • FreeNAS rebooten, Firewall (oftmals im Router) einrichten, dass Port 1194 an die FreeNAS-Installation weiter geleitet wird.
  • Samba auf dem FreeNAS muss noch angepasst werden. Dazu unter „Dienste“ → „CIFS/SMB“ bei „Zusätzliche Parameter“ die folgenden Einträge machen und mittels „„Speichern und Neustart““ aktivieren:
    hosts allow = 192.168.1.0/24 10.0.0.0/24 127.0.0.1
    interfaces  = 192.168.1.0/24 10.0.0.0/24
  • client.conf auf den Client kopieren. OpenVPN muss da natürlich auch installiert werden.
  • openvpn auf dem Client mit der richtigen Konfig-File ausführen:
    openvpn ~/pfad/openvpn_client.conf
  • Prüfen, ob man vom Client aus das Netzlaufwerk einbinden kann. Z.B. mittels:
    # smbclient -L [ip-adresse openvpn-server] -U [username eines samba-users]
    # z.B.:
    smbclient -L 10.0.0.1 -U benutzer
  • Danach sollte die Verbindung zwischen ClientPC und FreeNAS funktionieren. Die Logfiles können überprüft werden: /usr/local/etc/openvpn/openvpn.log

Typische Fehlerquellen

  • Firewall auf Server-Seite blockiert Port 1194
  • Firewall auf Client-Seite blockiert Port 1194
  • Router auf Seite des OpenVPN sowie FreeNAS leitet Port 1194 nicht an den OpenVPN-Server weiter.
  • Die IP-Adresse bei dem DynDNS-Anbieter ist nicht richtig gesetzt (prüfen).

Die Einbindung der Freigabe kann dann normal z.B. über Gnome erfolgen. Einfach als IP die VPN-IP des OpenVPN-Servers angeben, im Beispiel also die virtuelle Adresse 10.0.0.1.


Ähnliche Themen im blog:
xigmanas, nas4free, freenas


zurück

1)
Aus FreeNAS ging NAS4Free hervor. Aus NAS4Free wurde XigmaNAS