Linux网络DNS域名如何解析服务
作者:活老鬼
详解DNS系统的作用、分布式数据结构、系统类型、查询类型及原理,介绍如何配置DNS正向解析,包括环境搭建、修改配置文件、启动服务等
一、DNS概述
1.DNS系统的作用
- 正向解析:根据域名查找对应的IP地址
- 反向解析:根据IP地址查找对应的域名
- DNS使用端口:DNS服务器使用TCP和UDP的53端口,TCP的53端口用于连接DNS服务器,UDP的53端口用于解析DNS
- DNS域名长度限制:每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符
2.DNS系统的分布式数据结构
以www.csdn.com.cn.为例
- 根域:为".",在域名的最后
- 顶级域:.cn
- 二级域:.com.cn
- 子域:.csdn.com.cn
- 主机名或三级域名:www
3.DNS系统类型
缓存域名服务器:
- 也称DNS高速缓存服务器
- 通过向其他域名服务器查询获得域名(IP地址记录)
- 将域名查询结果缓存到本地,提高重复查询时的速度
主域名服务器:
- 特定DNS区域的权威服务器,具有唯一性
- 负责维护该区域内所有域名(IP地址的映射记录)
- 需要自行建立所负责区域的地址数据文件
从域名服务器:
- 也成为辅助域名服务器,是对主域名服务器的热备份
- 其维护的域名,IP地址记录来源于主域名服务器
- 需要从主域名服务器自动同步区域地址数据库
4.DNS查询类型及原理
- 递归查询:发送解析请求后,由根域服务器进行子域的逐级查询,最后由根域服务器返回结果
- 迭代查询:由客户端逐级与各域服务器进行查询与返回结果
5.DNS正向解析查询原理过程
- 先查本机的缓存记录
- 查询hosts文件(优先级最高)
- 查询dns域名服务器,交给dns域名武器处理以上过程称为递归查询
- 这个dns服务器可能是本地域名服务器,也有个缓存, 如果有直接返回结果,如果没有则进行下一步
- 求助根域服务器,根域服务器返回可能会知道结果的顶级域服务器让他去找顶域服务器
- 求助顶级域服务器,顶级域服务器返回可能会返回知道结果的二级域服务器让他去找二级域服务器
- 求助二级域服务器,二级域服务器查询发现是我的主机,把查询到的ip地址返回给本地域名服务器
- 本地域名服务器将结果记录到缓存,然后把和域名和ip的对应关系返回给客户端
二、DNS配置实例
1.DNS正向解析配置
1.1 实验环境
- CentOS 7 DNS服务端:防火墙关闭,与客户端在同一网段
- Windows 10 客户端:防火墙关闭,网关(为了方便)指向于CentOS 7服务端,DNS指向DNS服务端,与服务端在同一网段
- 安装bind软件包
1.2 操作步骤
1.修改主要配置文件
vim /etc/named.conf options { listen-on port 53 { 20.0.0.13; }; #●监听53端口,ip地址使用提供服务的本地IP,也可用any表示所有 #listen-on-v6 port 53 { ::1; }; #ipv6行如不使用可以注释掉或者删除 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 { any; }; #● 允许使用本DNS解析服务的网段,也可用any代表所有 } ...... zone "." IN {#正向解析“."根区域 type hint;#类型为根区域 file "named.ca";#区域数据文件为named.ca,#记录了13台根域服务器的域名和IP地址等信息 }; include "/etc/named.rfc1912.zones"; #包含区域配置文件里的所有配置
2.修改区域配置文件,添加正向区域配置
vi /etc/named.rfc1912.zones ...... zone "laotan.com" IN { #正向解析"laotan.com"区域 type master; #类型为主区域 file "laotan.com.zone"; #指定区域数据文件为laotan.com.zone allow-update { none; }; };
3.配置正向区域数据文件
cd /var/named/ cp -p named.localhost laotan.com.zone #保留源文件的权限和属主的属性复制 vi /var/named/laotan.com.zone ...... $TTL 1D #有效解析记录的生存周期 @ in SOA laotan.com. admin.benet.com. ( #"@"符号表示当前的DNS区域名 0 ; serial #更新序列号,可以是10位以内的整数 1D ; refresh #刷新时间,重新下载地址数据的间隔 1H ; retry #重试延时,下载失败后的重试间隔 1W ; expire #失效时间,超过该时间仍无法下载则放弃# 3H) ; minimum #无效解析记录的生存周期, NS laotan.com. #记录当前区域的DNS服务器的名称 A 192.168.80.10 #机IP地址 IN MX 10 mail.benet.com #MX为邮件交换记录,数字越大优先级越低 www IN A 192.168.80.10 #记录正向解析www.benet.com对应的IP mail IN A 192.168.80.11 #MX为邮件交换记录,数字越大优先级低 ftp IN CNAME www #CNAME使用别名,ftp是www的别名 * IN A 192.168.80.100 #泛域名解析,"*"代表任意主机名 #"@"这里是一个变量,当前DNS区域名 #SOA记录中的更新序列号用于同步主、从服务器的区域数据,当从服务器判断区域更新时,若发现主服务器中的序列号与本地区域数据中的序列号相同,则不会进行下载。 # "laotan.com. "此为完全合格域名(FQDN) ,后面有个"."不能漏掉 #"admin.benet.com."表示管理员邮箱,这里的"@"符号已有其他含义,所以用"."代替 #IN 表示internet
4.启动服务
systemctl start named #启动服务 #如果服务启动失败,可以查看日志文件来排查错误 tail -f /var/log/messages #如果服务卡住,可以执行下面命令解决 rndc-confgen -r /dev/urandom -a #对域名语法进行排查 named-checkconf -z /etc/named.conf
5.在Windows 10客户端中配置网络
6.测试DNS解析
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。