Anleitung: Eigener OpenVPN Server

Fragen, Support etc.

Moderator: Co-Administratoren

Antworten
k.s
Beiträge: 6
Registriert: 13.11.2015, 18:41

Anleitung: Eigener OpenVPN Server

Beitrag von k.s » 29.11.2015, 09:15

Moin,

ELV hat nun endlich meinen Raspberry Pi 2 B und das Homematic Funkmodul geliefert. Natürlich direkt losgelegt und das 2.15.5-3 Image auf die SD Karte geschrieben. Nachdem ich mich (wie bei jedem Pi) erst mal rum ärgern musst bis er die SD Karte akzeptiert, habe ich mir das System genauer angeschaut.
Dabei habe ich auch nach Möglichkeiten für ein VPN gesucht und dabei gesehen, dass dieses Image von Haus aus OpenVPN mit bringt! Perfekt! Sicherlich kann man auch auf meine-homematic.de zurück greifen (preislich ist der Service völlig im Rahmen), aber ich gehöre zu denen die so etwas gerne unter der eigenen Administration haben. Auch arbeite ich bei einem vServer Provider, wodurch ich hier doch die ein oder andere Ressource auf meinen Servern frei habe ;)

Die folgende Anleitung beschreibt eine Möglichkeit auf dem Raspberry Image OpenVPN ans laufen zu bekommen.
Benötigt wird:
  1. Linux Vorkenntnisse.
  2. Ein vServer mit Linux (Anleitung ist auf Debian ausgelegt, dürfte aber zu Ubuntu weitestgehend übernommen werden können. Der vServer sollte mit einer Vollvirtualisierung wie KVM oder Xen realisiert sein)
  3. Ein Android Smartphone mit der OpenVPN Connect App.
  4. Aktivierter SSH Zugriff zur OCCU
Als erster richten wir auf dem vServer einen OpenVPN Server ein:

Installieren:

Code: Alles auswählen

apt-get install openvpn easy-rsa
Easy-RSA kopieren:

Code: Alles auswählen

cp -r /usr/share/doc/openvpn/examples/easy-rsa/2.0 /etc/openvpn/easy-rsa2
mkdir /etc/openvpn/easy-rsa2/keys
echo 01 > /etc/openvpn/easy-rsa2/keys/serial
Easy-RSA Konfiguration anpassen

Datei: /etc/openvpn/easy-rsa2/vars
Ihr findet ganz unten in der Datei einen Block mit Exports, diese müsst ihr nach euren Anforderungen anpassen. Der Block beginnt mit:
# These are the default values for fields
# which will be placed in the certificate.
# Don't leave any of these fields blank.
Die nachfolgenden Zeilen wurden in meinem Fall wie folgt angepasst:

Code: Alles auswählen

export KEY_COUNTRY="DE"
export KEY_PROVINCE="BW"
export KEY_CITY="Karlsruhe"
export KEY_ORG="ks"
export KEY_EMAIL="meine@email.de"
export KEY_CN=ksvpn
export KEY_NAME=ksvpn
export KEY_OU=ksvpn
Nun beginnen wir mit der Generierung der Zertifikate /Keys!

Zuerst ein

Code: Alles auswählen

cd /etc/openvpn/aesy-rsa2
source ./vars
./clean-all
Dann erstellen wir die Keys
1.) CA

Code: Alles auswählen

./build-ca
2.) Server

Code: Alles auswählen

./build-key-server server
3.) DH Params

Code: Alles auswählen

./build-dh
4.) Client Keys
für die Hommatic:

Code: Alles auswählen

./build-key homematic
Für das Smartphone:

Code: Alles auswählen

./build-key phone
Die Keys liegen nun im Unterordner "keys"

Die ca.crt und clientname.crt und clientname.key müsst ihr euch auf das jeweilige gerät kopieren wo diese später benötigt werden.

Nun konfigurieren wir den OpenVPN Server:

Code: Alles auswählen

vim /etc/openvpn/server.conf
Inhalt:

Code: Alles auswählen

port 1194
proto udp
dev tun

ca      /etc/openvpn/easy-rsa2/keys/ca.crt    # generated keys
cert    /etc/openvpn/easy-rsa2/keys/server.crt
key     /etc/openvpn/easy-rsa2/keys/server.key  # keep secret
dh      /etc/openvpn/easy-rsa2/keys/dh1024.pem

server 10.9.8.0 255.255.255.0  # internal tun0 connection IP
ifconfig-pool-persist ipp.txt

keepalive 10 120

comp-lzo         # Compression - must be turned on at both end
persist-key
persist-tun

status log/openvpn-status.log

verb 3  # verbose mode
client-to-client
Nach einem Neustart der OpenVPN Servers ist dieser dann soweit startklar.

Code: Alles auswählen

service openvpn restart
Nun erstellen wir die .ovpn file für die Android app. Diese muss wie folgt aussehen:

Code: Alles auswählen

dev tun
proto udp
remote SERVERIP 1194
 
resolv-retry infinite
nobind
 
persist-key
persist-tun 
verb 1
 
keepalive 10 900
inactive 3600
comp-lzo
 
<ca>
-----BEGIN CERTIFICATE-----
.............
-----END CERTIFICATE------
</ca>
<cert>
-----BEGIN CERTIFICATE-----
.............
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
.............
-----END PRIVATE KEY-----
</key>
Es muss die Server IP und die jeweiligen Keys angepasst werden.

Die Datei kann dann aufs Smartphone kopiert und in der OpenVPN Connect App als Profil importiert werden.

Nun der interessante Teil. Einrichten auf der OCCU:

Wir verbinden uns per SSH zur OCCU und führen folgende Befehle aus:

Das Dateisystem ist per Default Read-Only gemounted. Dies müssen wir ändern um die Keys und Config schreiben zu können:

Code: Alles auswählen

mount -o remount, rw /dev/root
Nun legen wir die nötigen Ordner an:

Code: Alles auswählen

mkdir /etc/openvpn
mkdir /etc/openvpn/keys
In den Keys Ordner legen wir nun entweder die keys manuell mit vi ab, oder wir kopieren Sie per scp in den eben angelegten keys Ordner
Benötigt werden die ca.crt sowie die homematic.crt und homematic.key

Dann legen wir in /etc/openvpn noch die client.conf mit folgendem Inhalt an:

Code: Alles auswählen

client
remote SERVERIP
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/homematic.crt
key /etc/openvpn/keys/homematic.key
comp-lzo yes
dev tun
proto udp
nobind
auth-nocache
script-security 2
persist-key
persist-tun
user nobody
group nogroup
Wenn wir alles richtig gemacht haben sollten wir nun den OpenVPN client starten können:

Code: Alles auswählen

/etc/init.d/S60openvpn start
Sofern das geklappt hat, seht ihr ein neues Interface unter "ifconfig":

Code: Alles auswählen

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.9.8.14  P-t-P:10.9.8.13  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:2502 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2398 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:199210 (194.5 KiB)  TX bytes:1115222 (1.0 MiB)
Damit sind wir dann durch und können gesichert per VPN auf die OCCU per Smartphone zugreifen. Somit können wir auch problemlos die XML Api für Apps wie homedroid betreiben, ohne automatisch jedem Zugang zu ermöglichen.

dondaik
Beiträge: 12928
Registriert: 16.01.2009, 18:48
Wohnort: Steingaden
Hat sich bedankt: 1604 Mal
Danksagung erhalten: 222 Mal

Re: Anleitung: Eigener OpenVPN Server

Beitrag von dondaik » 29.11.2015, 09:22

sauber !!!
-------
!!! der download der handbüchern auf den seiten von eq3 und das lesen der tips und tricks kann das hm-leben sehr erleichtern - das nutzen der suche nach schlagworten ebenso :mrgreen: !!!
wer schreibfehler findet darf sie behalten.

Benutzeravatar
jmaus
Beiträge: 9862
Registriert: 17.02.2015, 14:45
System: Alternative CCU (auf Basis OCCU)
Wohnort: Dresden
Hat sich bedankt: 464 Mal
Danksagung erhalten: 1880 Mal
Kontaktdaten:

Re: Anleitung: Eigener OpenVPN Server

Beitrag von jmaus » 30.11.2015, 10:18

Hallo k.s.,

interessante Anleitung zur Einrichtung eines OpenVPN Clients unter RaspberryMatic. Ich möchte jedoch noch das eine oder andere dazu beitragen damit du das ganze auch noch etwas runder/allgemeiner machen kannst:
k.s hat geschrieben: Das Dateisystem ist per Default Read-Only gemounted. Dies müssen wir ändern um die Keys und Config schreiben zu können:

Code: Alles auswählen

mount -o remount, rw /dev/root
Auch wenn dies prinzipiell geht so wäre der richtigere Weg das root filesystem als read/write zu mounten folgender (dann geht die Anleitung auch prinzipiell auf einer CCU2):

Code: Alles auswählen

mount -o remount, rw /
k.s hat geschrieben: Nun legen wir die nötigen Ordner an:

Code: Alles auswählen

mkdir /etc/openvpn
mkdir /etc/openvpn/keys
In den Keys Ordner legen wir nun entweder die keys manuell mit vi ab, oder wir kopieren Sie per scp in den eben angelegten keys Ordner
Benötigt werden die ca.crt sowie die homematic.crt und homematic.key

[...]
Ein recht wichtiger Hinweis meinerseits zu diesen Teilen wäre das du im Hinterkopf behalten musst das alle Änderungen die du an / (root) vornimmst mit dem nächsten Firmware-Update von RaspberryMatic automatisch gelöscht werden. D.h. bei solchen Anpassungen muss man immer dafür sorgen das Daten/Funktionen die überleben sollen unter /usr/local gespeichert werden da das die einzige Partition ist die ein Firmware-Update / Backup unbeschadet überlebt. Auch wird nichts von / (root) durch die Backuproutinen erfasst und somit würde ein automatisches Backup dann auch nicht die keys backupen und folglich nicht mit einem restore zurückspielen.

Insofern würde ich lediglich einen Link von /etc/openvpn zu /usr/local/etc/openvpn tätigen und dann dort alle relevanten keys/configs für openvpn speichern. Schöner wäre es allerdings auch noch das ganze in ein richtiges CCU Addon zu verwandeln das dann bei start auch noch sicherstellt das der link /etc/openvpn->/usr/local/etc/openvpn nach einem firmware-update, etc. wieder aktualisiert wird.
RaspberryMatic 3.75.7.20240420 @ ProxmoxVE – ~200 Hm-RF/HmIP-RF/HmIPW Geräte + ioBroker + HomeAssistant – GitHub / Sponsors / PayPal / ☕️

k.s
Beiträge: 6
Registriert: 13.11.2015, 18:41

Re: Anleitung: Eigener OpenVPN Server

Beitrag von k.s » 30.11.2015, 14:30

Ah die bügeln beim upgrade einfach die regulär als read-only gemounteten Partitionen über? dieser Fakt war mir nicht bewusst, hab das ganze bei mir ja erst Samstag in Betrieb nehmen können. In der tat macht es dann Sinn den kram nach /usr/local zu legen. Ob das ganze als Addon funktioniert, kann ich nicht beurteilen. Immerhin muss man die Konfiguration des OpenVPN Clients anpassen (IP-Adresse des Servers) und die individuellen Keys hinterlegen. Da dürfte es per SSH schneller von der Hand gehen.

schnti
Beiträge: 2
Registriert: 07.12.2015, 22:37

Re: Anleitung: Eigener OpenVPN Server

Beitrag von schnti » 07.12.2015, 22:49

Hallo zusammen,

ich habe nun auch einen Raspberry Pi mit LXCCU und dem HM-MOD-RPI-PCB Modul.

Leider funktioniert seither mein OpenVPN nicht mehr. Könnt ihr mir da weiterhelfen?
Ich vermute dass es an der Bridge liegt. Ich kann mich verbinden, jedoch bekomme ich keine Domain aufgelöst.

Habe alles nach folgender Anleitung gemacht und das System seit 1 Jahr ohne Probleme am Laufen. Seit dem installieren der LXCCU tut es leider nicht mehr. Ich nutze auf dem iPhone die OpenVPN App.

http://jankarres.de/2013/05/raspberry-p ... tallieren/

Mein Router läuft unter 192.168.3.1
Der Raspi unter .102 und 115 die LXCCU (Gleiches Gerät)

Folgend meine ifconfig und /etc/network/interfaces Daten.

Code: Alles auswählen

eth0      Link encap:Ethernet  HWaddr b8:27:eb:09:39:75  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:409 errors:0 dropped:0 overruns:0 frame:0
          TX packets:258 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:72237 (70.5 KiB)  TX bytes:38658 (37.7 KiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lxccubr0  Link encap:Ethernet  HWaddr b8:27:eb:09:39:75  
          inet addr:192.168.3.102  Bcast:192.168.3.255  Mask:255.255.255.0
          inet6 addr: 2003:6b:23d:7201:ba27:ebff:fe09:3975/64 Scope:Global
          inet6 addr: fe80::ba27:ebff:fe09:3975/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:371 errors:0 dropped:0 overruns:0 frame:0
          TX packets:225 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:66750 (65.1 KiB)  TX bytes:31248 (30.5 KiB)

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.8.0.1  P-t-P:10.8.0.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

vethifGbXT Link encap:Ethernet  HWaddr fe:f6:61:7e:44:af  
          inet6 addr: fe80::fcf6:61ff:fe7e:44af/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:33 errors:0 dropped:0 overruns:0 frame:0
          TX packets:97 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:4494 (4.3 KiB)  TX bytes:13451 (13.1 KiB)
sudo nano /etc/network/interfaces

Code: Alles auswählen

auto lo

iface lo inet loopback
#iface eth0 inet dhcp

auto lxccubr0
iface lxccubr0 inet dhcp
        bridge-ports all
sudo nano /var/lib/lxc/lxccu/root/etc/network/interfaces

Code: Alles auswählen

# Configure Loopback
auto lo
iface lo inet loopback
auto eth0
iface eth0 net manual
Vielen Dank für euere Unterstützung.

Polu1
Beiträge: 1
Registriert: 26.12.2015, 11:00

Re: Anleitung: Eigener OpenVPN Server

Beitrag von Polu1 » 26.12.2015, 13:59

Die Internetweiterleitung muss über lxccubr0 erfolgen, wenn es daran scheitert.
Ich habe es nach der og Anleitung auf meinem pi so eingerichtet.

Gesendet von meinem SM-N9005 mit Tapatalk

schnti
Beiträge: 2
Registriert: 07.12.2015, 22:37

Re: Anleitung: Eigener OpenVPN Server

Beitrag von schnti » 08.01.2016, 11:13

Vielen Dank.

Folgende beiden Befehle mussten angepasst werden:

Code: Alles auswählen

sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
nach

Code: Alles auswählen

sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o lxccubr0 -j MASQUERADE
und im crontab -e

Code: Alles auswählen

@reboot sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
nach

Code: Alles auswählen

@reboot sudo iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o lxccubr0 -j MASQUERADE

le-zero
Beiträge: 8
Registriert: 06.11.2017, 20:42
Hat sich bedankt: 1 Mal

Re: Anleitung: Eigener OpenVPN Server

Beitrag von le-zero » 14.02.2018, 17:35

k.s hat geschrieben:

Code: Alles auswählen

/etc/init.d/S60openvpn start
Hallo k.s,
insofern Du diesen OpenVPN noch betreibst, kannst Du den Inhalt des Init Skripts hier posten?

Danke
0

Antworten

Zurück zu „Allgemeines zur OCCU“