OpenVPN einrichten, Netzwerkbrücke

-Nuke-

Well-Known Member
Hallo.

Ich will heute Abend mal einen OpenVPN-Server einrichten. Ich informiere mich gerade vorab etwas und stoße da auf mehrere Anleitungen die alle komplett anders sind :ugly:

Ich habe gerade mal diese angesehen:
http://blog.up-link.ro/how-to-install-openvpn-in-freebsd/

Ich habe nun 2 Netzwerkkarten drinnen. Welche bridged er da denn nun? Oder muss das noch separat gemacht werden? Weil mich irritieren die Kommentare, dass es funktioniert,aber andere Tutorials binden noch Kernel-Module mit ein und konfigurieren per ifconfig noch die Brücken...

Ich möchte quasi, dass sich mehrere Clients anmelden und sich dann untereinander sehen (fuer LAN-Spiele, um genau zu sein), als wären sie im LAN vernetzt. Mein Server ist FreeBSD 8.1.

Danke.
 
Also "bridgen" (ein grausames Wort) tust du iirc das tap-Device mit der Netzwerkkarte, die in dein Netzwerk geht.

Mein eigentlicher Grund warum ich schreibe: Hättest du etwas dagegen (gerne bin ich da dabei) das ganze hier "offen" zu dokumentieren? So im Stil von "hier ist die mitgelieferte Standardconfig, geändert wurde hier weil und dort weil".

Ich wollte schon öfter die die "Bridging-Variante" testen. Bislang habe ich nur die "Routing-Variante" genommen. auf openvpn.net steht jedoch "Relatively easy-to-configure solution for road warriors." bei der Bridging-Lösung, weshalb mich das schon interessiert.. :)

Zweite Frage: Warum nimmst du nicht die "Routing-Variante"? Hat das einen bestimmten Grund? Brauchst du "Broadcasts"?
 
Zweite Frage: Warum nimmst du nicht die "Routing-Variante"? Hat das einen bestimmten Grund? Brauchst du "Broadcasts"?

Sie sollen sich halt so verhalten als wenn sie im LAN hängen und jeder Client soll jeden sehen, da ist die Methode der Brücke einfacher und, glaube ich, auch schneller.

Und klar, wenn ich es hinbekommen habe, schreibe ich meine Konfig hier rein :D
 
Sie sollen sich halt so verhalten als wenn sie im LAN hängen und jeder Client soll jeden sehen, da ist die Methode der Brücke einfacher und, glaube ich, auch schneller.
Kann ich nicht wirklich beurteilen (da ich ja nur die Routing-Methode kenne). Aber dank "ccd" und "client-to-client" ist es nicht soooooo schwer ;)
 
Naja, ich kenne die Routing-Methode jetzt nicht, aber die Konfiguration sieht mir so böse aus :D
 
Das behaupte ich jetzt mal von der Bridging-Methode.. Die andere habe ich inzwischen (dank viel hilfe im IRC) so einigermaßen verstenden :)
 
Gut, also ich habe jetzt folgende Konfiguration. Konnte sie leider noch nicht testen, mangels Personen die gerade Online sind :D Aber aus meiner Windows-VM heraus kann ich auf mein Netzwerk zugreifen und aus meinem Netzwerk komme ich in meine VM.

re0 ist das Netzwerkinterface, welches im Netzwerk hängt, welches ich nach außen hin freigeben will. Das ist quasi mein normales Netzwerk hier zu Hause. Das andere ist eine Crossover-Verbindung zu meinem Computer (der Performace wegen, ist auch ein Intel-Chip).

re0 kriegt seine IP vom DHCP, dieser ist aber so eingestellt ihm immer die 192.168.159.100 zu geben. Nur der Rest (DNS, etc.) kriegt er dynamisch.

/etc/rc.conf (das fette ist das was ich hinzufügen musste)
Code:
hostname="FreeBSD.matti.privat"
ifconfig_em0="inet 192.168.77.100 netmask 255.255.255.0 mtu 9000"
ifconfig_re0="DHCP"
keymap="german.iso"
nfs_server_enable="YES"
rpcbind_enable="YES"
mountd_enable="YES"
sshd_enable="YES"
zfs_enable="YES"
powerd_enable="YES"
powerd_flags="-a adaptive"
smartd_enable="YES"
[b]gateway_enable="YES"
openvpn_enable="YES"
openvpn_configfile="/usr/local/etc/openvpn/server.conf"
openvpn_if="tap"
openvpn_flags="--script-security 2"[/b]

/usr/local/etc/openvpn/server.conf
Code:
port 1194
proto udp
dev tap0

ca /usr/local/etc/openvpn/keys/ca.crt
cert /usr/local/etc/openvpn/keys/server.crt
key /usr/local/etc/openvpn/keys/server.key
dh /usr/local/etc/openvpn/keys/dh1024.pem
tls-auth /usr/local/etc/openvpn/keys/ta.key 0

up /usr/local/etc/openvpn/up.sh
down /usr/local/etc/openvpn/down.sh

server-bridge 192.168.159.100 255.255.255.0 192.168.159.200 192.168.159.250
client-to-client
duplicate-cn
keepalive 10 120
cipher BF-CBC
comp-lzo
max-clients 10 
persist-key
persist-tun
status /var/log/openvpn-status.log
log-append  /var/log/openvpn.log
verb 4

/usr/local/etc/openvpn/up.sh
Code:
#!/bin/sh
/sbin/ifconfig bridge0 create
/sbin/ifconfig bridge0 addm re0 addm $dev up
/sbin/ifconfig $dev up

/usr/local/etc/openvpn/down.sh
Code:
#!/bin/sh
/sbin/ifconfig bridge0 deletem $dev
/sbin/ifconfig bridge0 destroy
/sbin/ifconfig $dev destroy

Den Rest (keys anlegen, etc.) kann man aus den ganzen Tutorials entnehmen. Das Vorgehen da ist überall gleich.

client.ovpn
Code:
client
remote 12.34.56.78 1194
dev tap
dev-node OpenVPN
proto udp
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
tls-auth ta.key 1
comp-lzo
verb 3
mute 20
pull

Wenn ich "echte" Tests habe, dann melde ich mich noch mal :D
 
Zuletzt bearbeitet:
So, konnte es gerade testen. Klappt alles bestens :) Client-To-Client funktioniert zumindest mit Pings ^_^. Heute Abend wird dann mal mit einem Spiel getestet.

Hier dann noch mal der gesamte Ablauf:

Code:
[B]In dem Beispiel wird das Interface re0 mit der IP 192.168.159.100 konfiguriert. 
Diese IP-Einstellung muss vorher geschehen.[/B]

cd /usr/ports/security/openvpn
make install clean

mkdir -p /usr/local/etc/openvpn/keys
cp -R /usr/local/share/doc/openvpn/ /usr/local/etc/openvpn/
cd /usr/local/etc/openvpn

cd /usr/local/etc/openvpn/easy-rsa/2.0
chmod +x *
sh
. ./vars
sh ./clean-all

sh ./build-ca

sh ./build-key-server server

sh ./build-key client1 [B]# immer anderen CommonName[/B]

sh ./build-dh

cp -R keys/* /usr/local/etc/openvpn/keys

openvpn  --genkey --secret  /usr/local/etc/openvpn/keys/ta.key

cp /usr/local/share/doc/openvpn/sample-config-files/server.conf /usr/local/etc/openvpn/
vi /usr/local/etc/openvpn/server.conf

vi /etc/rc.conf

vi /usr/local/etc/openvpn/up.sh 
vi /usr/local/etc/openvpn/down.sh
------------------------------------------------------------------
[B]/etc/rc.conf #folgendes an die Datei anfuegen
[/B]gateway_enable="YES"
openvpn_enable="YES"
openvpn_configfile="/usr/local/etc/openvpn/server.conf"
openvpn_if="tap"
openvpn_flags="--script-security 2"

[B]/usr/local/etc/openvpn/server.conf
[/B]port 1194
proto udp
dev tap0
ca /usr/local/etc/openvpn/keys/ca.crt
cert /usr/local/etc/openvpn/keys/server.crt
key /usr/local/etc/openvpn/keys/server.key
dh /usr/local/etc/openvpn/keys/dh1024.pem
tls-auth /usr/local/etc/openvpn/keys/ta.key 0
up /usr/local/etc/openvpn/up.sh
down /usr/local/etc/openvpn/down.sh
server-bridge 192.168.159.100 255.255.255.0 192.168.159.200 192.168.159.250
client-to-client
duplicate-cn
keepalive 10 120
cipher BF-CBC
comp-lzo
max-clients 10 
persist-key
persist-tun
status /var/log/openvpn-status.log
log-append  /var/log/openvpn.log
verb 4

[B]/usr/local/etc/openvpn/up.sh
[/B]#!/bin/sh
/sbin/ifconfig bridge0 create
/sbin/ifconfig bridge0 addm re0 addm $dev up
/sbin/ifconfig $dev up

[B]/usr/local/etc/openvpn/down.sh
[/B]#!/bin/sh
/sbin/ifconfig bridge0 deletem $dev
/sbin/ifconfig bridge0 destroy
/sbin/ifconfig $dev destroy

[B]Der Client benoetigt nun die  ca.crt, client1.crt, client1.key und den ta.key. 
Die Client.ovpn auf dem Client anlegen (C:\Programme\OpenVPN\config\) und 
dort alle Dateien reinkopieren.
client.ovpn[/B]
client
remote 12.34.56.78 1194
dev tap
dev-node OpenVPN #Interface nach OpenVPN-Installation umbenennen
proto udp
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
tls-auth ta.key 1
comp-lzo
verb 3
mute 20
pull
 
Wie sieht es denn aus mit dem LAN hinter dem Client? Hast du Zugriff auf "Client-Clients"? :) Bzw. kannst du welchen einrichten?
 
Wie sieht es denn aus mit dem LAN hinter dem Client? Hast du Zugriff auf "Client-Clients"? :) Bzw. kannst du welchen einrichten?

Nein, habe ich mit der Konfiguration nicht. Wenn ich 2 Netzwerke verbinden will, bräuchte ich 2 Bücken/OpenVPN-Server. Die Clients wählen sich ja "nur" in mein Netzwerk ein. Das tun sie ja mit einer eigenen Verbindung. Ergo müsste ein Client seine Tap-Verbindung ebenfalls überbrücken in sein Netzwerk.

Also entweder Server<->Server Brücke oder der Client überbrückt seine Verbindung in sein eigenes Netz.

Das benötige ich aber an der Stelle jetzt nicht.
 
So, ich bin nun auch endlich dazu gekommen deine Konfiguration zu testen. Nach ein paar PEBKAC-Problemen (die Serverzeit war falsch, weshalb der Client gemeint hat, dass das Zertifikat noch nicht gültig sei) konnte ich auch Verbindungen aufbauen.

Kann es sein, dass man mit deiner Konfiguration "nur" Zugriff über die "VPN-IP" auf die Clients hat? Vermutlich ist das bei dir sogar beabsichtigt... :)
 
Ja, die Clients wählen sich ja in das Netzwerk ein wo der Server steht. Der Server gibt den Clients dann eine IP. Damit spricht man dann auch die Clients an.
 
Jap.

Also mein internes Netzwerk habe ich auf 192.168.159.0 255.255.255.0 umgestellt, damit es nicht (bzw. nur unwahrscheinlich) zu einem Konflikt mit einem anderen Netzwerk kommt.

Jeder Client der sich jetzt anmeldet, kriegt eine IP von 192.168.159.200 bis 192.168.159.250. Das heißt von jedem Computer in meinem Netzwerk aus, kann ich auf jeden Client zugreifen und jeder Client auf jeden Computer in meinem Netzwerk. Es ist wie, als wenn sie mit am Switch hängen.

OpenVPN tap arbeitet afaik auf Layer 2 des OSI-Modells. Man kann sich also die OpenVPN-Verbindung wie ein langes Netzwerkkabel vorstellen :D

Man kann da auch nur eine ganze Menge mehr einstellen, aber dann hört mein Wissen über Netzwerke auch schon wieder auf. Ich kann Computer von Freunden in mein Netzwerk zum Zocken reinholen und das reicht mir auch schon ^^
 
Zuletzt bearbeitet:
Habe es gerade getestet. Ich habe das "VPN-Netz" ursprünglich in ein anderes Subnetz gesteckt. Jetzt ist es im gleichen. Perfekt. Genau das was ich (für einen weiteren Einsatzzweck) brauche.

Wobei das mit dem zweiten Subnetz auch etwas elegantes hat. Ich kann den Zugriff sehr leicht beschränken :)

Danke für die ausführliche Config übrigens :)
 
Zurück
Oben