• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

OpenVPN im Bridging-Modus auf OpenSUSE 10.2

Hallo zusammen,

ich hab mal wieder ein Problem :D

Situation:
Ich möchte mir gerne eine VPN Gateway basteln. Soll heißen ich will mich von unterwegs oder von Freunden aus mit meinem Laptop(Win XP) in mein Heimnetzwerk einloggen können. Um zu Hause ins Internet zu gelangen verwende ich eine FritzBox die ich über eine DynDns Adresse von außen ansprechen kann. Die Gateway ist ein ganz normaler Rechner mit Textbasierter Oberfläche. Dort läuft OpenSuse10.2. In meinem Netz verwende ich IP Adressen aus dem Netz 192.168.0.0/24. Der Laptop hat immer andere Adressen, aber ich denke das sollte ja kein Problem sein.
Die Fritzbox soll also die eingehenden Anfragen an die Gateway weiterleiten und diese soll dann einen Tunnel aufbauen der dann über bridging mit dem Lan Verbunden ist.

Problem:
Jetzt zu dem Problem. Ich habe das OpenVPN Paket von Suse installiert und mal bei google gesucht leider finde ich immer nur Anleitungen von Windows oder anderen Linux Varianten. Ich hab das dann einfach mal damit probiert aber nach dem 3 mal hab ich es dann aufgegeben. Hat jemand eine gute Anleitung für Suse oder ein paar Tipps ich bin für alles dankbar!!
 

framp

Moderator
Teammitglied
Interessanter Setup.

Bei mir gibt es nur einen ssh Zugang, d.h. ich kann per scp in beide Richtungen Dateien kopieren. Allerdings brauche ich bislang auch nur diese Funktionalität und bin damit glücklich :lol: Was brauchst Du mehr an Funktionalität?
 
OP
T

thunderbird85

Member
:) Tja das ist eigentlich ganz einfach in meinem Lan stehen ein Linux Server auf dem meine Daten liegen. Da ich aber viel unterwegs bin möchte ich nicht auf den gewohnen Komfort verzichten (Samba Freigabe, Druckaufträge versenden, Mails abrufen, usw ). Wichtig ist mir auch das ich nicht immer Daten hin und her kopieren muss sonder sofort bearbeiten kann. :lol:
 
Druckeraufträge an zuhause versenden wenn dort keiner ist, das ist in der Tat ein interessantes Setup :lol:
("Sofort bearbeiten" => sshfs ist auch eine Möglichkeit)
 
OP
T

thunderbird85

Member
:) OK ich gebe zu, das ich ein wenig die Herausforderung gesucht habe :) auch wenn ich im Moment noch nicht so recht weiter komme. Also wie gesagt ich bin für jeden Tipp sehr Dankbar!!
 
thunderbird85 schrieb:
:) OK ich gebe zu, das ich ein wenig die Herausforderung gesucht habe :) auch wenn ich im Moment noch nicht so recht weiter komme. Also wie gesagt ich bin für jeden Tipp sehr Dankbar!!

Also ich habe das OpenVPN (Version: 2.0.8-16@i586) bei mir am Laufen, als Client unter openSuSE 10.2. Ich habe allerdings keinen Plan wie die Server-Seite dazu aussieht, da es sich dabei um unseren Firmen-Server handelt.

Und wenn ich das was hier bei mir abläuft richtig verstehe,dann spielt die Musik auf dem Server. Ich schliesse das daraus dass beim Verbindungsaufbau diverse PUSH-Befehle kommen, die auf dem Server abgelegt sein müssen.
 

G aus W

Hacker
Hallo thunderbird85,

Dein Ansatz ist - wenn ich Dich nicht falsch verstehe - problemlos machbar, ich habe mir vor kurzem genau so eine Sache eingerichtet: Mein "Roadwarrior" ist ein Laptop, auf dem SuSE 10.1 läuft (kann aber auch eine andere Distri sein, ist hier unerheblich). Die Gegenstelle (mein LAN) besteht aus einem PC mit openSUSE 10.2, auf dem der openVPN Server läuft. Den Rechner spreche ich über eine DYNDNS-Adresse an, damit ich ihn trotz wechselnder IP stets von außen erreichen kann. Über diesen PC, der dann imi LAN als Router fungiert, kann ich jeden weiteren Rechner im LAN erreichen.

Die installierte Version von openVPN: openvpn-2.0.8-16

Ist es das, was Dir vorschwebt?

Nur Mut, das ist mühelos einzurichten. Ich kann's nur empfehlen, feine Sache!

Gruß Greg
 
OP
T

thunderbird85

Member
Hallo G aus W genau so möchte ich das haben ja :D nur das mein Client im Moment noch ein Win XP PC ist auf dem dieser OpenVPN Client für Windows laufen soll!!
Kannst du mir ne kurze Anleitung zur verfügung stellen ??
 

Beppo

Member
Hi thunderbird85,

ich habe da was für dich:

hier
http://www.vpnforum.de/viewtopic.php?t=483
steht wie du dir Zertifikate machst, nur die Schlüsselstärke von 1024 auf 4096 heben.
hier
http://de.gentoo-wiki.com/Openvpn
gibts nen guten Überblick.
Dann brauchst du noch nen Skript was die ne Bridge übers tap und eth Interface spannt, etwa so



Code:
#!/bin/bash

#################################
# Set up Ethernet bridge on Linux
# Requires: bridge-utils
#################################

/etc/init.d/network stop

# Define Bridge Interface
br="br0"

# Define list of TAP interfaces to be bridged,
# for example tap="tap0 tap1 tap2".
tap="tap0"

# Define physical ethernet interface to be bridged
# with TAP interface(s) above.
eth="eth0"
eth_ip="192.168.0.2"
eth_netmask="255.255.255.0"
eth_broadcast="192.168.0.255"

for t in $tap; do
    openvpn --mktun --dev $t
    done

    brctl addbr $br
    brctl addif $br $eth

    for t in $tap; do
        brctl addif $br $t
        done

        for t in $tap; do
            ifconfig $t 0.0.0.0 promisc up
            done

            ifconfig $eth 0.0.0.0 promisc up

            ifconfig $br $eth_ip netmask $eth_netmask broadcast $eth_broadcast

route add default gw 192.168.0.1

und eins was die Bridge wieder abbaut wenn openvpn nicht läuft:

Code:
#!/bin/bash

####################################
# Tear Down Ethernet bridge on Linux
####################################

# Define Bridge Interface
br="br0"

# Define list of TAP interfaces to be bridged together
tap="tap0"

ifconfig $br down
brctl delbr $br

for t in $tap; do
    openvpn --rmtun --dev $t
    done

ifconfig eth0 192.168.0.2 up
route add default gw 192.168.0.1

und etwa so eine openvpn.conf dazu

Code:
# Which local IP address should OpenVPN
# listen on? (optional)
local 192.168.0.2
port 1194
proto udp
dev tap0


# Any X509 key management system can be used.
# OpenVPN can also use a PKCS #12 formatted key file
# (see "pkcs12" directive in man page).
ca /etc/openvpn/certs/ca.crt
cert /etc/openvpn/certs/server.crt
key /etc/openvpn/keys/server.key  # This file should be kept secret

# Diffie hellman parameters.
# Generate your own with:
#   openssl dhparam -out dh1024.pem 1024
# Substitute 2048 for 1024 if you are using
# 2048 bit keys.
dh /etc/openvpn/dh4096.pem
mode server
tls-server
push "route-gateway 192.168.0.1"
push "route-delay"
;push "redirect-gateway"
;push "dhcp-option DNS 192.168.0.2"
;push "dhcp-option WINS 192.168.0.2"

client-to-client
# IF YOU HAVE NOT GENERATED INDIVIDUAL
# CERTIFICATE/KEY PAIRS FOR EACH CLIENT,
# EACH HAVING ITS OWN UNIQUE "COMMON NAME",
# UNCOMMENT THIS LINE OUT.
;duplicate-cn

# The keepalive directive causes ping-like
# messages to be sent back and forth over
# the link so that each side knows when
# the other side has gone down.
# Ping every 10 seconds, assume that remote
# peer is down if no ping received during
# a 120 second time period.
keepalive 10 130
ping-timer-rem
push "ping 10"
push "ping-restart 90"
push "ping-timer-rem"
# For extra security beyond that provided
# by SSL/TLS, create an "HMAC firewall"
# to help block DoS attacks and UDP port flooding.
#
# Generate with:
#   openvpn --genkey --secret ta.key
#
# The server and each client must have
# a copy of this key.
# The second parameter should be '0'
# on the server and '1' on the clients.
tls-auth ta.key 0 # This file is secret
auth SHA1

# Select a cryptographic cipher.
# This config item must be copied to
# the client config file as well.
;cipher BF-CBC        # Blowfish (default)
;cipher AES-128-CBC   # AES
;cipher DES-EDE3-CBC  # Triple-DES
cipher AES-256-CBC   # AES 256bit

# Enable compression on the VPN link.
# If you enable it here, you must also
# enable it in the client config file.
;comp-lzo

# The maximum number of concurrently connected
# clients we want to allow.
max-clients 5

user nobody
group nogroup

persist-key
persist-tun
float
#crl-verify /etc/openvpn/crls/crl.pem

status openvpn-status.log

log         /etc/openvpn/openvpn.log
log-append  /etc/openvpn/openvpn-append.log

# 0 is silent, except for fatal errors
# 4 is reasonable for general usage
# 5 and 6 can help to debug connection problems
# 9 is extremely verbose
verb 4
mute 20

Und nen init skript zum starten und stoppen so verändern:
Code:
case "$1" in
    start)
        echo -n "Starte $DAEMON "
        /etc/openvpn/./bridge-start
        echo -n "Starte Netzwerkbrücke br0"
        sleep 5

        /sbin/modprobe tun &>/dev/null

        for conf in $confdir/*.conf; do
                pidfile=$(basename ${conf%%.conf}).pid
                $openvpn --daemon \
                        --writepid $piddir/$pidfile \
                        --config $conf \
                        --cd $confdir \
                        || ret=false
        done

        # Remember status and be verbose
        $ret
        rc_status -v
        ;;
    stop)
        echo -n "Stoppe $DAEMON "

        ## Stop daemon with killproc(8) and if this fails
        ## set echo the echo return value.

        for i in $piddir/*.pid; do
                killproc -p $i -TERM $openvpn || ret=false
        sleep 3
        /etc/openvpn/./bridge-stop
        echo -n "Stoppe Netzwerkbrücke br0"
        done


Wobei ich jetzt mal angenommen habe das deine Fritzbox die 192.168.0.1 hat und der Openvpn Server die 192.168.0.2
Falls du noch nicht die Bridge-utils installiert hast musst du das noch machen.

Grüße Beppo
 

G aus W

Hacker
Hallo Thunderbird,

jetzt ist Beppo mir schon zuvorgekommen... :shock:

Nein, kein Problem, im Gegenteil, er hat Dir ja hervorragende HowTos angegeben, nach denen Du Dein opnVPN sicherlich erfolgreich aufsetzen kannst.

Ich bin damals nach dieser Anleitung vorgegangen und hatte meinen Tunnel nach kürzester Zeit fertig.

Meine Konfiguration unterscheidet sich von der, die Beppo vorschlägt, insbesondere dadurch, daß ich einen Tunnel, keine Brücke verwende ("dev tun", nicht "dev tap"), da dies zu meinem LAN besser paßte. Zur Unterscheidung der beiden Versionen und ihren jeweiligen Vor- und Nachteilen bitte hier lesen.

Die Vorgehensweise muß ich nicht im Detail aufschreiben, da das in den HowTos sehr gut erklärt ist. Nur so viel: Der Aufbau geschieht am einfachsten in drei Schritten:

1) Vorbereitung - dazu gehört:
- Installation der benötigten Pakete,
- Einrichtung des ddclient auf der Server-Seite,
- Überprüfung bzw. Anpassung der Router-Einstellungen
2) Schlüssel- und Zertifikate-Erstellung
- ca.crt,
- ca.key,
- dh.pem,
- server.crt
- server.key,
- client.crt
- client.key
- ... und alle an den vorgesehenen Ort kopieren.
3) Konfiguration von Server und Client
- server.conf
- client.conf
- ggf. Anpassungen der Firewall

Das Aufbauen des Tunnels habe ich automatisiert, in dem ich den openVPN-Dämon für Client und Server in den Runleveln 3 und 5 starte. Somit lauscht der Server immer, ob sich der Client anmelden möchte, und der Client baut in dem Moment, wo eine Internetverbindung zustande kommt, umgehend die Verbindung zum LAN auf.

Ich wünsche Dir viel Erfolg beim Einrichten!

Gruß Greg
 
OP
T

thunderbird85

Member
Vielen Vielen Dank für eure Anleitungen :lol:
Ich habe gestern Abend damit angefangen die Zertifikate zu erstellen :). Das hat auch erstmal ganz gut geklappt bis auf die Idee mit dem umstellen auf 4096 Bit :!: Der Rechner hat die ganze Nacht gebraucht um die Datei zu erstellen :wink: Ich mache dann mal heute Abend weiter und werde euch natürlich sofort berichten. Nochmal Danke !!!!
 
Beppo schrieb:
Code:
#!/bin/bash

# Define list of TAP interfaces to be bridged,
# for example tap="tap0 tap1 tap2".
tap="tap0"

[...]
for t in $tap; do
    openvpn --mktun --dev $t
Generell soll's mir egal sein wie du deine Interfaces benennst, aber ich würde meine TUN-Devices auch TUN nennen, und nicht TAP.
 

Martin Breidenbach

Ultimate Guru
Falls da noch Bedarf existiert könnte ich eine Minimalkonfiguration mit shared key als Authentifizierung posten. Die ist aber im Prinzip nur von einem openVPN Howto übernommen. Und shared key ist natürlich nicht unbedingt das sicherste Verfahren (wer den key hat kommt rein).
 

Beppo

Member
Hi zusammen,

Generell soll's mir egal sein wie du deine Interfaces benennst, aber ich würde meine TUN-Devices auch TUN nennen, und nicht TAP.

Ich hatte ihn so verstanden, daß der den Openvpn Server im Bridge Mode fahren möchte und nicht routen.
Wenn er routen will muss er natürlich ein tun device nehmen.
Verbessert mich bitte wenn ich da falsch liege...

Grüße Beppo
 
OP
T

thunderbird85

Member
Hi Beppo

Ja du hast recht ich möchte den Bridge Modus verwenden !! Werden mich gleich auch ran setzen und weiter machen :wink:
 
OP
T

thunderbird85

Member
So bin jetzt dabei die openvpn.conf fertig zu machen. Diese heißt bei mir aber server.conf ist das normal ??

Dann ist mir noch aufgefallen, dass dort die Zeile
Code:
tls-auth ta.key 0 # This file is secret
steht. Wo bekomme ich denn die ta.key her ??
 

G aus W

Hacker
Hi Thunderbird,

den ta.key erzeugst Du so wie hier beschrieben. Es handelt sich um den Unterpunkt "hardening OpenVPN security" des von mir weiter oben verlinkten HowTos.

Wie die Überschrift schon sagt, dient der ta.key der höheren Sicherheit. Du brauchst ihn nicht, um das VPN ans Laufen zu bringen, aber wenn's erst mal steht, solltest Du ihn dazunehmen, denn sicher ist sicher, wie man sagt, wenn man das Phrasenschwein füttern will.

Gruß Greg
 

G aus W

Hacker
Nochmal hi,

auf Deine andere Frage: "server.conf" ist schon richtig, wenn Du das Musterfile verwendest, das im Ordner sample-config-files angelegt ist.

Auf Deinem Client brauchst Du dann "client.conf", bzw. bei Dir natürlich "client.ovpn", weil Du ja einen Windows-Client hast.

Ich empfehle Dir zu diesem Punkt die Lektüre dieses Abschnitts des besagten HowTos.

Gell, nicht sauer sein, daß ich Dich ständig auf das selbe HowTo stoße, aber ich habe es damit prima hinbekommen, es ist sehr ausführlich und detailliert, und es behandelt, was für Dich wichtig sein dürfte, alle Eventualitäten, also Linux / Windows, tun / tap und was noch so an Fragen kommen könnte...

Viel Erfolg - Du bist auf einem guten Weg! :D

Gruß Greg
 
OP
T

thunderbird85

Member
Soo das hat alles gut geklappt !! ich habe die bridge start und stop Scripte erstellt und versucht das Startscript zu starten.

Code:
Note: Cannot ioctl TUNSETIFF tap0: Device or resource busy (error=16)
Note: Attempting fallback to kernel 2.2 TUN/TAP interface
Cannot open TUN/TAP dev /dev/tap0: No such file or directory (error=2)
Exiting

Diese Fehlermeldung bekomme ich dann !! :cry:
Ich habe auch das bridge-utils installiert aber das bringt nichts !!
 
Beppo schrieb:
Generell soll's mir egal sein wie du deine Interfaces benennst, aber ich würde meine TUN-Devices auch TUN nennen, und nicht TAP.
Ich hatte ihn so verstanden, daß der den Openvpn Server im Bridge Mode fahren möchte und nicht routen.
Ich sehe schon... openvpn scheint den angegebenen Interfacenamen (--dev tun0/--dev tap0) zu parsen und _danach_ zu entscheiden ob es ein TUN oder TAP sein soll. (Siehe auch --dev-type).
Ansonsten scheint die Wahl TUN/TAP nicht direkt Einfluss auf Bridgingfunktionalität (mit einem bereits bestehenden Interface) zu haben, laut tuntap.txt:
Code:
  Depending on the type of device chosen the userspace program has to read/write
  IP packets (with tun) or ethernet frames (with tap). Which one is being used
  depends on the flags given with the ioctl().
 
Oben