OpenVPN: Unterschied zwischen den Versionen

Aus wiki.archlinux.de
Zeile 14: Zeile 14:
===Module===
===Module===


Als erstes laden wir die nötigen Module
Bevor es losgehen kann, müssen die benötigten Module geladen werden


   # modprobe tun bridge
   # modprobe tun bridge

Version vom 21. Februar 2008, 23:51 Uhr

OpenVPN

Ich wollte einfach mal 2 Rechner via Internet verbinden. Über Windows geht das ja relativ easy mit Hamachi. Aber auch unter Linux ist das mit OpenVPN sehr leicht zu realisieren. Als Server läuft ein Archlinux (64bit / Testing). Als Gegenstelle dient ein Windows XP Professional 32bit und ein Gentoo-Linux 32bit. Der Lappy steht ebenfalls im Lan, dient also nur zur Kontrolle, ob es "theoretisch" geht. Der Gentoo-Root wiederum steht in Frankreich und ist optimal zum testen. Inzwischen habe ich noch 2 weitere Windows-Clients zum Testen gehabt. Daher hab ich mich auch mit einer "kleinen Benutzer-Auth" auseinander gesetzt und hier mit reingesetzt.

Ich gehe hier auf die "relativ" einfache Einrichtung und Installation einer OpenVPN-Bridge mit Client-to-Client Funktion ein.

Installation

Als erstes müssen wir OpenVPN ganz normal installieren.

  # pacman -S openvpn 

Konfiguration

Module

Bevor es losgehen kann, müssen die benötigten Module geladen werden

 # modprobe tun bridge

zur Kontrolle

 # lsmod | grep tun; lsmod | grep bridge
  tun                    10368  1
  bridge                 56488  0

Bridge

So die Bridge ist eigentlich relativ einfach einzurichten.

Bei mir siehts folgendermaßen aus:

 # cat /etc/conf/bridges
  bridge_br0="eth0 tap0"
  BRIDGE_INTERFACES=(br0)

Dann kommt die /etc/rc.conf dran:

Erstmal fügen wir bei MODULES= tun und bridge hinzu.

Dann kommen die eigentlichen Einstellungen:

  eth0="eth0 up"
  tap0="tap0 up"
  br0="br0 192.168.1.2 netmask 255.255.255.0 broadcast 192.168.1.255"
  INTERFACES=(lo eth0 br0)
  gateway="default gw 192.168.1.1"
  ROUTES=(gateway)

Wir klauen der eth0 (je nach System auch eth1) die IP und geben der br0 die dafür.

Somit ist die Brücke fast fertig.

Wir müssen nur noch dafür sorgen das tap0 noch angelegt wird. Dafür habe ich ein kleines rc.d-Script gefunden, welches einfach vor network in der rc.conf kommt.

  #!/bin/bash
  
  . /etc/rc.conf
  . /etc/rc.d/functions
  
  case "$1" in
    start)
      stat_busy "Creating tap0 interface"
      /usr/sbin/openvpn --mktun --dev tap0 >/dev/null
      if [ $? -eq 0 ]; then
        stat_done
      else
        stat_fail
      fi
      ;;
    stop)
      stat_busy "Destroying tap0 interface"
      /usr/sbin/openvpn --rmtun --dev tap0 >/dev/null
      stat_done
      ;;
    *)
     echo "usage: $0 {start|stop}"
 esac
 exit 0

Dieses einfach unter /etc/rc.d/tap0 speichern, dann chmod 755 auf /etc/rc.d/tap0 und schon funktionierts. Dann natürlich eben via /etc/rc.d/tap0 start starten und dann dieses einfach vor network in der rc.conf unter DAEMONS= einfügen.

Keys

Als nächstes müssen wir die SSL und TLS - Keys erstellen. Dafür gibt es das tolle Tool Easy-RSA was unter /usr/share/openvpn/easy-rsa zufinden ist.

Als erstes bearbeiten wir die Datei vars.

 nano -w vars

Ich denke die Sachen da drin sind selbstklärend. Das Verzeichnis am Anfang so lassen.

Dann werden nun die Certificate erstellt:

 source vars // Nach jeder Änderung in dieser datei muss sie neu "gesourced" werden

dann

 ./clean-all // löscht vorab alle evtl. vorhandenen Keys / Certs. 

und dann

  ./build-ca --pass // Passwort -> kein triviales Kennwort verwenden!  "Organizational Unit Name" -> leer lassen

Somit haben wir schon mal die CA-Certificates.

Nun kommen die Server-Certificate.

  ./build-key-server IRGEND_EIN_NAME // "challenge password" -> leer lassen / "An optional company name" -> leer lassen / "Sign the  
  certificate? [y/n]" -> y / "1 out of 1 certificate requests certified, commit?" -> y

und nun noch die Gegenstücke des Clients

  ./build-key client

Nun kommt noch das Diffie Hellmann

  ./build-dh

So und als letztes kommt der TLS-Key

  openvpn --genkey --secret /usr/shar/openvpn/easy-rsa/keys/ta.key

So nun liegen die ganzen Sachen ja im /usr/shar/openvpn/easy-rsa/keys/, ich habe sie nach /etc/openvpn/keys verschoben.

Nun haben wir alle wichtigen Keys und vorbereitungen zusammen.

Server

Als erstes kopieren wir alles aus /etc/openvpn/examples/ nach /etc/openvpn/

dann

  nano -w /etc/openvpn/server.conf
  
  server-bridge 192.168.1.2 255.255.255.0 192.168.2.10 192.168.2.20
  port 1194
  proto udp
  dev tap0
  
  
  ca /etc/openvpn/keys/ca.crt
  dh /etc/openvpn/keys/dh2048.pem
  cert /etc/openvpn/keys/EUER_SERVER.crt
  key /etc/openvpn/keys/EUER_SERVER.key
  tls-auth /etc/openvpn/keys/ta.key 0
  
  
  user openvpn
  group openvpn
  
  cipher AES-256-CBC
  
  resolv-retry infinite
  
  persist-key
  persist-tun
  
  keepalive 10 120
  comp-lzo
  verb 3
  
  client-to-client

So ist meine Configuration. Sie sagt im Endeffekt eigentlich nur, wer der Server ist, und welche Ips die Clienten bekommen, dann noch welche Verschlüsselung und Komprimierung genommen werden soll. Ausführlichere Informationen findet ihr auf der OpenVPN Seite.

Da im Arch-OpenVPN-Paket noch kein rc.d-Script dabei ist. Müssen wir das ganze über die /etc/rc.local starten.


  nano -w /etc/rc.local
  openvpn --config /etc/openvpn/server.conf --tls-server --daemon

Benutzer

Die Benutzer-Wahl ist bei diesem Verfahren recht einfach.

Einfach für jeden benutzer ein eigenes Certificate erstellen:

 ./build-key client
 ./build-key client2 

usw.

Auf die jeweiligen Clienten müssen dann die clientX.* + die ta.key und dann kann er einloggen.

Achtet nur drauf WEM ihr die Sachen gebt. Ihr könnt keinen User sperren. Daher bei dieser Methode müsst ihr der Gegenseite vertrauen.

Client

Wir haben ja 2 Clienten zur Auswahl. Linux und Windows

Linux

Als erstes nehmen wir uns den Linux-Clienten vor. Ich gehe stark davon aus, das es kein Unterschied macht ob es nun ein Gentoo ist oder ein Arch oder what ever.

Wir nehmen uns nun erstmal die Client-Config vor:

 remote 192.168.1.2     
 local 192.111.111.2  
 client              
 proto udp           
 dev tap0
 ca /etc/openvpn/ca.crt
 cert /etc/openvpn/client.crt
 key /etc/openvpn/client.key
 tls-auth /etc/openvpn/ta.key 1  
 keepalive 10 120
 cipher AES-256-CBC 
 comp-lzo
 user openvpn
 group openvpn
 persist-key
 persist-tun
 resolv-retry infinite
 verb 3

Nachdem die Config bearbeitet ist, müssen wir uns vom Server noch die Keys holen, die wir gerade erst erstellt haben, und dann in die Configs eingetragen haben.

Ich habe es via SCP gemacht.

  scp ca.crt ta.key client.* 192.111.111.2:/etc/openvpn/

nun sollten wir auch hier noch das TUN-Modul laden.

  modprobe tun

Nun sollte man per ifconfig sehen, das da das tap0-Interface hinzugekommen ist. Mit einer IP zwischen 192.168.1.10 u. 20. Haben wir ja in der Server-Config so eingestellt.

Sollte dies nun sein, können wir den Server pingen:

  ping 192.168.2.1

sollte da nun eine Reaktion kommen, steht das VPN, und ihr könnt mit den Sachen arbeiten.

Ich habe NFS u. Cups erfolgreich getestet.

Windows

Unter Windows habe ich mich für die aktuellen OpenVPN-Clienten entschieden von http://openvpn.se

Einfach die aktuelle Version downloaden und Installieren.

Vorm ersten Start müssen auch hier wieder die Certificate und Keys vom Server geholt werden. Da hier kein SCP im traditionellen Sinn funktioniert, habe ich WinSCP genommen. Wieder die ca.crt ta.key client.*. Die habe ich nach C.\Programm\OpenVPN\keys kopiert.

Dann habe ich unter C:\Programm\OpenVPN\Config die client.opvn erstellt.

  client
  dev tap0
  proto udp
  remote 192.168.1.2 1194
  resolv-retry infinite
  nobind
  user nobody
  group nobody
  persist-key
  persist-tun
  ca C:\\Programme\\OpenVPN\\keys\\ca.crt
  cert C:\\Programme\\OpenVPN\\keys\\client.crt
  key C:\\Programme\\OpenVPN\\keys\\client.key
  tls-auth C:\\Programme\\OpenVPN\\keys\\ta.key 0
  vomp-lzo
  verb 3
  reneg-sec 0
  cipher AES-256-CBC

Diese dann einfach Speichern. Dann die OpenVPN-Gui starten. Dann erscheint ein Symbol in der Taskleiste, dies via Doppelklick öffnen.

Dann verbindet er direkt auf den "Standard-VPN"-Server. Man kann auch mehrer Profile in das Config-Verzeichniss speichern. Diese kann man dann auswählen.

Abschluss

Diese Art des VPN sollte man nur nutzen, wenn man die anderen Benutzer kennt, sehr gut kennt. Da sie kein Password brauchen um ins VPN zu kommen. Auf vpnforum.de werden einige andere Auth-Methoden erklärt. U.a. via MySQL-Datenbank etc.

Ich hoffe ich konnte euch mit diesem HowTo weiterhelfen. Es ist nicht ganz Fehlerfrei, aber wer ist das schon.

Sollten Fragen auftauchen, ich bin im freenode in #archlinux.de zu erreichen (PampersBomba)

So Long