前言:本章主要学习DNS的概念,基本原理,配置域名和相关实验
一、什么是DNS?
DNS (Domain Name Service,域名服务 ) ,是Internet中比较基础且重要的一项服务,它提供了网络访问中的域名和IP地址的相互转换。
DNS服务对于互联网的稳定性至关重要,它将域名解析为IP地址,实现网络资源定位。
二、域名空间结构
DNS是一个分布式数据库,命名系统采用层次的逻辑结构,逻辑结构如同一棵树,采用树形结构为域名空间,各分支机构构成了DNS的信息。
例如:
域名空间:www.baidu.com
顶级域:com
二级域:baidu
主机名:www
三、DNS服务器类型
- 主域名服务器(Primary DNS Server)
- 负责维护特定区域(Zone)的域名信息,是该区域内域名数据的权威来源。
- 管理员在主域名服务器上直接进行域名记录的添加、修改和删除等操作,这些操作会被记录在本地的区域文件中。
- 当客户端发起域名查询请求时,主域名服务器会根据本地存储的域名信息进行响应。
- 从域名服务器(Secondary DNS Server)
- 从主域名服务器复制域名信息,作为主域名服务器的备份。
- 定期与主域名服务器进行数据同步,以确保其保存的域名信息与主域名服务器一致。
- 当主域名服务器出现故障时,从域名服务器可以接替主域名服务器的工作,继续为客户端提供域名解析服务,从而提高了DNS系统的可靠性和容错能力。
- 缓存域名服务器(Caching DNS Server)
- 本身并不维护任何域名区域的权威数据,主要功能是缓存先前查询过的域名解析结果。
- 当客户端向缓存域名服务器发起域名查询请求时,它首先会检查本地缓存中是否有对应的解析记录。如果有,则直接返回缓存中的结果,从而加快域名解析速度;如果没有,则会向其他权威域名服务器发送查询请求,并在收到响应后将结果缓存起来,以便下次有相同查询时可以直接使用。
四、查询方式
递归:客户端只发一次请求,要求对方给出最终结果。
迭代:客户端发出一次请求,对方如果没有授权回答,它就会返回一个能解答这个查询的其它名称服务器列表,
客户端会再向返回的列表中发出请求,直到找到最终负责所查域名的名称服务器,从它得到最终结果。
授权回答:向dns服务器查询一个域名,刚好这个域名是本服务器负责,返回的结果就是授权回答。
五、缓存机制
为了提升域名查询效率,设计了域名缓存机制,当访问过某个网站并得到其IP后,会将其域名和IP缓存下来,下一次访问的时候,就不需要再请求域名服务器获取IP,直接使用缓存中的IP,提高了响应的速度。当然缓存是有有效时间(即TTL值)的,当过了有效时间后,再次请求网站,还是需要先请求域名解析。
六、DNS服务的配置文件
配置文件 | 存放位置 |
---|---|
主配置文件 | /etc/named.conf |
区域配置文件 | /etc/named.rfc.1912.zones |
数据文件 | /var/named/ |
客户机配置文件 | /etc/resolv.conf |
正向解析文件 | /var/named/named.localhost |
反向解析文件 | /var/named/named.empty |
七、如何搭建DNS服务?
服务器规划:
服务器 | IP地址 |
---|---|
DNS服务器 | 192.168.91.128/24 |
客户端 | 192.168.168.91.129/24 |
操作系统:red hat 9.5
网卡环境:
vim /etc/NetworkManager/system-connections/ens160.nmconnection
[ipv4]
address1=192.168.91.128/24 #配置静态IP
dns1=192.168.91.128
method=manual
nmcli connection reload ens160 #重载网卡
关闭防火墙:服务端和客户端都要关闭
systemctl stop firewalld
setenforce 0
iptables -F
服务端配置
第一步:安装DNS服务
yum -y install bind
第二步:配置主配置文件
vim /etc/named.conf
options {
listen-on port 53 {192.168.91.128;}; #ipv4监听端口和地址
allow-query {192.168.91.0/24;}; #允许使用的网段
}
第三步:配置区域配置文件
vim /etc/named.rfc1912.zones
zone "bdqn.com" IN {
type master;
file "bdqn.localhost";
allow-update { none; };
};
zone ".168.192.in-addr.arpa" IN {
type master;
file "bdqn.empty";
allow-update { none; };
};
第四步:配置数据文件
cd /var/named/
cp -p named.localhost bdqn.localhost
cp -p named.empty bdqn.empty
第五步:配置正向解析文件
vim bdqn.localhost
$TTL 1D
@ IN SOA bdqn.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.bdqn.com.
dns A 192.168.91.128
第六步:配置反向解析文件
vim bdqn.empty
$TTL 3H
@ IN SOA bdqn.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.bdqn.com.
128 PTR dns.bdqn.com.
第七步:配置客户机配置文件
vim /etc/resolv.conf
nameserver=192.168.91.128
第八步:启动服务
systemctl start named
客户端配置
网卡环境
vim /etc/NetworkManager/system-connections/ens160.nmconnection
[ipv4]
address1=192.168.91.129/24
dns=192.168.91.128;
method=manual
nmcli connection reload ens160
第一步:配置服务器文件
vim /etc/resolv.conf
nameserver 192.168.91.128
第二步:解析域名
nslookup www.bdqn.com #反向解析
Server: 192.168.91.128
Address: 192.168.91.128#53
Name: www.bdqn.com
Address: 192.168.91.128
nslookup 192.168.91.128 #正向解析
128.91.168.192.in-addr.arpa name = dns.bdqn.com.
八、DNS实验
实验一:主从DNS服务器实现跨网段实现域名解析
服务器规划:
角色 | IP地址 | 网卡模式 |
---|---|---|
主DNS服务器 | 192.168.91.128/24 | 仅主机模式 |
从DNS服务器 | 192.168.91.129/24 | 仅主机模式 |
客户端 | 192.168.91.130/24 | 仅主机模式 |
准备工作:
步骤一:关闭防火墙
systemctl stop firewalld
setenforce 0
iptables -F
步骤二:配置网卡
vim /etc/NetworkManager/system-connections/ens160.nmconnection
[ipv4]
address1=192.168.91.128/24 #配置静态IP
dns1=192.168.91.128
method=manual
nmcli connection reload ens160 #重载网卡
步骤三:安装DNS服务器
rpm -q bind
yum -y install bind
主服务器:
步骤一:编辑主配置文件
vim /etc/named.conf
liten -on port 53 { 192.168.91.128; };
allow-query { 192.168.91.0/24; }
allow-transfer { 192.168.91.129; } #从服务器IP地址
步骤二:编辑区域配置文件
vim /etc/named.rfc1912.zones
zone "lc160.com" IN {
type master;
file "lc160.localhost";
allow-update { none; };
};
zone "91.168.192.in-addr.arpa" IN { #声明91网段
type master;
file "lc160.empty";
allow-update { none; };
};
zone "100.168.192.in-addr.arpa" IN { #声明100网段
type master;
file "lc160.empty2";
allow-update { none; };
};
步骤三:配置数据文件
cp -p named.localhost lc160.localhost
cp -p named.empty lc160.empty
cp -p named.empty lc160.empty2
vim lc160.lcoalhost
.$TTL 1D
@ IN SOA lc160.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS www.lc160.com.
www A 192.168.91.128 #解析不同网段
dns A 192.168.100.128
vim lc160.empty
TTL 3H
@ IN SOA lc160.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS lc160.com.
128 PTR www.lc160.com.
vim lc160.empty2
$TTL 3H
@ IN SOA lc160.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS lc160.com.
128 PTR dns.lc160.com.
步骤四:检查语法错误
named-checkconf -z
journalctl -xe 查看日志
步骤五:启动服务
systemctl start named
从服务器:
步骤一:安装DNS
dnf -y install bind
步骤二:修改区域配置文件
vim /etc/named.rfc1912.zones
zone "lc160.com" IN {
type slave;
file "slave/lc160.localhost";
masters {192.168.91.128;};
};
zone "91.168.192.in-addr.arpa" IN { #声明91网段
type slave;
file "slave/lc160.empty";
masters {192.168.91.128;};
};
zone "100.168.192.in-addr.arpa" IN { #声明100网段
type slave;
file "slave/lc160.empty2";
masters {192.168.91.128;};
};
步骤三:启动从DNS服务
systemctl start named
客户端:
步骤一:反向解析
nslookup www.lc160.com
server: 192.168.91.128
Address: 192.168.91.128#53
Name: www.lc160.com
Address: 192.168.91.128
nslookup dns.lc160.com
server: 192.168.91.128
Address: 192.168.91.128#53
Name: dns.lc160.com
Address: 192.168.100.128
步骤二:正向解析
nslookup 192.168.91.128
128.91.168.192.in-addr.arpa name = www.lc160.com.
129.91.168.192.in-addr.arpa name = dns.lc160.com.
nslookup 192.168.100.128
128.100.168.192.in-addr.arpa name = www.lc160.com.
129.100.168.192.in-addr.arpa name = dns.lc160.com.