OpenVPN lokal einrichten – die Serversoftware einrichten (III)

Für diesen Beitrag richte ich eine neue Testumgebung als Proxmox-Container mit einem Standardtemplat von Debian 12 mit minimaler Softwareausstattung unter der IP-Adresse 192.168.0.250/24, mit 2 GB Festplattenplatz und 512 MByte RAM ein. Das System wird mit den drei Befehlen

apt-get update && apt-get -y dist-upgrade
dpkg-reconfigure tzdata
dpkg-reconfigure locales

noch auf den neusten Patchstand gebracht und die Zeitzone und das Tastaturlayout eingestellt. Ansonsten habe ich die Installation zu diesem Zeitpunkt nicht verändert.

Ein VPN war früher schwierig zu installieren weil die ganze Kommunikation über Schlüssel verschlüsselt ist und auch die Authentifizierung über Schlüssel erfolgt. Dazu kommt noch, dass es eine ziemlich komplexe Netzwerktopologie mit Routing und Subnetzen beinhaltet. Glücklicherweise hat ein Entwickler mit dem Namen Nyr ein Shellscript entwickelt und auf Github zur Verfügung gestellt was die Softwareinstallation und die Netzwerkeinstellungen sehr komfortabel und einfach macht. Das Script unterstützt allerdings nur das Roadwarrior-Szenario was meint, das jemand von außerhalb auf das lokale Netzwerk zugreifen kann wenn er einen entsprechenden Schlüssel für das Netzwerk besitzt. Berücksichtigt wird keine andere Möglichkeit von VPN wie Netzwerke miteinander verbinden, besondere Authentifizierung wie RADIUS oder LDAP oder ähnliches. Für die meisten Anwendungen – gerade im privaten oder KMU Umfeld sollte die Möglichkeiten jedoch mehr als ausreichen.

Das Script kann mit dem Befehl:

wget https://git.io/vpn -O openvpn-install.sh

auf den Server herunter geladen werden und durch chmod ausführbar gemacht:

chmod +x openvpn-install.sh

Nun müssen wir noch das tun-Interface einrichten was für einen Betrieb als VPN-Server notwendig ist. Dies geschieht bei einer Installation auf wirklicher Hardware durch die Befehlsfolge:

mkdir /dev/net
mknod /dev/net/tun c 10 200
chmod 0666 /dev/net/tun

Sollte sich jedoch der OpenVPN-Server in einem Container befinden so wird der Befehl mknod mit „mknod: /dev/net/tun: Operation not permitted“ abgebrochen. In diesem Fall muss unter /etc/pve/lxc/<Container-Nummer>.conf die Zeilen:

lxc.cgroup2.devices.allow: c 10:200 rwm
lxc.mount.entry: /dev/net dev/net none bind,create=dir

eingefügt werden und man erhält nach einem Neustart des Containers das tun-Interface.

Nun kann das vormalig herunter geladene Script ausgeführt werden und es erfolgen nun Fragen zu den Einstellungen von OpenVPN:

./openvpn-install.sh

Welcome to this OpenVPN road warrior installer!

This server is behind NAT. What is the public IPv4 address or hostname?
Public IPv4 address / hostname [111.222.333.444]: home.dyndns.org

Which protocol should OpenVPN use?
1) UDP (recommended)
2) TCP
Protocol [1]: 1

What port should OpenVPN listen to?
Port [1194]: 1194

Select a DNS server for the clients:
1) Current system resolvers
2) Google
3) 1.1.1.1
4) OpenDNS
5) Quad9
6) AdGuard
DNS server [1]: 5

Enter a name for the first client:
Name [client]: Client1

OpenVPN installation is ready to begin.
Press any key to continue...

Nun werden die notwendige Pakete herunter geladen

The client configuration is available in: /root/Client1.ovpn
New clients can be added by running this script again.

Die Einstellung die gemacht werden sind hier rot markiert und es wurde eine Datei mit der Endung .ovpn angelegt die die Einstellungen für die Übergabe an den OpenVPN-Client enthalten. Für den obigen Fall hat die Datei den folgenden Inhalt:

client
dev tun
proto udp
remote home.dyndns.org 1194
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
auth SHA512
ignore-unknown-option block-outside-dns
verb 3
<ca>
-----BEGIN CERTIFICATE-----
MIIDSzCCAjOgAwIBAgIUA09u1uh7MTipyafa0qWWTtmAME8wDQYJKoZIhvcNAQEL
BQAwFjEUMBIGA1UEAwwLRWFzeS1SU0EgQ0EwHhcNMjQwMTA2MTczMzE3WhcNMzQw
MTAzMTczMzE3WjAWMRQwEgYDVQQDDAtFYXN5LVJTQSBDQTCCASIwDQYJKoZIhvcN
AQEBBQADggEPADCCAQoCggEBALN/J4TvIQN0OCsaHaj0nQAG8LRLo+4iBSvEzVF6
BHvWCpbsuHUrV20qhtFC4VRtW3h4FM9+qce8XVf9trgVhQwFVwIqxokDxyR/EB02
SMN4k57LzkX0j89yDsbSklv1GzcyaE7KsbPjIcPdKqe96+sqcmqGhzwsEw6YJKyY
tpk1Ie7P9zFxT/nRsmYNYBCf/doXQ7iKIls6h4lzd/TKykKtG2uxus8BHH+yVHek
h7h9x0iXyzZ93yIOUSJ0oPMREX8XoRiFlpTHd5U5ivQKHYBOzdP5YueqzPQnNVzI
x/BR4zsPevlqdZqUH4HkWkXPbHd7nnU5GqpytvF3bzUcvI0CAwEAAaOBkDCBjTAM
BgNVHRMEBTADAQH/MB0GA1UdDgQWBBTlkArwGlSEXgxdE+uzQr4KKyvzxjBRBgNV
HSMESjBIgBTlkArwGlSEXgxdE+uzQr4KKyvzxqEapBgwFjEUMBIGA1UEAwwLRWFz
eS1SU0EgQ0GCFANPbtboezE4qcmn2tKllk7ZgDBPMAsGA1UdDwQEAwIBBjANBgkq
hkiG9w0BAQsFAAOCAQEAqfzH9JTxNZsTgvHg2WHChv3/yLWQPvORcB2JLV9Ymk6u
iZvBlU+znaQjyfo6r4Z55hl/Iwd+6NpgkPPwmVXzoDgb7StoxvSNPboAO4V1n7y3
mtdludH7hL4Ox+Bt2NCV8JyYXtgeLXvQEewB7mEqUwGLkA6bXqx+29jT+NAr9pCc
cyhEj6Og5wwUyIWadwUdgDKppe2XKTzySkz5+/KfXS7DMpRE2z1/bxM1PxI2iny+
u6pg2BGN2xXHog4xgcmQVt5j7+Xj5lGIPTYSxEzq3MEnHFWcn1/vowOgk6mBEatm
FA//26JxaEjhM6bNDhirGi8gs+UFw4VQqPqu52vzQA==
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
MIIDVTCCAj2gAwIBAgIQUtfim2KWoVqiveMmwVnQQzANBgkqhkiG9w0BAQsFADAW
MRQwEgYDVQQDDAtFYXN5LVJTQSBDQTAeFw0yNDAxMDYxNzMzMThaFw0zNDAxMDMx
NzMzMThaMBIxEDAOBgNVBAMMB0NsaWVudDEwggEiMA0GCSqGSIb3DQEBAQUAA4IB
DwAwggEKAoIBAQDU+ZZ5DhfSb0aDdt41GLPdzuPw+8GhASGn03MXEYyX1QNZFyos
iACPU7jYyG42BfTe7Dm7N0h4I16796ao5yJUH8jNJsdhMFYWrE9UAjMg5ISBIbxS
/NEAioqU1y7+n/Ltf3kDl80NbMQx/tAAo0BPb3cGJ5JzyoOU+HR7Lab1OLd4bCqE
R/sHEXIpjv2LoE5ULOjz/wLzmct+sXBllnqjab5yTAl8cghCRIcgAPF0P44RYc7U
mwxbKCdqg0IaNLIUGnl/W5l6cscLuKW+Jqv2fI+CiIQYM9uPoKZkiotTe1/vizgx
tKeWj94DJC61QRCpWiCWttArOvWe+c9zzgYTAgMBAAGjgaIwgZ8wCQYDVR0TBAIw
ADAdBgNVHQ4EFgQUb9Fqs4EIJTzjvS2dhmNoYw9frUAwUQYDVR0jBEowSIAU5ZAK
8BpUhF4MXRPrs0K+Cisr88ahGqQYMBYxFDASBgNVBAMMC0Vhc3ktUlNBIENBghQD
T27W6HsxOKnJp9rSpZZO2YAwTzATBgNVHSUEDDAKBggrBgEFBQcDAjALBgNVHQ8E
BAMCB4AwDQYJKoZIhvcNAQELBQADggEBACENjjL+88bM2ATrX3h+HM23z8hGDE3P
bfCI+h4KGIJVtPIXohB5PKjmQbhEMLyWrN10E4EPgVyav05UR8Mm5UpTx1tcbbtD
L5hCotoTCpGJKlBrbtyqWl2HxTwN7ytrayGYxajZW30Hwpeuf2WfwGuo6JcK4L3f
47yXXjymciQktQCuycmNLjsDZN+boxs5W22WGJ4mZRG13RSYc7PZgBzz9LBfeESb
fe55F3lEVxVgxS73azgiK2wnT6RfouUnon3hRkYoGlR1L707D0KZRJlmKen+lVsH
cBqkG+WRjSR8YlTsyPmsch8swUsVJVvNH7l54nmUWgUgfyq2C64a6gs=
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDU+ZZ5DhfSb0aD
dt41GLPdzuPw+8GhASGn03MXEYyX1QNZFyosiACPU7jYyG42BfTe7Dm7N0h4I167
96ao5yJUH8jNJsdhMFYWrE9UAjMg5ISBIbxS/NEAioqU1y7+n/Ltf3kDl80NbMQx
/tAAo0BPb3cGJ5JzyoOU+HR7Lab1OLd4bCqER/sHEXIpjv2LoE5ULOjz/wLzmct+
sXBllnqjab5yTAl8cghCRIcgAPF0P44RYc7UmwxbKCdqg0IaNLIUGnl/W5l6cscL
uKW+Jqv2fI+CiIQYM9uPoKZkiotTe1/vizgxtKeWj94DJC61QRCpWiCWttArOvWe
+c9zzgYTAgMBAAECggEBANTmdB+rkPDSQCEncNaPTS8MpRy/7z5uDSDh5glHh844
KNKkr4o4oqakwQIkytfCeJloeAXJK+69HPS2iqoJ9G04INnETEfBtC2SLvMCB+53
wmX8PXCQPrZVyFcmDVqItqXoaibHVzp2YmLAIVqh16YQ/WDvqh2KcqM3A+onJuG2
8Al7dph7APB/UQUqnmAlRPd/pCsabaxdtm9bazTqusL1lJ/R4Z4QLsdG9esciJAt
+RR8Vug6ARfkdIztUeIC9lxxJPaxp0pdEJldUSvqri0wnDNNzuIHUfpSvlt8vsa+
kZ45oJVq7RY0vhWCqzJBCvVB08D3qWggC17HtLJYQeECgYEA6n/52HhKPthl4IBP
LMLTsbrjT1Pm9XzVmL73f9iw1UbqUr31Oq0auRVE9aaxASuSIZeh4mb5wj5j/RK6
cM4qsFvtj2BlYm9+MHb5Ys4L3DRhd9UmrWK+AV2gJHRwSPhr+6sqf98MZCCWycIn
QNOYmQjS7+nKNEaB65L54xWyiTkCgYEA6IBkgMgQTFuPK7QBGdpQeNFx0Wok0cjX
3aNXpYodeHrzshz9S64gp6Mj+2hYB03xVw1zMnEUrLVXupTMMMbpuJJ8K4a+hEWT
RUFULTMAtWv451lQmwp+9Pio27mWeMQ/FgDbrBSPatI5LXjm+0njL3YGwKCAIDJO
QV/uD1sQRasCgYEAwP9G8ARAhuyvHFA92YcXl+VKg9V39n8hhK9XH5+GGmJdJHA2
zm392mpI8SyZ7W6gvIkBsUYzNM0Imha533Gu7KscH66kgplkcBrbMZiHZlquBWQm
ivkDjDg0PwyeBVB//wdm2QsINbgkojTq/Y2ov/rlMJNn2hJVhz7V7zHCWPECgYEA
iCpZsgp5cR7WVLQRSQDQzFFtpUXS1oIX2phFRpAC/oKToqbTubT7LvKeqijMFUsS
ovcfllUf1J5ICOAITjDQxOYVjrBVd8X/oDnIgMg0DAx2M5fdW0/kVrgivLyOYaAd
ildqT/eint8L2ZPLQzRct3kaL0pQf4q2xhbWp2uftg0CgYB5Bdvo+aZ6FRxp/JDz
VbTg4cpOP1IRlCbHj7nV4PyNwAxcTSqTuJZqdk5d9KEcMSOejA57VLh3oEcOJLeX
GQslM142EUV2pzW08MHs75n4bnS7Y7welWNzFedg9ossLVQWLihyKGYBbkuR2ejw
R8egfydHQQDAIt/e818vXuxN8g==
-----END PRIVATE KEY-----
</key>
<tls-crypt>
-----BEGIN OpenVPN Static key V1-----
412501c23dae644384bbcb6735ce7df7
f489baff7777bdac28cb5133f23b44c1
55cb6ad5729f6e423550982f063d4dfe
a544f1d011619e771a529b4aad59f727
61771bc83c70ed70e6003f7eed02cd76
7e054afcbaa905c8e32e51efd6aca943
aa9f0421078c3e73283286f701f93135
7f45c7553b3005aafe824baaad43c7ca
f7bd2450ff5290f14c766bcfd7f7fc9a
16e722c136c0a10475a12bdfa0383fed
a61294d43447396ff89ed7556a551436
8268dc7f90f9e946f4488d11ebaa4122
e0aac6f12e12bedb07b3aa77ef12f550
4088f1d254b5994d822e42baeb8f180f
594808236f0e7cbad8a4ff1186e379ce
76284971925d6b2e3b3e30d94a7612c8
-----END OpenVPN Static key V1-----
</tls-crypt>

Diese Datei stellt nun den Zugang zu dem Netzwerk her und ist sicher auf zu bewahren. Wenn ich diesen Beitrag online stelle dann ist der TestVPN-Server daher wieder gelöscht und der Zugang damit unmöglich.

Wenn man weiteren Clients den Zugang ermöglichen möchte dann ruft man einfach erneut das Script auf und vergibt einen anderen Namen für den neuen Client und erhält eine weitere Datei mit anderem Zugangsschlüssel die man übergeben kann.

Im letzten Teil dieser Serie wird nun beschrieben wie man sich unter Android und KDE mit dem Server verbindet. Andere Möglichkeiten wie Apple-Betriebssysteme, Windows oder andere Window-Manger habe ich mangels entsprechender Hardware bzw. Softwareausstattung nicht.

1 Gedanke zu „OpenVPN lokal einrichten – die Serversoftware einrichten (III)“

Kommentare sind geschlossen.

kais-universum.de