4.1 基本DNS服务搭建

DNS原理

    DNS,是Domain Name System的缩写,翻译为域名系统,是互联网上作为域名和IP地址相互映射的一个分布式数据库。DNS能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过域名,最终得到该域名对应的IP地址的过程叫做域名解析(或主机名解析)。 

域名

    根域就是所谓的”.“,其实我们的网址 www.baidu.com 在配置当中应该是 www.baidu.com. (最后有一点),一般我们在浏览器里输入时会省略后面的点,而这也已经成为了习惯。根域服务器我们知道有13台。

    域名只是逻辑概念,并不代表计算机所在的物理地点。据2006年12月统计,现在顶级域名TLD(Top Level Domain)已有265个,分为三大类:

    (1)国家顶级域名nTLD:采用ISO3166的规定。如:cn代表中国,us代表美国,uk代表英国,等等。国家域名又常记为ccTLD(cc表示国家代码contry-code)。
    (2)通用顶级域名gTLD:最常见的通用顶级域名有7个,即:com(公司企业),net(网络服务机构),org(非营利组织),int(国际组织),gov(美国的政府部门),mil(美国的军事部门)。

    (3)基础结构域名(infrastructure domain):这种顶级域名只有一个,即arpa,用于反向域名解析,因此称为反向域名。


域名服务器

    能提供域名解析的服务器,上面的记录类型可以是A(address)记录,NS记录(name server),MX(mail),CNAME等。

SOA:Start Of Authority,起始授权记录;一个区域解析库有且仅能有一个SOA记录,必须位于解析库的第一条记录
A:internet Address,作用,FQDN --> IP
AAAA:FQDN --> IPv6
PTR:PoinTeR,IP --> FQDN
NS:Name Server,专用于标明当前区域的DNS服务器
CNAME:Canonical Name,别名记录

MX: Mail eXchanger,邮件交换器

DNS解析过程

    DNS同时占用 TCP 和UDP 的53端口,DNS在进行区域传输的时候使用TCP协议,其它时候则使用UDP协议。

    区域传送时使用TCP,主要有一下两点考虑: 

1.辅域名服务器会定时(一般时3小时)向主域名服务器进行查询以便了解数据是否有变动。如有变动,则会执行一次区域传送,进行数据同步。区域传送将使用TCP而不是UDP,因为数据同步传送的数据量比一个请求和应答的数据量要多得多。 

2.TCP是一种可靠的连接,保证了数据的准确性。 

    域名解析时使用UDP协议: 

    客户端向DNS服务器查询域名,一般返回的内容都不超过512字节,用UDP传输即可。不用经过TCP三次握手,这样DNS服务器负载更低,响应更快。虽然从理论上说,客户端也可以指定向DNS服务器查询的时候使用TCP,但事实上,很多DNS服务器进行配置的时候,仅支持UDP查询包。

    递归查询:

主机向本地域名服务器的查询一般都是采用递归查询。所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,向其它根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。因此,递归查询返回的查询结果或者是所要查询的IP地址,或者是报错,表示无法查询到所需的IP地址。

    迭代查询:

本地域名服务器向根域名服务器的查询的迭代查询。迭代查询的特点:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP地址,要么告诉本地服务器:“你下一步应当向哪一个域名服务器进行查询”。然后让本地服务器进行后续的查询。根域名服务器通常是把自己知道的顶级域名服务器的IP地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的IP地址,要么告诉本地服务器下一步应当向哪一个权限域名服务器进行查询。最后,知道了所要解析的IP地址或报错,然后把这个结果返回给发起查询的主机。

一次完整的查询请求经过的流程:

Client -->hosts文件 -->DNS Service Local Cache --> DNS Server (recursion) --> Server Cache --> iteration(迭代) --> 根--> 顶级域名DNS-->二级域名DNS…

DNS服务

使用 bind 搭建 DNS 服务

[root@CentOS74 ~]# yum install bind
查看 bind 的主配置文件
[root@CentOS74 ~]# cat /etc/named.conf 
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// See the BIND Administrator's Reference Manual (ARM) for details about the
// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html

options {         #全局定义
	listen-on port 53 { localhost; };     #监听位置,默认为当前主机,建议修改为localhost
	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";
	allow-query     { localhost;any; };     #允许那些主机查看DNS数据库
	allow-transfer  { 192.168.30.174; };    #允许那些主机拉取所有DNS数据库

	/* 
	 - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
	 - If you are building a RECURSIVE (caching) DNS server, you need to enable 
	   recursion. 
	 - If your recursive DNS server has a public IP address, you MUST enable access 
	   control to limit queries to your legitimate users. Failing to do so will
	   cause your server to become part of large scale DNS amplification 
	   attacks. Implementing BCP38 within your network would greatly
	   reduce such attack surface 
	*/
	recursion yes;

	dnssec-enable yes;    #关于加密安全的选项,建议关闭
	dnssec-validation yes;

	/* Path to ISC DLV key */
	bindkeys-file "/etc/named.iscdlv.key";

	managed-keys-directory "/var/named/dynamic";

	pid-file "/run/named/named.pid";
	session-keyfile "/run/named/session.key";
};

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";          

    任何服务程序如果期望其能够通过网络被其它主机访问,至少应该监听在一个能与外部主机通信的IP地址上。

创建DNS数据库

    在 /etc/named.rfc1912.zones 中定义一个新的区域解析库

zone "jiangbowen.com.cn" IN {    #域名为jangbowen.com.cn
	type master;      #类型为主服务器
	file "jiangbowen.com.cn.zone";   #数据库文件是/var/named/jiangbowen.com.cn.zone.
};
    在 /var/named 下创建区域解析数据库文件
[root@CentOS74 ~]# cat /var/named/jiangbowen.com.cn.zone 
$TTL 86400	; 1 day     #TTL为缓存保留的时间
@	IN SOA	dns1.jiangbowen.com.cn. admin.jiangbowen.com.cn. (   #@为当前区域
				7          ; serial               #序列号,用于同步数据库
				86400      ; refresh (1 day)      #刷新时间,指定从服务器多久查询一次DNS记录是否应该更新
				3600       ; retry (1 hour)       #重试间隔,当从服务器请求查询DNS记录失败后多久后再次查询
				604800     ; expire (1 week)      #过期时间,定义从服务器多久时间无法更新DNS记录就会失效
				10800      ; minimum (3 hours)    #否定答案的缓存时间
				)
			NS	master.jiangbowen.com.cn.
			MX	10 mail1.jiangbowen.com.cn.
			MX	20 mail2.jiangbowen.com.cn.
mail1			A	192.168.30.74
mail2			A	192.168.30.75
master			A	192.168.30.74
websver			A	192.168.30.75     #当一个域名对应多个IP地址时,将会轮换响应请求。
			A	192.168.30.174
www			CNAME	websver   

    语法:域名 [TTL] IN 记录类型 记录值

域名、IN 都可以向上一行继承,TTL 值可以全局继承。

同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应;

同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机。

[root@CentOS69 ~]# host www.jiangbowen.com.cn   #查看www.jiangbowen.com.cn的DNS记录
www.jiangbowen.com.cn is an alias for websver.jiangbowen.com.cn.    #此域名是websver.jiangbowen.com.cn的别名
websver.jiangbowen.com.cn has address 192.168.30.75                 #对应两个IP地址
websver.jiangbowen.com.cn has address 192.168.30.174
[root@CentOS69 ~]# ping www.jiangbowen.com.cn     #通过ping命令请求后,发现两个IP轮流进行响应。
PING websver.jiangbowen.com.cn (192.168.30.174) 56(84) bytes of data.
[root@CentOS69 ~]# ping www.jiangbowen.com.cn
PING websver.jiangbowen.com.cn (192.168.30.75) 56(84) bytes of data.
[root@CentOS69 ~]# ping www.jiangbowen.com.cn
PING websver.jiangbowen.com.cn (192.168.30.174) 56(84) bytes of data.
[root@CentOS69 ~]# ping www.jiangbowen.com.cn
PING websver.jiangbowen.com.cn (192.168.30.174) 56(84) bytes of data.
[root@CentOS69 ~]# ping www.jiangbowen.com.cn
PING websver.jiangbowen.com.cn (192.168.30.75) 56(84) bytes of data.
[root@CentOS69 ~]# host master.jiangbowen.com.cn         #192.168.30.74同时为两个域名的IP地址
master.jiangbowen.com.cn has address 192.168.30.74
[root@CentOS69 ~]# host mail1.jiangbowen.com.cn
mail1.jiangbowen.com.cn has address 192.168.30.74

实现反向解析

    在 /etc/named.rfc1912.zones 中定义反向区域解析库

zone "30.168.192.in-addr.arpa" IN {    #网络地址反写.in-addr.arpa.,最后一个.可以省略
	type master;
	file "192.168.30.zone";
};

    在 /var/named 下创建反向区域解析数据库文件

[root@CentOS74 ~]# cat /var/named/192.168.30.zone 
$TTL 1D
@ IN SOA dns1.jiangbowen.com.cn. admin.jiangbowen.com.cn. ( 1 1D 1H 1W 3H )
	NS dns1.jiangbowen.com.cn.
dns1.jiangbowen.com.cn A 192.168.30.74
75	PTR websver.jiangbowen.com.cn.
74	PTR mail.jiangbowen.com.cn.

    查看反向解析结果

[root@CentOS69 ~]# host 192.168.30.74
74.30.168.192.in-addr.arpa domain name pointer mail.jiangbowen.com.cn.
[root@CentOS69 ~]# host 192.168.30.75
75.30.168.192.in-addr.arpa domain name pointer websver.jiangbowen.com.cn.

允许远程动态更新

    在 /etc/named.rfc1912.zones 或者 /etc/named.conf 中定义是否允许远程动态更新

zone "jiangbowen.com.cn" IN {
	type master;
	file "jiangbowen.com.cn.zone";
	allow-update { 192.168.30.75; };    #允许192.168.30.75远程动态更新DNS记录
};

    为 /var/named 目录添加所属组的写权限

[root@CentOS74 ~]# chmod 770 /var/named/
[root@CentOS74 ~]# ll -d /var/named/
drwxrwx---. 5 root named 180 Jun 23 11:12 /var/named/

    因为远程动态更新 DNS 记录时 named 进程会在 /var/named 目录中新建文件,所以需要赋予 named 组对 /var/named 目录拥有写权限。

    由远程向 192.168.30.74 的区域数据库中添加新的 DNS 记录

[root@CentOS75 ~]#⮀⮀nsupdate
> server 192.168.30.74
> zone jiangbowen.com.cn
> update add db.jiangbowen.com.cn 86400 IN A 1.1.1.1
> send
> quit

    查看 DNS 记录

[root@CentOS69 ~]# host db.jiangbowen.com.cn
db.jiangbowen.com.cn has address 1.1.1.1

    查看新建的数据库文件

[root@CentOS74 ~]# ll /var/named/jiangbowen.com.cn.zone*
-rw-r--r-- 1 named named  636 Jun 23 10:48 /var/named/jiangbowen.com.cn.zone
-rw-r--r-- 1 named named 1024 Jun 23 15:47 /var/named/jiangbowen.com.cn.zone.jnl    #使用nsupdate后产生的文件
[root@CentOS74 ~]# named-journalprint /var/named/jiangbowen.com.cn.zone.jnl   #使用named-journalprint工具查看
del jiangbowen.com.cn.	86400	IN	SOA	dns1.jiangbowen.com.cn. admin.jiangbowen.com.cn. 7 86400 3600 604800 10800
add jiangbowen.com.cn.	86400	IN	SOA	dns1.jiangbowen.com.cn. admin.jiangbowen.com.cn. 8 86400 3600 604800 10800
add db.jiangbowen.com.cn.	86400	IN	A	1.1.1.1
del jiangbowen.com.cn.	86400	IN	SOA	dns1.jiangbowen.com.cn. admin.jiangbowen.com.cn. 8 86400 3600 604800 10800
del db.jiangbowen.com.cn.	86400	IN	A	1.1.1.1
add jiangbowen.com.cn.	86400	IN	SOA	dns1.jiangbowen.com.cn. admin.jiangbowen.com.cn. 9 86400 3600 604800 10800
    删除 DNS 记录
[root@CentOS75 ~]# nsupdate
> server 192.168.30.74
> zone jiangbowen.com.cn
> update delete db.jiangbowen.com.cn 86400 IN A 1.1.1.1
> send
> quit

实现从 DNS 服务器

    在从服务器上声明区域解析数据库

zone "jiangbowen.com.cn" IN {
	type slave;                    #声明自己时从服务器
	masters { 192.168.30.74; };    #定义主服务器是谁
	file "slaves/jiangbowen.com.cn.slave.zone";   #区域数据库存放路径
};

    使用 rndc reload 重载配置文件后,/var/named/slaves/ 中会自动生成一个区域数据库文件

[root@CentOS174 ~]# ll /var/named/slaves/jiangbowen.com.cn.slave.zone
-rw-r--r-- 1 named named 856 Jun 23 15:54 /var/named/slaves/jiangbowen.com.cn.slave.zone    #注意时间

    到此实现了从服务器向主服务器拉取区域数据库,下面实现主服务器向从服务器推送区域数据库。

    在主服务器的区域数据库中声明从服务器

$ORIGIN .
$TTL 86400	; 1 day
jiangbowen.com.cn	IN SOA	dns1.jiangbowen.com.cn. admin.jiangbowen.com.cn. (
				11          ; serial
				86400      ; refresh (1 day)
				3600       ; retry (1 hour)
				604800     ; expire (1 week)
				10800      ; minimum (3 hours)
				)
			NS	master.jiangbowen.com.cn.
			NS	slave.jiangbowen.com.cn.     #声明从服务器
			MX	10 mail1.jiangbowen.com.cn.
			MX	20 mail2.jiangbowen.com.cn.
mail1			A	192.168.30.74
mail2			A	192.168.30.75
master			A	192.168.30.74
slave			A	192.168.30.174    #定义从服务器的IP地址
websver			A	192.168.30.75
			A	192.168.30.174
www			CNAME	websver

    在主服务器上更新区域数据库,注意修改序列号

[root@CentOS174 ~]# ll /var/named/slaves/jiangbowen.com.cn.slave.zone
-rw-r--r-- 1 named named 802 Jun 23 16:02 /var/named/slaves/jiangbowen.com.cn.slave.zone   #时间更新为16:02

    为了安全,建议在主服务器的主配置文件中定义

allow-transfer  { 192.168.30.174; };

    只允许指定主机拉取区域数据库,其他主机只允许指定域名查询。

实现泛 DNS

    泛 DNS 就是在区域数据库中增加对应的 DNS 记录,实现域名对用户的容错性。

			A	192.168.30.75     #当只查找域名,而没有指定主机时,则解析为192.168.30.75
*			A	192.168.30.174    #当查找的域名无法解析时,则解析为192.168.30.174

    批量指定 DNS 记录

$GENERATE 1-100 server$ A 	192.168.30.$

    测试泛 DNS

[root@CentOS69 ~]# host server1.jiangbowen.com.cn
server1.jiangbowen.com.cn has address 192.168.30.1
[root@CentOS69 ~]# host server2.jiangbowen.com.cn
server2.jiangbowen.com.cn has address 192.168.30.2
[root@CentOS69 ~]# host server99.jiangbowen.com.cn
server99.jiangbowen.com.cn has address 192.168.30.99
[root@CentOS69 ~]# host jiangbowen.com.cn
jiangbowen.com.cn has address 192.168.30.75
jiangbowen.com.cn mail is handled by 10 mail1.jiangbowen.com.cn.
jiangbowen.com.cn mail is handled by 20 mail2.jiangbowen.com.cn.
[root@CentOS69 ~]# host aaaa.jiangbowen.com.cn
aaaa.jiangbowen.com.cn has address 192.168.30.174

实现子域授权

    当子域需要独立管理时,就需要子域授权

    修改父域服务器 /var/named/ 中的区域数据库

[root@CentOS74 ~]#⮀⮀cat /var/named/jiangbowen.com.cn.zone 
$TTL 86400	; 1 day
@		IN	SOA	master.jiangbowen.com.cn. admin.jiangbowen.com.cn. (
				13          ; serial
				86400      ; refresh (1 day)
				3600       ; retry (1 hour)
				604800     ; expire (1 week)
				10800      ; minimum (3 hours)
				)
			NS	master.jiangbowen.com.cn.
			NS	slave.jiangbowen.com.cn.
			MX	10 mail1.jiangbowen.com.cn.
			MX	20 mail2.jiangbowen.com.cn.
			A 	192.168.30.75
*			A	192.168.30.174
$GENERATE	1-100 	server$		A 	192.168.30.$
ftp			NS	dns              #声明ftp域由dns服务器托管
mail1			A	192.168.30.74
mail2			A	192.168.30.75
master			A	192.168.30.74
slave			A	192.168.30.174
dns			A	192.168.30.75    #定义dns服务器的地址
websver			A	192.168.30.75
			A	192.168.30.174
www			CNAME	websver

    在子域服务器上配置子域 DNS 

zone "ftp.jiangbowen.com.cn" IN {
	type master;
	file "ftp.jangbowen.com.cn.zone";
};
[root@CentOS75 named]# cat /var/named/ftp.jiangbowen.com.cn.zone 
$TTL 1D
@	IN SOA	master.ftp.jiangbowen.com.cn. admin.ftp.jiangbowen.com.cn. (
					0	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
	NS	master
websver	A	192.168.30.75
master	A	192.168.30.75
www	CNAME	websver

    然后将双方的主配置文件中的加密选项关闭,否则子域无法向上级域通信。

dnssec-enable no;
dnssec-validation no;

    测试子域DNS服务器,向父域 DNS 服务器请求子域地址

[root@CentOS69 ~]# dig www.ftp.jiangbowen.com.cn @192.168.30.74

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6 <<>> www.ftp.jiangbowen.com.cn @192.168.30.74
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36724
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 1

;; QUESTION SECTION:
;www.ftp.jiangbowen.com.cn.	IN	A

;; ANSWER SECTION:
www.ftp.jiangbowen.com.cn. 86223 IN	CNAME	websver.ftp.jiangbowen.com.cn.
websver.ftp.jiangbowen.com.cn. 86223 IN	A	192.168.30.75

;; AUTHORITY SECTION:
ftp.jiangbowen.com.cn.	86223	IN	NS	master.ftp.jiangbowen.com.cn.

;; ADDITIONAL SECTION:
master.ftp.jiangbowen.com.cn. 86325 IN	A	192.168.30.75

;; Query time: 1 msec
;; SERVER: 192.168.30.74#53(192.168.30.74)
;; WHEN: Sat Jun 23 17:24:04 2018
;; MSG SIZE  rcvd: 118

[root@CentOS69 ~]# host www.ftp.jiangbowen.com.cn 192.168.30.74
Using domain server:
Name: 192.168.30.74
Address: 192.168.30.74#53
Aliases: 

www.ftp.jiangbowen.com.cn is an alias for websver.ftp.jiangbowen.com.cn.
websver.ftp.jiangbowen.com.cn has address 192.168.30.75





  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值