Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Одновременный запуск openvpn сервера и клиента, как сервиса. 16.04.6 server.  (Прочитано 3074 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн 027

  • Автор темы
  • Участник
  • *
  • Сообщений: 122
  • Cinnamon
    • Просмотр профиля
Общая формулировка вопроса: как в этой версии кошерно запускать одновременно openvpn server и openvpn client? В виде автозапускаемых сервисов.

Я таки запустил, после плясок с бубном, но выглядит крайне костыльно, хоть и крайне просто.
А, может быть, надо организовать работу по другой схеме, а у меня глаз замылился.

Имеется:
  • Сервер в офисе (та самая 16.04 server), bare metal
  • Виртуалка в датацентре, KVM, 18.04 server

Надо:
  • Перманентный, автоподнимающийся из любых падений vpn для:
    • проброса портов по защищенному туннелю от рабочих станций (из локалки) на сервер в ДЦ. Без необходимости поднимать на каждой из них отдельное vpn подключение.
    • иметь альтернативный по протоколу, перманентный шифрованный канал — на случай возможных кунштюков.

  • При необходимости, прямое подключение какой-то из рабочих станций до обоих серверов. Например, кого-то из эникеев или программистов.

Таким образом, нужно иметь постоянно работающий vpn-сервер на обоих хостах, одним не обойдешься.

Вгугль предлагает великое множество инструкций, как настроить тривиальную схему сервер-клиент. (Тут мне совета не надо, давно разобрался (для easyrsa 2.0) — а вчера по новой, ибо оно уже 3.0.6.)

И пару конкретных вопросов без ответа (а то, что отвечали, галимое фуфло). Конкретно про одновременный запуск на одной машине, и конкретно, как сервис, а не ручками в консоли.

Первая стадия.
Настроил быстренько по инструкции, и оно чудно заработало:
  • openvpn server на офисном сервере
  • openvpn server на виртуальке в датацентре
Подключаюсь без проблем: с рабочий станции в локалке и домашнего компа; с сервера в офисе к серверу в ДЦ.
Пинги идут в обе стороны.
HTTP серверы также доступны по частным адресам (10.8.0.1:80 офис и 10.9.0.1:80 впс-ка).
Все, вроде, збс.

Вторая стадия — надо запустить на офисном сервере openvpn клиента — перманентно и попиндикулярно инстансу сервера.
Вот тут вышел затык, ибо оно не хотело ни в какую.

Для начала потратил кучу времени и красноглазия на тесты в виртуалбоксе. Оказалось, что там есть мощные глюки, которых на bare metal нет.

Пытался писать самодельный systemd юнит, и даже практически преуспел, но с одним мелким и непонятным изъяном. А потом обнаружил, что он(и), юниты, уже есть.

Их там аж целых два, и там используется встроенная в системду магия, которую я пока не осилил. (Магия — в программистском смысле, неочевидные действия.)

Курение нарытого показывает, вроде бы, однозначно: при старте сервиса будут прочитаны все файлы /etc/openvpn/*.сonf, и на каждый будет запущен свой инстанс. Однако, системда упорно не хотела видеть оба конфига, и искала только один. Причем, искала его даже после удаления, а второй игнорировала полностью.

Вот где-то тут собака порылся:
$ systemctl cat openvpn@service
# /lib/systemd/system/openvpn@.service
[Unit]
Description=OpenVPN connection to %i
PartOf=openvpn.service
ReloadPropagatedFrom=openvpn.service
Before=systemd-user-sessions.service
Documentation=man:openvpn(8)
Documentation=https://community.openvpn.net/openvpn/wiki/Openvpn23ManPage
Documentation=https://community.openvpn.net/openvpn/wiki/HOWTO

[Service]
PrivateTmp=true
KillMode=mixed
Type=forking
ExecStart=/usr/sbin/openvpn --daemon ovpn-%i --status /run/openvpn/%i.status 10 --cd /etc/openvpn --script-security 2 --config /etc/openvpn/%i
PIDFile=/run/openvpn/%i.pid
ExecReload=/bin/kill -HUP $MAINPID
WorkingDirectory=/etc/openvpn
ProtectSystem=yes
CapabilityBoundingSet=CAP_IPC_LOCK CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW CAP_SETGID CAP_SETUID CAP_SYS_CHROOT CAP_DAC_READ_SEARCH CAP
LimitNPROC=10
DeviceAllow=/dev/null rw
DeviceAllow=/dev/net/tun rw

[Install]
WantedBy=multi-user.target
При наличии двух конфигов, server.conf и client.conf, отрабатывался только первый.
Типа такого:
$ pgrep openvpn
12345
А если удалить server.conf, оно при перезапуске продолжало искать server.conf, и только server.conf, и ругалось в логе на фатальную ошибку.
Если же снести пакет полностью (purge) и снова установить, и запустить первый раз с единственным конфигом client.conf — то, если заменить client.conf на server.conf, оно продолжало упорно искать client.conf. В каком-то кэше застревало?.. systemctl daemon-reload не помогало.

А если запускать вручную, все прекрасно работает. Примерно так:
# /usr/sbin/openvpn --daemon --config /etc/openvpn/client.conf$ pgrep openvpn
12345
67890

В конце концов, удалось запустить и сервер, и клиент. Довольно стабильно, если судить по нескольким десяткам перезапусков типа systemctl stop/start/restart.

Результативные удары в бубен:
  • Сделать разные порты на серверах. Хотя, казалось бы...
  • Запускать openvpn сервер после клиента, грязным хаком переименовав конфиги в 1server.conf и 2client.conf.
« Последнее редактирование: 31 Мая 2019, 00:14:17 от 027 »
Если бы было достаточно man bash, не было бы ABS.

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
Просто настроить и клиент и сервер, сервис всё равно стартует автоматом, подтянет оба конфига.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн 027

  • Автор темы
  • Участник
  • *
  • Сообщений: 122
  • Cinnamon
    • Просмотр профиля
Просто настроить и клиент и сервер, сервис всё равно стартует автоматом, подтянет оба конфига.
Не читатель, ага. :)

Пользователь добавил сообщение 31 Мая 2019, 00:19:28:
Краткое резюме для нечитателей.
Конфиги настроены идеально.
Все чудно работает, если:
 * запускать сервер штатно, как сервис
 * запускать клиент из консоли, как приложение
Про внезапно вылезающие грабли при попытке запустить — внимание! и клиент, и сервер, и оба, как сервис — велкам в первый пост.
« Последнее редактирование: 31 Мая 2019, 00:23:02 от 027 »
Если бы было достаточно man bash, не было бы ABS.

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
Логи читали?… А то воды налили - утопиться можно, а по делу всего три слова.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн 027

  • Автор темы
  • Участник
  • *
  • Сообщений: 122
  • Cinnamon
    • Просмотр профиля
А как же!
В логах были указания на ошибки, а как же. Два раза.
ДО возникновения проблемы с незапуском второго сервиса/демона.
Вполне информативные, типа компрессор не тот указан.
ДО.

А, ну еще пару раз лоханулся, забыв раскомментировать строки:
# script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf
На эту ошибку, кстати, в логах ничего конкретного не пишут, гражданин теоретик. Просто — файлед, блин, с экзит код 1.
И ВСЁ.
Про это надо знать, когда строчки эти нужны, а когда нет.
А при возникновении проблемы с незапуском сервиса-сервера, когда запущен сервис-клиент, в логах тишина.


Вы когда-нибудь пробовали запускать — еще раз цитирую для нечитателей:
и клиент, и сервер, и оба, как сервис, и чтоб в реальной работе, а не в вольных предположениях?
Я так вижу, ни разу.
Я так вижу, вы вообще не поняли, о чем речь.
« Последнее редактирование: 31 Мая 2019, 01:07:16 от 027 »
Если бы было достаточно man bash, не было бы ABS.

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
Пока не будет логов и конфигов, не будет и ответов.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн dikiyZ

  • Активист
  • *
  • Сообщений: 342
  • Убунтоид, как правило, человек. Но такой занудный!
    • Просмотр профиля
не обращайте внимания на AnrDaemon, он никогда не даёт ответ на конкретный вопрос, в основном придирается к пользователям, посмотрите в других темах.
 Правильный ответ по openvpn: прописать разных пользователей и запускать в системе сервер от пользователя1, клиент - от пользователя2. Порты должны быть разные. У меня так заработало год назад.
 А вообще, рекомендую wireguard, гораздо быстрей и нет гемороидальности openvpn. Сам ушёл с openvpn и счастлив.
если система просто работает без дополнительного шаманства, то теряется ощущение собственной элитности. Вот почему нам нужен линукс.
 Предупреждён администрацией форума за неоднократное чувство юмора

Оффлайн 027

  • Автор темы
  • Участник
  • *
  • Сообщений: 122
  • Cinnamon
    • Просмотр профиля
Про странное требование использовать разные порты мне этот комбайн openvpn сам в логах написал. Я поудивлялся, ну да ладно.
За совет запускать клиента от другого пользователя спасибо, попробую сделать.
Задействовать wireguard просто так не получится, в него не умеют наши говнороутеры.
Что касается гражданина AnrDaemon, с ним все понятно. У него диагноз в счетчике постов указан. :)
Если бы было достаточно man bash, не было бы ABS.

Оффлайн koshev

  • Старожил
  • *
  • Сообщений: 1709
  • חתול המדען
    • Просмотр профиля
Правильный ответ по openvpn: прописать разных пользователей и запускать в системе сервер от пользователя1, клиент - от пользователя2.
Первый раз о таком слышу. У меня сейчас работает и клиент и сервер от одного пользователя.
Более того, сервер на порту 1195, и клиент соединяется на порт 1195 сервера.
А AnrDaemon прав. Не будет логов — не будет ответов. И вообще способов запуска openvpn несколько вариантов. К примеру у меня оно запускается через ifupdown и описывается как обычный интерфейс в /etc/network/interfaces.
OpenWrt 19.07

Оффлайн 027

  • Автор темы
  • Участник
  • *
  • Сообщений: 122
  • Cinnamon
    • Просмотр профиля
Первый раз о таком слышу. У меня сейчас работает и клиент и сервер от одного пользователя.
Более того, сервер на порту 1195, и клиент соединяется на порт 1195 сервера.
Ось ubuntu 16.04 сервер и openvpn 2.3.10?
« Последнее редактирование: 02 Июня 2019, 18:59:58 от 027 »
Если бы было достаточно man bash, не было бы ABS.

Оффлайн koshev

  • Старожил
  • *
  • Сообщений: 1709
  • חתול המדען
    • Просмотр профиля
Не важно. Запускал в свое время 2.3.X, сейчас 2.4.X.
OpenWrt 19.07

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн 027

  • Автор темы
  • Участник
  • *
  • Сообщений: 122
  • Cinnamon
    • Просмотр профиля
Как ни странно, на этот бред я тоже натыкался.
Казалось бы, где порт сервера, и где порт клиента — когда они запущены на одном компе.
Тем не менее, ругательство на одинаковый порт в логах получал, и смена порта — внезапно! — помогла. В каком-то из многочисленных экспериментов.

В итоге, удалось запустить сабж, сплясав с бубном:
Результативные удары в бубен:
1. Сделать разные порты на серверах. Хотя, казалось бы...
2. Запускать openvpn сервер после клиента, грязным хаком переименовав конфиги в 1server.conf и 2client.conf.
После этого убедительного успеха — внимание! — последовательно вернул порты в одинаковый номер, а потом и конфиги переименовал в исходные имена  без цифр впереди.
И все стало запускаться раз за разом.
То есть так, как должно ыбло изначально, но не работало.
Перезагрузкой тоже пришлось проверить, вынужденно, из-за аварийного отключения электричества на полдня.

Шо это было? Вряд ли опенвпн виноват. Вероятно системдэ взбрыкивало, древней версии (какая там в 16.04).

Разбираться с этим категорически некогда, да и не моя это работа, сервера на убунте админить.
Если бы было достаточно man bash, не было бы ABS.

 

Страница сгенерирована за 0.038 секунд. Запросов: 25.