如何在VPN连接上自动获取新的名称服务器


11

我正在运行ubuntu xenial 16.04

我们正在使用openvpn连接到虚拟私有云。该云拥有自己的DNS服务器(我们的本地路由-家庭或办公室也是如此)。

当我连接到VPN时,该网络中的所有IP均可用,但无法通过主机名访问任何IP。原因很简单:resolv.conf文件仍然显示我的本地办公室名称服务器。如果我手动覆盖resolv.conf以拥有正确的名称服务器,那么一切都很好。

那么,如何在连接到VPN时自动重新配置resolv.conf?

我可以挂接到系统事件并执行脚本吗?


1
通常,有一个选项允许VPN推送自己的DNS服务器。您正在使用哪个客户端-tunnelblick?
莱德(Ryder)

我正在使用官方的openvpn客户端。我在某处看到VPN进程无法更新DNS。
克里斯蒂安·邦吉诺

您是否尝试过该--register-dns选项?另外还有客户端选项可以设置,如DHCP选项(指令的另一面这里openvpn.net/index.php/open-source/documentation/howto.html#dhcp
莱德

Answers:


8

OpenVPN软件包在中提供了一个脚本/etc/openvpn/update-resolv-conf。您需要使用以下命令进行配置:

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

这将从dhcp-option DNSOpenVPN对等/服务器传递的选项中获取DNS服务器地址,并进行相应配置resolvconf。它也可以处理dhcp-option DOMAIN

但是,这并不完美,因为这会将那些名称服务器放在现有名称服务器的列表之前,而不是覆盖名称服务器的列表。如果您使用openresolv-x则可用于覆盖DNS配置,而不是预先添加。


如果您使用systemd-resolved,则可以使用/etc/openvpn/update-systemd-resolvedwhich挂钩systemd-revolved代替resolvconf

script-security 2 
up /etc/openvpn/update-systemd-resolved
down /etc/openvpn/update-systemd-resolved
down-pre

在Debian上,此脚本位于中openvpn-systemd-resolved


2
上面这两条线,你也将需要添加script-security 2或运行openvpn--script-security 2
32r34wgf3e

0

这是我想出的解决方案:有一个开关,可以在隧道启动并运行时运行脚本。我使用该开关实际上用一个我知道是正确的文件覆盖了resolv.conf文件。我知道这完全是骇客。

sudo openvpn --up reset-dns.sh --client client.ovpn

脚本(reset-dns):

#!/bin/bash
cp ~/resolv.conf /etc/resolv.conf

另外,对于那些说“ OMG!您正在以root用户身份运行该隧道!”的人。它不会以其他方式运行。甚至在我的DNS入侵之前。

我绝对乐于接受更好的方法。ubuntu的网络管理员根本无法工作。我已经多次削减了到Ubuntu的门票

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.