侧边栏壁纸
博主头像
liveJQ博主等级

沒有乐趣,何来开始

  • 累计撰写 149 篇文章
  • 累计创建 62 个标签
  • 累计收到 2 条评论

浅谈 Ubuntu 设置 DNS 方法及其配置机制

liveJQ
2023-11-07 / 0 评论 / 0 点赞 / 855 阅读 / 2,555 字 / 正在检测是否收录...
广告 广告

直接在网卡设置DNS

Ubuntu 低版本

静态网络示例,编辑/etc/network/interfaces

auto 网卡名
iface 网卡名 inet static
address 10.10.20.22
gateway 10.10.20.254
netmask 255.0.0.0
dns-nameserver 223.6.6.6
#dns-nameservers 223.6.6.6 114.114.114.114

带s表示可以一行以空格分隔添加多个DNS。

重启网卡生效

service networking restart

Ubuntu 17.10 以上高版本

network: 
    version: 2 
    renderer: networkd 
    ethernets: 
        网卡名: 
            dhcp4: false
            addresses: [192.168.1.1/24] 
            gateway4: 192.168.1.254 
            nameservers: 
                addresses: [8.8.8.8, 1.1.1.1]

重启网卡生效

netplan apply

DNS 的配置管理

Ubuntu 通过读取/etc/resolv.conf中的 DNS 地址进行查询。

systemd-resolved

这是系统默认的 DNS 管理器,也可以看做是一个本地 DNS 解析器,默认的本地 DNS 服务器 IP 是 127.0.0.53 作为子监听服务,其通过迭代的方式将 DNS 查询结果返回给应用程序。

/etc/resolv.conf -> /run/systemd/resolve/resolv.conf

如果 DNSStubListener=yes,则此文件会链接到 stub-resolv.conf

可以看出这是一个软链接文件,可以通过在/etc/systemd/resolved.conf添加 DNS 来配置该软链接。

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

如果网卡里面已经设置了DNS,这里就不需要再添加了,设置其中一边就可以了,避免重复添加相同的DNS。

重启服务生效

systemctl restart systemd-resolved

DNSSEC 默认值是 allow-downgrade ,设置为 no 可以解决 systemctl status systemd-resolved抛出的问题。

Using degraded feature set TCP instead of UDP for DNS server 1.1.1.1

DNSStubListener 默认为 yes,会在本地起一个 DNS 服务,DNS请求会先经过该服务,然后再发给具体的公共DNS。好处是可以对解析做进一步处理,比如分流之类的,但对于大部分人都没啥作用,特别是对于某些通过在 iptables 做 SNAT 来上网的会有较大影响(源没添加 127.0.0.53 的话可能导致无法解析)。

查看设置情况

systemd-resolve --status

resolvectl status

如果能看到你刚才设置的 DNS 就表示设置成功了。

resolvconf

这是 DNS 信息统一管理器,类似 netplan 的作用。

安装

apt install resolvconf

软链接会被改写指向到 resolvconf 的配置文件中。在安装前,/etc/resolv.conf上的旧配置会被复制保留到/etc/resolvconf/resolv.conf.d/original文件中。

/etc/resolv.conf -> /run/resolvconf/resolv.conf

可以通过在/etc/resolvconf/resolv.conf.d/head添加 DNS 来配置该软链接。

nameserver 8.8.8.8
nameserver 8.8.4.4

也可以直接运行命令定义链接的源文件,此命令会重新建立/etc/resolv.conf的软链接。

resolvconf -a DNS文件路径
例如:
resolvconf -a /run/resolvconf/interface/systemd-resolved
resolvconf -a /run/resolvconf/interface/original.resolvconf

上述两种方式配置完成后,别忘了更新配置。

resolvconf --enable-updates
resolvconf -u

resolv.conf 中 search 的作用

可以在/etc/systemd/resolved.confDomains中添加主机名,例如:

[Resolve]
DNS=1.1.1.1 8.8.8.8
Domains=livejq.local01 livejq.local02

重启服务,然后在/etc/resolved.conf文件中就可以看到 search 的显示了

nameserver 1.1.1.1
nameserver 8.8.8.8
search livejq.local01 livejq.local02

这里配置了两个主机后缀名,相当于一种本地查询机制。你可以在自己本地的 DNS 服务器中添加以这两个主机名为后缀的 A 记录,又或许可以直接在本地主机的 hosts 文件直接添加。

验证:

  1. 没有带.,认为是主机名,加后缀查询,查询不到再直接查询域名。
root@user~#host -v www
Trying "www.livejq.local01"
Trying "www.livejq.local02"
Trying "www"
Host www not found: 3(NXDOMAIN)
Received 96 bytes from 1.1.1.1#53 in 4 ms
  1. .,认为是域名,直接查询。
root@user~#host -v www.livejq
Trying "www.livejq"
Host www.livejq not found: 3(NXDOMAIN)
Received 103 bytes from 1.1.1.1#53 in 4 ms
Received 103 bytes from 1.1.1.1#53 in 4 ms

相关资料

How to change DNS servers on Ubuntu

0

评论区