## 1. DNS域名解析服务
相较于IP地址,域名更容易被理解和记忆。DNS(Domain Name System,域名系统)技术是一项用于管理和解析域名与IP地址对应关系的技术,可以将域名解析为IP地址(正向解析),或将IP地址解析为域名(反向解析)。
域名后缀一般分为国际域名和国内域名。常见的域名后缀有 .com(商业组织)、.org(非营利组织)、.gov(政府部门)、.net(网络服务商)、.edu(教育机构)、.pub(公公大众)、.cn(中国国家顶级域名)。
为了为网民提供不间断、稳定且快速的域名查询服务,保证互联网的正常运转,提供了下面三种类型的服务器。
> **主服务器**:在特定区域内具有唯一性,负责维护该区域内的域名与IP地址之间的对应关系。
>
> **从服务器**:从主服务器中获得域名与IP地址的对应关系并进行维护,以防主服务器宕机等情况。
>
> **缓存服务器**:通过向其他域名解析服务器查询获得域名与IP地址的对应关系,并将经常查询的域名信息保存到服务器本地,以此来提高重复查询时的效率。
## 2. 安装Bind服务程序
建议大家在生产环境中安装部署bind服务程序时加上chroot(俗称牢笼机制)扩展包,以便有效地限制bind服务程序仅能对自身的配置文件进行操作,以确保整个服务器的安全。
``` bash
[root@localhost ~]# yum install -y bind-chroot
```
在bind服务程序中有下面这三个比较关键的文件。
> **主配置文件(/etc/named.conf)**:这些参数用来定义bind服务程序的运行。
>
> **区域配置文件(/etc/named.rfc1912.zones)**:用来保存域名和IP地址对应关系的所在位置。
>
> **数据配置文件目录(/var/named)**:该目录用来保存域名和IP地址真实对应关系的数据配置文件。
把主配置文件 listen-on port 53、allow-query 均修改为 **any**,分别表示服务器上的所有IP地址均可提供DNS域名解析服务,以及允许所有人对本服务器发送DNS查询请求。这两个地方一定要修改准确。
``` bash
[root@localhost ~]# vim /etc/named.conf
# 找到以下两处配置修改为 any
listen-on port 53 { any; };
allow-query { any; };
```
### 2.1 正向解析实验
正向解析是指根据域名找到对应的IP地址,这也是最常用的DNS工作模式。
**第1步**:编辑区域配置文件
``` bash
[root@localhost ~]# vim /etc/named.rfc1912.zones
# 添加到配置文件的最后面
# type:服务类型,有三种,分别为hint(根区域)、master(主区域)、slave(辅助区域),其中常用的master和slave指的就是主服务器和从服务器
# file:解析规则保存的文件位置
# allow-update:允许那些用户动态修改解析信息
zone "namedtest.com" IN {
type master;
file "namedtest.com.zone";
allow-update {none;};
};
```
**第2步**:编辑数据配置文件。从/var/named目录中复制一份正向解析的模板文件(named.localhost),然后把域名和IP地址的对应数据填写数据配置文件中并保存。
``` bash
[root@localhost ~]# cd /var/named/
[root@localhost named]# ls -al named.localhost
-rw-r-----. 1 root named 152 6月 21 2007 named.localhost
[root@localhost named]# cp -a named.localhost namedtest.com.zone
# 编辑数据配置文件
[root@localhost named]# vim namedtest.com.zone
$TTL 1D #生存周期为1天
@ IN SOA namedtest.com. root.namedtest.com. (
#授权信息开始: #DNS区域的地址 #域名管理员的邮箱(不要用@符号)
0 ; serial #更新序列号
1D ; refresh #更新时间
1H ; retry #重试延时
1W ; expire #失效时间
3H ) ; minimum #无效解析记录的缓存时间
NS ns.namedtest.com. #域名服务器记录
ns IN A 192.168.10.20 #地址记录(ns.linuxprobe.com.)
www IN A 192.168.10.20 #地址记录(www.linuxprobe.com.)
# 重启named服务程序
[root@localhost named]# systemctl restart named
```
**第3步**:检验解析结果。**修改网络配置的DNS地址为DNS服务器的IP地址**,这样就可以使用由本机提供的DNS查询服务了。
``` bash
# 使用 nslookup 查看解析结果
C:\Users\Duke>nslookup www.namedtest.com
服务器: UnKnown
Address: 192.168.10.10
名称: www.namedtest.com
Address: 192.168.10.20
```
### 2.2 反向解析实验
反向解析的作用是将用户提交的IP地址解析为对应的域名。
**第1步**:编辑区域配置文件。在定义zone(区域)时应该要把IP地址反写,比如原来是192.168.10.0,反写后应该就是10.168.192,而且只需写出IP地址的网络位即可。
``` bash
[root@localhost named]# vim /etc/named.rfc1912.zones
zone "10.168.10.in-addr.arpa" IN {
type master;
file "192.168.10.arpa";
allow-update {none;};
};
```
**第2步:** 编辑数据配置文件。
``` bash
[root@localhost named]# cp -a named.loopback 192.168.10.arpa
[root@localhost named]# vim 192.168.10.arpa
$TTL 1D
@ IN SOA namedtest.com. root.namedtest.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS ns.namedtest.com.
ns A 192.168.10.20
20 PTR ns.namedtest.com. #PTR为指针记录,仅用于反向解析中。
20 PTR www.namedtest.com.
30 PTR bbs.namedtest.com.
[root@localhost named]# systemctl restart named
```
**第3步**:检验解析结果。
``` bash
[root@localhost named]# nslookup 192.168.10.20
20.10.168.192.in-addr.arpa name = www.namedtest.com.
20.10.168.192.in-addr.arpa name = ns.namedtest.com.
[root@localhost named]# nslookup 192.168.10.30
30.10.168.192.in-addr.arpa name = bbs.namedtest.com.
```
## 3. 部署从服务器
从服务器可以从主服务器上获取指定的区域数据文件,从而起到备份解析记录与负载均衡的作用,因此通过部署从服务器可以减轻主服务器的负载压力,还可以提升用户的查询效率。
在本实验中,主服务器与从服务器分别使用的操作系统和IP地址。
主机名称|操作系统|IP地址
-----|-----|-----
主服务器|RHEL 8|192.168.10.10
从服务器|RHEL 8|192.168.10.11
**第1步**:在主服务器的区域配置文件中允许该从服务器的更新请求,即修改allow-update 参数。
``` bash
[root@localhost named]# vim /etc/named.rfc1912.zones
zone "namedtest.com" IN {
type master;
file "namedtest.com.zone";
allow-update {192.168.10.11;};
};
zone "10.168.192.in-addr.arpa" IN {
type master;
file "192.168.10.arpa";
allow-update {192.168.10.11;};
};
[root@localhost named]# systemctl restart named
```
**第2步**:在从服务器中填写主服务器的IP地址与要抓取的区域信息,然后重启服务。注意此时的服务类型应该是slave(从),而不再是master(主)。masters参数后面应该为主服务器的IP地址,而且file参数后面定义的是同步数据配置文件后要保存到的位置,稍后可以在该目录内看到同步的文件。
``` bash
[root@localhost ~]# vim /etc/named.rfc1912.zones
zone "namedtest.com" IN {
type slave;
masters { 192.168.10.10; };
file "slaves/namedtest.com.zone";
};
zone "10.168.192.in-addr.arpa" IN {
type slave;
masters { 192.168.10.10; };
file "slaves/192.168.10.arpa";
};
[root@localhost ~]# systemctl restart named
```
**第3步**:检验解析结果。当从服务器的DNS服务程序在重启后,一般就已经自动从主服务器上同步了数据配置文件,而且该文件默认会放置在区域配置文件中所定义的目录位置中。随后修改从服务器的网络参数,把DNS地址参数修改成192.168.10.11,这样即可使用从服务器自身提供的DNS域名解析服务。
``` bash
[root@localhost slaves]# nslookup www.namedtest.com
Server: 192.168.10.11
Address: 192.168.10.11#53
Name: www.namedtest.com
Address: 192.168.10.11
[root@localhost slaves]# nslookup 192.168.10.20
20.10.168.192.in-addr.arpa name = www.namedtest.com.
20.10.168.192.in-addr.arpa name = ns.namedtest.com.
```
Linux学习(十二)使用BIND提供域名解析服务