Systemd не может запустить openvpn в контейнере 16.04, управляемом lxd

27

openvpnначинается нормально из командной строки, используя точный ExecStart=вызов из systemdфайла модуля:

/usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/server.conf /run/openvpn/server.pid

ps ax подтверждает, что процесс есть:

1634 ?        Ss     0:00 /usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/server.conf --writepid /run/openvpn/

Но systemctl start openvpn@serverне удачно

● openvpn@server.service - OpenVPN connection to server
   Loaded: loaded (/lib/systemd/system/openvpn@.service; disabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Thu 2016-03-17 09:54:52 UTC; 4s ago
     Docs: man:openvpn(8)
           https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage
           https://community.openvpn.net/openvpn/wiki/HOWTO
  Process: 1679 ExecStart=/usr/sbin/openvpn --daemon ovpn-server --status /run/openvpn/server.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/server.conf --writepid /run/openvpn/s
 Main PID: 819 (code=exited, status=1/FAILURE)

Mar 17 09:54:52 vpn ovpn-server[1679]:   push_ifconfig_ipv6_remote = ::
Mar 17 09:54:52 vpn ovpn-server[1679]:   enable_c2c = DISABLED
Mar 17 09:54:52 vpn ovpn-server[1679]:   duplicate_cn = DISABLED
Mar 17 09:54:52 vpn ovpn-server[1679]:   cf_max = 0
Mar 17 09:54:52 vpn ovpn-server[1679]:   cf_per = 0
Mar 17 09:54:52 vpn ovpn-server[1679]:   max_clients = 1024
Mar 17 09:54:52 vpn systemd[1]: openvpn@server.service: Control process exited, code=exited status=1
Mar 17 09:54:52 vpn systemd[1]: Failed to start OpenVPN connection to server.
Mar 17 09:54:52 vpn systemd[1]: openvpn@server.service: Unit entered failed state.
Mar 17 09:54:52 vpn systemd[1]: openvpn@server.service: Failed with result 'exit-code'.

Я понимаю, journalctl | grep ovpn-server | tail -n 100что это не удалось форк:

Mar 17 09:57:44 vpn ovpn-server[1693]: OpenVPN 2.3.10 x86_64-pc-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [PKCS11] [MH] [IPv6] built on Feb  2 2016
Mar 17 09:57:44 vpn ovpn-server[1693]: library versions: OpenSSL 1.0.2g  1 Mar 2016, LZO 2.08
Mar 17 09:57:44 vpn ovpn-server[1693]: daemon() failed or unsupported: Resource temporarily unavailable (errno=11)
Mar 17 09:57:44 vpn ovpn-server[1693]: Exiting due to fatal error
Кристиан Давид
источник
Эта проблема произошла для меня на OpenVZ с Ububtu 16.4 - комментируя, LimitNPROCкак в ответе, сервис запустился нормально.
Петр Кула

Ответы:

46

Я также искал решение для этого. То, что я нашел для работы, это закомментировать LimitNPROCстроку в /lib/systemd/system/openvpn@.service.

Не забудьте бежать systemctl daemon-reloadпосле этого.

Iain
источник
3
Спасибо! Как вы диагностировали проблему? Даже зная ответ, поиск в Google LimitNPROC lxdне дал бы ответ, который сразу же помог бы мне.
Кристиан Давид
5
Я взял экземпляр 15.10 lxd и начал сравнивать конфигурацию systemd. Поначалу LimitNPROC не был подозрительным, но в старой конфигурации его не было, поэтому я попытался удалить его, и он решил это. К этому моменту я целый день рвал на себе волосы.
Iain
8
Спасибо, это тоже исправило мою проблему! Я должен был бежать, systemctl daemon-reloadпрежде чем это вступило в силу.
Квентин Скоусен
1
Об этом сообщалось?
user1338062 15.12.16
2
Кто-то сообщил об этом как github.com/lxc/lxd/issues/3336
happyskeptic
14

Лучше избегать модификации модулей systemd, происходящих из системных пакетов. Просто используйте системную переопределение:

systemctl edit openvpn@

Имя устройства для сервера openvpn может отличаться, например. для версии пакета 2.4.5-xenial0это будет

systemctl edit openvpn-server@

Затем поместите в редактор:

[Service]
LimitNPROC=infinity

Он должен создать /etc/systemd/system/openvpn@.service.d/override.confфайл (или аналог для соответствующего имени устройства). Чтобы активировать его, вы можете перезагрузить systemd

systemctl daemon-reload

Если запуск устройства LimitNPROC=infinityпрошел успешно, вернитесь назад и измените предел на более высокое значение, чем значение по умолчанию 10. Предел важен для предотвращения использования сервисом всех доступных pids, которые могут вызвать отказ в обслуживании.

Кредиты:
переопределить: /unix//a/398541/218321
«Неограниченный лимит»: /unix//a/345596/218321

porbas
источник
3
это также исправляет openvpnвнутри openvzконтейнеров
Стюарт Кардалл
Это лучшее решение, чем принятое. Я только что обновил свой контейнер и openvpn перестал работать. Это потому, что я обновил стандартный системный файл вместо переопределения.
WoJ
1

Я также должен был добавить эти ниже их соответствующие брат брат

DeviceAllow=/dev/net/tap rw
DeviceAllow=/dev/net/tap1 rw

запустить его на уровне L2.

Томас
источник
Добро пожаловать в Спросите Ubuntu! Я рекомендую отредактировать этот ответ, чтобы дополнить его конкретными сведениями о том, как это сделать. (См. Также Как написать хороший ответ? Для общего совета о том, какие ответы считаются наиболее ценными в Ask Ubuntu.)
Дэвид Фёрстер,