向 Ubuntu 18.04 添加 DNS 服务器

向 Ubuntu 18.04 添加 DNS 服务器

互联网上发布的添加 DNS 服务器的方法不下于 3 种。我一直在阅读 netplan 文档,但我仍然不清楚如何向笔记本电脑添加 DNS 服务器。我身处一个有审查/监视的国家,并且我正在使用泄露 DNS 信息的 VPN。

不管你怎么说,至少将名称服务器添加到 resolv.conf 很简单。这是我找到的使用 wifi 连接配置 DNS 的最佳示例。https://netplan.io/examples

network:
  version: 2
  renderer: networkd
  wifis:
    wlp2s0b1:
      dhcp4: no
      dhcp6: no
      addresses: [192.168.0.21/24]
      gateway4: 192.168.0.1
      nameservers:
        addresses: [192.168.0.1, 8.8.8.8]
      access-points:
        "network_ssid_name":
          password: "**********"

这些示例让我感觉我需要配置我访问的每个接入点,我真的希望这不是真的。你们这些聪明人能否为家庭/小型企业用户发布一个现实的例子。

我们真的希望桌面用户现在编写 .yaml 文件吗?我只想将名称服务器放入文件中并完成它。

谢谢。

答案1

我发现使更改在所有网络和接口(使用 dhcp)中持久存在的唯一方法是将以下行添加到 /etc/dhcp/dhclient.conf:

supersede domain-name-servers 8.8.8.8,8.8.4.4 # 用想要的 DNS 服务器替换

答案2

笔记本电脑上的默认 netplan 渲染器是 NetworkManager,而不是 networkd。因此,您通常会通过nm-applet而不是编辑 netplan yaml 来配置 DNS 首选项。

但是,为所有配置的 wifi 连接指定覆盖 DNS 服务器的情况并不常见;常见的情况是使用 DHCP 服务器提供的 DNS 信息,并仅在特殊情况下覆盖它。因此,没有优化的方法来覆盖所有可用 wifi 连接的 DNS 服务器。

要指向与通过网络连接自动配置的 DNS 服务器不同的 DNS 服务器,您可以 rm /etc/resolv.conf 符号链接并将其替换为包含所需内容的实际文件。

答案3

我还没有找到有人找到使用 CLI 正确添加 DNS 名称服务器的正确方法,而无需编辑 /etc/resolv.conf(其中明确指出不要这样做)。

好的。我想我明白了。

首先,/etc/resolv.conf 只是 ../run/systemd/resolve/stub-resolv.conf 的符号链接。并且声明不要编辑它的注释是关于 ../run/systemd/resolve/stub-resolv.conf,而不是 /etc/resolv.conf。

相同的评论还建议用静态文件替换 /etc/resolv.conf 符号链接。所以我想答案是:

sudo rm /etc/resolv.conf#删除文件(符号链接)

echo "nameserver 1.1.1.1" | sudo tee -a /etc/resolv.conf#创建新的静态文件并将 DNS 服务器地址放入其中。我猜您可以用不同的属性重复此行以添加备用地址。

echo "options edns0" | sudo tee -a /etc/resolv.conf#在上述文件末尾添加此行。不知道它有什么用,但它存在于我的原始文件中,所以我也把它放在这里以备不时之需。

答案4

另一种方法(避免接触 /etc/netplan/ 文件)是编辑文件 /etc/systemd/resolved.conf(如果您的机器中存在这样的文件)。例如,最初应该是

[Resolve]
#DNS=
#FallbackDNS=
#Domains=
#LLMNR=no
#MulticastDNS=no
#DNSSEC=no
#Cache=yes
#DNSStubListener=yes

你可以这样做(首先发出以下命令:

systemctl status systemd-resolved.service

systemd-resolve --status

在进行更改之前先查看情况如何)

[Resolve]
DNS=192.168.10.100 192.168.10.105
FallbackDNS=8.8.8.8 9.9.9.9
Domains=example.com
#LLMNR=no
#MulticastDNS=no
#DNSSEC=no
#Cache=yes
#DNSStubListener=yes

然后执行以下操作:

sudo systemctl 重启 systemd-resolved.service

并使用以下方法检查结果

systemd-resolve --status

有用的信息可以在(丑陋且不人性化,与 Linux 手册页一样,所有手册页都非常糟糕)中找到

man 5 resolved.conf
man 5 resolv.conf

还要确保只有一个与解析相关的服务处于活动状态,您可以通过以下方式查看

systemctl | grep resolv

你应该只看到 systemd-resolved.service 。如果你还看到旧式的 resolvconf,那么你最好停止并禁用它,甚至删除包及其配置文件

sudo apt-get purge resolvconf

在进行上述任何建议的编辑之前

相关内容