背景
这是由于ubuntu 12.04之后版本系统,DNS文件由resolvconf模块接管。直接修改/etc/resolv.conf文件不生效,重启后会还原。
参考文档
##
http://www.jinbuguo.com/systemd/resolved.conf.html
##
http://www.jinbuguo.com/systemd/systemd.network.html
##
实践修改
systemd-resolved 服务是用来提供本机应用软件与DNS 解析服务的,其包含解析主机名称、IP 地址、域名、DNS 资源记录等,Ubuntu修改DNS就需要通过此服务来完成!
##
sudo vim /etc/systemd/resolved.conf
## 添加如下
DNS=8.8.8.8
### 重启
sudo systemctl restart systemd-resolved
### 开机启动
sudo systemctl enable systemd-resolved
为什么是systemd-resolve来实现的?
因为我们通过ss或者netstat 可以找到它在运行。
##
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:9001 0.0.0.0:* LISTEN 3178/docker-proxy
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 830/systemd-resolve
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1068/sshd
tcp6 0 0 :::9001 :::* LISTEN 3183/docker-proxy
tcp6 0 0 :::22 :::* LISTEN 1068/sshd
关于 resolved.conf 文件部份参数的解释:
# 指定 DNS 服务器,以空白分隔,支持 IPv4 或 IPv6 位置
DNS=8.8.8.8 114.114.115.115
# 备用 DNS 服务器
FallbackDNS=8.8.8.8
# 设置搜索域名
Domains=your.com.tw
# 设置 LLMNR 是否激活,可用的选项有 yes、no、resolve
LLMNR=yes
# 设置 MulticastDNS 是否激活,可用的选项有 yes、no、resolve
MulticastDNS=yes
# 设置 DNSSEC 是否激活,可用的选项有 yes、no、allow-downgrade
DNSSEC=yes
# 设置缓存是否激活,可用的选项有 yes、no、no-negative
Cache=no-negative
systemd-resolved从哪获得要使用的dns服务器
使用如下命令查看:
xx:~# systemd-resolve --status
Global
DNSSEC NTA: 10.in-addr.arpa
16.172.in-addr.arpa
168.192.in-addr.arpa
17.172.in-addr.arpa
18.172.in-addr.arpa
19.172.in-addr.arpa
20.172.in-addr.arpa
21.172.in-addr.arpa
22.172.in-addr.arpa
23.172.in-addr.arpa
24.172.in-addr.arpa
25.172.in-addr.arpa
26.172.in-addr.arpa
27.172.in-addr.arpa
28.172.in-addr.arpa
29.172.in-addr.arpa
30.172.in-addr.arpa
31.172.in-addr.arpa
corp
d.f.ip6.arpa
home
internal
intranet
lan
local
private
test
Link 2 (ens160)
Current Scopes: DNS
LLMNR setting: yes
MulticastDNS setting: no
DNSSEC setting: no
DNSSEC supported: no
DNS Servers: 10.1.1.118
8.8.8.8
解析:
Global中的Current DNS Server选项是由/etc/systemd/resolved.conf决定的,Link 2中的Current DNS Server选项是由/etc/network/interfaces或者/etc/netplan/50-cloud-init.yaml文件决定的。
?systemd-resolved会同时向Global和Link2中的Current DNS Server发出域名解析请求。
如果想要 和/etc/resolv.conf 一致可以如下操作:
# 备份 systemd-resolved 托管文件 resolv.conf
sudo mv /etc/resolv.conf /etc/resolv.conf.bak
### 重新生成托管文件
sudo ln -s /run/systemd/resolve/resolv.conf /etc/
## 重启 NetworkManager
sudo systemctl restart NetworkManager
分离DNS
设想一个这样的场景,使域名解析请求被发送到指定的dns服务器上。 修改/etc/systemd/resolved.conf为下面的:
[Resolve]
DNS=202.96.134.133
Domains=~qq.com
设置默认后缀
修改 /etc/systemd/resolved.conf 为下面的:
[Resolve]
DNS=202.96.134.133
Domains=yeyese.top
|