Linux之DNS服务器

一、DNS 简介

  1. 定义与作用:DNS(Domain Name System)是互联网上的一项服务,作为将域名和 IP 地址相互映射的分布式数据库,使人更方便地访问互联网。使用 53 端口,通常以 UDP 查询,未查到完整信息时用 TCP 重新查询。
  2. 因特网的域名结构
    • 国家顶级域名:采用 ISO3166 规定,如 cn、us、uk 等,记为 ccTLD。
    • 通用顶级域名:有 com、net、org、int、gov、mil 等。
    • 基础结构域名:只有 arpa,用于反向域名解析。

二、域名服务器的类型划分

  1. 根域名服务器:最高层次,最重要。知道所有顶级域名服务器的域名和 IP 地址,若本地域名服务器无法解析,先求助根域名服务器。全球有 13 个根服务器,美国占多数,"雪人计划"形成了 13 台原有根加 25 台 IPv6 根的新格局,中国部署了 4 台。
  2. 顶级域名服务器:负责管理在该顶级域名服务器注册的二级域名。
  3. 权限域名服务器:负责一个"区"的域名服务器。
  4. 本地域名服务器:对域名系统非常重要,当主机发出 DNS 查询请求时,报文发送给本地域名服务器。
  5. 主从 DNS 服务器:主 DNS 服务器负责解析至少一个域,辅助域名服务器辅助主服务器,当主服务器故障时保证查询工作不中断,数据复制由主到从,更改数据只能在主服务器进行。
  6. 缓存 DNS 服务器:不负责解析域,只缓存域名解析结果。

三、DNS 域名解析的过程

  1. 先检查本地 hosts 文件是否有网址映射关系,有则调用完成解析。
  2. 若 hosts 没有,查找本地 DNS 解析器缓存,有则返回完成解析。
  3. 若前两者都没有,找首选 DNS 服务器(本地 DNS 服务器),若该服务器区域解析有结果则返回,完成解析;若已缓存网址映射关系也可完成解析。
  4. 若本地 DNS 服务器本地区域文件与缓存解析都失效,未用转发模式则向 13 台根 DNS 服务器请求,根服务器返回负责该顶级域名服务器的 IP,本地服务器继续联系,直至找到目标主机;若用转发模式则转发至上一级 DNS 服务器,循环查询。
  5. 从客户端到本地 DNS 服务器是递归查询,DNS 服务器之间是迭代查询。114.114.114.114 是国内常用 DNS,解析成功率高、速度快稳定;8.8.8.8 是谷歌提供的全球通用 DNS,更适合国外及访问国外网站用户。

四、DNS 服务器配置

复制代码
提供DNS服务的软件叫bind,服务名是named。
[root@localhost ~]# yum install bind -y
[root@localhost ~]# rpm -ql bind
/etc/named.conf # bind主配置文件
/var/named/slaves # 从dns服务器文件夹
[root@localhost ~]# vim /etc/named.conf
options {
    #定义监听端口,如果所有地址都监听,则只写端口
    listen-on port 53 { 127.0.0.1; };
    listen-on-v6 port 53 { ::1; };
    #定义数据文件目录
    directory "/var/named";
    #只允许本地主机进行查询
    allow-query { localhost; };
};
#定义区域
zone "." IN {
    type hint;
    file "named.ca";
};

实验 1:配置 DNS 正向解析

复制代码
[root@localhost ~]# vim /etc/named.conf主配置文件
options {  
	#监听端口为53,大括号内数据内容可以为any
	listen-on port 53 { 192.168.121.10; }; 
	directory       "/var/named";
};
zone "baidu.com" IN {                  
	        type master;              
	        file "named.baidu.com";
};  

正向解析文件资源记录(Resource Record,RR),常见的正解文件RR相关信息:

domain IN RR type RR data
主机名. IN A IPv4的IP地址
主机名. IN AAAA IPv6的IP地址
域名. IN NS 管理这个域名的服务器主机名字,即由哪一台主机去解析当 前所定义的域主机
域名. IN SOA起始授 权记录 管理这个域名的七个重要参数
域名. IN MX 顺序数字,接收邮件的服务器主机名字
主机别 名. IN CNAME 实际代表这个主机别名的主机名字

SOA主要是与区域有关,所以domain要写域名。而SOA后面会接七个参数,这七个参数的意义如下:

  • Master DNS服务器主机名:这个区域主要是哪台DNS作为Master的意思。
  • 管理员的Email,发生问题可以联系这个管理员。由于@在数据库文件中有特殊含义,所以将用"."代替@
  • 序号(Serial),这个序号代表的是这个数数据库文件的新旧,序号越大代表越新。所以当你更改了数据库内容时,需要将这个数值放大。
  • 更新频率(Refresh)定义slave多久向Master要求数据更新。
  • 失败重新尝试时间(Retry),如果Slave无法对Master实现连接,那么在多长时间内,Slave会尝试重新连接到Master。
  • 失效时间(Expire),如果一直尝试失败,持续连接到达这个设置值时限,那么Slave将不再继续尝试连接,并且尝试删除这份下载的zone file信息。
  • 缓存时间(Minumum TTL),如果这个数据库zone file中,每条记录都没有写到TTL缓存时间的话,那么就以这个SOA的设置值为主。ttl的意思是当这笔记录被其他DNS服务器查询到后,这个记录会在对方DNS服务器的缓存中,保持多久时间。如果写了$TTL,则以该值为准。

时间单位:M(分钟),H(小时),D(天),W(周),默认是秒

复制代码
[root@localhost ~]# vim /var/named/named.baidu.com
$TTL 1D
@ IN SOA @ admin.baidu.com. ( 0 1D 1H 1W 3H )
 IN NS ns.baidu.com. 
 IN MX 10 mail.baidu.com.
ns IN A 192.168.121.10
mail IN A 192.168.121.10
www IN A 192.168.121.10
ftp IN CNAME www
[root@localhost ~]# systemctl restart named
[root@localhost ~]# systemctl disable firewalld --now
[root@webserver ~]# setenforce 0

#客户端测试
host [-a] FQDN [server]
nslookup [FQDN] [server]
dig [options] FQDN [@server]
 options:+trace代表从.开始追踪;-t type查询的数据主要有MX、NS、SOA、A等类型;-x查
询反解信
息
[root@localhost ~]# host www.baidu.com 192.168.121.10
[root@localhost ~]# nslookup www.baidu.com 192.168.121.10
[root@localhost ~]# dig -t A www.baidu.com @192.168.121.10

实验 2:反向解析

复制代码
[root@localhost ~]# vim /etc/named.conf
zone "121.168.192.in-addr.arpa" IN { 
    type master;
    file "named.192.168.121";
};
#反向区域文件
[root@localhost ~]# vim /var/named/named.192.168.121
$TTL 1D
@ IN SOA ns.baidu.com. admin.baidu.com. ( 0 1D 1H 1W 3H )
	IN NS ns.baidu.com.
10 IN PTR ns.baidu.com.
10 IN PTR www.baidu.com.
10 IN PTR mail.baidu.com.
10 IN PTR ftp.baidu.com.
#反解需要注意:主机名尽量使用完整的FQDN,即要写上"."

#客户端测试
[root@localhost ~]# host 192.168.121.10 192.168.121.10
[root@localhost ~]# nslookup 192.168.121.10 192.168.121.10
[root@localhost ~]# dig -x 192.168.121.10  @192.168.121.10

实验 3:主从 DNS 服务器

  • 完全区域传送:主服务器配置允许区域传送并设置从服务器 IP,编辑区域文件并添加从服务器信息;从服务器安装 bind,配置区域为 slave 类型并指定主服务器 IP 和文件存储位置,重启服务后进行测试。

  • 增量区域传送:修改主服务器区域配置文件,增大序号并添加新记录,重启服务。

    #主DNS服务器的配置【主dns服务器的ip地址为192.168.121.10】
    [root@localhost ~]# vim /etc/named.conf
    options {
    listen-on port 53 { 192.168.121.10; };
    directory "/var/named";
    allow-transfer { 192.168.121.11; };
    };
    zone "baidu.com" IN {
    type master;
    file "named.baidu.com";
    };
    [root@localhost ~]# vim /var/named/named.baidu.com
    $TTL 1D
    @ IN SOA @ admin.baidu.com. ( 0 1D 1H 1W 3H )
    IN NS ns.baidu.com.
    IN MX 10 mail.baidu.com.
    ns IN A 192.168.121.10
    slave IN A 192.168.121.11
    mail IN A 192.168.121.10
    www IN A 192.168.121.10
    ftp IN CNAME www
    [root@localhost ~]# systemct restart named
    #从DNS服务器的配置【从dns服务器的ip地址为192.168.121.11】
    [root@localhost ~]# yum install bind -y
    [root@localhost ~]# vim /etc/named.conf
    options {
    listen-on port 53 { 192.168.121.10; };
    directory "/var/named";
    };
    zone "baidu.com" IN {
    type slave;
    file "slaves/named.baidu.com";
    masters {192.168.121.10;};
    };
    [root@localhost ~]# systemctl restart named
    #测试
    [root@localhost ~]# host www.baidu.com 192.168.121.11

复制代码
#修改主服务器的区域配置文件,序号比之前的序号大【注:区域文件里面必须要写从服务器的NS和A记
录】
#主DNS服务器的配置【主dns服务器的ip地址为192.168.121.10】
[root@localhost ~]# vim /var/named/named.baidu.com
$TTL 1D 
@ IN SOA @ admin.baidu.com. ( 1 1D 1H 1W 3H )
 IN NS ns.baidu.com. 
 IN NS slave.baidu.com.
 IN MX 10 mail.baidu.com. 
ns IN A 192.168.121.10
slave IN A 192.168.121.11
mail IN A 192.168.121.10
www IN A 192.168.121.10
ftp IN CNAME www
www1 IN CNAME www
[root@localhost ~]# systemct restart named
相关推荐
xuanzdhc1 小时前
Linux 基础IO
linux·运维·服务器
愚润求学1 小时前
【Linux】网络基础
linux·运维·网络
bantinghy2 小时前
Linux进程单例模式运行
linux·服务器·单例模式
小和尚同志3 小时前
29.4k!使用 1Panel 来管理你的服务器吧
linux·运维
帽儿山的枪手3 小时前
为什么Linux需要3种NAT地址转换?一探究竟
linux·网络协议·安全
shadon1789 天前
回答 如何通过inode client的SSLVPN登录之后,访问需要通过域名才能打开的服务
linux
AWS官方合作商9 天前
AWS ACM 重磅上线:公有 SSL/TLS 证书现可导出,突破 AWS 边界! (突出新功能的重要性和突破性)
服务器·https·ssl·aws
小米里的大麦9 天前
014 Linux 2.6内核进程调度队列(了解)
linux·运维·驱动开发
程序员的世界你不懂9 天前
Appium+python自动化(三十)yaml配置数据隔离
运维·appium·自动化
算法练习生9 天前
Linux文件元信息完全指南:权限、链接与时间属性
linux·运维·服务器