写在前面的话node
网上关于 DNS 的文章其实一搜索一大把,可是看别人的文档通常都会有个问题,乱,不讲究,全是 ctrl c + ctrl v,我我的是看不下去的。头皮发麻。因此决定本身来写写这方面的东西,固然不少概念性的东西仍是来源于网络。至于写这篇的目的其实算是作个总结。对于 DNS 这个东西。它可能不是你工做的必须,可是有它可以解决你不少公司内网中复杂问题。咱们后面提到的企业级,可能更多的仍是说公司内网这样的环境,至于生产环境,人有多大胆,地有多大产吧。数据库
DNS 概念性东西缓存
FQDN:彻底限定域名,即每一个域在全球惟一,域不是域名,google.com 是域,www.google.com 是域名。服务器
域能够分为根域(.)和顶级域(TLD)网络
顶级域又能够分为三类:session
1. 通用顶级域(.com 商业机构,.org 非营利性组织,.net 网络服务机构等)测试
2. 国家顶级域(.cn 中国,.uk 英国,.us 美国,.jp 日本)google
3. 反向域(基础建设顶级域,.arpa)spa
DNS 查询方式包含递归和迭代:.net
1. 递归是客户端发起一次请求给 DNS 服务器,经过屡次查找返回正确解析。
2. 迭代是发出屡次请求查询不一样的 DNS 服务器。
解析方式包含正向解析和反向解析:正向解析指代将 FQDN 转换成 IP,反向则相反。
通常 DNS 的服务器类型包含:主从 DNS 服务器,缓存服务器,转发服务器。
主从好理解,就是从自动更新同步主的配置,做为 backup 存在。
缓存的服务器做用在于使用递归查询,将查询到的结果返回客户端,并缓存查询的结果。
转发服务器做用在于当发现查询不是本机的时候则将请求转发出去。
DNS 监听 TCP 和 UDP 都是 53 端口。
如下是一次完整的请求大体过程:
从客户机到服务器以前采用得是递归查询,而服务器之间则是采用迭代查询。
DNS 记录类型:DNS 域名数据库由资源记录和区文件指令组成。
SOA 记录:起始受权机构记录,SOA 备注说明了众多 NS(name server)记录中谁是主名称服务器,不参与功能,可是不能缺乏。
NS 记录:域受权记录,当请求到达根域的时候,经过 NS 记录找到对应的域。
A 记录:当经过 NS 记录到达域之后,好比访问 www.baidu.com,经过 NS 咱们找到了 baidu.com,此时就须要经过 A 记录找到 www。
MX:将该域下的全部邮件服务器地址指向邮件服务器。
AAAA 记录:A 记录处理 IPV4,AAAA 处理 IPV6。
PTR 记录:反向解析,将 IP 解析成域名。
CNAME:别名记录,容许多个名字映射到另一个域名。好比咱们 ping 百度的时候能够发现返回实际上是 www.a.shifen.com 这个域名返回。全部 www.baidu.com 实际上是个别名。
搭建单台 DNS
咱们这里准备了三台虚拟机:
IP | 系统 | 说明 |
---|---|---|
192.168.100.111 | CentOS Linux release 7.5 | DNS 服务器,主机名:demo-node1 |
192.168.100.112 | CentOS Linux release 7.5 | 客户机,主机名:demo-node2 |
192.168.100.113 | CentOS Linux release 7.5 | 客户机,主机名:demo-node3 |
1. DNS 服务器安装 bind 服务:
yum -y install bind-utils bind bind-devel bind-libs
2. 配置主配置文件:/etc/named.conf
options { listen-on port 53 { any; }; listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; recursing-file "/var/named/data/named.recursing"; secroots-file "/var/named/data/named.secroots"; allow-query { any; }; recursion yes; dnssec-enable yes; dnssec-validation yes; bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key";
forwarders { 202.96.128.166;8.8.8.8; }; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key";
最终内容以下,红色部分为咱们修改的。
3. 追加域名解析入口配置:/etc/named.rfc1912.zones
zone "dylan.com" IN { # 测试用的域是 dylan.com type master; file "dylan.com.zone"; # 配置文件为 dylan.com.zone,该文件目录为 /var/named/ 下 };
4. 配置单独的解析文件:
/var/named/
cp named.localhost dylan.com.zone
chown named.named dylan.com.zone
修改配置:dylan.com.zone
$TTL 1D ;TTL 修改配置生效时间,默认为一天 @ IN SOA @ rname.invalid. ( 0 ; serial,配置编号,每次改完配置 +1,这样从服务器就知道更新配置 1D ; refresh,从服务器刷新时间,默认一天刷新一次 1H ; retry,若是刷新失败,默认1小时重试一次 1W ; expire,缓存过时时间,一周 3H ) ; minimum NS @ A 127.0.0.1 AAAA ::1 www IN A 192.168.100.112
咱们新加了个 www.dylan.com 的 A 记录。
4. 启动服务测试:
systemctl start named
systemctl enable named
查看端口:
netstat -tlunp | grep 53
结果如图:
咱们看到除了服务自己的 53 端口外,还监听了 953,这是 dns 服务的一个插件,如今咱们先无论。
本机测试解析:
dig @127.0.0.1 www.dylan.com
查看结果:
另外介绍两种检查配置的方法:
# 检查主配置 named-checkconf /etc/named.conf # 检查 zone 配置 named-checkzone dylan.com /var/named/dylan.com.zone
结果以下:
咱们在客户端修改 DNS 配置测试,修改网卡 DNS 配置重启网卡:
主从 DNS 服务搭建
1. 主从 DNS 的搭建开始的时候实际上是和单机搭建同样的,咱们修改主服务器的配置文件:/etc/named.rfc1912.zones
将咱们以前的配置进行修改:
zone "dylan.com" IN { # 测试用的域是 dylan.com type master; file "dylan.com.zone"; # 配置文件为 dylan.com.zone,该文件目录为 /var/named/ 下 allow-update { 192.168.100.113; }; allow-transfer { 192.168.100.113; }; # 容许同步DNS的辅助服务器IP also-notify { 192.168.100.113; }; notify yes; # 启用变动通告,当主文件变动,通知从进行比较同步 };
红色部分是咱们新加的,并指定了从的地址,重启服务
systemctl restart named
2. 从服务器也安装 bind 并将 /etc/named.conf 配置拷贝过来。
接着也是配置:/etc/named.rfc1912.zones,此时就能体现主从的不一样:
zone "dylan.com" IN { type slave; file "slaves/dylan.com.zone"; masters { 192.168.100.111; }; # 指定主服务器的 IP masterfile-format text; # 指定区域文件的格式为text,不指定有可能会为乱码 };
咱们不须要再去配置 dylan.com.zone 文件,由于咱们须要去主同步。全部直接启动从的 dns 服务。
systemctl start named
systemctl enable named
重启成功后咱们会发现,在从服务器的 /var/named/slaves 目录下,dylan.com.zone 已经同步成功。
3. 修改主配置测试同步状况:
咱们修改主服务器的 dylan.com.zone,新加解析的同时,修改配置编号,让从可以探测到变化。
此时咱们重启主服务器,会发现从服务器就可以同步成功。
顺便值得一提的是,我这里使用 reload named 服务并无使配置生效。
小结
值得一提的是,咱们在域名解析过程当中,还会遇到某些特殊状况:
1. @ 能够引用当区域名字,好比直接访问 baidu.com 就是这样的解析
2. 同一名字经过不一样的名字定义多条记录,此时 DNS 会轮询响应。
3. 同一值能够多个名字。
4. * 泛域名解析,好比配置 *.baidu.com 指向某个 IP,那么若是你访问 a.baidu.com 这种没有配置的会默认走这个配置。