Anleitung - OpenVPN auf OpenWRT

Firewall konfigurieren

Im ersten Schritt müssen wir unsere Firewall konfigurieren. Wenn unserer Gerät als Router fungiert und über den WAN-Port direkt im Internet hängt, können wir nachstehendes Script verwenden. Ist unser OpenWRT-Gerät eine zusätzliche Einheit im LAN wie z.B. ein Access Point oder einfach nur ein kleiner VPN-Server, dann müssen wir den Port 1194/UDP für OpenVPN auf die IP des Gerätes weiterleiten.

#!/bin/sh

# Allow incoming client connections by opening the server port (default 1194) in our firewall:
uci set firewall.Allow_OpenVPN_Inbound=rule
uci set firewall.Allow_OpenVPN_Inbound.target=ACCEPT
uci set firewall.Allow_OpenVPN_Inbound.src=*
uci set firewall.Allow_OpenVPN_Inbound.proto=udp
uci set firewall.Allow_OpenVPN_Inbound.dest_port=1194

uci commit firewall
/etc/init.d/firewall reload

exit

Script-Start

#!/bin/sh

# Pakete installieren

opkg update

opkg install openvpn-openssl openvpn-easy-rsa

# Schlüssel & Zertifikate für OpenVPN erzeugen

# Im ersten Schritt müssen wir die Schlüssel und Zertifikate für OpenVPN erzeugen. Hier haben sich die Befehle in Version 18.06.1 ein wenig geändert.

# Werden wir nach dem "Common Name" gefragt, können wir z.B. intranet.mydomain.com eintragen.

mkdir /etc/openvpn/easy-rsa

cd /etc/openvpn/easy-rsa

easyrsa init-pki

easyrsa build-ca nopass

easyrsa gen-dh

# Schlüssel für die OpenVPN-Server erzeugen

easyrsa build-server-full server nopass

# Schlüssel für die OpenVPN-Clients erzeugen

easyrsa build-client-full client-1 nopass

# Schlüssel und Zertifikate übertragen

# Am Server bzw. Router kopieren wir die erstellten Schlüssel und Zertifikate in den OpenVPN Konfigurationsordner.

cd /etc/openvpn
mkdir certs

ln -s /etc/openvpn/easy-rsa/pki/ca.crt certs/ca.crt
ln -s /etc/openvpn/easy-rsa/pki/private/server.key certs/server.key
ln -s /etc/openvpn/easy-rsa/pki/issued/server.crt certs/server.crt
ln -s /etc/openvpn/easy-rsa/pki/dh.pem certs/dh.pem

# VPN-Interface

# Für das Erstellen des VPN-Interfaces und das Setzen der Firewall-Einstellungen erstellen wir uns am besten ein Script mit folgendem Inhalt:

# Create the VPN interface (named vpn0):
uci set network.vpn0=interface
uci set network.vpn0.ifname=tap0
uci set network.vpn0.proto=none
uci set network.vpn0.auto=1

# Add interface to LAN bridge:
uci set network.lan.ifname="$(uci get network.lan.ifname) tap0"

# Einstellungen übernehmen:
uci commit network
/etc/init.d/network reload

# OpenVPN konfigurieren

# Für die Konfiguration des OpenVPN-Servers erstellen wir uns nun ebenfalls ein Script.

echo > /etc/config/openvpn # clear the openvpn uci config
uci set openvpn.myvpn=openvpn
uci set openvpn.myvpn.enabled=1
uci set openvpn.myvpn.verb=3
uci set openvpn.myvpn.proto=udp
uci set openvpn.myvpn.port=1194
uci set openvpn.myvpn.dev=tap
uci set openvpn.myvpn.mode=server
uci set openvpn.myvpn.tls_server=1
uci add_list openvpn.myvpn.push='route-gateway dhcp'
uci set openvpn.myvpn.keepalive='10 120'
uci set openvpn.myvpn.ca=/etc/openvpn/certs/ca.crt
uci set openvpn.myvpn.cert=/etc/openvpn/certs/server.crt
uci set openvpn.myvpn.key=/etc/openvpn/certs/server.key
uci set openvpn.myvpn.dh=/etc/openvpn/certs/dh.pem
uci commit openvpn

# Nun setzen wir OpenVPN als Bootservice und starten den Dienst.

/etc/init.d/openvpn enable
/etc/init.d/openvpn start
exit

OpenVPN - Client konfigurieren (OpenWRT & Centos)

Mit Hilfe eines FTP-Clients holen wir uns folgende Dateien in einen Konfigurationsordner für VPN auf dem Client.

/etc/openvpn/easy-rsa/pki/issued/client-1.crt

/etc/openvpn/easy-rsa/private/client-1.key

/etc/openvpn/easy-rsa/pki/ca.crt

Konfigurationsscript erstellen

In dem gleichen Ordner, in welchen wir zuvor die Client-Zertifikate heruntergeladen haben, erstellen wir die Datei "client-1.ovpn" und fügen folgende Zeilen ein:

client

dev tap
auth-nocache

remote <Server-IP>
port 1194

verb 3

ca ca.crt
cert client-1.crt
key client-1.key

cipher AES-256-CBC
remote-cert-tls server

# Kann auskommentiert werden um dem TUN Interface eine fixe MAC-Adresse zuzuweisen.
;lladdr 96:45:2A:82:EE:0D

Der "chiper" wurde hier nochmal extra angegeben. AES-256-CBC wird zwar als Standardverschlüsselung verwendet, ein Client hat jedoch versucht zu erst eine niedrigere Verschlüsselung zu verwenden. Daher hier die explizite Angabe.

Quellen

Generate the keys/certificates for OpenVPN (18.06.1)

https://www.uns.gr/openvpn-road-warriors-on-openwrt-12-09/

OpenVPN Setup Guide for Beginners

https://oldwiki.archive.openwrt.org/doc/howto/vpn.openvpn

Kommentare

Was ist die Summe aus 3 und 9?