什么是 DNS ?
DNS (Domain Name System) 用于将域名解析为 ip 地址, 同时也可以将 ip 地址解析为域名(反向解析)。
好处
- 对于用户,不再需要记住一连串数字(192.168.1.1)
- 对于管理员,可以更换IP地址,而不影响名称解析
将域名解析为 IP 地址的过程
DNS递归查询当用户想要解析 www.google.com
时,系统会依次执行以下步骤,直到得到结果:
- 查看本机的
host
文件(Windows:C:\Windows\System32\drivers\etc\host
Linux:/etc/hosts
) - 到系统设置的DNS查询 IP 地址(8.8.8.8)
- 如果该DNS是
google.com
的权威名称服务器,读取 Zone 信息并返回www.google.com
的IP地址 - 如果该DNS是非权威名称服务器,则检查缓存;如果缓存中没有
google.com
和com
,则前往根名称服务器.
查询com
的地址,再递归查询www.google.com
的地址,再将结果缓存到内存一段时间
- 如果该DNS是
DNS 类型
DNS (Domain Name System) 通常被成为名称服务器 Name Server,有两种类型:
-
authoritative name sever
权威名称服务器,可以再分为两种类型:-
primary/master name server
主名称服务器 -
secondary/salve name server
次名称服务器
-
-
recursive name server
递归名称服务器
权威服务器:Zone 文件保存在该服务器(域名的拥有者)
递归名称服务器:递归地去其他权威服务器中查询域名信息(提供名称解析服务)
将权威和递归服务器部署在不同物理服务器上
- 权威服务器需要保持24小时在线。
- 递归服务器解析域名时需要较长时间,需要限制客户端数量,以防御 DDOS 攻击。
Zone
Zone
定义了一个域名下 (example.com
) 主机和对应IP地址的信息(由一行资源记录定义)
Zone 信息保存在主名称服务器的 Zone 文件中,次名称服务器会从主名称服务器获取 Zone 文件
BIND
BIND (Berkeley Internet Name Domain) 用来搭建名称服务器,它包含:
-
named
名称服务器 -
rndc
管理工具 -
dig
,nslookup
测试工具
Empty Zones
BIND 会为私有IP地址(由 RFC 1918 定义)创建一系列 Empty Zones,阻止递归名称服务器发送无效的名称查询到互联网并立即返回 NXDOMAIN, 而不是SERVFAIL
搭建 DNS
准备
系统: CentOS 7
named 配置文件:/etc/named.conf
(全局配置), /etc/named/
(存放辅助配置文件)
Zone 文件目录:/var/named/
Zone 文件模板: /usr/share/doc/bind-9.9.4/sample/var/named/named.localhost
IP地址配置:(为DNS分配一个静态IP地址)
防火墙配置
放行端口 53 (一般使用 UDP)
备份配置文件
# 安装 BIND
~ sudo yum -y install bind bind-utils
# 备份配置文件
~ cp /etc/named.conf /etc/named.conf~
# 复制 Zone 模板文件
~ cp /usr/share/doc/bind-9.9.4/sample/var/named/named.localhost /var/named/
为 example.com
搭建权威名称服务器
需求
DNS 服务器: dns - 192.168.1.200
主机1 :host1 - 192.168.1.1
Web 服务器: serve - 192.168.1.80
别名: www - server1
全局配置 named.conf
named.conf
named.conf
# 创建辅助文件 example.com
~ sudo vim /etc/named/example.com
#下面的 "example.com" 作为变量名 $ORIGIN 的值, example.com.
~ sudo cat /etc/named/example.com
zone "example.com" IN {
type master;
file "example.com.zone";
};
# 修改权限及拥有者
~ sudo chmod 640 /etc/named/example.com
~ sudo chown root:named /etc/named/example.com
~ sudo ls -l /etc/named/example.com
-rw-r-----. 1 root named 75 May 6 02:03 /etc/named/example.com
Zone 文件
# 创建 Zone 文件
~ sudo vim /var/named/example.com.zone
~ sudo cat /var/named/example.com.zone
$TTL 1D
@ IN SOA example.com. root.example.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.example.com.
A 192.168.1.200
;
;
dns IN A 192.168.1.200
host1 IN A 192.168.1.1
server1 IN A 192.168.1.80
www IN CNAME server1
# 修改权限和拥有者
~ sudo chmod 640 /var/named/example.com.zone
~ sudo chown root:named /var/named/example.com.zone
~ sudo ls -l /var/named/example.com.zone
-rw-r-----. 1 root named 273 May 6 02:50 /var/named/example.com.zone
Zone 文件
# 启动 named 或者 重新读取文件
~ sudo systemctl start named
~ sudo systemctl reload named
~ sudo systemctl status named -l
● named.service - Berkeley Internet Name Domain (DNS)
Loaded: loaded (/usr/lib/systemd/system/named.service; disabled; vendor preset: disabled)
Active: active (running) since Sat 2018-05-05 22:53:43 CST; 4h 5min ago
Process: 3182 ExecReload=/bin/sh -c /usr/sbin/rndc reload > /dev/null 2>&1 || /bin/kill -HUP $MAINPID (code=exited, status=0/SUCCESS)
Process: 1549 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited, status=0/SUCCESS)
Process: 1546 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS)
Main PID: 1552 (named)
CGroup: /system.slice/named.service
└─1552 /usr/sbin/named -u named -c /etc/named.conf
May 06 02:59:19 localhost.localdomain named[1552]: automatic empty zone: 9.E.F.IP6.ARPA
May 06 02:59:19 localhost.localdomain named[1552]: automatic empty zone: A.E.F.IP6.ARPA
May 06 02:59:19 localhost.localdomain named[1552]: automatic empty zone: B.E.F.IP6.ARPA
May 06 02:59:19 localhost.localdomain named[1552]: automatic empty zone: 8.B.D.0.1.0.0.2.IP6.ARPA
May 06 02:59:19 localhost.localdomain named[1552]: reloading configuration succeeded
May 06 02:59:19 localhost.localdomain named[1552]: reloading zones succeeded
May 06 02:59:19 localhost.localdomain named[1552]: zone example.com/IN: loaded serial 0
May 06 02:59:19 localhost.localdomain named[1552]: all zones loaded
May 06 02:59:19 localhost.localdomain named[1552]: running
May 06 02:59:19 localhost.localdomain named[1552]: zone example.com/IN: sending notifies (serial 0
测试
网友评论