Використання OpenVPN з systemd


24

Гаразд, тому я шукав в Інтернеті рішення цієї проблеми, без відповідей, здавалося б, на мене. Сподіваюся, хтось може мені допомогти. Я лише намагаюся налаштувати клієнт OpenVPN.

Я бігаю, CrunchBang Linux 3.2.0-4-amd64 Debian 3.2.60-1+deb7u1 x86_64 GNU/Linuxі я просто перейшов на використання systemd. Перехід пройшов досить плавно, але тепер я не можу змусити свого клієнта OpenVPN прийти за допомогою systemd. Я намагався дотримуватися цих інструкцій з налаштування, але нічого не працює.

Я можу вивести тунель з командного рядка за допомогою openvpn /etc/openvpn/vpn.conf. Тому я знаю, що конфігураційний файл хороший, він працював із системою sysvinit чудово, тому я не здивований. Потім я намагаюся просто зробити статус, у systemctl status openvpn@vpn.serviceрезультаті якого:

$ sudo systemctl status openvpn@vpn.service
  openvpn@vpn.service
Loaded: error (Reason: No such file or directory)
Active: inactive (dead)

Я зрозумів, що мені потрібно зробити певну настройку для сервісів. Я хочу бути запропоновано ввести пароль , так що я після цього керівництва для створення openvpn@.serviceін /etc/systemd/system/. Але перезапуск служби OpenVPN все ще не вимагає ввести пароль.

$ sudo service openvpn restart
[ ok ] Restarting openvpn (via systemctl): openvpn.service.

Підручники Fedora проходять кроки створення символічних посилань, але не створюють жодного з .service-файлів у покрокових інструкціях.

Якого твору мені не вистачає? Чи потрібно мені створити послугу openvpn@vpn.service? Якщо так, то де саме я його розміщую? Я відчуваю, що це не повинно бути таким складним, але я не можу знайти рішення, яке б працювало на мене. Я радий надати більше необхідної інформації.

Рішення

-rw-r--r--  1 root root   319 Aug  7 10:42 openvpn@.service

[Unit]
Description=OpenVPN connection to %i
After=network.target

[Service]
Type=forking
ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --config /etc/openvpn/%i.conf
ExecReload=/bin/kill -HUP $MAINPID
WorkingDirectory=/etc/openvpn

[Install]
WantedBy=multi-user.target
openvpn@.service (END)

Symlink:

lrwxrwxrwx  1 root root   36 Aug  7 10:47 openvpn@vpn.service -> /lib/systemd/system/openvpn@.service

Підказка про пароль

Зараз все працює, за винятком запиту на підключення пароля. Я спробував це рішення . Я трохи перетворив файл зверху і додав сценарій очікування, як у прикладі. Працює як шарм! Мої файли нижче.

Змінені рядки з вищезазначеного /lib/systemd/system/openvpn@.service

ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --management localhost 5559 --management-query-passwords --management-forget-disconnect --config /etc/openvpn/%i.conf
ExecStartPost=/usr/bin/expect /lib/systemd/system/openvpn_pw.exp

Очікуйте сценарій /lib/systemd/system/openvpn_pw.exp. Обов’язково виконайте такі дії:

  • chmod +x на сценарій.
  • були telnetвстановлені

Код сценарію очікування:

#!/usr/bin/expect
set pass [exec /bin/systemd-ask-password "Please insert Private Key password: "]

spawn telnet 127.0.0.1 5559
expect "Enter Private Key Password:"
send "password 'Private Key' $pass\r"
expect "SUCCESS: 'Private Key' password entered, but not yet verified"
send "exit\r"
expect eof

Слід зазначити, що вищевказане рішення записує ваш пароль, введений у відкритий текст, у наступні входи в /var/log/syslogі/var/log/daemon.log


Як виглядає openvpn@.serviceфайл?
Крістіан Цюпіту

Оновлено публікацію з поточною помилкою
Rora14

Загляньте в /var/log/{syslog,daemon.log} і journalctl -b -mдізнайтеся, чому OpenVPN вийшов. Одне з цих місць має містити реальні повідомлення про помилки. (Або навіть journalctl -b -m _EXE=/usr/sbin/openvpnслід давати лише повідомлення OpenVPN).
дероберт

Так, я туди потрапляв. Ми стикаємося з проблемою пароля. Я спробую це рішення для нього: bbs.archlinux.org/viewtopic.php?id=150440 Дякую за всю допомогу!
RoraΖ

Відповіді:


11

Я думаю, що налаштування Debian OpenVPN з systemd наразі зламана. Щоб змусити його працювати на своїх машинах, мені довелося:

  1. Створіть /etc/systemd/system/openvpn@.service.d(каталог) і помістіть у нього новий файл із цим:

    [Одиниця]
    Потрібна = мережа.сервіс
    Після = мережа.сервіс
    Я зателефонував до свого файлу local-after-ifup.conf. Це потрібно закінчити .conf. (Це біт, який наразі зламаний.

  2. Створіть файл у /etc/tmpfiles.d(я назвав моє local-openvpn.conf) зі вмістом:

    # Введіть віковий аргумент UID GID Path Mode
    d / run / openvpn 0755 root root - -
    Це помилка Debian 741938 (виправлено в 2.3.3-1).

  3. Створіть символьне посилання на multi-user.target.wants(найпростіший спосіб systemctl enable openvpn@CONF_NAME.service) Наприклад, якщо у вас є /etc/openvpn/foo.conf, ви б використовували openvpn@foo.service.

  4. Якщо у вас також є скрипт init SysV, який відображається в systemd, відключіть його. Це помилка Debian 700888 (виправлено в 2.3.3-1).

ПРИМІТКА: 2.3.3-1 або пізнішої версії ще не проходить тестування , хоча вона нестабільна.


systemctl включення все ще не вдається сказати, що немає такого файлу чи каталогу. Я не бачу жодних скриптів sysv init в / lib / systemd, якщо тільки його systemd-initctl?
RoraΖ

@raz Сценарій SysV був би /etc/init.d/openvpn; systemd за замовчуванням запускає такі, як і sysv init. Це openvpn.serviceти маєш; вам потрібно відключити його ( systemctl disable). Чи /lib/systemd/system/openvpn@.serviceіснує файл у вашій системі?
derobert

@raz Якщо у вас є цей файл, ви можете спробувати керівництвоln -s /lib/systemd/system/openvpn@.service /etc/systemd/system/multi-user.target.wants/openvpn@vpn.service
derobert

У мене немає цього файлу, але я впевнений, що міг би його створити. Я відключив/etc/init.d/openvpn script.
RoraΖ

@raz Я не впевнений, чи має Crunchbang репортаж нового пакета OpenVPN, але якщо ні, ви можете схопити цей скрипт з source.debian.net/src/openvpn/2.3.3-1/debian/…
derobert

8
  1. Помістіть усі файли openvpn * .conf /etc/openvpn/.
  2. Редагувати /etc/default/openvpn. Відмініть це:

    AUTOSTART="all"
    
  3. Біжи systemctl daemon-reload.

  4. Біжи service openvpn start.

Я думаю, що вони використали це як рішення, тому що зараз в Debian 9 ще гірше, openvpn не перезапускається, якщо помилка виникає, що дуже дурно ... Хтось знає якесь рішення чи вирішення, я пишу сценарій, щоб перевірити, чи openvpn все ще працює!
Лучано Андресс Мартіні

Це було ідеально. він запустився б і зупинився, хоча я і назвав це очевидним client.conf, тепер з цим моя конфігурація просто працює. Спасибі!
Мітчелл Керрі

6

Цей тип одиничного файлу є миттєвою послугою - більш детальну інформацію можна отримати тут

Нижче наведено файл файлу для openvpnCentOS 7:

[Unit]
Description=OpenVPN Robust And Highly Flexible Tunneling Application On %I
After=syslog.target network.target

[Service]
PrivateTmp=true
Type=forking
PIDFile=/var/run/openvpn/%i.pid
ExecStart=/usr/sbin/openvpn --daemon --writepid /var/run/openvpn/%i.pid --cd /etc/openvpn/ --config %i.conf

[Install]
WantedBy=multi-user.target

і він проживає як /usr/lib/systemd/system/openvpn@service. У %iфайлі замінюється рядок після @імені одиниці.

Оскільки конфігураційний файл є, /etc/openvpn/myopenvpn.confтоді послуга починається з:

systemctl start openvpn@myopenvpn.service

У мене тільки /usr/lib/systemd/user/ нічого іншого на /usr/lib/systemdрівні.
RoraΖ

Про що /lib/systemd/system/? У мене, схоже, є в моїй системі однаковий вміст (і вони не є посиланнями!).
garethTheRed

Я щойно додав цей файл, оновив свій пост на все.
RoraΖ

5

Потрібно створити службовий файл, включивши його openvpn@<configuration>.service.

Наприклад, якщо файл конфігурації є /etc/openvpn/client.conf, ім'я служби є openvpn@client.service.

З Arch Wiki


$ sudo systemctl enable openvpn@vpn.service [sudo] пароль для користувача: Не вдалося надати виклик методу: Немає такого файлу чи каталогу
Rora

Ваш файл конфігурації називається "vpn"?
Карло

Так,/etc/openvpn/vpn.conf
RoraΖ

Хто systemctl start openvpn@vpn.serviceне працює , або? Це має спрацювати ...
Карло

1
Це працює для мене на Raspbian GNU / Linux 8 (Debian Jessie). Спасибі!
neuhaus

1

Openvpn @ .service сильно розвинувся між Debians 8 та 9. Оригінальний пакет для Jessie, наприклад, не вдається systemctl reload openvpn@. Для виправлення цих версій Stretch вводить 10 нових директив у systemd-файл, у тому числі PIDFile=для того, щоб зробити перезавантаження знову.

Користувачам Stretch я б запропонував перейти на репортаж, і якщо це неможливо зробити, принаймні дістайте systemd-файл з https://packages.debian.org/jessie-backports/openvpn та витягніть debian/openvpn@.serviceйого /etc/systemd/system/openvpn@.serviceта насолоджуйтесь кращим функціональність та безпека.


0

Правильним рішенням було б використання системних systemd-ask-password/ « парольних агентів », що забезпечує системний вбудований спосіб воронки паролів / паролів до служб.

Для цього вам знадобиться OpenVPN 2.3.0 або новішої версії .


Це те, що використовує сценарій Expect у моїй редагованій публікації.
RoraΖ

Вибачте, пропустили це редагування.
Ілля Пробст

0

На свіжій установці Jessie_8.0.0 я зробив:

  1. скопіюйте старі /etc/openvpn/cluster.conf(плюс *.keyі *.crt) файли з wheezy
  2. Розкоментувати AUTOSTART="all"в /etc/default/openvpn- я думаю , що це не мало ніякого ефекту
  3. /lib/systemd/system-generators/openvpn-generator cluster
  4. systemctl restart openvpn@cluster.service

Тепер тунель піднявся - я побачу, що буде після перезавантаження, але я не можу перезавантажитись у цей момент

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.