我的系统需要使用一个vpn,其中我使用基于OpenVpn的expressvpn ,但是使用它自己的systemd守护进程。 所有连接/断开命令都必须通过提供的二进制文件。 为了不在每次重新启动或从睡眠中唤醒时input这些命令(并configuration一些iptable规则),我在/etc/NetworkManager/dispatcher.d/中/etc/NetworkManager/dispatcher.d/了一个脚本来捕获'up'事件。
虽然脚本工作,我遇到与expressvpn connect问题。 在从睡眠中醒来之后,就好像多个连接命令已经被调用一样。 一个简单的解决scheme是重新启动其服务。
我可以发出一个systemctl restart expressvpn然后从terminal(作为用户和sudo) expressvpn connect命令没有任何问题,但如果我将重新启动命令添加到调度程序脚本中断。
这是脚本中有问题的部分(包括我的临时logging器行):
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
而从terminal运行,输出将包含:
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前缀命令不起作用。 从长时间hibernate中唤醒时,expressvpn仍然会像多个连接命令一样被调用,正如通过创build两个tunX接口可以看出,应该只有一个tun0 。 这与我在重置服务修复程序之前注意到的完全一样。