[size=+1]Diese Dokumentation beschreibt, wie man auf der
AVM Fritz!Box einen Multi-Client OpenVPN-Server aufsetzt[/size]
Von: Hellspawn
Letzte Änderung: Diese Dokumentation wird laufend geändert, optimiert usw. Um den aktuellen Stand zu erkennen, scrolle bitte zum Ende dieser Dokumentation
Vorwort
Ich übernehme keine Haftung!
Inhaltsverzeichnis
1. Voraussetzungen
1.1 Grundlagen schaffen
1.2 Programm
1.3 Infrastruktur-Beispiel
1.4 Hinweis zum Editor
2. Zertifikate erstellen
3. OpenVPN-Client (Windows) konfigurieren
4. OpenVPN-Server (Fritz!Box) konfigurieren und starten
5. Windows-Client mit der Fritz!Box per VPN verbinden
6. Verbindung testen
7. Sicherheit
Anhang
Change-Log
1. Voraussetzungen
Ich setze ein gewisses Wissen voraus. Denn ich werde jetzt nicht anfangen die Grundlagen zu erklären. Das ist ja auch nicht Sinn und Zweck von diesem Thread. Mal abgesehen davon, haben andere Leute diese grundlegenden Sachen schon sehr gut erklärt. Wenn du von Fritz!Box Modifikationen keine Ahnung hast, dann musst du diese Sachen lesen, verstehen und umgesetzt haben (!!!):
1.1 Grundlagen schaffen
Titel: Tuning und Hacks für die Fritz!Box
Autor:
www.tecchannel.de
Ziel: Grundsätzliches (Systemebene, flash, tmp, debug.cfg), Telnet- und FTP-Zugang
Link:
http://www.tecchannel.de/server/linux/432803/
Anmerkung 1: bis einschließlich Seite 13, der Rest danach ist nicht wichtig
Anmerkung 2: Nach dem ersten Eintrag in der debug.cfg (Start des Telnet-Daemons), sollte das hier als zweites eingetragen werden:
Code:
while !(ping -c 1 [url]www.google.de);[/url] do
sleep 2
done
Das bewirkt, dass die Verarbeitung der debug.cfg erst voranschreitet, wenn das Internet erreichbar ist.
Titel: Crash-Kurs: Arbeiten mit vi
Autor:
www.tecchannel.de
Ziel: vi kennenlernen
Link:
http://www.tecchannel.de/server/linux/431407/
Anmerkung: Die ersten drei Seiten reichen aus
Titel: Fritz!Box-Hack: Computer über das Internet starten und fernsteuern
Autor:
www.tecchannel.de
Ziel: DynDNS, ar7.cfg
Link:
http://www.tecchannel.de/server/linux/432967/
Anmerkung: Die Einbindung von WOL und SSH sind nicht zwingend erforderlich
Titel: Diverse
Autor: Diverse
Ziel: VPN verstehen
Links:
http://de.wikipedia.org/wiki/Virtual_Private_Network
http://de.wikipedia.org/wiki/Tunnel_(EDV)
http://de.wikipedia.org/wiki/OpenVPN
http://freifunk.net/wiki/OpenVPNHowtoDatenaustauschNachVerbindngsherstellung#wasbedeutetvpn (Von 1.2 bis 1.4)
1.2 Programm
Windows: OpenVPN ist beheimatet auf
www.openvpn.net. Ich bevorzuge aber Klicki-Bunti und daher empfehle ich auf
www.openvpn.se das "Installation Package" herunterzuladen (ist mit einem GUI) und auf dem Windows Rechner zu installieren (Besondere Angaben sind bei der Installation nicht notwendig. Immer auf "Weiter" klicken, die Treiberinstallation bestätigen.
FritzBox: Die Binary für die Fritz!Box gibt hier (
http://www.ip-phone-forum.de/showpost.php?p=527338&postcount=180, o penvpn.2.0.5(static).zip) , kompiliert von jspies (Danke noch mal dafür!). Die Datei müsst ihr (in Windows natürlich) runterladen, entpacken und auf euren Webspace laden
1.3 Infrastruktur-Beispiel
Code:
[b]Fritz!Box[/b]--------------[Internet]------------[b]08/15 Router[/b]
192.168.178.254 192.168.1.254
10.0.0.1 (VPN Server) | |
| | | |
+------+ +------+ +------+ +------+
| | | |
[b]PC-1[/b] [b]PC-2[/b] [b]PC-A[/b] [b]PC-B[/b]
192.168.178.1 192.168.178.2 192.168.1.1 192.168.1.2
10.0.0.2 (VPN Client)
1.4 Hinweis zum Editor
Welche Datei erstelle ich wo und womit?
Code:
[b]Datei Wo erstellen? Womit erstellen?[/b]
Zertifikate PC .bat Dateien, siehe Punkt 2
Keys PC .bat Dateien, siehe Punkt 2
client01.ovpn PC Editor, egal welcher
server.conf Fritz!Box vi
Wenn ihr die server.conf auf einem Windows-Rechner erstellen wollt, dann braucht ihr einen Editor der Unix-Zeilenumbrüche unterstützt! Wer ein paar Euro übrig hat, dem kann ich ich UltraEdit32 empfehlen!
2. Zertifikate erstellen
Die Zertifikate erstellen wir der Einfachheit halber auf der Windows Maschine (PC-A). Die folgenden Sachen sind in der Windows Eingabeaufforderung (kurz cmd) einzugeben (nach jeder Zeile Enter drücken):
Code:
cd c:\programme\openvpn\
mkdir keys
cd easy-rsa
init-config
Die cmd nun unbedingt geöffnet lassen! Nun die Datei c:\programme\openvpn\easy-rsa\vars.bat bearbeiten. Hier sind verschiedene Werte zu definieren.
1.: KEY_SIZE: Diese steht standardmäßig auf 1024 Bit. Wird dieser Wert genutzt, wird die Datei "dh1024.pem" erzeugt. Wählt ihr 2048 Bit, wird die Datei "dh2048.pem" erzeugt. Diese Dokumentation geht von 1024 Bit aus. Solltet ihr den Wert ändern, dann berücksichtigt dies, wenn ihr mit copy&paste arbeiten solltet. Noch eine Info zu der Größe vom Key:
vars.bat schrieb:
Increase this to 2048 if you are paranoid. This will slow down TLS negotiation performance as well as the one-time DH parms generation process.
2.: KEY_DIR muss so aussehen:
Code:
set KEY_DIR=c:\programme\openvpn\keys
3.: Zudem sind diese 5 Keys an euch anzupassen:
Code:
set KEY_COUNTRY= (max. 2 Stellen)
set KEY_PROVINCE=
set KEY_CITY=
set KEY_ORG=
set KEY_EMAIL=
Nun vars.bat speichern und schließen und wieder in die cmd wechseln. Dort folgendes eingeben:
Code:
vars
clean-all
build-ca (Alles mit Enter bestätigen, bei "Common Name" ca eintragen)
build-dh (Dauert ca. 5 Minuten)
build-key-server fritzbox (Alles mit Enter bestätigen, bei "Common Name" EBENFALLS fritzbox eintragen, Fragen mit y bestätigen)
build-key client01 (Alles mit Enter bestätigen, bei "Common Name" EBENFALLS client01 eintragen, Fragen mit y bestätigen)
- Für
jeden Client muss ein Key erstellt werden!
- Verwendet
pro Client beim Befehlsaufruf (build-key xyz)
und beim "Common Name"
die selben Namen!
- "ca", "fritzbox" und "client01" sind natürlich frei wählbare Namen. Diese können durch beliebige ersetzt werden. Wenn ihr andere benutzen wollt, dann denkt natürlich daran bei copy&paste aufzupassen!
- Info: Die Zertifikate und Keys wurden zwar auf einer Windows-Maschine erzeugt, liegen aber im Unix-Format vor (ist nichts außergewöhnliches!). Ihr habt keinen Grund, diese Dateien zu ändern! Aber wenn ihr das aus irgendeinem Grund doch machen wollt, dann denkt daran, dass ihr die Dateien
die für die Fritz!Box sind mit einem Editor bearbeitet, der Unix-Zeilenumbrüche unterstützt!!!
3. OpenVPN-Client (Windows = PC-A) konfigurieren
Die folgenden Dateien von "c:\programme\openvpn\keys" nach "c:\programme\openvpn\config" kopieren:
Code:
ca.crt
client01.crt
client01.key
In "c:\programme\openvpn\config" mit einem
beliebigem Editor eine Datei namens "Verbindung zu meiner FritzBox.ovpn" erstellen.
Natürlich müsst ihr eure DynDNS-Adresse ändern. Achtet auf die richtigen Dateinamen. Folgendes schreibt ihr in die Datei:
Code:
# OpenVPN v2.0.5 config:
#
# Grundsätzliches (Was soll der CLIENT nutzen)
port 1194
proto udp
dev tap
# Client-Einstellungen
tls-client
ns-cert-type server
remote [COLOR="BLUE"][b]alias.dyndns.org[/COLOR][/b] 1194
# Authentifizierung und Verschlüsselung
ca [COLOR="RED"][b]ca.crt[/COLOR][/b]
cert [COLOR="RED"][b]client01.crt[/COLOR][/b]
key [COLOR="RED"][b]client01.key[/COLOR][/b]
auth SHA1
cipher AES-256-CBC
# Sonstiges
pull
4. OpenVPN-Server (Fritz!Box) konfigurieren und starten
Ihr müsst auf der Fritz!Box den UDP Port 1194 in der ar7.cfg freigeben (Wie bereits bei den Grundlagen gelernt). Ich werde trotzdem nochmal kurz auf die Grundlagen eingehen. Um das ganze richtig zu machen geht ihr wie folgt vor.
1.: Geht in die Web-Oberfläche von eurer Fritz!Box in den Menüpunkt Internet / Portfreigabe / Neue Portfreigabe. Dort nehmen wir einen Scheineintrag vor, um gleich die richtige Stelle in der ar7.cfg zu finden. Tragt folgendes ein:
Code:
Portfreigabe aktiv für Andere Anwendungen
Bezeichnung HIER BIST DU RICHTIG
Protokoll udp
von Port 12345 bis Port 12345
an IP-Adresse 192.168.178.123
an Port 12345
Den Haken setzen, übernehmen klicken, fertig!
2.: Nun per Telnet, SSH oder was auch immer auf die Systemebene und folgendes eingeben:
Code:
cat /var/flash/ar7.cfg > /var/tmp/ar7.cfg
vi /var/tmp/ar7.cfg
Nun durchsucht ihr eure ar7.cfg nach eurem Eintrag. So sieht dann der eingerückte Block aus. Das rote ist der Eintrag, den ihr hinzufügen müsst:
Code:
forwardrules = "tcp 0.0.0.0:0 0.0.0.0:0 1 out",
"udp 0.0.0.0:0 0.0.0.0:0 1 out",
[COLOR="Red"][B]"udp 0.0.0.0:1194 0.0.0.0:1194",[/B][/COLOR]
"udp 0.0.0.0:5060 0.0.0.0:5060",
"udp 0.0.0.0:7078 0.0.0.0:7078",
"udp 0.0.0.0:7079 0.0.0.0:7079",
"udp 0.0.0.0:7080 0.0.0.0:7080",
"udp 0.0.0.0:7081 0.0.0.0:7081",
"udp 0.0.0.0:7082 0.0.0.0:7082",
"udp 0.0.0.0:7083 0.0.0.0:7083",
"udp 0.0.0.0:7084 0.0.0.0:7084",
"udp 0.0.0.0:7085 0.0.0.0:7085",
"udp 0.0.0.0:7086 0.0.0.0:7086",
"udp 0.0.0.0:7087 0.0.0.0:7087",
"udp 0.0.0.0:7089 0.0.0.0:7089",
"udp 0.0.0.0:7090 0.0.0.0:7090",
"udp 0.0.0.0:7091 0.0.0.0:7091",
"udp 0.0.0.0:7092 0.0.0.0:7092",
"udp 0.0.0.0:7093 0.0.0.0:7093",
"udp 0.0.0.0:7094 0.0.0.0:7094",
"udp 0.0.0.0:7095 0.0.0.0:7095",
"udp 0.0.0.0:7096 0.0.0.0:7096",
"udp 0.0.0.0:7097 0.0.0.0:7097",
"udp 0.0.0.0:12345 192.168.178.123:12345 0 # HIER BIST DU RICHTIG";
shaper = "globalshaper";
3.: Folgendes eingeben:
Code:
cp /var/tmp/ar7.cfg /var/flash/ar7.cfg
reboot
Wenn die Fritz!Box wieder oben ist, dann per telnet oder SSH einloggen. Zu Übersichtlichkeit arbeiten wir nicht in /var/tmp, sondern erstellen uns einen Unterordner:
Code:
cd /var/tmp
mkdir vpn
cd vpn
Nun zurück zum Windows-Client. Nun übertragen wir die Dateien per FTP zur Fritz!Box. Den FTP habt ihr ja schon drauf, weil ihr die Grundlagen durchgearbeitet habt, oder? ;-) Achtet darauf, dass die Dateien
binär übertragen werden! Die meisten FTP-Clients erkennen das selber, aber kontrolliert sichheitshalber eure Einstellungen! Folgende Dateien auf Fritz!Box nach /var/tmp/vpn übertragen:
Code:
ca.crt
fritzbox.crt
fritzbox.key
dh1024.pem
Wieder zur Fritz!Box: Dort laden wir uns jetzt OpenVPN auf die Fritz!Box und machen es ausführbar
Code:
wget -O /var/tmp/vpn/openvpn http://www.Deine-WebSpace-URL.de/openvpn
chmod +x /var/tmp/vpn/openvpn
Nun erstellen wir auf der Fritz!Box die Server Konfiguration mit dem mitgeliefertem Editor "vi". Wenn ihr euch nicht an die Anleitung halten wollt und die server.conf auf dem Windows-Rechner erstellen wollt, um sie dann per FTP zu übertragen, dann benutzt einen Editor der Unix-Zeilenumbrüche unterstützt!
Achtet auf die richtigen Dateinamen und Pfadangaben! Gebt nun auf Systemeeben diesen Befehl ein:
Code:
vi /var/tmp/vpn/server.conf
Nun gebt ihr folgendes ein
Code:
# OpenVPN v2.0.5 config:
#
# Grundsaetzliches
port 1194
proto udp
dev tap
# Server-Einstellungen
mode server
tls-server
server 10.0.0.0 255.255.255.0
client-to-client
# Dies ist der IP-Bereich von eurem FritzBox-LAN
push "route 192.168.178.0 255.255.255.0"
# Authentifizierung und Verschluesselung
ca [COLOR="RED"][b]/var/tmp/vpn/ca.crt[/COLOR][/b]
cert [COLOR="RED"][b]/var/tmp/vpn/fritzbox.crt[/COLOR][/b]
key [COLOR="RED"][b]/var/tmp/vpn/fritzbox.key[/COLOR][/b]
dh [COLOR="RED"][b]/var/tmp/vpn/dh1024.pem[/COLOR][/b]
auth SHA1
cipher AES-256-CBC
# Sonstiges
ping 10
push "ping 10"
ping-restart 60
push "ping-restart 60"
Nun noch ein paar Berechtigungen ändern
Code:
chmod 600 /var/tmp/vpn/fritzbox.key
chmod 600 /var/tmp/vpn/server.conf
Jetzt starten wir den OpenVPN Server auf der Fritz!Box
Code:
/var/tmp/vpn/openvpn --cd /var/tmp/vpn --config server.conf --dev-node /dev/misc/net/tun
Wenn ihr "Initialization Sequence Completed" lesen könnt, dann ist alles super gelaufen. Er sagt, dass "keepalive" fehlt, das ist aber ok. Denn dafür gibt es "ping" und "ping-restart" (Diese beiden Optionen kann man im Gegensatz zu keepalive pushen). mssfix, fragment und tun-mtu sind nicht soo wichtig. Das Fein-Tuning kommt später… OpenVPN könnt ihr nun mit Strg-C beenden. Sollte sich OpenVPN mal aufhängen, dann verbindet eine zweite Sitzung und gebt dort ein:
OpenVPN könnt ihr mit --daemon im Hintergrund laufen lassen
Code:
/var/tmp/vpn/openvpn --cd /var/tmp/vpn –-daemon --config server.conf --dev-node /dev/misc/net/tun
5. Windows-Client mit der Fritz!Box per VPN verbinden
Manuell verbinden:
Auf dem Windows Rechner ist euch sicherlich ein neues Symbol im Tray aufgefallen (zwei rote Monitore und eine Weltkugel). Dort macht ihr einen Rechtsklick drauf, und wählt Connect (Solltet ihr mehrere Configs auf eurem Windows Rechner haben, dann wählt im Kontextmenü "Verbindung zu meiner FritzBox" und dort dann Connect). Wenn die beiden Monitore grün werden, dann ist eure OpenVPN Verbindung hergestellt!
Automatisch verbinden:
Um sofort nach dem Systemstart eine Verbindung herzustellen, benutzen wir den Dienst von OpenVPN. Wenn eine Verbindung hergestellt ist, beendet diese. Nun öffnet ihr: Start / Einstellungen / Systemsteuerung / Verwaltung / Dienste. Dort Rechtsklick auf OpenVPN Service, Starttyp auf Automatisch stellen und auf Starten klicken. Wenn nun keine Fehlermeldung erscheinen hat alles geklappt. Übrigens: Das GUI wird in diesem Fall nichts anzeigen!
Firewall:
Denkt dran eure Firewall zu konfigurieren:
1. Muss OpenVPN kommunizieren dürfen (Daten senden oder Daten empfangen / Verbindung mit xy herstellen usw., je nachdem wie es euch eure Firewall meldet)
2. Der IP-Bereich 10.0.0.0 sollte zum vertrauten Bereich hinzugefügt werden (Das kann man z.B. bei ZoneAlarm oder Norton einstellen!)
3. Wenn ihr euch total unsicher seid, dann schaltet die Firewall kurzfristig ab (Gefährlich!)
6. Verbindung testen (Achtung! Scheint noch nicht richtig zu funzen! Siehe hier!)
Auf der Fritz!Box sollte nun ein "ping 10.0.0.2" und auf dem PC-A ein "ping 10.0.0.1" positive Resultate erzeugen. Wenn ihr noch nicht mal einen Ping zu Stande bekommt, dann geht nochmal
die Checkliste von MicAlter durch. Da wir aber alle PC’s miteinander verbinden möchten, müssen Routen gesetzt werden. EINE Route gibt’s schon: PC-A kennt die Route ins "Fritz!Box"-LAN. Denn diese wurde ja vom Server gepusht. PC-B kennt diese aber nicht. Daher müssen wir am PC-B folgendes in die cmd eingeben:
Code:
route add 192.168.178.0 mask 255.255.255.0 192.168.1.1 -p
Dadurch weiß der PC-B: Den IP-Bereich mit der IP 192.168.178.0 und mit der Netmask 255.255.255.0 erreiche ich über die IP 192.168.1.1. Und der PC-A weiß, dass er die Anfrage an das 192.168.178.0er Netz über den VPN-Tunnel schicken muss.
Nun muss aber noch das "Fritz!Box"-LAN auf das andere LAN zugreifen können. Dazu gehen wir in die Weboberfläche von der Fritz!Box und wählen den Punkt System / Netzwerkeinstellungen / IP-Routen / Neue Route. Dort tragen wir das hier ein:
Code:
IP-Netzwerk 192.168.1.0
Subnetzmaske 255.255.255.0
Gateway 10.0.0.2
Alle Anfragen aus dem "Fritz!Box"-LAN landen nun auf der Fritz!Box. Anfragen an das 192.168.1.0er Netz leitet die Box nun über den Tunnel weiter.
Nun sollte PC-2 den PC-B anpingen können!
7. Sicherheit
Ihr wollt eure Konfiguration bestimmt permanent auf der Fritz!Box einbinden!? Aber Vorsicht! Ihr dürft nicht alle Dateien auf euren Websapce speichern um sie dann nachzuladen. Sonst ist eure Sicherheit für'n A**** ;-)
Code:
Dateiname Benötigt von Zweck Geheim?
---------------------------------------------------------------------------
ca.crt Server + alle Clients Root CA Zertifikat Nein
ca.key Key signierender Rechner Root CA key Ja
dh1024.pem Nur Server Diffie Hellman Parameter NEin
fritzbox.crt Nur Server Server Zertifikat Nein
fritzbox.key Nur Server Server Key Ja
client01.crt Nur client01 client01 Zertifikat Nein
client01.key Nur client01 client01 Key Ja
usw...
Daher erzeugen wir die Dateien direkt auf der Fritz!Box mittels der debug.cfg. Dafür tragt ihr dort folgendes ein:
Code:
cat > /var/tmp/vpn/ca.key << "EOLOOP1"
as3dk5ehf
sjh3f6sk347
sihjaop34
EOLOOP1
Anhang
Viele Infos:
http://vpnforum.de/ext/OpenVPN_man_DE.rtf
Gutes Tutorial:
http://www.vpnforum.de/viewtopic.php?t=467
Change-Log
1.) 16.02.2006 21:42 = Hinweis auf ar7.cfg und Firewall hinzugefügt
2.) 17.02.2006 19:49 = Punkt 7 hinzugefügt
3.) 18.02.2006 15:17 = Schreibfehler (Danke an AndreR!)
4.) 23.02.2006 13:48 = Schreibfehler (Danke an Bejobe!), Punkt 1.4 hinzugefüht (Danke an Psychodad!), fritzbox.ovpn in client01.ovpn und fritzbox.conf in server.conf umbenannt
5.) 23.02.2006 20:13 = ar7.cfg ausführlicher beschrieben
6.) 23.02.2006 23:34 = vars.bat ausführlicher beschrieben + Schreibfehler (Danke an nosealert)
7.) 24.02.2006 00:46 = Firewall bissel ausformuliert, client bzw. client1 in client01 umbenannt, ar7.cfg und vars.bat
nochmals ausführlicher beschrieben (nun ist es Idiotensicher (IS), oder? *g*), ebenso chmod und wget IS gemacht *g*
8.) 24.02.2006 17:38 = Punkt 5 ausführlicher beschrieben, .ovpn auf dem Windows Rechner umbenannt, nochmals auf den Editor mit Unix-Zeilenumbrüchen eingegangen, FTP Binär-Übertragung, Kontrolle der Dateinamen, Checkliste von MicAlter (Danke dafür!)