网络仅在连接到VPN时使用一个DNS

我的公司有一个我需要连接的VPN。 在OSX中,我通过使用具有以下配置的openvpn完成此操作:

 client dev tun proto udp remote   resolv-retry infinite nobind user nobody group nobody persist-key persist-tun ca /Users/Tommy/.openvpn/dev/ca-dev.crt cert /Users/Tommy/.openvpn/dev/tommy.brunn-20131122-dev.crt key /Users/Tommy/.openvpn/dev/tommy.brunn-20131122-dev.key ns-cert-type server tls-auth /Users/Tommy/.openvpn/dev/ta-dev.key 1 cipher BF-CBC comp-lzo verb 3 auth-nocache ;daemon ;writepid openvpn.pid 

在Ubuntu中,我安装了network-manager-openvpn并添加了一个新的VPN连接(尝试导入配置文件导致崩溃),并使用相同的配置选项集: 我的设置的屏幕截图

一旦我连接到VPN, 我就无法解析任何域名。

如果我编辑/etc/NetworkManager/NetworkManager.conf ,注释掉行dns=dnsmasq并重新启动network-manager ,我可以解析我公司的内部域名,但google.com等其他域名根本无法解析。 我确保在我的VPN连接的网络管理器的IPv4和IPv6选项卡中将我的“方法”设置为“仅自动(VPN)地址”,但它似乎没有任何区别。

我也尝试重新启用dnsmasq并修改/etc/resolvconf/resolv.conf.d/base以包含nameserver 127.0.1.1 ,然后运行sudo resolveconf -u ,但是没有域将再次解析。

我想要的是能够连接到我的VPN,以便我公司的DNS服务器推送的域以这种方式解决,所有其他域正常解决。

编辑:原来dnsmasq没有实际安装,我认为这将是默认情况下。 不过,如果我安装它,在/etc/NetworkManager/NetworkManager.conf重新启用它,在/etc/resolvconf/resolv.conf.d/base添加本地名称服务器地址,重新启动所有服务并连接到VPN,我可以从公司DNS解析域名,但我无法解析任何其他域名。 所以基本上和我完全禁用dnsmasq的情况相同。

编辑: /etc/dnsmasq.conf内容: http : /etc/dnsmasq.conf

从您的配置中,您的dnsmasq安装将从/etc/resolv.conf获取要使用的DNS服务器列表。 默认情况下,dnsmasq尝试使用已启动的DNS服务器,但只会将给定请求发送到单个DNS服务器。 如果您有多个DNS服务器可以/只会提供某些查询,这可能会导致问题。

我相信您可以通过确保在/etc/resolv.conf设置的LAN(您未连接到VPN时使用的DNS服务器)上的DNS服务器以及DNS服务器来解决此问题要通过VPN使用的企业网络。

然后,您需要编辑/etc/default/dnsmasq并添加或编辑DNSMASQ_OPTS=行以包含--all-servers

如果您仍然无法通过此设置获取DNS查询,请将您在上述步骤中创建的resolv.conf文件复制到另一个位置,例如~/resolv.conf ,使用nameserver 127.0.0.1设置/etc/resolv.conf并且在/etc/dnsmasq.conf设置以下选项:

 resolv-file=/home/your_username/resolv.conf 

这应该将您的系统配置为查询DNS的dnsmasq安装,然后它将为每个查询使用本地DNS服务器和VPN DNS服务器。

编辑 :您可以使用nmcli工具找到当前用于特定连接的DNS服务器。 为了找到我的无线连接使用的DNS服务器,我使用了以下语法:

 nmcli dev list iface wlan0 | grep IP4.DNS 

如果在未连接到VPN时运行此命令,然后在连接并且能够解析公司地址时再次运行此命令,则应该关闭和关闭VPN上的DNS服务器列表。 我希望这有帮助。

编辑2 :查看您的路由表,您的VPN管理员似乎已设置您在连接时通过VPN路由所有流量(您的默认网关更改为VPN地址)。 由于您的两个DNS服务器都是公共地址,并且在您使用VPN时都没有设置特定路由,因此您尝试通过VPN进行正常的DNS查找,这就是失败的原因。

根据您的VPN设置,您可能有几种方法来完成这项工作:

  • 如果VPN允许您通过公司网络访问互联网,但不对互联网上的服务器执行DNS查询,请将路由添加到您的DNS服务器,如下所示: sudo route add -host 83.255.245.11 gw 192.168.0.1 ,和sudo route add -host 193.150.193.150 gw 192.168.0.1连接VPN后, sudo route add -host 193.150.193.150 gw 192.168.0.1

  • 如果VPN不允许您通过公司网络访问Internet,则需要在连接到VPN后将计算机上的默认网关设置更改为指向192.168.0.1。 在这种情况下,您需要设置常用的默认网关,然后添加网络路由以访问仅限VPN的设备。

您可能需要将第二个pastebin中显示的已连接到VPN的情况下的路由表减少到以下内容:

 Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.0.1 0.0.0.0 UG 0 0 0 eth0 192.168.0.0 0.0.0.0 255.255.255.0 U 1 0 0 eth0 10.100.0.0 10.100.0.105 255.255.255.0 UGH 0 0 0 tun0 10.100.0.105 0.0.0.0 255.255.255.255 UH 0 0 0 tun0 

然后,根据需要添加路由以访问公司设备。 在上面显示的路由表中,我假设VPN上有一个/ 24网络,这可能是不正确的。 你必须适当地设置面具。

对于如何让NetworkManager为您协调事宜,我无法填写一些空白。 我会尝试澄清它协调的东西如何工作。 不是一个完美的答案,但希望有用。 实际上,鉴于这是一个古老的问题,这实际上是为了后代。

您可能不希望使用公司VPN,除了与公司网络的连接。 在这种情况下,如果您的VPN设置仅将适当的网络范围路由到VPN,并保持默认路由指向您的本地路由器,则会更好。 如果公司将其VPN设置为仅路由流量或其网络,那将是很好的,但不幸的是,这似乎很少见。 幸运的是,您可以在本地设置中配置路由。

这仍然会给您留下潜在的DNS问题。 jtk123关于dnsmasq对DNS做什么的评论不是特定于dnsmasq的 – 这就是DNS的工作方式。 如果DNS客户端或中间解析程序收到DNS条目不存在的响应,那么回退到询问另一个DNS服务器是不正常的行为。 这意味着您需要一个dns解析器,它将根据您的需要回答请求是否与公司网络相关。

也许你的公司网络回答与更广泛的互联网相关的DNS查询,在这种情况下你只是使用它,这可能没问题。 否则,您需要一个本地DNS服务器,该服务器将与该公司关联的域的请求转发到其DNS服务器,并在适当的时候将其他请求转发到其他位置。

可以告诉dnsmasq将特定域的请求转发到特定的上游DNS服务器。 例如,请参阅dnsmasq.conf手册页中概述的–server选项。 我不清楚如何让网络管理员发挥好(这是我目前正在寻找的)。