我想知道,如何在从系统恢复唤醒计算机后让 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。