Hier zeige ich euch wie ihr mit einem OpenVPN-Server Portweiterleitungen mit einer DS-Lite / DSlite / „Dual Stack Lite“ / CGNAT Anschluss einrichtet. Man kann so also wieder jegliche Netzwerkgeräte über das Internet erreichbar machen.
Man benötigt einen kleinen vServer im Internet (z.B. von 1fire.de – sehr günstig und sehr netter Support), der die Anfragen dann an den OpenVPN-Client (in meinem Beispiel ein Raspberry mit Raspbian und Nextcloud) weiterleitet.
Meine Beispielinformationen lauten:
- Der OpenVPN-Server lautet: openvpn
- Der Client (Raspberry) lautet: rspi1
Pakete auf dem Server und Client installieren:
apt-get install openvpn udev rsync git
In das Temp Verzeichniss wechseln und EasyRSA von Github downloaden (ich arbeite hier mit der neueren 3er Version):
cd /tmp/ git clone git://github.com/OpenVPN/easy-rsa
Die Dateien nach /etc/openvpn verschieben:
mv easy-rsa/easyrsa3/ /etc/openvpn/easyrsa
Die vars Datei passend benennen:
mv vars.example vars
In der vars Datei folgenden wie folgt anpassen:
set_var EASYRSA_KEY_SIZE 4096 set_var EASYRSA_DIGEST "sha512" set_var EASYRSA_REQ_COUNTRY "DE" set_var EASYRSA_REQ_PROVINCE "NRW" set_var EASYRSA_REQ_CITY "Bielefeld" set_var EASYRSA_REQ_ORG "PrivatGmbH" set_var EASYRSA_REQ_EMAIL "blumentopf@maffert.net" set_var EASYRSA_REQ_OU "IT"
PKI initialisieren:
./easyrsa init-pki
CA Erstellen:
./easyrsa build-ca
Folgendes habe ich eingetippt: openvpn.maffert.net CA
Erzeugte Dateien: /etc/openvpn/easyrsa/pki/ca.crt
Server Zertifikat erstellen
Schlüssel für den Server erzeugen:
./easyrsa gen-req openvpn nopass
Folgendes habe ich eingetippt: openvpn.maffert.net
Erzeugten Dateien: /etc/openvpn/easyrsa/pki/reqs/openvpn.req, /etc/openvpn/easyrsa/pki/private/openvpn.key
Zertifikat für den Server ausstellen:
./easyrsa sign-req server openvpn
Erzeugte Datei: /etc/openvpn/easyrsa/pki/issued/openvpn.crt
Client Zertifikat erstellen
Schlüssel für den Client erzeugen (möchte man beim Verbinden kein PW eingeben, sollte hier der „nopass“ Parameter mit angegeben werden, ansonsten weg lassen):
./easyrsa gen-req rspi1 nopass
Folgendes habe ich eingetippt: ENTER
Erzeugte Dateien: /etc/openvpn/easyrsa/pki/reqs/rspi1.req, /etc/openvpn/easyrsa/pki/private/rspi1.key
Zertifikat für den Client ausstellen:
./easyrsa sign-req client rspi1
Erzeugte Datei: /etc/openvpn/easyrsa/pki/issued/rspi1.crt
CRL (Certificate Revocation List) erstellen um Zertifikate später sperren zu können [crl.pem]:
./easyrsa gen-crl
Erzeugte Datei: /etc/openvpn/easyrsa/pki/crl.pem
Diffie-Hellman Parameter generieren:
./easyrsa gen-dh
Erzeugte Datei: /etc/openvpn/easyrsa/pki/dh.pem
TLS-Auth Schlüssel erzeugen:
openvpn --genkey --secret ta.key
Erzeugte Datei: /etc/openvpn/easyrsa/ta.key
Die Schlüssel und Zertifikate passend kopieren:
mkdir -p /etc/openvpn/client mkdir -p /etc/openvpn/server cp /etc/openvpn/easyrsa/pki/ca.crt /etc/openvpn/easyrsa/pki/issued/openvpn.crt /etc/openvpn/easyrsa/pki/private/openvpn.key /etc/openvpn/easyrsa/ta.key /etc/openvpn/easyrsa/pki/crl.pem /etc/openvpn/easyrsa/pki/dh.pem /etc/openvpn/server/ cp /etc/openvpn/easyrsa/pki/issued/rspi1.crt /etc/openvpn/easyrsa/pki/private/rspi1.key /etc/openvpn/easyrsa/ta.key /etc/openvpn/easyrsa/pki/ca.crt /etc/openvpn/client/
Konfigurationsdateien anlegen:
nano /etc/openvpn/server/server.conf
mit folgendem Inhalt:
port 1194 proto udp dev tun ca ca.crt cert openvpn.crt key openvpn.key # This file should be kept secret dh dh.pem server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "redirect-gateway def1" keepalive 10 120 tls-auth /etc/openvpn/ta.key 0 # This file is secret cipher AES-256-CBC persist-key persist-tun status /var/log/openvpn-status.log log /var/log/openvpn.log verb 3 explicit-exit-notify 1
nano /etc/openvpn/client/client.conf
mit folgendem Inhalt:
client remote DIEIPZUMOPENVPNSERVER 1194 dev tun proto udp resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert rspi1.crt key rspi1.key remote-cert-tls server tls-auth ta.key 1 cipher AES-256-CBC verb 3
Auf dem OpenVPN Server die Dateien in den /etc/openvpn Ordner verschieben:
mv /etc/openvpn/server/* /etc/openvpn/
Um sicherzustellen das der ganze IPv4-Datenverkehr weitergeleitet wird, muss folgendes auskommentiert/hinzugefügt werden:
nano /etc/sysctl.conf
dort sollte dann folgende auskommentiert / hinzugefügt werden:
net.ipv4.ip_forward=1
Um die Einstellungen direkt zu setzen, am besten direkt noch folgendes ausführen:
echo 1 > /proc/sys/net/ipv4/ip_forward
Auf dem Client (der Raspberry) die Dateien downloaden und passend verschieben:
rsync -azv -e "ssh -p 22" --progress root@DIEIPZUMOPENVPNSERVER:/etc/openvpn/client/ /etc/openvpn/client mv /etc/openvpn/client/* /etc/openvpn/
Iptables anpassen (hier vorher mit „ip addr“ prüfen wie die Netzwerkkarte des vServer lautet):
iptables -t nat -F POSTROUTING iptables -t nat -A POSTROUTING -o venet0 -s 10.8.0.0/24 -j MASQUERADE
Iptables mitteilen das er die Anfragen an 443 (HTTPS) dem Client weiterleiten soll:
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 443 -j DNAT --to-destination 10.8.0.6:44
Das wars auch schon. Ab diesem Zeitpunkt kann man über die OpenVPN-Server IP (also über die IP vom vServer) über den HTTPS Port z.B. die Nextcloud erreichen. Ich hoffe ich konnte hiermit dem ein oder anderen helfen .. 😉
Ein paar Tipps:
Probleme bei bzw. mit einem Internetzugang bei Unitymedia? Eventuell liegt es an dem MTU-Wert. In die client.conf (vom Client) folgendes hinzufügen:
link-mtu 1432