通过命令行 openvpn:权限被拒绝更新 resolv.conf

通过命令行 openvpn:权限被拒绝更新 resolv.conf

这可能是这个问题,但我对网络事务不够熟悉,无法确定。

我使用名为 Cyber​​ghost 的 VPN 服务来保持互联网隐私。在使用时遇到 DNS 泄漏后,network-manager我尝试使用命令行并实施在线推广的修复程序。显然block-outside-dns仅适用于 Windows。因此我遵循本教程并添加了以下几行

script-security 2
up /etc/resolv.conf
down /etc/resolv.conf

到 cyberghost 提供的 .ovpn 文件。

尝试使用连接时

sudo openvpn --config /home/username/CG/DE/DE.ovpn

但是我收到以下错误:

Options error: --up script fails with '/etc/resolv.conf': Permission denied
Options error: Please correct this error.
Use --help for more information.

不使用 up 和 down 命令进行连接可以正常工作,但会导致 DNS 泄漏。使用 sudo 权限手动编辑时我没有遇到问题,resolv.conf因此我不确定为什么 openvpn 缺少这样做的权限。

感谢您的想法和帮助,

亚历克斯


系统:Kubuntu 17.04

openvpn 2.4.0-4ubuntu1.3

完整的.ovpn 文件如下:

client

remote 1-de.cg-dialup.net 443

dev tun 

proto udp

auth-user-pass /home/username/CG/DE/auth.txt




resolv-retry infinite 

redirect-gateway def1

persist-key

persist-tun

nobind

cipher AES-256-CBC

auth MD5

ping 5

ping-exit 60

ping-timer-rem

explicit-exit-notify 2

script-security 2

remote-cert-tls server

route-delay 5

tun-mtu 1500 

fragment 1300

mssfix 1300

verb 4

comp-lzo


ca /home/username/CG/DE/ca.crt

cert /home/username/CG/DE/client.crt

key /home/username/CG/DE/client.key

script-security 2
up /etc/resolv.conf
down /etc/resolv.conf

答案1

无论这是否是你真正想要或需要做的,这里要注意这一点:

up /etc/resolv.conf
down /etc/resolv.conf

此功能并非如此工作。相反,软件包会通过在 openvpn 客户端配置文件中的and之后指定可执行脚本来openvpn-systemd-resolved动态更新文件(根据链接的(且不完整!)“教程”)。但还请注意,此功能有不同版本;/etc/resolv.confupdown更高版本使用 dbus,我引用的是;先前版本只使用脚本和临时文件。这就是为什么文章/文档/教程之间存在一些不一致的原因。

因此,假设此包已安装(通过apt-getapt):

sudo apt-get install openvpn-systemd-resolved

并验证服务是否正在运行(如果没有运行:请启用它并手动启动它):

sudo service systemd-resolved status

然后,应该安装一个脚本/etc/openvpn/update-resolv-conf(或者可能在/etc/openvpn/scripts/其他发行版中安装)修改适合/etc/resolv.conf你。

因此,您的 openvpn 客户端配置文件(在非 Windows 客户端上,按照惯例应该带有“ .conf”后缀,如果是,它们将自动被读取/etc/openvpn;但在 Windows 上,它们通常用于.ovpn与 openvpn 进行正确的文件关联)——例如,openvpn 客户端配置文件将包含

script-security 2
setenv PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
up /etc/openvpn/update-systemd-resolved
down /etc/openvpn/update-systemd-resolved
down-pre

然后你会注意到,它是/etc/openvpn/update-systemd-resolved需要可执行的脚本(默认情况下是),并且/etc/resolv.conf将是一个简单的文本文件,然后用正确的domain, nameserver,search条目进行更新(它是不是可执行脚本)。

将其结合在一起的最后一个元素是修改/etc/nsswitch.conf 为包含以下内容(替换现有hosts:条目):

# Use systemd-resolved first, then fall back to /etc/resolv.conf
hosts: files resolve dns myhostname

查看链接 update-systemd-resolved github 页面了解详细信息和选项。

答案2

我能想到的唯一解决方案就是运行

sudo -s

然后运行

openvpn --config file.ovpn

如果不起作用,请尝试运行

sudo chown root /etc/resolv.conf

或者

sudo chown $USER /etc/resolv.conf

作为最后的手段

sudo chmod 777 /etc/resolv.conf

chmod 777仅在其他方法均无效时使用,因为它可能会导致安全漏洞。

相关内容