Моя система требует использования vpn, который я использую expressvpn
который основан на OpenVpn, но использует собственный systemd
демон. Все команды подключения / отключения должны проходить через предоставленный двоичный файл. Чтобы не вводить эти команды в терминал после каждой перезагрузки или выхода из спящего режима (и для настройки нескольких правил iptable), я поместил скрипт в /etc/NetworkManager/dispatcher.d/
ловя «вверх» событие.
Пока скрипт работает, у меня проблемы с expressvpn connect
. После пробуждения от сна он действует так, как если бы было вызвано несколько команд подключения. Простое решение - перезапустить его службу.
Я могу выпустить systemctl restart expressvpn
за которым следует expressvpn connect
команда из терминала (как пользователь, так и sudo) без проблем, но если я добавлю команду перезапуска в сценарий диспетчера, что-то сломается.
Это проблемная часть скрипта (включая мои строки временного журнала):
date "+%H:%M:%S %d/%m/%y" &> /home/twifty/Desktop/up-log.txt
echo "restarting..." >> /home/twifty/Desktop/up-log.txt
#systemctl stop expressvpn >> /home/twifty/Desktop/up-log.txt
#systemctl start expressvpn >> /home/twifty/Desktop/up-log.txt
systemctl restart expressvpn.service
echo "connecting..." >> /home/twifty/Desktop/up-log.txt
#/usr/bin/expressvpn status >> /home/twifty/Desktop/up-log.txt
/usr/bin/expressvpn disconnect >> /home/twifty/Desktop/up-log.txt
/usr/bin/expressvpn connect >> /home/twifty/Desktop/up-log.txt
echo "setup..." >> /home/twifty/Desktop/up-log.txt
В expressvpn disconnect
и connect
команда должна вывести успешное или неудачное завершение, но в файл ничего не записывается.
Статус услуги systemctl status expressvpn
после запуска скрипт выглядит так:
● expressvpn.service - ExpressVPN Daemon
Loaded: loaded (/usr/lib/systemd/system/expressvpn.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2017-08-21 11:53:20 CST; 16s ago
Main PID: 5043 (expressvpnd)
Tasks: 10 (limit: 4915)
CGroup: /system.slice/expressvpn.service
└─5043 /usr/sbin/expressvpnd --client-version 1.2.0 --client-build 167
Aug 21 11:53:20 twifty-lynx systemd[1]: Started ExpressVPN Daemon.
Aug 21 11:53:20 twifty-lynx expressvpnd[5043]: /sbin/resolvconf: illegal option -- -
Aug 21 11:53:20 twifty-lynx expressvpnd[5043]: /sbin/resolvconf: illegal option -- e
Aug 21 11:53:20 twifty-lynx expressvpnd[5043]: /sbin/resolvconf: illegal option -- n
Aug 21 11:53:20 twifty-lynx expressvpnd[5043]: event_dispather: invalid subscriber addr or protocol2017/08/21 11:53:20 method Authenticate
Aug 21 11:53:20 twifty-lynx expressvpnd[5043]: 2017/08/21 11:53:20 method SetAuth has wrong number of ins: 2
Aug 21 11:53:20 twifty-lynx expressvpnd[5043]: openvpn-expressvpn: no process found
тогда как при запуске из терминала вывод будет содержать:
Aug 21 13:12:09 twifty-lynx sudo[4673]: root : TTY=unknown ; PWD=/ ; USER=root ; COMMAND=/usr/sbin/dmidecode -s system-uuid
Aug 21 13:12:09 twifty-lynx sudo[4673]: pam_unix(sudo:session): session opened for user root by (uid=0)
Aug 21 13:12:09 twifty-lynx sudo[4673]: pam_unix(sudo:session): session closed for user root
без systemctl restart
строка, сценарий работает правильно, или если я запускаю эту команду от себя sudo -u twifty systemctl restart
, это тоже получится. Я считаю, что это ошибка в самом expressvpn (не поддерживающем одновременную работу нескольких пользователей).
Я не хочу жестко кодировать свое имя пользователя в сценарии, я также хочу поддерживать как удаленный, так и локальный доступ. Как я могу настроить это для поддержки нескольких пользователей?
Обновить:
Добавление к командам префикса sudo -u twifty
не работает. При пробуждении от длительного сна expressvpn по-прежнему действует так, как будто было вызвано несколько команд подключения, о чем свидетельствует наличие двух tunX
интерфейсы создаются, когда должен быть только один tun0
. Это точно такое же поведение, которое я заметил до сброса исправления службы.