Linux DNS解析原理与配置
1、DNS缓存
作用:
程序客户端、下游的 DNS 服务器每次查询 DNS 成功之后,通常会将该 DNS 记录缓存一段时间,避免频繁发出查询请求的耗时。
Linux下的DNS缓存:
Linux 系统默认不会在本地建立 DNS 缓存,可以安装 nscd、dnsmasq 等工具提供 DNS 缓存。
2、配置DNS的三种方式
- 2-1、本地hosts
修改本地hosts文件,利用hosts自动解析域名到ip
vim /etc/hosts
123.123.123.123 www.baidu.com
124.123.123.123 www.qq.com - 2-2、修改网卡配置文件
假设我们的网卡名为eth0,那我们可以修改配置文件/etc/sysconfig/network-scripts/ifcfg-eth0的内容,增加dns规则:
vim /etc/sysconfig/network-scripts/ifcfg-eth0,从而添加规则 例如:
DSN1=114.114.114.114
DNS2=xxx.xxx.xxx.xxx
DNS3=xxx.xxx.xxx.xxx
重启网络服务:service network restart
重启服务后会在/etc/resolv.conf自动生成一样的DNS - 2-3、修改系统默认DNS配置
- linux上没有安装systemd-resolved这类DNS解析代理服务时:
修改配置文件/etc/resolv.conf,添加多条规则 例如:
vim /etc/resolv.conf
nameserver 114.114.114.114
nameserver 123.123.123.123 - linux上安装了systemd-resolved这类DNS解析代理服务时:
修改/etc/systemd/resolved.conf,添加多条规则 例如:
[Resolve]
DNS=114.114.114.114
DNS=8.8.8.8
重启DNS代理服务:systemctl restart systemd-resolved.service
查看是否生效:systemd-resolve --status
$ 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
3、DNS解析优先级
- 本地/etc/hosts > 网卡配置文件DNS服务地址 > 系统DNS配置文件/etc/resolv.conf
4、DNS多个nameserver的情况
example:
nameserver 192.168.0.2
nameserver 127.0.0.1
nameserver优先级:
- 按照定义顺序从上至下(默认情况)
DNS解析流程:
- 1、查询192.168.0.2,如果服务器可以连接,则响应对应ip或者响应无记录。
- 2、如果192.168.0.2服务器不可达,则查询127.0.0.1
注意:
- 192.168.0.2网络可达,但没有查询出对应dns记录,不会继续查询下面的dns服务器了。
解析过程debug: host -v debug-domain
# host -v www.baidu.com
Trying "www.baidu.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30232
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.baidu.com. IN A
;; ANSWER SECTION:
www.baidu.com. 134 IN CNAME www.a.shifen.com.
www.a.shifen.com. 134 IN A 14.215.177.39
www.a.shifen.com. 134 IN A 14.215.177.38
Received 90 bytes from 223.5.5.5#53 in 22 ms
Trying "www.a.shifen.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45392
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;www.a.shifen.com. IN AAAA
;; AUTHORITY SECTION:
a.shifen.com. 600 IN SOA ns1.a.shifen.com. baidu_dns_master.baidu.com. 2109090004 5 5 2592000 3600
Received 97 bytes from 127.0.0.1#53 in 581 ms
Trying "www.a.shifen.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 24903
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;www.a.shifen.com. IN MX
;; AUTHORITY SECTION:
a.shifen.com. 600 IN SOA ns1.a.shifen.com. baidu_dns_master.baidu.com. 2109090004 5 5 2592000 3600
Received 97 bytes from 127.0.0.1#53 in 25 ms
5、DNS配置优化
example:
options timeout:1 attempts:1 rotate
nameserver 10.0.0.1
nameserver 10.0.0.2
nameserver 10.0.0.3
- timeout:
查询一个nameserver的超时时间,单位是秒。系统缺省是5,最大可以设为30。一般改为较小的值比较合适一些,网络正常情况下缺省的5秒粒度太大 - attempts:
这个是查询的整个都尝试一遍的次数。缺省是2。根据需要来决定失败前的循环重试次数 - rotate:
这个参数的含义是随机选取一个作为首选查询的dns server,系统缺省是从上到下的。如果彼此没有优先级,是负载均衡的关系,那么应该设置轮询,有优先级关系的话就不用设置这个,按照优先级从高到低,依次定时nameserver即可