OpenVPN-Tunnel Server / Client, Netzwerke verbinden
From DD-WRT Wiki
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
[edit] ein Netzwerk
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