使用 systemd-resolved 覆盖 Ubuntu 20.04 DNS

使用 systemd-resolved 覆盖 Ubuntu 20.04 DNS

如何配置 Ubuntu 20.04 系统以覆盖默认 DNS?

似乎默认情况下有一个全局和每个链接的 DNS 设置。

我尝试了一些不起作用的方法:

  • /etc/systemd/resolved.conf使用 DNS 服务器进行编辑
  • /etc/systemd/network/enp0s3.conf使用配置的 DNS 服务器创建
  • 通过编辑从 DHCP 请求中删除所有与 DNS 相关的参数 /etc/dhcp/dhclient.conf

所有这些更改(及其组合)都会导致 DNS 服务器被添加到全局 DNS 服务器列表中。

大多数“解决方案”是安装resolvconf/etc/resolv.conf用文件替换符号链接并在那里设置 DNS 服务器。这两种方法似乎都是一种解决方法。

我想使用现有的工具 ( systemd-resolved) 来覆盖 DNS 服务器。

正如 @xenoid 在评论中所建议的:通过 GUI 设置接口的 DNS 会生成一个/etc/NetworkManager/system-connections/enp0s3.nmconnection包含正确 DNS 服务器的文件,该文件的输出resolvectl status包含正确的 DNS 服务器,但这不是我想要的。我正在寻找一种使用 进行配置的解决方案systemd-resolved,从我能找到的内容来看这是可能的,但尚不清楚如何进行。因为这需要 GUI 安装。

答案1

  1. 更新/etc/systemd/resolved.conf

    [Resolve]
    DNS=1.1.1.1 8.8.8.8
    FallbackDNS=8.8.4.4
    
    
  2. 重启系统解决:service systemd-resolved restart

  3. 运行systemd-resolve --status(或resolvectl status在较新版本的 systemd 中)。输出应如下所示:

    Global
             DNS Servers: 1.1.1.1
                          8.8.8.8
    ...
    

答案2

评论来自@David R 非常有帮助:

rm -f /etc/resolv.conf
ln -sv /run/systemd/resolve/resolv.conf /etc/resolv.conf

答案3

iface变量包含您的主界面名称,然后您可以这样设置您的 DNS 地址:

$ sudo resolvectl dns $iface x.y.z.t1 x.y.z.t2
$ sudo resolvectl domain $iface "myDomain.lan"
$ resolvectl dns $iface
Link 2 (ensX): x.y.z.t1 x.y.z.t2
$ resolvectl status $iface
Link 2 (ensX)
      Current Scopes: DNS
DefaultRoute setting: yes
       LLMNR setting: yes
MulticastDNS setting: no
  DNSOverTLS setting: no
      DNSSEC setting: no
    DNSSEC supported: no
  Current DNS Server: x.y.z.t1
         DNS Servers: x.y.z.t1
                      x.y.z.t2
          DNS Domain: myDomain.lan

答案4

您应该在此文件中明确指定/etc/systemd/network/enp0s3.conf忽略来自 DHCP 的 DNS。在大多数情况下,我倾向于忽略 dhcp 的所有内容,因为我更喜欢通过配置管理工具来控制它。例如,上述文件中的 DHCPv4 部分如下所示:

[DHCPv4]
UseHostname=no
UseDNS=no
UseNTP=no
UseDomains=no

另请注意,您应该使用.network文件的扩展名。该[Match]部分还可以帮助您,这样您就无需关心设备名称的实际含义。就我而言,我没有任何单独的设备文件,而是在 aws 中进行覆盖:

section of /etc/systemd/network/01-ec2-overrides.network

[Match]
Driver=ena ixgbevf vif

[DHCPv4]
UseHostname=no
UseDNS=no
UseNTP=no
UseDomains=no

[DHCPv6]
UseHostname=no
UseDNS=no
UseNTP=no

相关内容