DNS配制详述
名称服务器必须要有两类文件:
-
一类是区域数据文件,保存着域名和IP的对应关系
- db.DOMAIN: 将主机名映射到地址的文件
- db.ADDR: 将地址映射到主机名
- db.cache: Root提示数据
- db.127.0.0: 环回地址
-
第二类是配置文件,将所有数据区域文件绑定在一起
区域数据文件格式对于所有的DNS实现都是一样的,它被称为主文件格式;配置文件格式只与名称服务器的实现(这里指BIND)有关。
区域数据文件
区域数据文件的大部分条目被称为DNS资源记录(DNS resource record)
资源记录:Resource Record,RR
记录类型:A,AAAA,PTR,SOA,NS,CNAME,MX
- SOA: Start Of Authority,指明该区域的权威
- NS: NameServer,列出该区域的名称服务器
- A: internet Address,作用是FQDN(完全限定域名)->IP
- AAAA: FQDN -> IPv6
- PTR: point-to-record,逆向DNS记录,IP-> FQDN
- CNAME: Canonical Name,别名记录
- MX: Mail Exchanger,邮件交换器
- TXT: 对域名标识或说明,做验证记录时使用此项,如SPF(发垃圾邮件)记录,https验证等。
为了更好解释,假设一个场景:要建立一个cs.edu区域,我们有一个DNS服务器,2个客户机
网络号为192.168.125.38/24
DNS的IP
192.168.125.38
主机的IP
* 192.168.125.8 IOT.cs.edu IOT
* 192.168.125.28 AI.cs.edu AI
资源记录的格式
name [TTL] IN rr_type value
图示的db.cs.edu文件可以写为
$TTL 86400
; SOA记录
cs.edu. IN SOA ns1.cs.edu. admin.cs.edu (
20241006 ; 序列号/版本号
3h ; 刷新时间
10M ; 重试时间
1W ; 过期时间
1D ; 否定答案的TTL值
)
; NS记录
cs.edu. IN NS ns1
cs.edu. IN NS IOT
; A记录
ns1.cs.edu. IN A 192.168.125.38
IOT IN A 192.168.125.8
AI IN A 192.168.125.28
* IN A 192.168.125.28 ; 泛域名
@ IN A 192.168.125.28 ; 直接查询cs.edu也可以访问
; CNAME记录,别名
Internet-of-Things.cs.edu. IN CNAME IOT.cs.edu.
Artificial-Intelligence.cs.edu. IN CNAME AI.cs.edu.
SOA中记录解释
cs.edu. : 当前的区域
IN : Internet,一种数据类
SOA : 资源记录类型
ns1.cs.edu. : 当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字
admin.cs.edu. : 当前区域管理员的邮箱地址,如admin@cs.edu,因为@是特殊字符,所以用.来代替
括号里面的数据:
为防止主服务器单点失败,需要备用服务器,从主服务器(推,拉)数据,达到数据一致。
· 推:主服务器变化,告诉从服务器
· 拉:从服务器从主服务器拉数据,
括号中的第二个参数为拉的时间间隔(如果版本号变化,从服务器拉取数据),第三个参数是拉取失败,多久重试一次,第四个数据是从服务器多久拉取失败,从服务器数据失效,第五个数据是不存在记录的缓存有效期。
简写
- 当前区域 cs.edu. 可以简写为 @
- ns1.cs.edu. 可以简写为 ns1,只要后面没有点,自动补全区域后缀cs.edu
编写区域数据文件
我们将38号虚拟机作为nameserver,就需要在其中加入区域的域名IP对应表。
ubuntu2204中我下载的bind9,他的配置文件在/etc/bind目录下。其中db.*是区域数据文件,named.conf.*是配置文件
建立自己的区域:
可以先复制现成的模版db.local
cp -p db.local db.cs.edu
修改内容
用named-checkzone来检验区域数据库文件格式
named-checkzone cs.edu /etc/bind/db.cs.edu
编写配置文件
bind9新版本中,配置文件
vim /etc/bind/named.conf.default-zones
增加下面的区域内容
用named-checkconf来检验配置文件是否有语法错误
named-checkconf
重新运行bind服务
区域数据文件和配置文件都格式正确后,运行
rndc reload
实验二
第一步:在28号上开启web服务
ubuntu开启web服务
- 安装Apache2:
sudo apt install apache2
- 启动Apache2服务
sudo systemctl start apache2
可以根据 ss -ntul 查看tcp80端口开放 - 修改页面内容
echo AI.cs.edu On 192.168.125.28 > /var/www/html/index.html
检查web页面是否可以正确加载
curl 192.168.125.28
结果如图所示:
如果正确访问到28号虚拟机,也就是正确访问到AI.cs.edu,那控制台就会返AI.cs.edu On 192.168.125.28
第二步:访问AI.cs.edu
28号虚拟机上运行的是AI.cs.edu,他的域名和IP对应关系只有38号虚拟机知道。如果其他客户机通过38号获得了28号IP与域名对应关系,那说明38号nameserver实现了DNS解析。
我们用192.168.125.8虚拟机来检验,首先让他的DNS为192.168.125.38
vim /etc/netplan/00-installer-config.yaml
修改配置文件
查看8号虚拟机的DNS
好啦,现在只要在8号虚拟机上ping一下AI.cs.edu,能ping通说明38号DNS完成解析。
访问一下AI.cs.edu
可以看到28号虚拟机上的网页被成功访问!
还有其他专业的查找IP方法
host AI.cs.edu 或 dig AI.cs.edu 或 nslookup AI.cs.edu
恭喜实验二完成~