![Ubuntu+NetworkManager+openvpn-用 openvpn 推送的 DNS 服务器完全替换 /etc/resolv.conf?](https://linux22.com/image/1393986/Ubuntu%2BNetworkManager%2Bopenvpn-%E7%94%A8%20openvpn%20%E6%8E%A8%E9%80%81%E7%9A%84%20DNS%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%AE%8C%E5%85%A8%E6%9B%BF%E6%8D%A2%20%2Fetc%2Fresolv.conf%EF%BC%9F.png)
我正在运行 Ubuntu 12.04 LTS,但已将 NetworkManager 配置为不使用其内置的 dnsmasq 进行 DNS 解析(通过注释掉dns=dnsmasq
)/etc/NetworkManager/NetworkManager.conf
,如建议的那样这个 Ubuntu 错误报告。这可以正常工作并生成一个/etc/resolv.conf
包含实际 DNS 服务器的文件,而不是对 NetworkManagerdnsmasq
正在运行的引用localhost
。
nameserver my.isps.name.server
search my.isp.com
当我尝试连接到我的 VPN 提供商时,就会出现问题。我的 VPN 提供商设置为将 DNS 服务器配置推送到客户端。事实上,这似乎有效,因为当我连接到我的 VPN 服务器时,我的 DNS 服务器配置resolv.conf
会更新为:
nameserver vpn.dns.server.1
nameserver vpn.dns.server.2
nameserver my.isps.name.server
search my.isp.com
我的问题是,当 VPN 连接建立时,我想彻底消除图片中我的 ISP 的 DNS 设置(即删除上述示例中的nameserver my.isps.name.server
和search my.isp.com
行,仅保留由 VPN 推送的 DNS 服务器的设置)不幸的是,我无法找到方法来实现这一点。我尝试使用自定义脚本来实现这一点up
,但看起来 NetworkManager-openvpn 本身使用了自己的up
脚本。
有任何想法吗?
答案1
我在使用 CrunchBang 11 时遇到了完全相同的问题;由于两者都是基于 Debian 的,因此我的半令人满意的解决方案可能可以在 Ubuntu 上运行。
我通过实验发现,如果我两个都:
安装 resolvconf 包,然后
在 NetworkManager 的 VPN 配置中明确指定 DNS 服务器
然后连接到 VPN 会将 /etc/resolv.conf 中的 DNS 服务器完全替换为 NetworkManager 中为 VPN 配置的 DNS 服务器。我宁愿只使用 VPN 服务器提供的 DNS 配置,但我认为在 VPN 配置中使用公共 DNS(例如 OpenNIC)是可以的。我假设(但不能确定)DNS 请求通过 VPN 发出,与对本地网络 DNS 服务器的请求不同。(在我的特定情况下,/etc/resolv.conf 过去包含指向本地 wifi 路由器内置 DNS 的不可路由 IP 地址,该 DNS 又转发到本地 ISP。)
(这可能是在 VPN 配置中指定三个或更多 DNS 服务器的副作用;我有四个。如果没有 resolvconf,则生成的 resolv.conf 文件将包含所有四个或五个 DNS 服务器,并带有一条警告注释,说明只能使用三个,而本地 DNS 服务器是最后一个,但仍然可能可用。使用 resolvconf 时,只包含三个,我认为这会“挤出”不需要的最低优先级非 VPN DNS 服务器。)
答案2
卸载resolvconf
软件包,因为它无法很好地与vpnc
(具有连接到 VPN 所需的 DNS 服务器条目)和通过 GUI 配置的组合配合使用network-manager
。我可以确认这为我解决了 Ubuntu 14.04 和 16.04 上的问题。
sudo apt-get purge resolvconf -y