目录
Ubuntu18.04 DNS服务解析
1. 定义
2. 域名书写
3.解析过程
4. 网络环境
5. ubuntu18.04中的域名解析
5.1 ubuntu18.04中systemd-resolved
5.2 配置全局的DNS服务器地址
5.3 动态配置网卡的DNS(无需手动修改任何文件)
5.4 静态配置网卡的DNS
通过域名解析服务器,将指定格式(如:www.baidu.com)的字符串转换成ip的过程.
上级域名靠右,最右边是顶级域,如,www.fudan.edu.cn, www表示web服务器, fudan表示复旦大学,edu表示教育单位,cn表示中国.
DNS使用C/S机制来实现域名解析.
应用程序(请求的域名)------>本地解析器-------->DNS解析服务器(递归查找,迭代查找)---------->本地解析器-------->应用程序(解析出的ip地址)
a) 要实现DNS域名解析,网络系统中必须至少设置一台DNS解析服务器,同时让客户端的DNS域名解析都指向这台服务器;
b) 要实现本域及下级子域的管理,网络系统中必须设置一台DNS管理服务器,同时让上级域名管理服务器中有关这个域的管理都指向这台服务器.
c) 在实际应用中,通常这两种服务器合二为一,笼统称为DNS服务器.
ubuntu18.04中使用systemd-resolved 这个系统服务为本地应用程序提供域名解析. 它实现了一个缓存和验证DNS/DNSSEC存根解析器,同时也是一个LLMNR解析器(可以理解为如果前面的服务器解析失败,那此解析器作为最后的解析服务器)和响应者.
本地应用程序通过一下三个接口来请求域名解析:
1. 本地丰富的systemd-resolved API 暴露在bus(总线)上, 通常建议客户端使用此API,因为它是异步的且功能齐全的(比如:适当地为地址返回DNSSEC验证状态和接口范围,以支持链路-本地网络).
2. RFC3493[2]定义的glibc getaddrinfo(3) API及其相关解析器函数,包括gethostbyname(3)。这个API得到了广泛的支持,包括Linux平台之外的支持。但是,在它的当前形式中,它并不公开DNSSEC验证状态信息,并且只是同步的。这个API由glibc名称服务开关(nss(5))支持. 为了允许NSS 解析函数通过systemd-resolved解析域名,在使用时通常需要请求glibc NSS 模块 nss-resolve(8).
3 systemd-resolved 提供过了本地DNS存根监听, 该监听在本地回环地址127.0.0.53. 项目为了能连接到systemd-resolved,它可能会绕过本地API, 直接向这个本地DNS存根发出请求. 但强烈简易本地项目使用glibc NSS 或者总线API来替代这种方式.如,各种网络解析概念,不能映射到单播(unicast)DNS协议.
建立通信的DNS服务器从/etc/system/resolve.conf中全局设置.每个静态连接设置都是在/etc/systemd/network/*.network 文件中,每个动态连接设置接受自DHCP和其他系统服务创建的有效DNS服务信息.为了提高兼容性, 读出/etc/resolv.conf 文件来覆盖系统的DNS服务, 但只有它不是指向/run/systemd/resolve/stub-resolv.conf 或/run/systemd/resolve/resolv.conf 的链接.
systemd-resolved 整合DNS资源记录在以下情况下:
1. 在本地, 配置的域名被解析成本地ip地址,这些ip地址在他们的范围内一次排列. 如果没有任何配置,则IPV4地址为127.0.0.2, IPV6地址是::1.
2. 域名"localhost"和"localhost.localdomain"和以".localhost"或".localhost.localdomain"结尾的域名都被解析为127.0.0.1 和::1.
3. 主机名“_gateway”被解析为所有当前默认的路由网关地址,按照它们的指标排序。这将为当前网关分配一个稳定的主机名,对于独立于当前网络配置状态引用它非常有用。
4. 在/etc/hosts中定义的映射被解析到它们配置的地址并返回,但是它们不会影响对非地址类型(如MX)的查找。
编辑文件,文件地址 /etc/systemd/resolved.conf
sudo vim /etc/systemd/resolved.conf
修改DNS,比如加入全局的dns地址8.8.8.8 和114.114.114.114.如下:
[Resolve]
DNS=114.114.114.114
DNS=8.8.8.8
#FallbackDNS=
#Domains=
#LLMNR=no
#MulticastDNS=no
#DNSSEC=no
#Cache=yes
#DNSStubListener=yes
重启服务:
systemctl restart systemd-resolved.service
查看结果:
$ systemd-resolve --status
Global
DNS Servers: 114.114.114.114
8.8.8.8
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
网卡的DNS配置, 与/run/systemd/resolve/resolv.conf 文件有关(本机有无线网卡和有线网卡),文件内容如下:
1 # This file is managed by man:systemd-resolved(8). Do not edit.
2 #
3 # This is a dynamic resolv.conf file for connecting local clients directly to
4 # all known uplink DNS servers. This file lists all configured search domains.
5 #
6 # Third party programs must not access this file directly, but only through the
7 # symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way,
8 # replace this symlink by a static file or a different symlink.
9 #
10 # See man:systemd-resolved.service(8) for details about the supported modes of
11 # operation for /etc/resolv.conf.
12
13 #nameserver 8.8.8.8
14 nameserver 192.168.16.202
15 nameserver 202.96.209.5
16 # Too many DNS servers configured, the following entries may be ignored.
17 nameserver 58.210.110.30
此文件内容是自动更新的(亲测).
systemd-resolved 实时更新 /run/systemd/resolve/resolv.conf
文件以确保兼容传统的 Linux 程序,此文件只包含所有已知的全局DNS服务器(包括自动分配到的). 如果将软连接 /etc/resolv.conf
指向该文件, 未使用本地 D-Bus DNS API 的客户端,也将同时绕开 systemd-resolved 服务,直接与已知的全局DNS服务器通信.
引出/run/systemd/resolve/stub-resolv.conf 文件:
systemd-resolved 实时更新 /run/systemd/resolve/stub-resolv.conf
文件以确保兼容传统的 Linux 程序。 将软连接 /etc/resolv.conf
指向该文件。该文件将 127.0.0.53 设为唯一的 DNS 服务器,并包含 systemd-resolved 使用的搜索域列表。 搜索域列表将会始终保持实时更新。注意,应用程序不应该直接使用 /run/systemd/resolve/stub-resolv.conf
文件, 而应该继续使用 /etc/resolv.conf
文件(指向它的软连接)。 这样,未使用本地 D-Bus DNS API 的客户端,既可以与 systemd-resolved 通信、又可以正确使用搜索域。 这是推荐的首选方式.
1. 可以通过配置静态的ip的方式,配置DNS服务地址.
参考文章:
https://blog.csdn.net/m_wordPlan/article/details/107913763
2. 可以配置全局DNS服务地址.
即:配置全局的DNS服务器地址, 见5.2节.