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

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

我公司有需要连接的 VPN。在 OSX 中,我使用openvpn以下配置来实现此目的:

client
dev tun
proto udp
remote <GATEWAY_ADDRESS> <PORT>
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)根本无法解析。我已确保在网络管理器的 IPv4 和 IPv6 选项卡中将 VPN 连接的“方法”设置为“仅自动(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.confhttp://paste.ubuntu.com/7297231/

答案1

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

我相信您可以通过确保您的 LAN 上有一个 DNS 服务器(未连接到 VPN 时使用的服务器)/etc/resolv.conf以及您想要通过 VPN 使用的公司网络上的 DNS 服务器来解决此问题。

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

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

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

这应该配置您的系统以查询您的 dnsmasq 安装的 DNS,并且它将依次使用您的本地 DNS 服务器和 VPN DNS 服务器进行每个查询。

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

nmcli dev list iface wlan0 | grep IP4.DNS

如果您在未连接到 VPN 时运行此命令,然后在连接并能够解析公司地址时再次运行此命令,则应该可以关闭和打开 VPN 来获取 DNS 服务器列表。希望这对您有所帮助。

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

您可以通过多种方式来实现此功能,具体取决于您的 VPN 设置:

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

  • 如果 VPN 不允许您通过公司网络访问互联网,则您需要在连接到 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,这可能不正确。您必须适当地设置掩码。

答案2

关于如何让 NetworkManager 为您协调事物,有些空白我无法为您填补。不过,我会尝试阐明它协调的事物需要如何工作。这不是一个完美的答案,但希望有用。实际上,鉴于这是一个老问题,这确实是为了后人着想。

您可能不想使用企业 VPN,除非要连接到企业网络。在这种情况下,如果您的 VPN 设置仅将适当的网络范围路由到 VPN,并保持默认路由指向您的本地路由器,就像以前一样,那就更好了。如果公司将他们的 VPN 设置为仅路由流量或他们的网络,那就太好了,但不幸的是,这种情况似乎很少见。幸运的是,您可以在本地设置中配置路由。

这仍然会给您带来潜在的 DNS 问题。jtk123 关于 dnsmasq 对 DNS 的操作的评论并非针对 dnsmasq - DNS 的工作方式就是这样。如果 DNS 客户端或中间解析器收到 DNS 条目不存在的响应,则回退到询问另一个 DNS 服务器不是正常行为。这意味着您需要一个 DNS 解析器,无论请求是否与公司网络相关,它都会按照您的意愿进行回答。

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

可以指示 dnsmasq 将特定域的请求转发到特定的上游 DNS 服务器。例如,请参阅 dnsmasq.conf 手册页中概述的 --server 选项。但我不清楚如何让 networkmanager 与此配合良好(这是我目前正在寻找的)。

相关内容