如何在 Ubuntu 16.04 上暂停/恢复后自动启动并使用 openvpn cli?

如何在 Ubuntu 16.04 上暂停/恢复后自动启动并使用 openvpn cli?

我想知道,如何在从系统恢复唤醒计算机后让 openvpn 重新连接?我正在尝试使用 openvpn cli,而不是通过带有 .ovpn 文件的网络管理器。

答案1

我发现已经有一个 openvpn 启动脚本可以扫描 .conf 文件(您只需将扩展名从 .ovpn 更改为 .conf 即可)。不过,为了在唤醒计算机后重新启动 openvpn,我能够创建一个在 Ubuntu 16.04 LTS 上运行的 systemd 服务。

将文件命名为 openvpn-reconnect.service 并在里面输入以下内容:

[Unit]
Description=Restart OpenVPN after suspend
After=suspend.target
After=hibernate.target
After=hybrid-sleep.target

[Service]
ExecStart=/bin/systemctl restart openvpn.service

[Install]
WantedBy=suspend.target
WantedBy=hibernate.target
WantedBy=hybrid-sleep.target

我建议首先确保默认情况下只使用 VPN 的 DNS 服务器。禁用 ubuntu 使用的有问题且毫无意义的 dnsmasq 本地 DNS 服务器,它会干扰 DNS 解析(请参阅此处的文章:在 Ubuntu 中禁用 dnsmasq 作为本地 dns 服务器) 通过在编辑网络管理器配置文件时注释掉(添加 #)行 dns=dnsmasq 的开头来实现,如下所示:

sudo emacs /etc/NetworkManager/NetworkManager.conf

然后,保存文件后,单击 GUI 网络管理器小程序,选择“编辑连接”,选择您使用的主要(非 VPN)网络,单击“IPv6 设置”选项卡,通过单击“IPv6 设置”选项卡并在“方法”菜单中选择“忽略”来忽略 IPv6 流量。保存更改,然后使用以下命令重新启动网络管理器

sudo service network-manager restart

现在通过命令行让 ovpn 工作:

创建一个包含以下内容的 auth.txt 文件:

<username>
<password>

例如,示例 auth.txt 可能包含如下两行:

user1234
password1234

编辑 .ovpn(或 .conf)文件以使用 auth.txt 进行自动登录:找到包含 auth-user-pass 的行并将 auth.txt 附加到末尾,如下所示:

...
auth-user-pass auth.txt
...

如果您的文件包含选项 auth-nocache,请删除该行。auth-user-pass 和 auth-nocache 不兼容!openvpn 手册页明确指出

Further,  using --daemon together with --auth-user-pass (entered
          on console) and --auth-nocache will fail as soon as key renego‐
          tiation (and reauthentication) occurs.

这个术语的本质意思是,如果你在配置文件中包含 auth-nocache 行,那么 openvpn 将在你浏览或流式传输或执行其他操作时自动死亡。

将 .ovpn 文件重命名为 .conf 文件:

mv <filename>.ovpn <filename>.conf

将必要的 .conf、.pem 和 .crt 文件放在目录中,将目录内容复制到 /etc/openvpn:

sudo cp <path-to-auth-crt-pem-and-conf-files>/* /etc/openvpn

通过编辑 /etc/default/openvpn(/etc/init.d/openvpn 的配置文件)指定在启动 openvpn 时应自动启动哪个连接

sudo emacs /etc/default/openvpn

在 #AUTOSTART="all" 下添加 .conf 文件的名称(不包括扩展名),例如,如果我有两个名为 US-East 和 US-East-Strong 的 .conf 文件,

#AUTOSTART="all"
#AUTOSTART="US-East"
#AUTOSTART="US-East-Strong"

取消注释(删除 # 符号)您想要激活的单个连接的 AUTOSTART 指令。每次更改要自动启动的连接时,请运行:

sudo systemctl daemon-reload
sudo systemctl stop openvpn*
sudo systemctl start openvpn.service

要使 openvpn 在挂起后重新连接,请使用 openvpn-reconnect.service

将服务文件放在 systemd 可以找到的位置:

sudo cp openvpn-reconnect.service /lib/systemd/system

使用以下命令启用并创建符号链接:

sudo systemctl enable openvpn-reconnect.service

要检查 openvpn 连接的状态,请使用:

systemctl status openvpn@<conf-filename-minus-extension>.service

例如,如果我的配置文件名为 US-East.conf:

systemctl status [email protected]

如果可滚动,请键入 q 退出到 shell。

相关内容