DNS 域名解析服务
鉴于互联网中的域名和IP地址对应关系数据库太过庞大,DNS域名解析服务采用了类似目录树的层次结构来记录域名与IP地址之间的对应关系,从而形成了一个分布式的数据库系统

DNS域名解析服务采用分布式的数据结构来存放海量的“区域数据”信息,在执行用户发起的域名查询请求时,具有递归查询和迭代查询两种方式。
- 主服务器:在特定区域内具有唯一性,负责维护该区域内的域名与IP地址之间的对应关系。
- 从服务器:从主服务器中获得域名与IP地址的对应关系并进行维护,以防主服务器宕机等情况。
- 缓存服务器:通过向其他域名解析服务器查询获得域名与IP地址的对应关系,并将经常查询的域名信息到服务器本地,以此来提高重复查询时的效率。


实际上用于根域名的服务器总共有504台,它们从A到M进行了排序,共用13个IP地址以此进行负载均衡,抵抗分布式拒绝服务攻击(DDoS)的影响。
下一代互联网国家工程中心于2013年联合日本和美国相关运营机构和专业人士发起“雪人计划”,提出以IPv6为基础、面向新兴应用、自主可控的一整套根服务器解决方案和技术体系,在全球完成25台IPv6根服务器架设。
安装Bind 服务程序
BIND(Berkeley Internet Name Domain,伯克利因特网名称域)服务是全球范围内使用最广泛、最安全可靠且高效的域名解析服务程序。DNS域名解析服务作为互联网基础设施服务,其责任之重可想而知,因此建议在生产环境中安装部署bind服务程序时加上chroot(俗称牢笼机制)扩展包,以便有效地限制bind服务程序仅能对自身的配置文件进行操作,以确保整个服务器的安全。
1 | dnf install bind-chroot |
bind 服务程序的关键文件:
主配置文件(/etc/named.conf):只有59行,而且在去除注释信息和空行之后,实际有效的参数仅有30行左右,这些参数用来定义bind服务程序的运行。区域配置文件(/etc/named.rfc1912.zones):用来保存域名和IP地址对应关系的所在位置。类似于图书的目录,对应着每个域和相应IP地址所在的具体位置,当需要查看或修改时,可根据这个位置找到相关文件。数据配置文件目录(/var/named):该目录用来保存域名和IP地址真实对应关系的数据配置文件。
在Linux系统中,bind服务程序的名称为named。首先需要在/etc目录中找到该服务程序的主配置文件,然后把第11行和第19行的地址均修改为any,分别表示服务器上的所有IP地址均可提供DNS域名解析服务,以及允许所有人对本服务器发送DNS查询请求。
1 | vi /etc/namd.conf |

bind服务程序的区域配置文件(/etc/named.rfc1912.zones)用来保存域名和IP地址对应关系的所在位置。在这个文件中,定义了域名与IP地址解析规则保存的文件位置以及服务类型等内容,而没有包含具体的域名、IP地址对应关系等信息。服务类型有三种,分别为hint(根区域)、master(主区域)、slave(辅助区域),其中常用的master和slave指的就是主服务器和从服务器。

named-checkconf命令和named-checkzone命令,分别检查主配置文件与数据配置文件中语法或参数的错误。

正向解析实验
正向解析是指根据域名(主机名)查找到对应的IP地址。
1 | vim /etc/named.rfc1913.zones |

1 | cd /var/named |

修改网卡DNS服务器地址

可以把主机的DNS地址也改成配置好的DNS服务器, 模拟一下其他设备访问DNS服务器
1 | firewall-cmd --add-service dns,http --perm |



反向解析实验
在DNS域名解析服务中,反向解析的作用是将用户提交的IP地址解析为对应的域名信息,它一般用于对某个IP地址上绑定的所有域名进行整体屏蔽,屏蔽由某些域名发送的垃圾邮件。它也可以针对某个IP地址进行反向解析,大致判断出有多少个网站运行在上面。当购买虚拟主机时,可以使用这一功能验证虚拟主机提供商是否有严重的超售问题。
- 编辑区域配置文件
1 | vi /etc/named.rfc1912.zones |

- 编辑数据配置文件
1 | cd /var/named |


部署从服务器
作为重要的互联网基础设施服务,保证DNS域名解析服务的正常运转至关重要,只有这样才能提供稳定、快速且不间断的域名查询服务。在DNS域名解析服务中,从服务器可以从主服务器上获取指定的区域数据文件,从而起到备份解析记录与负载均衡的作用,因此通过部署从服务器可以减轻主服务器的负载压力,还可以提升用户的查询效率。
- 在主服务器区域配置文件中允许从服务器的更新请求
1 | vi /etc/named.rfc1912.zones |

- 从服务器上安装 bind-chroot, 修改配置文件让从服务器对外提供dns服务
1 | dnf install bind-chroot |

- 编辑从服务器区域配置文件

1 | systemctl enable --now named |


安全的加密传输
互联网中的绝大多数DNS服务器(超过95%)是基于BIND域名解析服务搭建的,而bind服务程序为了提供安全的解析服务,已经对TSIG RFC 2845 加密机制提供了支持。TSIG主要是利用了密码编码的方式来保护区域信息的传输(Zone Transfer),即TSIG加密机制保证了DNS服务器之间传输域名区域信息的安全性。
- 在主服务器中生成密钥, dnssec-keygen 用于生成安全的dns密钥

1 | # dnssec-keygen -a HMAC-MD5 -b 128 -n HOST master-slave |
TSIG 传输签名的功能在 BIND 9.13.0 后已经被移到 tsig-keygen 命令中.
并且HMAC-MD5算法已被认为是不安全的,并且在BIND 9.11及更高版本中已被弃用。建议使用更安全的HMAC-SHA256或HMAC-SHA512算法。

- 生成密钥, 配置主配置文件
1 | cd /var/named/chroot/etc |

- 配置区域配置文件, 允许从服务器更新, 主服务器记得把网卡dns地址设置成自己
1 | vi /etc/named.rfc1912.zones |

- 配置从服务器
1 | rm -f /var/named/slaves/* |

1 | vi /etc/named.rfc1912.zones |

获取了新的dns信息
1 | cd /var/named/slaves/ |

部署缓存服务器
DNS缓存服务器(Caching DNS Server)是一种不负责域名数据维护的DNS服务器。简单来说,缓存服务器就是把用户经常使用到的域名与IP地址的解析记录保存在主机本地,从而提升下次解析的效率。DNS缓存服务器一般用于经常访问某些固定站点而且对这些网站的访问速度有较高要求的企业内网中,但实际的应用并不广泛。而且,缓存服务器是否可以成功解析还与指定的上级DNS服务器的允许策略有关.
VMware配置两块网卡, 仅主机模式, 和桥接模式, 模拟内网和外网.

1 | vi /etc/named.conf |
添加forwarders 参数, 上级DNS服务器地址

修改网卡DNS地址, 测试递归查询
1 | nmcli connection edit ens160 |

分离解析技术
分离解析技术(Split DNS)是一种用于在不同网络环境下实现不同域名解析结果的技术。
在分离解析技术中,将一个域名的解析结果分别指向不同的 IP 地址,这样在不同的网络环境中,同一个域名可能会解析出不同的 IP 地址。
觉得这个技术应用场景不是在国际互联网, 比如利用分离解析不同区域的DNS请求, 搭建分布式DNS服务器, 这些服务器之间数据同步, 不同网段来源的请求分别处理. 但如果一个地区的DNS 服务器能够独立的处理本地区所有的DNS请求, 那就完全不需要使用分离解析. 可以用在企业内部网络, 不同部门处于不同网络, 提供不同的解析结果. 还可以用来流量过滤, 比如把特定来源网络不予解析.
配置NAT和桥接两张网卡, 来自内网(192.168.128.0/24)和外网(192.168.116.0/24)的DNS请求分别将 test.site 解析到 vercel(76.76.21.61) 和 baidu(104.193.88.77)
1 | vi /etc/named.conf |
删除zone配置


1 | vi /etc/named.rfc1912.zones |

1 | cd /var/named |



其他
修改主机名
1 | hostname |
EPEL
添加EPEL(Extra Packages for Enterprise Linux)软件仓库,它提供了额外的软件包. EPEL软件仓库是由Fedora项目维护的,并通过与RHEL兼容的软件包提供额外的功能和软件包选择。
sudo dnf install cmatrix
1 | sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm |
vim设置
1 | vi ~/.vimrc |
VMware 网络NAT模式配置注意
一般启用 DHCP 会自动获取取IP地址, DNS服务器, 网关地址.
手动配的话, IP要在子网范围. 网关和DNS服务器都是虚拟路由器, 默认IP是网络号.2, 也可以在虚拟网络编辑器中修改.
TSIG
TSIG(Transaction Signature)是一种用于加密和验证DNS事务的机制。它提供了一种安全的方式来验证DNS通信的完整性和身份验证。
TSIG在DNS通信的两个主要实体之间使用共享密钥进行身份验证和消息完整性验证。这两个主要实体可以是DNS服务器之间的主从关系,也可以是DNS客户端与服务器之间的通信。
TSIG的工作原理如下:
-
DNS服务器和客户端之间协商使用的TSIG密钥。
-
在DNS通信的每个消息中,都包含一个加密的签名(signature),用于验证消息的完整性和身份验证。签名是使用共享的TSIG密钥和消息的内容计算生成的。
-
接收方使用相同的TSIG密钥和消息的内容来验证签名的有效性。如果签名验证成功,则可以确保消息的完整性和发送方的身份。
TSIG提供了一种简单而有效的方式来增加DNS通信的安全性。通过使用TSIG,可以防止DNS消息被篡改或伪造,同时确保消息来自授权的发送方。
TSIG还可以用于DNS区域传输(zone transfer)和动态更新(dynamic update)等操作中,以提供额外的安全性。
TSIG只提供了消息的完整性和身份验证,并不加密消息的内容。如果需要对DNS通信进行端到端加密,请考虑使用DNS over TLS(DoT)或DNS over HTTPS(DoH)等更高级的安全机制。
参考