DNS(Domain Name System)是互联网上的一项服务,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网。
DNS系统使用的是网络的查询,那么自然需要有监听的port。DNS使用的是53端口号,在/etc/services(搜索domain)这个文件中能看到。通常DNS是以UDP这个较快速的数据传输协议来查询的,但是没有查询到完整的信息时,就会再次以TCP这个协议来重新查询。所以启动DNS时,会同时启动TCP以及UDP的port53。
由于因特网的用户数量较多,所以因特网在命名时采用的是层次树状结构的命名方法。任何一个连接在因特网上的主机或路由器,都有一个唯一的层次结构的名字,即域名(domain name)。“域”(domain)是名字空间中一个可被管理的划分。
域名只是逻辑概念,并不代表计算机所在的物理地点。域名可分为三大类:
(1)国家顶级域名:采用ISO3166的规定。如:cn代表中国,us代表美国,uk代表英国,等等。国家域名又常记为ccTLD(country code top-level domains,cc表示国家代码contry-code)。
(2)通用顶级域名:最常见的通用顶级域名有7个,即:com(公司企业),net(网络服务机构),org(非营利组织),int(国际组织),gov(美国的政府部门),mil(美国的军事部门)。
(3)基础结构域名(infrastructure domain):这种顶级域名只有一个,即arpa,用于反向域名解析,因此称为反向域名。
(1)根域名服务器:最高层次的域名服务器,也是最重要的域名服务器。所有的根域名服务器都知道所有的顶级域名服务器的域名和IP地址。不管是哪一个本地域名服务器,若要对因特网上任何一个域名进行解析,只要自己无法解析,就首先求助根域名服务器。所以根域名服务器是最重要的域名服务器。假定所有的根域名服务器都瘫痪了,那么整个DNS系统就无法工作。需要注意的是,在很多情况下,根域名服务器并不直接把待查询的域名直接解析出IP地址,而是告诉本地域名服务器下一步应当找哪一个顶级域名服务器进行查询。
现如今全球一共投放13个根服务器
根服务器主要用来管理互联网的主目录,全世界只有13台。1个为主根服务器,放置在美国。其余12个均为辅根服务器,其中9个放置在美国,欧洲2个,位于英国和瑞典,亚洲1个,位于日本。所有根服务器均由美国政府授权的互联网域名与号码分配机构ICANN统一管理,负责全球互联网域名根服务器、域名体系和IP地址等的管理。 这13台根服务器可以指挥Firefox或互联网 Explorer这样的Web浏览器和电子邮件程序控制互联网通信。换句话说——攻击整个因特网最有力、最直接,也是最致命的方法恐怕就是攻击根域名服务器了。
在与现有IPv4根服务器体系架构充分兼容基础上,由我国下一代互联网国家工程中心领衔发起的“雪人计划”于2016年在美国、日本、印度、俄罗斯、德国、法国等全球16个国家完成25台IPv6(互联网协议第六版)根服务器架设,事实上形成了13台原有根加25台IPv6根的新格局,为建立多边、民主、透明的国际互联网治理体系打下坚实基础。中国部署了其中的4台,由1台主根服务器和3台辅根服务器组成,打破了中国过去没有根服务器的困境。
(2)顶级域名服务器:负责管理在该顶级域名服务器注册的二级域名。
(3)权限域名服务器:负责一个“区”的域名服务器。
(4)本地域名服务器:本地域名服务器不属于域名服务器的层次结构,但是它对域名系统非常重要。当一个主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器。
为了提高域名服务器的可靠性,DNS域名服务器都把数据复制到几个域名服务器来保存,其中的一个就是主DNS服务器(Master name server),负责解析至少一个域。其他的是辅助(从)DNS服务器(Slave name server):负责解析至少一个域,是主DNS服务器的辅助。当主域名服务器出故障时,辅助域名服务器可以保证DNS的查询工作不会中断。主域名服务器定期把数据复制到辅助域名服务器中,而更改数据只能在主域名服务器中进行。这样就保证了数据的一致性。
(5)缓存DNS服务器:不负责解析域,只是缓存域名解析的结果。
正向解析:将FQDN----->IP
反向解析:将IP----->FQDN
假设: 我们现在在浏览器中输入了www.baidu.com
DNS解析部分:
递归查询
1.查询浏览器的DNS缓存,如果存在直接返回.
2.如果为命中,查询操作系统有一个配置文件host(C:/Windows/System32/drivers/etc/hosts)(主机名和ip映射), 如果没有去查询操作系统DNS缓存。
注意:但是这种操作系统级别的域名解析规程也被很多黑客利用,通过修改你的hosts文件里的内容把特定的域名解析到他指定的ip地址上,造成所谓的域名劫持。所以在windows7中将hosts文件设置成了readonly,防止被恶意篡改。
3.如果操作系统内缓存没有命中, 去本地域名服务器去查询。
迭代查询
4.如果本地域名服务器中为命中, 本地域名服务器去请求根域名服务器。
5.www.baidu.com. 根域名服务器是可以判断出来是.com这个顶级域名, 会告诉本地域名服务器,去找.com顶级域名服务器
6.本地域名服务器请求.com顶级服务器,顶级域名服务器判断出来他是属于baidu二级域名服务器,告诉本地域名服务器,去找www三级域名服务器。
7.本地域名服务器去请求www三级域名服务器, 三级域名服务器如果有ip去告诉它,如果没有,告诉它找不到
/etc/named.conf # bind主配置文件
/etc/named.rfc1912.zones # 定义zone的文件
/etc/rndc.conf # rndc配置文件
/usr/sbin/named-checkconf # 检测/etc/named.conf文件语法
/usr/sbin/named-checkzone # 检测zone和对应zone文件的语法
/usr/sbin/rndc # 远程dns管理工具
/usr/sbin/rndc-confgen # 生成rndc密钥
/var/named/named.ca # 根解析库
/var/named/named.localhost # 本地主机解析库
/var/named/slaves # 从ns服务器文件夹
/etc/named.conf # bind主配置文件
options { 定义监听端口,如果所有地址都监听,则可在括号里面写 any;
listen-on port 53 { 127.0.0.1; };
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"; #分配统计目录
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
allow-query { localhost; }; #允许本地主机进行查询
recursion yes; #允许递归
logging {
#指定日志记录分类和他们的目标位置
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
#定义区域 区域类型有hint(根区域),master(主区域),slave(从区域服务器)
type hint;
file "named.ca";
};
#包含其他的配置文件:
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
/var/named/named.localhost # 本地主机解析库
$TTL 1D
@ IN SOA @ admin.baidu.com. ( #1.如果一个域名和来源相同的话,那么名称就可以被表示为”@“ #2.@代表zone的意思,现在@代表baidu.com.; SOA代表资源记录的名称为起始授权记录;admin.baidu.com.表示有问题找该管理员;SOA记录后面的@,代表域的权威服务器,
0 ; serial # 序号,代表数据库文件的新旧,需要越大代表越新。如果你修改了数据库文件,需要将这个数据放大
1D ; refresh #更新频率,定义slave多久向Master请求更新数据。
1H ; retry #失败重新尝试,如果slave无法对Master实现连接,多长时间内,slave会尝试重新连接到Master。
1W ; expire #失效时间,如果一直尝试失败,持续连接到这个设置值时限,那么slave将不在继续尝试连接,并且尝试删除这份下载的zone file信息。
3H ) ; minimum #缓存时间,如果这个数据库zone file中,每笔RR记录都没有写到TTL缓存时间的话,那么就以这个SOA的设置值为主。
IN NS @ ##NS记录代表域名服务器记录,如果有多个域名服务器, 可以添加多条NS记录,每个NS记录在下面.
IN MX 10 mail.example.com. #使用MX记录指定邮件服务器时,我们给mail.example.com服务器设置优先级为10
IN A 127.0.0.1 #A记录为正向解析记录,格式为在域名后面输入响应的IP地址, IN代表Internet, A代表正向解析记录。
IN AAAA ::1
#时间单位:M(分钟),H(小时),D(天),W(周),默认是秒
#缓存时间(Minumum TTL),如果这个数据库zone file中,每笔RR记录都没有写到TTL缓存时间的话,那么就以这个SOA的设置值为主。ttl的意思是当这笔记录被其他DNS服务器查询到后,这个记录会在对方DNS服务器的缓存中,保持多久时间。如果写了$TTL,则以该值为准。
root.example.com. IN A 172.16.0.254
www.example.com. IN A 172.16.0.200
IN A 172.16.0.200
ftp.example.com. IN A 172.16.0.100
mail IN A 172.16.0.25
web IN CNAME www #CNAME记录为别名,可以使用web.example.com来代表www.example.com
# ftp.example.com(默认省略) => ftp.example.com.example.com.
# mail(默认省略) => mail.example.com.
软件安装:# 第一个安装几个用到的bind软件包,第二个安装了所有bind的软件包。
yum install bind bind-chroot bind-utils bind-libs -y #这里bind-chroot软件包对目录起了保护作用,配置文件时需要将配置文件复制到chroot目录下所对应的文件目录下。
yum install bind* -y
[root@bogon named]# vim xian.zone
[root@bogon named]# ll
total 4
-rw-r--r--. 1 root root 0 Dec 6 17:14 xian.zone
[root@bogon named]# pwd
/var/named/chroot/var/named
[root@bogon named]# mkdir data
[root@bogon named]# ll
total 8
drwxr-xr-x. 2 root root 6 Dec 6 17:56 data #这里注意data目录的位置。
-rwxrwxr-x. 1 root named 507 Dec 6 17:44 xian.zone
[root@bogon named]# pwd
/var/named/chroot/var/named
/etc/named.conf -> /var/named/chroot/etc/
/var/named/named.ca -> /var/named/chroot/var/named/
[root@bogon named]# chmod 775 named.ca
[root@bogon named]# chown root:named named.ca
[root@bogon named]# ll
total 4
-rwxrwxr-x. 1 root named 2253 Dec 6 16:58 named.ca
[root@bogon named]# chmod 775 data/
[root@bogon named]# chown root:named data/
[root@bogon named]# ll
total 8
drwxrwxr-x. 2 root named 6 Dec 6 17:56 data
[root@bogon named]# chown root:named xian.zone
[root@bogon named]# chmod 775 xian.zone
[root@bogon named]# ll
total 4
-rwxrwxr-x. 1 root named 0 Dec 6 17:14 xian.zone
[root@bogon etc]# chmod 775 named.conf
[root@bogon etc]# chown root:named named.conf
[root@bogon etc]# ll
total 4
drwxr-x---. 3 root named 23 Dec 6 16:20 crypto-policies
drwxr-x---. 2 root named 6 Feb 27 2020 named
-rwxrwxr-x. 1 root named 1705 Dec 6 16:57 named.conf
drwxr-x---. 3 root named 25 Dec 6 16:20 pki
配置正向域:
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";
secroots-file "/var/named/data/named.secroots";
recursing-file "/var/named/data/named.recursing";
allow-query { any; };
/*
- 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;
#managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
#session-keyfile "/run/named/session.key";
/* https://fedoraproject.org/wiki/Changes/CryptoPolicy */
include "/etc/crypto-policies/back-ends/bind.config";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint;
file "named.ca";
};
zone "xian.com" IN {
type master;
file "xian.zone";
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
配置区域文件:
@ IN SOA dns1.xian.com. test1.163.com(
10
1D
1H
1W
3H)
IN NS dns1.xian.com.
IN NS dns1.xian.com.
IN MX 10 mail.xian.com.
dns1 IN A 192.168.58.66
dns2 IN A 192.168.58.67
mail IN A 192.168.58.68
ftp.xian.com. IN A 192.168.58.69
www.xian.com. IN A 192.168.58.70
ntp IN A 192.168.58.71
dhcp IN A 192.168.58.72
web IN CNAME www
[root@localhost named]# systemctl restart named-chroot # 开启服务
[root@localhost named]# systemctl stop firewalld #关闭防火墙
[root@localhost named]# setenforce 0 #安全上下文置0
[root@bogon named]# host dns1.xian.com
dns1.xian.com has address 192.168.58.66
[root@bogon named]# host dns1.xian.com
dns1.xian.com has address 192.168.58.66
[root@bogon named]# host dns2.xian.com
dns2.xian.com has address 192.168.58.67
[root@bogon named]# host www.xian.com
WWW.xian.com has address 192.168.58.70
注意:如果成功启动但是没有成功,请在/etc/resolv.conf 文件中手动添加DNS服务器的地址。
[root@bogon named]# vim /etc/resolv.conf
# Generated by NetworkManager
#nameserver 8.8.8.8
#nameserver 114.114.114.114
nameserver 192.168.58.66
配置反向解析文件:
zone "58.168.192.in-addr.arpa" IN {
type master;
file "named.192.168.58";
};
创建反向区域文件:
[root@localhost named]# pwd
/var/named/chroot/var/named
[root@localhost named]# vim named.192.168.58 #在以上目录创建区域文件,注意区域文件的权限和所属主和所属组的改变。
[root@localhost named]# ll
total 16
-rw-r--r--. 1 root root 76 Dec 6 18:30 !
drwxrwxr-x. 2 root named 23 Dec 6 18:13 data
-rwxrwxr-x. 1 root named 350 Dec 6 22:18 named.192.168.58
-rwxrwxr-x. 1 root named 2253 Dec 6 16:58 named.ca
-rwxrwxr-x. 1 root named 514 Dec 6 21:53 xian.zone
配置区域文件:
@ IN SOA dns1.xian.com. test1.163.com. (
0
1D
1H
1W
3H )
IN NS dns1.xian.com.
66 IN PTR dns1.xian.com.
67 IN PTR dns2.xiann.com
68 IN PTR www.xian.com.
69 IN PTR dhcp.xian.com.
70 IN PTR mail.xian.com.
71 IN PTR ftp.xian.com.
72 IN PTR ntp.xian.com.
[root@localhost named]# systemctl restart named-chroot # 开启服务
[root@localhost named]# systemctl stop firewalld #关闭防火墙
[root@localhost named]# setenforce 0 #安全上下文置0
第一步:配置主服务器解析文件: /var/named/chroot/etc.named.conf
options {
listen-on port 53 { any; }; #添加从服务器ip地址
第二步:配置主服务器区域文件 (这里反向区域解析和正向解析同时配置)
这里在正向区域文件和反向区域文件添加以下命令:
IN NS salve.xian.com.
slave IN A 192.168.58.68
第三步:配置从服务器解析文件
注意:配置之前需要创建一个目录slaves(位置:/var/named/chroot/var/named),注意修改该文件所主和所属组。
zone "xian.com" IN {
type slave;
file "slaves/xian.zone";
masters {192.168.58.66; };
};
zone "58.168.192.in-addr.arpa" IN {
type slave;
file "slaves/named.192.168.58";
masters {192.168.58.66; };
};
注意:不需要创建 xian.zone 和 named.192.168.58这两个文件,当启动服务后在slaves目录中会自动生成这两个文件,因为这两个文件从服务器是从服务器通过主服务器的得到的文件
第四步:验证配置
注意:记得修改从服服务器 /etc/reslove.conf文件中的默认dns地址。
# Generated by NetworkManager
#search localdomain
#nameserver 192.168.58.2
nameserver 192.168.58.68 从服务器地址
第一步:修改主服务器区域配置文件
@ IN SOA dns1.xian.com. test1.163.com. (
10 #主服务器比从服务器数值大
1D #数值越小更新越快
1H
1W
3H )
IN NS salve.xian.com.
slave IN A 192.168.58.68
IN NS dns1.xian.com.
66 IN PTR dns1.xian.com.
67 IN PTR dns2.xiann.com
68 IN PTR www.xian.com.
69 IN PTR dhcp.xian.com.
70 IN PTR mail.xian.com.
71 IN PTR ftp.xian.com.
#72 IN PTR ntp.xian.com.
重启服务
需要注意以下几点:1、序号需要比原序号大;2、更新频率可以改小一点,这样比较快看到实验结果3、需要写一条关于从服务器的NS和A记录,不然新增的数据有时能更新有时无法更新。
第二步:验证结果成功: 用从服务器访问dhcp服务器
注意:修改 vim /etc/resolv.conf 配置文件
# Generated by NetworkManager
#search localdomain
#nameserver 192.168.58.2
nameserver 192.168.58.66 #主服务器地址
第一步:配置区域文件: 这里正向区域文件和反向区域文件同时配置
正向区域文件:
$GENERATE 10-20 $.xian.com. IN A 192.168.58.$
反向区域文件:
$GENERATE 10-20 $ IN PTR $.xian.com
第一步:配置解析文件
view "beijing" {
match-clients {192.168.58.73;};
#recursion yes;
zone "." IN{
type hint;
file "named.ca";
};
zone "beijing.com" IN{
type master;
file "beijing.zone";
注意:这里的配置必须在必须在view里面。
第二步:配置区域文件
创建解析文件中对应的区域文件;这里创建: beijing.zone 文件
注意:修改该文件的权限以及所属主和所属组。
[root@localhost named]# ll
total 20
-rw-r--r--. 1 root root 76 Dec 6 18:30 !
-rwxrwxr-x. 1 root named 330 Dec 30 09:33 beijing.zone
drwxrwxr-x. 2 root named 23 Dec 6 18:13 data
-rwxrwxr-x. 1 root named 467 Dec 27 22:20 named.192.168.58
-rwxrwxr-x. 1 root named 2253 Dec 6 16:58 named.ca
-rwxrwxr-x. 1 root named 580 Dec 29 10:39 xian.zone
配置区域文件:
@ IN SOA dns1.beijing.com. test1.163.com (
3
1D
1H
1W
3H )
IN NS dns1.beijing.com.
IN MX 10 mail.beijing.com.
dns1 IN A 192.168.58.66
www IN A 192.168.58.67