![使用 VPN 时网络管理器上的 DNS 设置](https://linux22.com/image/912252/%E4%BD%BF%E7%94%A8%20VPN%20%E6%97%B6%E7%BD%91%E7%BB%9C%E7%AE%A1%E7%90%86%E5%99%A8%E4%B8%8A%E7%9A%84%20DNS%20%E8%AE%BE%E7%BD%AE.png)
我最近更新到 19.04,并注意到使用 VPN 时 NetworkManager 发生了一些变化。
- 我想使用具有自己的本地 DNS 服务器的 VPN,该服务器由 DHCP 推送
- 我有单独的 VPN 配置文件。一个用于“完整 VPN”,它会安装到远程网络的默认路由,另一个用于“拆分隧道”的配置文件,只启用本地资源的设置
自从我更新到 19.04 以来,NetworkManager 似乎只使用推送的 DNS 服务器,这意味着当允许安装默认路由时(当复选框“仅将此连接用于其网络上的资源”时)未被选中。
让 NetworkManager 安装默认路由:
~$ resolvectl status tun0
Link 16 (tun0)
Current Scopes: DNS
DefaultRoute setting: yes
LLMNR setting: yes
MulticastDNS setting: no
DNSOverTLS setting: no
DNSSEC setting: no
DNSSEC supported: no
Current DNS Server: 192.168.1.1
DNS Servers: 192.168.1.1
DNS Domain: local.domain
仅在同一个 VPN 配置文件中激活本地资源的复选框:
~$ resolvectl status tun0
Link 8 (tun0)
Current Scopes: none
DefaultRoute setting: no
LLMNR setting: yes
MulticastDNS setting: no
DNSOverTLS setting: no
DNSSEC setting: no
DNSSEC supported: no
此设置之前独立于默认路由设置工作,似乎在新的 19.04 NetworkManager (v1.16.0) 中发生了变化。有人可以确认吗?
编辑:这是一个桌面安装。以下是一些详细信息:
~$ ls -al /etc/resolv.conf
lrwxrwxrwx 1 root root 39 Apr 20 15:41 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
~$ cat /etc/resolv.conf
# This file is managed by man:systemd-resolved(8). Do not edit.
#
# This is a dynamic resolv.conf file for connecting local clients to the
# internal DNS stub resolver of systemd-resolved. This file lists all
# configured search domains.
#
# Run "resolvectl status" to see details about the uplink DNS servers
# currently in use.
#
# Third party programs must not access this file directly, but only through the
# symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way,
# replace this symlink by a static file or a different symlink.
#
# See man:systemd-resolved.service(8) for details about the supported modes of
# operation for /etc/resolv.conf.
nameserver 127.0.0.53
options edns0
search uman.enbw.net
~$ cat /etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback
~$ cat /etc/netplan/*.yaml
# Let NetworkManager manage all devices on this system
network:
version: 2
renderer: NetworkManager
答案1
我在这里谷歌搜索并遇到了完全相同的问题。(Ubuntu 19.04)
为我,这个答案解决了。
nmcli c modify <vpn-settings-name> ipv4.dns-search '<domain>'
您应该指定<vpn-settings-name>
与 GUI 中的 VPN 设置名称相对应的名称。并且<domain>
是您想要在远程网络中通过 DNS 搜索的域名。
重新连接 VPN 后,systemd-resolved status ppp0
显示
Link 6 (ppp0)
Current Scopes: DNS
DefaultRoute setting: yes
LLMNR setting: yes
MulticastDNS setting: no
DNSOverTLS setting: no
DNSSEC setting: no
DNSSEC supported: no
Current DNS Server: 192.168.1.1
DNS Servers: 192.168.1.1 (<--- my dns)
192.168.1.10
DNS Domain: corp
答案2
遇到了同样的问题。原因是:从 Ubuntu19 开始,我们使用 systemd-resolved,而 NetworkManager 仍然执行 VPN 连接(在旧版 Ubuntu 中也执行 dns)解决方案是:切换回 NetworkManagers 内置 dns(或 dhclient):
编辑 /etc/NetworkManager/NetworkManager.conf 在 -section 中添加dns=default
(或dns=dhclient
)[main]
然后:
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
sudo rm /etc/resolv.conf
sudo systemctl restart NetworkManager
答案3
只是添加到soymsk 的回答似乎在以下任一情况下将使用 VPN 连接的 DNS 服务器:
- VPN 设置为用于所有流量
- 存在与 VPN 连接关联的 DNS 搜索域
正如 soymsk 所建议的,您可以使用 在客户端上设置搜索域nmcli
。
如果您可以控制 VPN 服务器,最好从 VPN 服务器推出 DNS 搜索域。这样您就不必在每个客户端上进行设置。
我在 VPN 服务器上添加了以下行/etc/openvpn/server.conf
,其效果与在客户端上设置 DNS 搜索域相同:
push "dhcp-option DOMAIN <domain>"
您要添加到尝试访问的任何不合格主机名的域在哪里<domain>
(本地网络的域)。 重要的似乎是为 VPN 连接设置了 DNS 搜索域,DNS 搜索域如何设置并不重要