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

Tom*_*unn 9 network-manager vpn networking dns openvpn

我的公司有一个我需要连接的 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
Run Code Online (Sandbox Code Playgroud)

在 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.confhttp : //paste.ubuntu.com/7297231/

jkt*_*123 5

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

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

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

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

resolv-file=/home/your_username/resolv.conf
Run Code Online (Sandbox Code Playgroud)

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

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

nmcli dev list iface wlan0 | grep IP4.DNS
Run Code Online (Sandbox Code Playgroud)

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

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

您可能有几种方法可以实现此目的,具体取决于您的 VPN 设置:

  • 如果 VPN 允许您通过公司网络访问 Internet,但不允许对 Internet 上的服务器执行 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 后。

  • 如果 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
Run Code Online (Sandbox Code Playgroud)

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