[SOLVED] OpenVPN in debian lxc Container

jawr

Member
Dec 10, 2020
47
3
13
45
NRW
Hallo,

ich versuche gerade mir einen OpenVPN Server in einem debian 10 lxc Container einzurichten. Was habe ich gemacht:

Einen privilegierten Container erstellt, in die Datei /etc/pve/lxc/102.conf folgendes aufgenommen:

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

und folgendes einmalig über die Konsole eingerichtet:

Code:
cd /dev
mkdir net
mknod net/tun c 10 200
chmod 0666 net/tun

Dann noch meine Konfigurationen und Schlüssel von meiner bestehende OpenVPN Installation auf einem anderen Server genommen.

Zusätzlich noch in die /etc/sysctl.conf folgendes eingertagen:

Code:
net.ipv4.ip_forward=1

und iptables noch:

Code:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE

Starte ich nun über die Konsole
Code:
openvpn --config /etc/openvpn/server.conf

läuft alles. Jetzt zu meinen 2 Problemen.

1) Das ganze läuft nicht automatisch als Dienst:

Code:
 systemctl start openvpn@server
Job for openvpn@server.service failed because the control process exited with error code.
See "systemctl status openvpn@server.service" and "journalctl -xe" for details.
root@openvpn:~# systemctl status openvpn@server.service
* openvpn@server.service - OpenVPN connection to server
   Loaded: loaded (/lib/systemd/system/openvpn@.service; enabled; vendor preset: enabled)
   Active: activating (auto-restart) (Result: exit-code) since Mon 2020-12-21 16:23:28 UTC; 4s ago
     Docs: man:openvpn(8)
           https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
           https://community.openvpn.net/openvpn/wiki/HOWTO
  Process: 306 ExecStart=/usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --config /etc/openvpn/server.conf --
 Main PID: 306 (code=exited, status=226/NAMESPACE)

Dec 21 16:23:28 openvpn systemd[1]: openvpn@server.service: Main process exited, code=exited, status=226/NAMESPACE
Dec 21 16:23:28 openvpn systemd[1]: openvpn@server.service: Failed with result 'exit-code'.
Dec 21 16:23:28 openvpn systemd[1]: Failed to start OpenVPN connection to server.
root@openvpn:~# journalctl -xe
--
-- A start job for unit openvpn@server.service has finished with a failure.
--
-- The job identifier is 942 and the job result is failed.
Dec 21 16:23:38 openvpn systemd[1]: openvpn@server.service: Service RestartSec=5s expired, scheduling restart.
Dec 21 16:23:38 openvpn systemd[1]: openvpn@server.service: Scheduled restart job, restart counter is at 18.
-- Subject: Automatic restarting of a unit has been scheduled
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- Automatic restarting of the unit openvpn@server.service has been scheduled, as the result for
-- the configured Restart= setting for the unit.
Dec 21 16:23:38 openvpn systemd[1]: Stopped OpenVPN connection to server.
-- Subject: A stop job for unit openvpn@server.service has finished
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- A stop job for unit openvpn@server.service has finished.
--
-- The job identifier is 987 and the job result is done.
Dec 21 16:23:38 openvpn systemd[1]: Starting OpenVPN connection to server...
-- Subject: A start job for unit openvpn@server.service has begun execution
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- A start job for unit openvpn@server.service has begun execution.
--
-- The job identifier is 987.
Dec 21 16:23:38 openvpn systemd[314]: openvpn@server.service: Failed to set up mount namespacing: Permission denied
Dec 21 16:23:38 openvpn systemd[314]: openvpn@server.service: Failed at step NAMESPACE spawning /usr/sbin/openvpn: Permission denied
-- Subject: Process /usr/sbin/openvpn could not be executed
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- The process /usr/sbin/openvpn could not be executed and failed.
--
-- The error number returned by this process is ERRNO.
Dec 21 16:23:38 openvpn systemd[1]: openvpn@server.service: Main process exited, code=exited, status=226/NAMESPACE
-- Subject: Unit process exited
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- An ExecStart= process belonging to unit openvpn@server.service has exited.
--
-- The process' exit code is 'exited' and its exit status is 226.
Dec 21 16:23:38 openvpn systemd[1]: openvpn@server.service: Failed with result 'exit-code'.
-- Subject: Unit failed
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- The unit openvpn@server.service has entered the 'failed' state with result 'exit-code'.
Dec 21 16:23:38 openvpn systemd[1]: Failed to start OpenVPN connection to server.
-- Subject: A start job for unit openvpn@server.service has failed
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- A start job for unit openvpn@server.service has finished with a failure.
--
-- The job identifier is 987 and the job result is failed.


2) läuft das nur in einem privilegierten Container, angeblich soll es ja auch ohne gehen?! Was müsste ich hierfür zusätzlich konfigurieren?

Gruß,

jawr
 
So, ein Problem habe ich nun fast beseitigen könne, ich habe in der Datei /lib/systemd/system/openvpn@.service folgendes hinzugefügt:

Code:
PrivateTmp=false
NoNewPrivileges=yes

Damit ist der permission denied Fehler weg, der Dienst startet aber noch immer nicht:

Code:
systemctl status openvpn@server.service
* openvpn@server.service - OpenVPN connection to server
   Loaded: loaded (/lib/systemd/system/openvpn@.service; enabled; vendor preset: enabled)
   Active: activating (auto-restart) (Result: exit-code) since Tue 2020-12-22 09:02:45 UTC; 2s ago
     Docs: man:openvpn(8)
           https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage
           https://community.openvpn.net/openvpn/wiki/HOWTO
  Process: 567 ExecStart=/usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --config /etc/openvpn/server.conf --writepid /ru
 Main PID: 567 (code=exited, status=226/NAMESPACE)

Dec 22 09:02:45 openvpn systemd[1]: openvpn@server.service: Main process exited, code=exited, status=226/NAMESPACE
Dec 22 09:02:45 openvpn systemd[1]: openvpn@server.service: Failed with result 'exit-code'.
Dec 22 09:02:45 openvpn systemd[1]: Failed to start OpenVPN connection to server.


journalctl -xe
-- Support: https://www.debian.org/support
--
-- The process /usr/sbin/openvpn could not be executed and failed.
--
-- The error number returned by this process is ERRNO.
Dec 22 09:03:22 openvpn systemd[1]: openvpn@server.service: Main process exited, code=exited, status=226/NAMESPACE
-- Subject: Unit process exited
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- An ExecStart= process belonging to unit openvpn@server.service has exited.
--
-- The process' exit code is 'exited' and its exit status is 226.
Dec 22 09:03:22 openvpn systemd[1]: openvpn@server.service: Failed with result 'exit-code'.
-- Subject: Unit failed
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- The unit openvpn@server.service has entered the 'failed' state with result 'exit-code'.
Dec 22 09:03:22 openvpn systemd[1]: Failed to start OpenVPN connection to server.
-- Subject: A start job for unit openvpn@server.service has failed
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- A start job for unit openvpn@server.service has finished with a failure.
--
-- The job identifier is 8549 and the job result is failed.
 
Weiter geht's, jetzt bekomme ich den Service gestartet, allerdings nicht beim systemstart. Es scheint folgendes Problem zu bestehen, ein Blick in die openvpn Logdatei besagt:

Code:
Options error: --writepid fails with '/run/openvpn/server.pid': No such file or directory (errno=2)

Das Verz. /run/openvpn existiert aber nicht, und warum auch immer kann er das nicht anlegen. Lege ich das Verz. händisch an, startet der Dienst. Nach dem nächsten Neustart ist das Verz. aber wieder weg. Hier scheint es doch das nächste Rechteproblem zu geben?

Ach, und zusätzlich musste noch die Option Nesting aktiviert werden.

Gruß,

jawr
 
So, das läuft jetzt auch mit dem Dienst, so ganz erschließt es sich mir nicht was der "Quatsch" hier soll, scheint aber irgendwie an dem Container zu liegen. Ich habe mir jetzt einen rc.local Dienst eingerichtet, der das Verzeichnis beim Start des Container anlegt. Am Ende ist wichtig das es läuft, ich denke aber es gibt elegantere Wege...wenn mann weiß wie :) . Ich wäre also dankbar, wenn sich hier mal jemand mit Ahnung zu dem Problem äußern würde.

Und die Frage bezüglich unprivilegierter Container bleibt natürlich bestehen. Die Frage ist dabei für mich ob es dann nicht sicherer wäre, openvpn in einer eigenen VM laufen zu lassen, da es auch mein einziger Einstiegspunkt über das Internet in mein Heimnetz ist.

Gruß,

jawr
 
Last edited:
hi,

zum beispiel

pct config CTID:
Code:
arch: amd64
cores: 2
features: nesting=1
hostname: openvpn
memory: 1024
net0: name=eth0,bridge=vmbr0,firewall=1,gw=192.168.1.1,ip=192.168.1.123/24,type=veth
onboot: 1
ostype: debian
rootfs: local:250/vm-250-disk-0.raw,size=16G
swap: 1024
unprivileged: 1
lxc.cgroup.devices.allow: c 10:200 rwm
lxc.mount.entry: /dev/net dev/net none bind,create=dir

und pct enter CTID. beim debian buster: systemctl start openvpn-server@server.service wenns funktioniert dann systemctl enable openvpn-server@server.service
 
Hi,

also meine pct config sieht wie folgt aus:

Code:
arch: amd64
cores: 1
features: nesting=1
hostname: openvpn
memory: 1024
net0: name=eth0,bridge=vmbr0,firewall=1,gw=192.168.178.1,hwaddr=06:31:3F:CC:4C:0B,ip=192.168.178.220/24,type=veth
ostype: debian
rootfs: local-lvm:vm-102-disk-0,size=10G
swap: 1024
unprivileged: 1
lxc.cgroup.devices.allow: c 10:200 rwm
lxc.mount.entry: /dev/net dev/net none bind,create=dir


dann versucht wie von dir beschrieben:

Code:
systemctl start openvpn-server@server.service
Job for openvpn-server@server.service failed because the control process exited with error code.
See "systemctl status openvpn-server@server.service" and "journalctl -xe" for details.

journalctl -xe
-- A start job for unit openvpn-server@server.service has begun execution.
-- 
-- The job identifier is 3422.
Dec 22 12:53:38 openvpn openvpn[485]: Options error: In [CMD-LINE]:1: Error opening configuration file: server.conf
Dec 22 12:53:38 openvpn openvpn[485]: Use --help for more information.
Dec 22 12:53:38 openvpn systemd[1]: openvpn-server@server.service: Main process exited, code=exited, status=1/FAILURE
-- Subject: Unit process exited
-- Defined-By: systemd
-- Support: https://www.debian.org/support
-- 
-- An ExecStart= process belonging to unit openvpn-server@server.service has exited.
-- 
-- The process' exit code is 'exited' and its exit status is 1.
Dec 22 12:53:38 openvpn systemd[1]: openvpn-server@server.service: Failed with result 'exit-code'.
-- Subject: Unit failed
-- Defined-By: systemd
-- Support: https://www.debian.org/support
-- 
-- The unit openvpn-server@server.service has entered the 'failed' state with result 'exit-code'.
Dec 22 12:53:38 openvpn systemd[1]: Failed to start OpenVPN service for server.
-- Subject: A start job for unit openvpn-server@server.service has failed
-- Defined-By: systemd
-- Support: https://www.debian.org/support
-- 
-- A start job for unit openvpn-server@server.service has finished with a failure.
-- 
-- The job identifier is 3422 and the job result is failed.

root@openvpn:~#
 
Options error: In [CMD-LINE]:1: Error opening configuration file: server.conf
what about the server.conf file? have you configured openvpn?
 
Meine server.conf ist konfiguriert und liegt unter : /etc/openvpn.

Wie gesagt, es läuft ja auch wie oben beschrieben, oder was meinst du mit ob ich openvpn konfiguriert habe?

Gruß,

jawr
 
OK, die Dateien mussten nach /etc/openvpn/server. Jetzt startet es, aber immer noch nicht als unprivilegierter Container.
 
aber immer noch nicht als unprivilegierter Container.
aber in deiner config steht unprivileged: 1 ? wie meinst du denn?
 
Mit unprivileged: 1 funktioniert es nicht, nur mit unprivileged: 0, versuche ich es mit 1 sieht der Output jetzt wie folgt aus:

Code:
systemctl start openvpn-server@server.service
Job for openvpn-server@server.service failed because the control process exited with error code.
See "systemctl status openvpn-server@server.service" and "journalctl -xe" for details.
root@openvpn:~# journalctl -xe
Dec 22 14:07:07 openvpn openvpn[308]: Warning: Error redirecting stdout/stderr to --log file: /var/log/openvpn.log: Permission denied (errno=13)
Dec 22 14:07:07 openvpn openvpn[308]: WARNING: file '/etc/openvpn/server.key' is group or others accessible
Dec 22 14:07:07 openvpn openvpn[308]: Options error: --status fails with '/var/log/openvpn-status.log': Permission denied (errno=13)
Dec 22 14:07:07 openvpn openvpn[308]: Options error: Please correct these errors.
Dec 22 14:07:07 openvpn openvpn[308]: Use --help for more information.
Dec 22 14:07:07 openvpn systemd[1]: openvpn-server@server.service: Main process exited, code=exited, status=1/FAILURE
-- Subject: Unit process exited
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- An ExecStart= process belonging to unit openvpn-server@server.service has exited.
--
-- The process' exit code is 'exited' and its exit status is 1.
Dec 22 14:07:07 openvpn systemd[1]: openvpn-server@server.service: Failed with result 'exit-code'.
-- Subject: Unit failed
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- The unit openvpn-server@server.service has entered the 'failed' state with result 'exit-code'.
Dec 22 14:07:07 openvpn systemd[1]: Failed to start OpenVPN service for server.
-- Subject: A start job for unit openvpn-server@server.service has failed
-- Defined-By: systemd
-- Support: https://www.debian.org/support
--
-- A start job for unit openvpn-server@server.service has finished with a failure.
--
-- The job identifier is 317 and the job result is failed.
 
Mit unprivileged: 1 funktioniert es nicht, nur mit unprivileged: 0, versuche ich es mit 1 sieht der Output jetzt wie folgt aus:
die unprivileged option solltest du nicht haendisch im config editieren (file permissions und owners aendern sich zwischen unpriv und priv containers, darum kommt die fehlermeldung "Permission denied")

wenn du dein container z.b. von priv -> unpriv wandeln willst, kannst du das backup/restore benutzen, und "unprivileged" beim restore window checken.
 
  • Like
Reactions: aPollO
Ok, das mit dem Backup hat nicht geklappt, egal, ich habe eben einen ganz neuen Container als unprivileged erstellt. Jetzt sieht das auch alles schon anders aus, ich glaube wir sind nah dran :) .

Jetzt steht folgendes im log wenn ich versuche den Service zu starten.

Code:
cat openvpn.log
WARNING: file '/etc/openvpn/server/server.key' is group or others accessible
OpenVPN 2.4.7 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [PKCS11] [MH/PKTINFO] [AEAD] built on Feb 20 2019
library versions: OpenSSL 1.1.1d  10 Sep 2019, LZO 2.10
Diffie-Hellman initialized with 2048 bit key
TUN/TAP device tun0 opened
Note: Cannot set tx queue length on tun0: Operation not permitted (errno=1)
/sbin/ip link set dev tun0 up mtu 1500
openvpn_execve: unable to fork: Resource temporarily unavailable (errno=11)
Exiting due to fatal error
 
Maybe this can help?

Code:
root@openvpn-server:/dev/net# ls -la
total 0
drwxr-xr-x 2 nobody nogroup      60 Dec 22 13:57 .
drwxr-xr-x 7 root   root        500 Dec 22 14:27 ..
crw-rw-rw- 1 nobody nogroup 10, 200 Dec 22 13:57 tun
 
Tja was soll ich sagen, läuft jetzt, danke! Ich habe da einiges dazu gefunden im Netz, aber diese Anleitung nicht, damit hätte ich mir eine Menge Zeit sparen können.

Eigentlich kann der Thread gelöscht werden, dürfte nur verwirren. Man muss halt nur die richtige Anleitung finden.

Gruß,

jawr
 
Eigentlich kann der Thread gelöscht werden, dürfte nur verwirren. Man muss halt nur die richtige Anleitung finden.
diese anleitung hat bis jetzt nicht existiert ;)

kannst du bitte den thread [SOLVED] markieren, damit die anderen wissen was zu erwarten? :)
 
Klar, gerne. Habe den Thread editiert und das davor gepackt, ist das so richtig? Sollte so passen.
 
ja, danke!
 

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!