OpenVPN-Tunnel Server / Client, Netzwerke verbinden

From DD-WRT Wiki

Jump to: navigation, search

Contents

[edit] Vorwort

Wir haben leider keine eierlegende Wollmilchsau als Anleitung für die Konfiguration gefunden.
Hilfestellungen fanden wir im WIKI von dd-wrt und im Forum von dd-wrt, hier bei dem ganz speziellen Posting von cyberde (http://www.dd-wrt.com/phpBB2/viewtopic.php?p=63035&sid=2e4815a589b78755d57488ee0547249d#63035).
In vielen Beiträgen wurde erwähnt, dass das IP-Forwarding in Linux – Rechnern aktiviert werden muss. Das scheint entweder auf den Routern mit DD-WRT-Firmware (v23SP2 und neuer) bereits eingetragen zu sein, oder diese Einstellung wird nach einmaligem Absetzen von „echo 1 > /proc/sys/net/ipv4/ip_forward“ statisch gemerkt.


[edit] Inhalt

Diese Konfiguration gilt für 2x Linksys WRT54G(L) mit DD-WRTv23SP2 und mehrere Windows – Clients.
Hier werden 2 private Netzwerke über VPN verbunden und jeder kann jeden sehen.
Möglicherweise funktioniert unsere Konfiguration auch für mehrere Netzwerke. Falls dies jemand ausprobiert, bitte um Feedback.

Verwendete Versionen:

Linux: OpenVPN 2.0.7 (http://www.dd-wrt.com/)
Windows: OpenVPN 2.0.9 (http://www.openvpn.se/ [mit GUI])

Wichtig: Beim Verwenden der Windows – OpenVPN 2.1 Beta kommt es zu Problemen beim Handshake der Zertifikate.

Die Details der einzelnen Parameter bitte unter http://openvpn.org/ nachlesen (MAN Pages).
Die dd-wrt Konfigurationen müssen in Administration/Commands (http://dd-wrtrouter/Diagnostics.asp) als Startupscript gespeichert werden.

Feedback ist immer Willkommen.

[edit] Erweiterungen der Anleitung

Diese Anleitung wurde für zwei Netzwerke mit je einem Linksys DD-WRT Router geschrieben. Da wir aber auch schon eine einfaches Netzwerk in Betrieb hatten, haben wir die Einstellungen dafür auch noch hinzugefügt.


[edit] Wichtige Informationen bei Windows-Clients

Bei Windows – Clients ab Windows XP SP2 sollte bei der von OpenVPN installierten Netzwerkkarte die Windows – Firewall deaktiviert werden. Das gilt natürlich auch für sonstige Firewalls.

[edit] Allgemeines zu den Protokollen

OpenVPN kann mit den Protokollen TCP oder UDP betrieben werden. Wir haben uns für das UDP Protokoll entschieden da dies laut einigen Erfahrungsberichten schneller sein soll. Um das TCP Protokoll verwenden zu können wären folgende Veränderungen bei unseren Einstellungen erforderlich.

Server:

proto udp auf proto tcp-server ändern

Clients:

proto udp auf proto tcp-client ändern

[edit] Wichtige Schritte bei der Einrichtung eines OpenVPN Server unter Windows

Bei einem Server unter Windows bzw. auch Linux muss man, um sein internes Netzwerk von außen erreichen zu können, den virtuellen VPN Netzwerkadapter und die interne Netzwerkkarte miteinander verbinden (Netzwerkbrücke [Bridge] erstellen).
Dieses geht unter Windows ganz einfach indem man unter den Netzwerkverbindungen die beiden Netzwerkverbindungen markiert, mit der rechten Maustaste auf die Markierung klickt, und den Punkt „Verbindung überbrücken“ auswählt.

Achtung:
Es kann dadurch kurzzeitig das LAN verloren gehen. Hat man einen DHCP - Server mit an MAC - Adressen gebundener IP-Adressvergabe, muss nach dem Erstellen der Netzwerkbrücke (Bridge), die MAC - Adresse der Netzwerkbrücke am DHCP - Server neu eintragen. So ein Fall kann z. B. bei einem Heimnetzwerk, welches hinter einem Router ohne DD-WRT Software aufgebaut ist, vorkommen. Hier kann man, sofern es der Router zulässt, seine Rechner mit fixen IP - Adressen über DHCP ausrüsten. Macht man diesen Schritt nicht sind die anderen Netzwerkkomponenten von diesem LAN nicht erreichbar.

Über die Eingabeaufforderung kann man kontrollieren ob dieser Vorgang erfolgreich durchgeführt worden ist.

Start 
Ausführen 
"cmd" 
OK 

>netsh bridge show adapter

[edit] Zertifikate

[edit] Erstellung von den notwendigen Zertifikaten unter Windows

  • Dos-Fenster öffnen:
Start
Ausführen
"cmd"
OK
  • Vorlagen erzeugen

vars.bat und openssl.cnf aus den Beispielen erzeugen

>c: 
>cd \programme\openvpn\easy-rsa 
>init-config 
  • Variablen anpassen
>notepad vars.bat 

set KEY_COUNTRY=DE
set KEY_PROVINCE=Berlin
set KEY_CITY=Berlin
set KEY_ORG=PrivatPerson
set KEY_EMAIL=mymail@gmx.net

Danach die Datei speichern und den Editor beenden.

  • Erstellen der Keys
>vars
>clean-all
>build-ca

hier alle Angaben bestätigen außer:
Eingabe "ca" (ohne Anführungsstriche) bei Organisational Unit Name
Eingabe "ca" (ohne Anführungsstriche) bei Common Name

>build-dh 
>build-key-server server1 

hier alle Angaben bestätigen außer:
Eingabe "server1" (ohne Anführungsstriche) bei Organisational Unit Name
Eingabe "server1" (ohne Anführungsstriche) bei Common Name
Eingabe "y" (ohne Anführungsstriche) bei Sign the Certificate?
Eingabe "y" (ohne Anführungsstriche) bei 1 of 1 certificate requests certi

>build-key client1 

hier alle Angaben bestätigen außer:
Eingabe "client1" (ohne Anführungsstriche) bei Organisational Unit Name
Eingabe "client1" (ohne Anführungsstriche) bei Common Name
Eingabe "y" (ohne Anführungsstriche) bei Sign the Certificate?
Eingabe "y" (ohne Anführungsstriche) bei 1 of 1 certificate requests certified, commit?

  • Client-Keys in eigenes Verzeichnis kopieren
>md austausch 
>cd keys 
>copy client1.crt  ..\austausch 
>copy client1.key  ..\austausch 
>copy ca.crt       ..\austausch 
>cd .. 

Der Inhalt des Ordners austausch kann / muss jetzt an die Clients versendet werden.
Die besten Übermittlungswege sind Diskette, USB-Stick oder ein verschlüsselter Datentransfer mit IM oder E-Mail (PGP, S-MIME).

Diesen Teil der Anleitung haben wir selbst von folgender Seite übernommen:
http://www.openvpn-forum.de/ext/VPN-Server.html

Danke an dem Ersteller dieser Anleitung

[edit] Beispiel zum Sperren eines Zertifikates

Man will z.B. das Zertifikat „MOBILE_03“ sperren. Um dieses zu tun, muss folgender Befehl am Zertifikatsrechner abgesetzt werden:

revoke-full.bat MOBILE_03

Danach muss man die CRL.PEM öffnen und das Zertifikat neu im Server einfügen, da dieser sonst ja nichts von der Änderung mitbekommt.

[edit] Konfiguration

[edit] Server Config (WRT54 - LINUX)

cd /tmp
mkdir /tmp/myvpn
ln -s /usr/sbin/openvpn /tmp/myvpn/myvpn
/tmp/myvpn/myvpn --mktun --dev tap0

brctl addif br0 tap0
ifconfig tap0 0.0.0.0 promisc up
ip route add 192.168.1.0/24 dev br0


echo "
mode server
proto udp
port 1194 #PORT ANPASSEN!!!
dev tap0
keepalive 15 60
verb 4
client-to-client
tls-server
daemon
ca /tmp/myvpn/ca.crt
dh /tmp/myvpn/dh1024.pem
cert /tmp/myvpn/server.crt
key /tmp/myvpn/server.key
crl-verify /tmp/myvpn/crl.pem #Hier werden gesperrte Zertifikate abgefragt
" > /tmp/myvpn/ipsec.config

echo "
-----BEGIN CERTIFICATE-----
!!!REPLACE WITH YOUR CONTENT!!!
-----END CERTIFICATE-----
" > /tmp/myvpn/ca.crt
echo "
-----BEGIN RSA PRIVATE KEY-----
!!!REPLACE WITH YOUR CONTENT!!!
-----END RSA PRIVATE KEY-----
" > /tmp/myvpn/server.key
chmod 600 /tmp/myvpn/server.key
echo "
-----BEGIN CERTIFICATE-----
!!!REPLACE WITH YOUR CONTENT!!!
-----END CERTIFICATE-----
" > /tmp/myvpn/server.crt
echo "
-----BEGIN DH PARAMETERS-----
!!!REPLACE WITH YOUR CONTENT!!!
-----END DH PARAMETERS-----
" > /tmp/myvpn/dh1024.pem
echo "
----- BEGIN X509 CRL----- #Hier wird die Revocation List geschrieben
!!!REPLACE WITH YOUR CONTENT!!!
----- END X509 CRL-----
" > /tmp/myvpn/crl.pem

sleep 5
/tmp/myvpn/myvpn --config /tmp/myvpn/ipsec.config

[edit] Firewall Einträge (WRT54 - LINUX)

Desweiteren benötigt man bei der DD-WRT Lösung noch einen Firewalleintrag. Dieser teilt dem Router mit auf welchem Port er eingehende Anfragen zulassen soll.

/usr/sbin/iptables -I INPUT -p udp --dport 1194 -j ACCEPT

WICHTIG:
Man muß hier noch das Protokoll und das Port anpassen auf welches der Router reagieren soll.

Anpassungen:
-p udp #Protokoll Anpassen !!!
--dport 1194 #Port Anpassen !!!

[edit] Server Config (Windows)

port 1119 #Port auf die eigenen Anforderungen ANPASSEN !!!
proto udp
mode server
ifconfig 192.168.0.227 255.255.255.0 #IP-Adresse des Servers ANPASSEN !!!
ifconfig-pool 192.168.0.161 192.168.0.169 #IP-Adressenbereich den der Server an die Clients vergibt ANPASSEN !!!
ifconfig-noexec
dev tap
client-to-client
tls-server
crl-verify C:\\Programme\\OpenVPN\\server\\crl.pem #Pfad ANPASSEN !!!
dh C:\\Programme\\OpenVPN\\server\\server_dh1024.pem #Pfad und Dateiname ANPASSEN !!!
ca C:\\Programme\\OpenVPN\\server\\ca.crt #Pfad ANPASSEN !!!
cert C:\\Programme\\OpenVPN\\server\\server.crt #Pfad und Dateiname ANPASSEN !!!
key C:\\Programme\\OpenVPN\\server\\server.key #Pfad und Dateiname ANPASSEN !!!
float
keepalive 15 60
push "keepalive 15 60"
verb 4

[edit] Client Config (WRT54 - LINUX)

cd /tmp
mkdir /tmp/myvpn
ln -s /usr/sbin/openvpn /tmp/myvpn/myvpn
/tmp/myvpn/myvpn --mktun --dev tap0

brctl addif br0 tap0
ifconfig tap0 0.0.0.0 promisc up
ip route add 192.168.0.0/24 dev br0

echo "client
dev tap0
proto udp
port 1194 #Port anpassen!!
remote server.dyndns.com #Server (URL oder IP) anpassen!!
tls-client
ns-cert-type server
nobind
daemon
ca /tmp/myvpn/ca.crt
cert /tmp/myvpn/client1.crt
key /tmp/myvpn/client1.key" > /tmp/myvpn/ipsec.config

echo "
-----BEGIN CERTIFICATE-----
!!!REPLACE WITH YOUR CONTENT!!!
-----END CERTIFICATE----- 
" > /tmp/myvpn/ca.crt
echo "
-----BEGIN RSA PRIVATE KEY-----
!!!REPLACE WITH YOUR CONTENT!!!
-----END RSA PRIVATE KEY----- 
" > /tmp/myvpn/client1.key
chmod 600 /tmp/myvpn/client1.key
echo "
-----BEGIN CERTIFICATE-----
!!!REPLACE WITH YOUR CONTENT!!!
-----END CERTIFICATE-----
" > /tmp/myvpn/client1.crt

sleep 5
/tmp/myvpn/myvpn --config /tmp/myvpn/ipsec.config

[edit] Config Notebook/PC mit Zugriff auf beide Netzwerke (Windows)

port 1194 #PORT ANPASSEN
remote server.dyndns.com #SERVER ANPASSEN (URL oder IP)
proto udp
dev tap
tls-client
ns-cert-type server
route 192.168.1.0 255.255.255.0 192.168.0.1 #VPN Client setzt beim Verbindungsaufbau die Route zum zweiten Netzwerk
ca C:\\Programme\\OpenVPN\\client\\ca.crt
cert C:\\Programme\\OpenVPN\\client\\cl.crt
key C:\\Programme\\OpenVPN\\client\\cl.key
pull #Client verliert ohne das Pull bei Inaktivität die Verbindung

[edit] Config Notebook/PC mit Zugriff auf ein Netzwerk (Windows)

port 1194 #PORT ANPASSEN
remote server.dyndns.com #SERVER ANPASSEN (URL oder IP)
proto udp
dev tap
tls-client
ns-cert-type server
ca C:\\Programme\\OpenVPN\\client\\ca.crt
cert C:\\Programme\\OpenVPN\\client\\cl.crt
key C:\\Programme\\OpenVPN\\client\\cl.key
pull #Client verliert ohne das Pull bei Inaktivität die Verbindung

[edit] Einträge DNSMASQ am DD-WRT Router

[edit] Server (WRT):

server=/homenet/192.168.1.1


[edit] Client (WRT):

server=/athome/192.168.0.1


Die DNSMASQ – Einträge sind dafür da, dass mit Namensauflösung zwischen den Netzen gearbeitet werden kann.

[edit] Skizzen

[edit] mehrere Netzwerke

Image:Netzwerkskizze.png

[edit] ein Netzwerk

Image:Netzwerk2.png

erstellt und getestet von Endebe & renmet 12:08, 22 Feb 2007 (CET)
angepasst von Endebe & renmet 17:00, 25 Feb 2007 (CET)

Version 1.6