Portweiterleitung / Zugriff von außen bei DS-Lite

Hinweis: Wir haben in diesem Artikel möglicherweise Provisions-Links verwendet und sie durch (*) gekennzeichnet. Erfolgt über diese Links eine Bestellung, erhält maffert.net eine Provision. Es entstehen für Sie keine Nachteile beim Kauf oder Preis.

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert