[Gelöst] OpenVPN mit TAP-Device und DHCP auf Fritz!Box Fon

HMZ

Neuer User
Mitglied seit
19 Jun 2006
Beiträge
70
Punkte für Reaktionen
0
Punkte
6
Liebe Gemeinde,

auf meiner Fritz!Box Fon läuft ein OpenVPN-Server mit tun-Device, mit dem ich mich von der Firma aus durch Proxy und Firewall verbinden kann. So weit, so gut - ich würde diese Lösung aber gerne so modifizieren, dass ich auf der Fritz!Box ein TAP-Device habe, mich über VPN an der Box anmelde und via DHCP eine IP-Nummer aus dem üblichen 192.168.178.0 - Adresspool zugewiesen bekomme, so dass der Rechner quasi ein ganz normaler Arbeitsplatz im LAN wird.

Nachdem ich alle möglichen Howtos und Tutorials konsultiert und alles mögliche ausprobiert habe, stehe ich immer noch auf dem Schlauch. Zum einen musste ich feststellen, dass standardmäßig auf der Box nur der Device-Node /dev/misc/net/tun existiert.
Wird dieser Node auch für TAP-Devices verwendet, oder wie lege ich andernfalls einen entsprechenden TAP-Node an?

Wie müssten die Config-Dateien auf Client und Server aussehen, damit der Client automatisch eine IP-Adresse aus dem Fritz-Pool bezieht?

Vielen Dank vorab für Eure Unterstützung
Heiner
 
Zuletzt bearbeitet:
welcher art Proxy habt ihr auf der Arbeit? Das würde ich auch gerne machen, aber durch unseren Proxy ist kein durckommen. Überwacht die ports auch auf das richtige protokoll ... leider.
 
Hallo,
das ist eigentlich ganz einfach.
Hier die Beispiel server.conf

Code:
mode server
tls-server

port 1194

# TCP or UDP server?
;proto tcp
proto udp

# "dev tun" will create a routed IP tunnel,
# "dev tap" will create an ethernet tunnel.
# Use "dev tap" if you are ethernet bridging.
;dev tun
dev tap

dev-node /dev/net/tun

ca vpn-ca.pem
cert servercert.pem
key serverkey.pem  # This file should be kept secret

dh dh1024.pem

keepalive 10 120

auth MD5

cipher AES-256-CBC

comp-lzo

;max-clients 100

# You can uncomment this out on
# non-Windows systems.
user nobody
group nogroup

persist-key
persist-tun

status openvpn-status.log

;log         openvpn.log
;log-append  openvpn.log

verb 4

;mute 20

up ./bridge.up

jetzt müssen wir auf dem server nur noch das tap dev mit dem eth dev überbrücken, das habe ich mit dem bridge.up shellscript gemacht. ich habe es aber auf der box noch nicht getestet, es läuft so zur Zeit nur auf einem Debian GNU/Linux Server. Ich möchte es aber auf die Box schmeißen, sobald ich mehr weiß, poste ich nochmal. bridge-utils gibt es hier.

bridge.up:
Code:
#!/bin/sh

br="vpn0"
tap="tap0"
eth="eth0"
eth_ip="192.168.178.1"
eth_netmask="255.255.255.0"
eth_broadcast="192.168.178.255"

openvpn --mktun --dev $tap --dev-node /dev/net/tun

brctl addbr $br
brctl addif $br $eth
brctl addif $br $tap

ifconfig $tap 0.0.0.0 promisc up
ifconfig $eth 0.0.0.0 promisc up

ifconfig $br $eth_ip netmask $eth_netmask broadcast $eth_broadcast up

Beispiel client.conf:
Code:
client

dev tap
;dev tun

dev-node /dev/net/tun

;proto tcp
proto udp

remote myhost.homeunix.com 1194

;remote-random

resolv-retry infinite

nobind

;user nobody
;group nobody

persist-key
persist-tun

;http-proxy-retry # retry on connection failures
;http-proxy [proxy server] [proxy port #]

;mute-replay-warnings

ca vpn-ca.pem
cert clientcert.pem
key clientkey.pem

;ns-cert-type server

;tls-auth ta.key 1

auth MD5

cipher AES-256-CBC

comp-lzo

;log openvpn.log

verb 4

;mute 20

so müsste der OpenVPN laufen.

MfG Florian
 
mcmic schrieb:
welcher art Proxy habt ihr auf der Arbeit? Das würde ich auch gerne machen, aber durch unseren Proxy ist kein durckommen. Überwacht die ports auch auf das richtige protokoll ... leider.

Bei mir klappt's, indem ich auf dem Client über Port 443 rausgehe und diesen dann auf der Fritz!Box nach Port 1194 umleite.

Gruß
Heiner
 
Zunächst mal Danke für die Antworten!

Ich habe erst mal die files von fws ausprobiert, da ich mit einem statischen Schlüssel arbeite. Ergebnis:

Die angepasste debug.cfg scheint zu funktionieren. Der Server auf der Box startet zwar, aber der Client erhält keine IP-Adresse. Meistens erscheint die Meldung:

Code:
Initialization Sequence Completed With Errors ( see http://openvpn.net/faq.html#dhcpclientserv )

In der FAQ habe ich nachgesehen, die Windows-Firewall deaktiviert und auch die "Win32-ip"-Optionen ausprobiert, aber die funktionieren wohl nur bei manueller IP-Adresse. Seltsamerweise erhalte ich manchmal dennoch eine obskure Adresse aus dem öffentlichen Adressraum, die aber wohl kaum von meiner Box kommen kann.

Nachfolgend mal meine Configs:

Server (fritz!box):
Code:
dev tap0
proto tcp-server
dev-node /dev/misc/net/tun
port 1195 # ist Absicht!
verb 4
secret /var/tmp/mein.vpk
keepalive 10 60
ping-timer-rem
persist-tun
persist-key
comp-lzo

Client:
Code:
proto tcp-client
verb 4
port 443
dev tap
remote meineadresse.dyndns.org
secret ./mein.vpk
keepalive 10 60
ping-timer-rem
persist-tun
persist-key
comp-lzo
http-proxy mein.proxy 80

Da fehlt doch anscheinend irgendwas in Sachen DHCP, oder wie oder was????

Gruß
Heiner

@ WhiteWarrior:
Läuft Dein Server mit der Config auf einer Fritz!Box??? Das sieht mir eher nach einer "richtigen" Linux-Kiste aus.
 
Also, unser Proxy ist nicht zu knacken....
1. blockiert die firewall alles was nicht vom admin freigegeben ist
2. freie Ports werden aufs richtige Protokoll geprüft, sonst kommste nicht raus *seufz*

Aber das ist off topic...

Welchen ip bereich hat deine Box und welchen ip bereich hat den das Client netzwerk?
 
Hallo Heiner,

hast Du auch das Installationsscript aus dem Link benutzt? In dem Script wird das "tap0" Device angelegt.
Bei mir arbeitet es hervorragend.

Hier ist der Ausschnitt:
Code:
....
# Ausserdem muss tap0 einer Bridge zugeordnet werden. Standardmaessig wird die fritzbox
# im bridge-mode betrieben (d.h. alle interfaces sind imselben ip-netz). Dadurch
# hat man schon einer geeignete bridge "lan".
# leider fehlt das brctl...
# Deshalb wird mit der ar7.cfg getrickst wird um ein "brctl addif tap0" zu simulieren.
ar7cfgfile=/var/flash/ar7.cfg
# Aber zuerstmal wird gewartet, falls mal schief geht. Dann hat man vielleicht
# Zeit mittels telnet nach dem bootvorgang, aber noch vor dem ar7.cfg-tricksen einzugreifen
sleep 100

cat $ar7cfgfile > /var/tmp/ar7.cfg.backup
sed -e '/brinterfaces {$/,/}/s/"wdsdw3";/"wdsdw3", "tap0";/' < /var/tmp/ar7.cfg.backup > $ar7cfgfile
/etc/init.d/rc.net reload
# ar7.cfg hat ihren Dienst getan, alten Zustand wiederherstellen
cat /var/tmp/ar7.cfg.backup > $ar7cfgfile
....
 
Meine Box hat standardmäßig den IP-Bereich 192.168.178.0 255.255.255.0.

Der IP-Bereich des Clients (10.0.0.0 255.0.0.0) müsste doch eigentlich egal sein, wenn ich den Rechner nur über VPN an meine Box anschließen möchte??

Gruß
Heiner

Posting 2:

Hi Fritz,

ja, ich habe diesen Passus in meine debug.cfg eingefügt und anschließend die Box neu hochgefahren.

[Edit Novize: Bitte die "Ändern"-Funktion nutzen, um Nachträge einzuschieben, keine neuen Beiträge für jeden Satz aufmachen. Danke]
 
Zuletzt bearbeitet von einem Moderator:
Also ich habe das Prob. wenn ich mich von nem PC aus, der hinter ner FB hängt und den gleichen ip Bereich hat wie das Netzwerk mit dem VPN Server, einloggen will, das ich den gleichen Fehler bekomme wie Du. Logge ich mich von nem PC aus ein der ein komplett anderen IP Bereich hat klappt es.

Hier mal meine konfiguration:

habe ein virtuelles Webinterface anglegt um keine Portfreigabe in der ar7.cfg machen zu müssen. mit TCP-Protokoll klappt das, im Gegensatz zu UDP.
Code:
# Webinterface anlegen 
ifconfig eth0:1 192.168.178.10 netmask 255.255.255.0 up
Dann natürlich den port im webinterface auf diese ip freigeben.

meine Server config:
Code:
mode server
proto tcp-server 
port 1195
dev tap
dev-node /dev/misc/net/tun
tls-server
ca /var/tmp/vpn/ca.crt
cert /var/tmp/vpn/fritzbox.crt
key /var/tmp/vpn/fritzbox.key
dh /var/tmp/vpn/dh1024.pem
client-to-client
float
daemon
auth SHA1
cipher AES-256-CBC
ping 10
ping-restart 180
push "ping 10"
ping-restart 60
push "ping-restart 60"
verb 4
server-bridge 192.168.178.1 255.255.255.0 192.168.178.110 192.168.178.119

Ich hab allerdings mit Zertifikaten gearbeitet und nen Multi Client Server aufgebaut. Mußte halt ändern.

Meine config am PC sieht so aus:

Code:
float
port 1195
proto tcp-client
dev tap

#Client Einstellungen
tls-client
ns-cert-type server
remote xxxx.xxx.xxx 1195

#Authentifizierung und Verschlüsselung
ca ca.crt
cert client03.crt
key client03.key
auth SHA1
cipher AES-256-CBC

#Sonstiges
pull

Bin keine VPN-Experte und bestimmt kann man das verbessern (nehme gerne vorschläge an). Aber zumindest funzt es tadellos, sobald ich unseren Proxy umgangen habe *g*

Ach ja.... ganz wichtig !! Die Brigde in der ar7.cfg nicht vergessen !!!!
 
@hmz

Hallo Heiner,

hier ist meine Konfiguration:

server.cfg
Code:
dev tap0
secret static.key
dev-node /dev/misc/net/tun
tun-mtu 1400
fragment 1300
mssfix
comp-lzo
# timeouts
ping               15
ping-restart       60
ping-timer-rem
persist-tun
persist-key

client.cfg
Code:
remote xxxx.dyndns.xxx
float
dev tap
secret static.key
tun-mtu 1400
fragment 1300
mssfix
comp-lzo
ping               15
ping-restart       60
persist-tun
persist-key

Ein Detail ist noch wichtig, nach dem Anlegen des tap0 in der debug.cfg darf der multid nicht neu gestartet werden, sonst ist das Device tap0 wieder weg!!
 
Zuletzt bearbeitet:
Was ist denn der multid?
 
der multid(ämon) startet die Netzwerkdienste.

Wenn Du noch mehr Aufrufe in Deiner debug.cfg hast dann solltest Du die Erstellung des tap0 nach Möglichkeit an das Ende der Datei legen.
 
Das tap-Interface ist aber definitiv da. Wenn ich mich vom PC aus mit einer "tun-config" auf der Box anmelde, erhalte ich die Fehlermeldung, dass lokal ein tun- und remote ein tap-device definiert ist.

Kann es vielleicht sein, dass ich noch irgendwo die IP-Adresse des DHCP-Servers angeben muss, weil sonst der DHCP-Server aus dem Firmennetzwerk verwendet wird? Wenn ja, wie sähe so ein Eintrag aus?

Bin ratlos
Heiner
 
so kannst Du das nicht feststellen.
Der Server lauscht an dem angegebenen Port und ist mit tap konfiguriert, entsprechend antwortet er auf eine Client-Anfrage.
tap0 stellt eine Brücke zum LAN an der FRITZ!Box her. Wenn tap0 nicht vorhanden ist kann Dein tap-Device am Client keine IP vom DHCP-Server des LANs an der FRITZ!Box erhalten. Deshalb auch die Fehlermeldung bei Dir
Code:
....faq.html#dhcpclientserv )
 
@HMZ: Du hast recht, die Config lief so auf ner "richtigen" Linux-Kiste ( hab ich doch auch dazu geschrieben?! ), wie du sagst. Ich habe sie heute auf die Box portiert.

Ich wollte mein script erst mit brctl umschreiben, aber dann hab ich hier gelesen, dass es in der ar7.cfg geht - sehr schön - .

Jetzt hab ich nur ein anders problem:
Ich bekomme folgenden fehler, wenn ich mich am OpenVPN anmelden will:
Code:
TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
TLS Error: TLS handshake failed

weiß jemand damit was anzufangen?
 
@fritz:

Aber wie kann ich es denn feststellen???
 
@HMZ
Guten Morgen Heiner,

wenn Du Dich per Telnet oder SSH auf der Fritz!Box anmeldest kannst Du mit

Code:
ifconfig

feststellen welche Devices angelegt worden sind. Dabei muss auch das Device "tap0" aufgelistet werden.
 
es muss nicht unbedingt in der liste stehen, wenn du
Code:
ifconfig
eingibst.

es kann sein, dass du erst
Code:
ifconfig tap0 up
eingeben musst.

MfG Florian
 
@WhiteWarrior

Wenn das Device up ist dann siehst Du es beim Aufruf von ifconfig, wenn Du es nicht siehst dann ist es nicht up!

Darum ging es hier.
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.