linux高级—DNS服务
一、DNS服务介绍
DNS(Domain Name System)域名系统,在TCP/IP网络中有非常重要的地位,能够提供域名与IP地址的解析服务
- DNS是一个分布式的数据库,命名系统会采用层次的逻辑结构
- DNS是划分了域名空间
- 作用:进行域名解析
二、层级架构
举例:
对于www.baidu.com这个域名其实是www.baidu.com.
域名的层级架构为
根 .
顶级域名 com
二级域名 baidu
三级域名 www
由于因特网的用户数量较多,所以因特网在命名时采用的是层次树状结构的命名方法;任何一个连接在因特网上的主机或路由器,都有一个唯一的层次结构的名字,即域名(domain name);这里,“域”(domain)是名字空间中一个可被管理的划分。
- 根域:标识为点(.)现如今全球一共投放13个根服务器,可以指挥Firefox或互联网 Explorer这样的Web浏览器和电子邮件程序控制互联网通信
全世界的这13台根服务器;1个为主根服务器,放置在美国。其余12个均为辅根服务器,其中9个放置在美国,欧洲2个,位于英国和瑞典,亚洲1个,位于日本。所有根服务器均由美国政府授权的互联网域名与号码分配机构ICANN统一管理,负责全球互联网域名根服务器、域名体系和IP地址等的管理。
换句话说——攻击整个因特网最有力、最直接,也是最致命的方法恐怕就是攻击根域名服务器了
命名:以英文字母A到M依序命名,格式为“字母.root-servers.net”
-
顶级域:(Top Level Domain,简称TLD)分为以下三类
- 国家顶级域名
.cn. china .hk. hongkong 香港 .ko korea .jp Japan .us 美国 .uk 英国 .au 澳大利亚 .tw 台湾
- 通用顶级域名:最常见的通用顶级域名有7个
com(公司企业、商业机构) net(网络服务机构) org(非营利组织) int(国际组织) gov(美国的政府部门) mil(美国的军事部门)
-
二级域(注册域):可以由个人或组织申请注册
baidu
qq
aliyun
huawei等
- 三级域(子域):服务器网站名的代表
www
bbs等
- 主机名:常用于表示具体的主机
s1.www.baidu.com. 中的s1就是主机名
三、DNS记录类型
(1)A记录(Address)正向解析
A记录是将一个主机名(全称域名FQDN)和一个IP地址关联起来。这也是大多数客户端程序默认的查询类型。
(2)PTR记录(Pointer)反向解析
PTR记录将一个IP地址对应到主机名(全称域名FQDN)。这些记录保存在in-addr.arpa域中。
(3)CNAME记录(Canonical Name)别名
别名记录,也称为规范名字(Canonical Name)。这种记录允许您将多个名字映射到同一台计算机。
(4)MX记录(Mail eXchange)
MX记录是邮件交换记录,它指向一个邮件服务器,用于电子邮件系统发邮件时根据 收信人的地址后缀来定位邮件服务器。MX记录也叫做邮件路由记录,用户可以将该域名下的邮件服务器指向到自己的mail server上,然后即可自行操控所有的邮箱设置。
当有多个MX记录(即有多个邮件服务器)时,则需要设置数值来确定其优先级。通过设置优先级数字来指明首选服务器,数字越小表示优先级越高。
(5)NS记录(Name Server)
NS(Name Server)记录是域名服务器记录,也称为授权服务器,用来指定该域名由哪个DNS服务器来进行解析。
将网站的NS记录指向到目标地址,在设置NS记录的同时还需要设置目标网站的指向,否则NS记录将无法正常解析
NS记录优先于A记录。即,如果一个主机地址同时存在NS记录和A记录,则A记录不生效。
四、DNS的测试工具
1、ping
2、host
3、dig
4、nslookup
五、DNS解析过程
1.浏览器有缓存,查看浏览器缓存里是否有对应的dns域名解析或者本机里是否有dns缓存 --》浏览器缓存和客户机系统缓存,都可以缓存dns域名解析
2.客户机先查看本机的hosts文件是否有对应的域名
3.如果缓存里都没有,hosts文件里也没有对应的域名解析记录,如果都没有就向本地dns服务器发起域名解析的请求
4.本地域名服务器先查看缓存,如果缓存里有直接给用户,如果没有就会问根域名服务器要,向根域名服务器发起请求
5.根域名服务器获得了本地dns服务器需要查询的域名www.baidu.com后,再告诉本地dns域名服务器下一级的域名服务器.com.的域名服务器的ip地址,然后我们的本地dns服务器就会问.com服务器,查询www.baidu.com域名,.com服务器然后查询出baidu.com这个域名对应的dns服务器,然后告诉本地dns服务器,本地dns服务器又去访问baidu.com.域名服务器,查询www对应的ip,然后本机dns服务器获取到www.baidu.com对应的ip后,马上添加到缓存里,接着告诉客户机www.baidu.com域名的ip地址
6.客户机然后去访问www.baidu.com域名对应的ip地址的服务器
简单来说,一条域名的DNS记录会在本地有两种缓存:浏览器缓存和操作系统(OS)缓存。在浏览器中访问的时候,会优先访问浏览器缓存,如果未命中则访问OS缓存,最后再访问DNS服务器(一般是ISP提供),
DNS记录会有一个ttl值(time to live),单位是秒,意思是这个记录最大有效期是多少。经过实验,OS缓存会参考ttl值,但是不完全等于ttl值,而浏览器DNS缓存的时间跟ttl值无关,每种浏览器都使用一个固定值。
六、搭建dns服务器
案例一:搭建主服务器
1、准备工作:关闭防火墙服务和selinux
[root@nameserver ~]# service firewalld stop
Redirecting to /bin/systemctl stop firewalld.service
[root@nameserver ~]# systemctl disable firewalld
root@nameserver ~]# iptables -L 查看iptables防火墙规则
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@nameserver ~]# getenforce
Disabled
2、安装软件bind
[root@nameserver ~]# yum install bind* -y
3、设置named服务开机启动,并且立马启动DNS服务
[root@nameserver ~]# systemctl enable named
Created symlink from /etc/systemd/system/multi-user.target.wants/named.service to /usr/lib/systemd/system/named.service.
[root@nameserver ~]# systemctl start named # 立马启动named进程
[root@nameserver ~]# ps aux|grep named
named 14474 3.6 5.7 168300 57340 ? Ssl 15:13 0:00 /usr/sbin/named -u named -c /etc/named.conf
root 14481 0.0 0.0 112824 980 pts/0 R+ 15:13 0:00 grep --color=auto named
[root@nameserver ~]# netstat -anplut|grep named
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 14474/named
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 14474/named
tcp6 0 0 ::1:53 :::* LISTEN 14474/named
tcp6 0 0 ::1:953 :::* LISTEN 14474/named
udp 0 0 127.0.0.1:53 0.0.0.0:* 14474/named
udp6 0 0 ::1:53 :::* 14474/named
[root@nameserver ~]#
4、修改配置文件/etc/resolv.conf
[root@sanchuang ~]# vim /etc/resolv.conf
# Generated by NetworkManager
#nameserver 114.114.114.114
nameserver 127.0.0.1
5、测试查询
[root@sanchuang ~]# nslookup
> www.qq.com
Server: 127.0.0.1 # nice
Address: 127.0.0.1#53
Non-authoritative answer:
www.qq.com canonical name = ins-r23tsuuf.ias.tencent-cloud.net.
Name: ins-r23tsuuf.ias.tencent-cloud.net
Address: 121.14.77.201
Name: ins-r23tsuuf.ias.tencent-cloud.net
Address: 121.14.77.221
Name: ins-r23tsuuf.ias.tencent-cloud.net
Address: 2402:4e00:1020:1404:0:9227:71a3:83d2
Name: ins-r23tsuuf.ias.tencent-cloud.net
Address: 2402:4e00:1020:1404:0:9227:71ab:2b74
> www.baidu.com
Server: 127.0.0.1
Address: 127.0.0.1#53
Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 14.215.177.38
Name: www.a.shifen.com
Address: 14.215.177.39
案例二:搭建从服务器,主服务器做DNS
主服务器的配置接上
1、修改配置/etc/named.conf
[root@nameserver ~]# vim /etc/named.conf
options {
listen-on port 53 { any; }; # 修改
listen-on-v6 port 53 { any; }; # 修改
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; }; # 修改
2、重启named服务
[root@nameserver ~]# service named restart # 重启named服务
Redirecting to /bin/systemctl restart named.service
[root@nameserver ~]# ps aux | grep named
named 2014 0.0 9.7 279472 97176 ? Ssl 13:49 0:00 /usr/sbin/named -u named -c /etc/named.conf
root 2336 0.0 0.0 112824 980 pts/3 R+ 20:36 0:00 grep --color=auto named
[root@nameserver ~]# netstat -anplut | grep named
tcp 0 0 192.168.17.152:53 0.0.0.0:* LISTEN 2014/named
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 2014/named
tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN 2014/named
tcp6 0 0 :::53 :::* LISTEN 2014/named
tcp6 0 0 ::1:953 :::* LISTEN 2014/named
udp 0 0 192.168.17.152:53 0.0.0.0:* 2014/named
udp 0 0 127.0.0.1:53 0.0.0.0:* 2014/named
udp6 0 0 :::53 :::* 2014/named
[root@nameserver ~]#
3、从服务器的配置
[root@dns-client ~]# vim /etc/resolv.conf # 将dns改为主服务器的IP地址
[root@dns-client ~]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.17.152
[root@dns-client ~]#
4、测试查询
[root@dns-client ~]# nslookup www.baidu.com
Server: 192.168.17.152
Address: 192.168.17.152#53
Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 14.215.177.38
Name: www.a.shifen.com
Address: 14.119.104.189
[root@dns-client ~]#
案例三:搭建主dns服务器,增加解析的域名
1、修改配置文件,告诉named为xiaowei.com提供域名解析
主配置文件: /etc/named.conf
次要配置文件:/etc/named.rfc1912.zones
named.ca 记录13台根域名服务器地址的文件
[root@nameserver named]# vim /etc/named.rfc1912.zones
zone "xiaowei.com" IN {
type master;
file "xiaowei.com.zone";
allow-update { none; };
};
# 添加上面的配置,建议在localhost的后面
[root@nameserver data]# named-checkconf /etc/named.rfc1912.zones --》检查配置文件
2、创建xiaowei.com的数据文件
/var/named/ 存放dns域名解析的数据文件
[root@nameserver named]# cp -a named.localhost xiaowei.com.zone
[root@nameserver named]# ll
-rw-r----- 1 root named 152 6月 21 2007 xiaowei.com.zone
-rw-r----- 1 root named 152 6月 21 2007 named.localhost
# 之所以要接-a是保证两文件的权限一致,不然后面可能出错
[root@nameserver named]# cat xiaowei.com.zone # 在配置文件里不能加#号
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
IN MX 10 mail.xiaowei.com
A 192.168.17.152
AAAA ::1
www IN A 192.168.17.152 # 做负载均衡
www IN A 192.168.17.153
www IN A 192.168.17.154
www IN A 192.168.17.155
mail IN A 192.168.17.152 # 邮件交换记录
vue IN A 192.168.17.152
ftp IN A 192.168.17.152
tongtong IN A 192.168.17.152
ztt IN A 192.168.17.153
tiankai IN A 112.1.1.1
kaikai IN CNAME tiankai # 别名记录
* IN A 192.168.17.152
[root@nameserver named]# named-checkzone xiaowei.com /var/named/xiaowei.com.zone ---》检查数据文件是否有错误
zone sc.com/IN: loaded serial 0
OK
[root@nameserver named]#
3、刷新named服务
[root@nameserver named]# service named restart
Redirecting to /bin/systemctl restart named.service
[root@nameserver named]#
4、测试访问(在从服务器上)
[root@dns-client ~]# ping www.xiaowei.com
PING www.xiaowei.com (192.168.17.152) 56(84) bytes of data.
64 bytes from 192.168.17.152 (192.168.17.152): icmp_seq=1 ttl=64 time=0.507 ms
64 bytes from 192.168.17.152 (192.168.17.152): icmp_seq=2 ttl=64 time=0.605 ms
64 bytes from 192.168.17.152 (192.168.17.152): icmp_seq=3 ttl=64 time=0.531 ms
^C
--- www.xiaowei.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2006ms
rtt min/avg/max/mdev = 0.507/0.547/0.605/0.049 ms
[root@dns-client ~]# ping kaikai.xiaowei.com
PING tiankai.xiaowei.com (112.1.1.1) 56(84) bytes of data.
^C
--- tiankai.xiaowei.com ping statistics ---
12 packets transmitted, 0 received, 100% packet loss, time 11023ms
[root@dns-client ~]# ping ftp.xiaowei.com
PING ftp.xiaowei.com (192.168.17.152) 56(84) bytes of data.
64 bytes from 192.168.17.152 (192.168.17.152): icmp_seq=1 ttl=64 time=0.192 ms
64 bytes from 192.168.17.152 (192.168.17.152): icmp_seq=2 ttl=64 time=0.730 ms
64 bytes from 192.168.17.152 (192.168.17.152): icmp_seq=3 ttl=64 time=0.320 ms
^C
--- ftp.xiaowei.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 0.192/0.414/0.730/0.229 ms
[root@dns-client ~]#