直接在网卡设置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.conf
的Domains
中添加主机名,例如:
[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 文件直接添加。
验证:
- 没有带
.
,认为是主机名,加后缀查询,查询不到再直接查询域名。
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
- 带
.
,认为是域名,直接查询。
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
评论区