12. 配置DNS服务

域名

域名(Domain Name)是互联网上用来识别和访问网站的一个易于记忆的名称。它是一个通过域名系统(DNS)将IP地址转换成人类可读形式的系统。每个域名都是独一无二的,用于标识互联网上的网站或网络服务。

域名通常由几个部分组成,用点(.)分隔,例如:

www.example.com.

在这个例子中:

  • www 是一个子域名,通常用于指向网站的主服务器。
  • example 是二级域名,是域名的核心部分,由域名注册者选择。
  • com 是顶级域名(TLD),表示该域名的类别或用途,如 .com 通常用于商业实体,.org 用于非营利组织,.net 用于网络服务提供商等。

域名注册需要通过域名注册机构(如 Verisign、GoDaddy、阿里云等)进行,注册后,用户可以通过域名访问对应的网站或服务。域名注册通常需要支付年费,以保持域名的所有权和使用权。

image-efdn.png

DNS服务

DNS就是Domain Name System的简称,即域名系统。

HOSTS文件

hosts 文件是一个操作系统用于将主机名映射到IP地址的文件。这个文件允许用户在不查询DNS服务器的情况下,直接通过主机名访问网络设备。hosts 文件通常用于本地网络解析,可以提高域名解析速度,也可以用于本地测试和开发。

功能

  1. 本地解析hosts 文件提供了一种快速解析主机名的方法,无需通过DNS服务器。
  2. 本地测试:在开发过程中,开发者可以通过修改 hosts文件来测试本地服务器。
  3. 广告拦截:用户可以通过将广告服务器的域名指向本地地址(如127.0.0.1)来阻止广告加载。
  4. 网络安全:在某些情况下,hosts 文件可以用来防止恶意软件通过修改DNS设置来重定向流量。

位置

  • Windows:通常位于 C:\Windows\System32\drivers\etc\hosts
  • macOS/Linux:通常位于 /etc/hosts

格式

hosts 文件的格式通常如下:

IP地址 域名
IP地址 别名1 别名2 ...

例如:

127.0.0.1       localhost
192.168.1.1     example.local    example

在这个例子中:

  • 127.0.0.1 是本地回环地址,通常用于指向本机。
  • 192.168.1.1 是一个局域网IP地址,example.localexample 是可以解析到这个IP地址的域名。

注意事项

  • 修改 hosts文件通常需要管理员或root权限。
  • 操作系统可能会缓存DNS解析结果,修改 hosts文件后可能需要清除DNS缓存才能生效。
  • 频繁修改 hosts文件可能会影响系统性能,因为它会跳过DNS解析过程。
  • 在某些情况下,修改 hosts文件可能会与系统的安全策略冲突。

hosts 文件是一个强大的工具,可以用于多种目的,但应该谨慎使用,以避免不必要的问题。

DNS服务的作用

DNS主要是将难于记忆的IP地址转换为域名,便于人们访问。

DNS服务器可以分为3种:主域名服务器、辅助域名服务器、缓存服务器。

  • 主域名服务器:本身提供DNS服务,本身含有区域数据文件
  • 辅助域名服务器:和Master一起提供DNS服务,当Master服务器上的配置信息修改的时候,会同步更新到Slave服务器上。
  • 缓存服务器:没有区域文件,只是帮助客户端向外部DNS请求查询,然后将查询的结果保存到它的缓存中。

正向查询与反向查询

在DNS(域名系统)中,正向查询和反向查询是两种基本的查询类型:

  1. 正向查询(Forward Lookup)

    • 正向查询是最常见的DNS查询类型,它用于将域名转换为IP地址。
    • 用户或客户端设备通常使用正向查询来访问网站或服务,例如,当你在浏览器中输入 www.example.com时,你的设备会进行一个正向查询,以获取与该域名关联的IP地址。
    • 正向查询的格式通常是:domain.com IN A,其中 IN表示查询的类型是Internet,A表示查询的是IPv4地址。
  2. 反向查询(Reverse Lookup)

    • 反向查询用于将IP地址转换为域名,这通常用于确定与特定IP地址关联的域名。
    • 反向查询可以用于验证IP地址的所有权,或者在安全审计中确定尝试连接到你的网络的设备的身份。
    • 反向查询的格式通常是:123.123.123.123 IN PTR,其中 PTR表示指针记录,用于查找与IP地址关联的域名。
    • 反向查询的结果通常是一个PTR记录,它指向一个域名,该域名通常以 .in-addr.arpa结尾(对于IPv4)或 .ip6.arpa结尾(对于IPv6)。

示例

  • 正向查询示例

    • 查询:www.example.com
    • 结果:93.184.216.34(这只是一个示例IP地址)
  • 反向查询示例

    • 查询:93.184.216.34
    • 结果:www.example.com

应用场景

  • 正向查询

    • 网站访问:用户访问网站时,浏览器需要将域名解析为IP地址。
    • 网络服务:应用程序连接到服务器时,需要将服务名称解析为IP地址。
  • 反向查询

    • 网络安全:确定尝试连接到你的网络的设备的域名,以识别潜在的威胁。
    • 邮件服务器验证:通过反向查询邮件服务器的IP地址,可以验证其域名所有权,这是发送邮件时防止被标记为垃圾邮件的一种方法。

正向查询和反向查询是DNS解析过程中的基础操作,它们在网络通信和安全中扮演着重要的角色。

DNS查询方式

DNS(域名系统)查询是用于将域名转换为IP地址的过程。DNS查询主要有两种方式:递归查询和迭代查询,这两种方式合称为两段式查询。

  1. 递归查询(Recursive Query)

    • 在递归查询中,客户端向DNS服务器发送一个查询请求,如果该DNS服务器不能直接回答查询请求,它会代替客户端去查询其他DNS服务器,直到找到答案或确定不存在答案。
    • 递归查询通常由本地DNS服务器(也称为递归DNS解析器)处理
    • 用户的设备(如电脑、手机等)通常会将DNS查询发送到本地DNS服务器,然后由本地DNS服务器完成递归查询过程。
  2. 迭代查询(Iterative Query)

    • 在迭代查询中,客户端向DNS服务器发送一个查询请求,如果该DNS服务器不能直接回答查询请求,它会向客户端提供一个指向另一个可能知道答案的DNS服务器的引用。
    • 客户端然后需要自己向这个新的DNS服务器发送查询请求,这个过程可能会继续进行,直到找到答案或确定不存在答案。
    • 迭代查询通常用于DNS服务器之间的查询,而不是客户端和DNS服务器之间。
    • 迭代查询的优点是它可以分散DNS查询的负载,因为每个DNS服务器只需要处理一次查询。缺点是客户端需要自己管理查询过程,这可能会增加客户端的复杂性。

在实际的DNS查询过程中,递归查询和迭代查询往往是结合使用的。客户端通常使用递归查询来简化操作,而DNS服务器之间则使用迭代查询来高效地共享信息。

image-nweo.png

根DNS服务器

因特网上有13个根DNS服务器, 其中大部分分布在北美洲,下面显示的是2012年的根DNS服务器分布图

image-eamn.png

HOSTS 与 DNS 的共同点

hosts与dns的共同点: 都是做域名解析的,解决IP地址与域名的对应关系问题。 在早期的时候,计算机数量还不是很多,通过修改本地hosts文件就能解决域名解析的工作。后来随着互联网的发展,计算机的数量越来越多,在每一个计算机上都维护、更新hosts文件的工作量也越来越大。DNS的出现就是解决了hosts文件无法满足海量计算机与域名的对应关系问题,将域名解析工作转移到了DNS服务器上,在本地计算机上只需要配置DNS服务器的IP地址即可。

DNS工作流程

20210729-01.png

Centos 配置DNS(主服务、正向查询)

安装

前提是正确配置YUM

首先,需要安装 BIND 以及相关的工具。

yum install bind bind-utils
  • bind:安装 DNS 服务器的主程序。
  • bind-utils:安装用于 DNS 查询的工具,如 dig 和 nslookup。

规划

首先必须正确配置IP和DNS(静态)

DNS设置为自己

规划解析域名和对应IP地址

假设需要解析的域名为xiandai.com,其中:

  • www.xiandai.com 192.168.x.100
  • dns.xiandai.com 192.168.x.x(自身)
  • file.xiandai.com 192.168.x.101

编辑主文件

  • 编辑主配置文件 /etc/named.conf:
sudo vi /etc/named.conf

image-bsol.png

/etc/named.conf 是BIND DNS服务器的主配置文件,用于定义DNS服务的行为和操作。你提到的更改涉及到DNS服务器的监听和访问控制设置。

原始配置

  1. 监听设置

    listen-on port 53 { 127.0.0.1; };
    

    这行配置指定DNS服务器只在本地回环地址(127.0.0.1)上监听端口53,这意味着DNS服务只对本机上的请求响应。

  2. 访问控制

    allow-query { localhost; };
    

    这行配置限制了哪些IP地址可以向DNS服务器发送查询请求。在这里,它只允许来自本地回环地址(localhost)的查询。

修改后的配置

  1. 监听设置

    listen-on port 53 { any; };
    

    将监听设置更改为 any;意味着DNS服务器将在所有网络接口上监听端口53,而不仅仅是本地回环地址。这使得DNS服务对所有网络请求开放,而不仅仅是本机。

  2. 访问控制

    allow-query { any; };
    

    将访问控制更改为 any;意味着任何IP地址都可以向DNS服务器发送查询请求。这取消了对查询来源的限制,使得DNS服务对互联网上的任何设备都是可访问的。

编辑named.rfc1912.zones 文件

在DNS服务器配置中,named.conf 是BIND(Berkeley Internet Name Domain)DNS服务器的主配置文件。这个文件控制着DNS服务器的全局设置,包括监听的端口、允许查询的客户端、区域文件的位置等。

named.rfc1912.zones 是BIND DNS服务器配置中的一个,用于定义DNS服务器应该遵循的区域传输策略。这个配置文件通常包含了一系列区域(zone),每个区域定义了一组域名和相关的DNS记录。

编辑配置文件named.rfc1912.zones:

sudo vi /etc/named.rfc1912.zones

####举例

zone "xiandai.com" IN {
    type master;
    file "xiandai.com.zone";
    allow-update { none; };
};

这段配置是BIND DNS服务器的区域(zone)配置,用于定义一个特定的域名区域(在这个例子中是 xiandai.com)的属性和行为。下面是对这段配置的详细解释:

  1. zone "xiandai.com" IN

    • 这定义了一个区域的开始,"xiandai.com"是该区域的域名。
    • IN表示这是一个Internet类(Internet Class)的区域,这是最常见的区域类型。
  2. type master

    • 这指定了这台DNS服务器是 xiandai.com区域的主服务器(master server)。作为主服务器,它负责维护该区域的DNS记录,并提供区域传输(zone transfer)给从服务器(slave servers)。
  3. file "xiandai.com.zone"

    • 这指定了存储 xiandai.com区域数据的文件名。这个文件包含了该区域的所有DNS记录,如A记录、MX记录等。
    • BIND DNS服务器会在指定的文件中查找和存储关于 xiandai.com的DNS数据。
  4. allow-update { none; }

    • 这个关键字表示不允许任何IP地址或网络对指定的DNS区域进行动态更新。这意味着没有任何外部系统或服务可以自动更改该区域的DNS记录。

添加区域文件

进入 /var/named 目录,新建一个 xiandai.com.zone 文件 (即上述文件中添加的配置信息中的file 参数) ,因为此目录下的named.localhost 文件格式与我所需要的格式一致,所以为了方便,直接通过cp命令复制重命名即可

cd /var/named

cp -p named.localhost kaisa.com.zone

思考为何要用-p

原始文件,解释

; 注意,zone文件的注释是以分号";"开始的。  
  
$TTL 1D     ; 生存期, 默认单位为秒,另可设定为[W|D|H|M]  
  
; [zone] IN SOA [主机名] [管理员email] ([五组更新时间参数])  
; @=>zone IN SOA @=>主机名 rname.invalid.=>email  
; @代表根域  
; rname.invalid.解析为rname@invalid,第一个"."为"@"的替代,尾部的"."为根域,表明其为绝对URL。  
@       IN SOA  @ rname.invalid. (  
                                        0       ; serial  
                                        1D      ; refresh  
                                        1H      ; retry  
                                        1W      ; expire  
                                        3H )    ; minimum  
        NS      @          ; 直接输入域名,访问@  
        A       127.0.0.1  ; 直接输入域名,解析到的IPV4的IP  
        AAAA    ::1        ; 直接输入域名,解析到的IPV6的IP  

修改为


$TTL 1D  
@       IN SOA  @ rname.invalid. (  
                                        0       ; serial  
                                        1D      ; refresh  
                                        1H      ; retry  
                                        1W      ; expire  
                                        3H )    ; minimum  
        NS      dns.xiandai.com.   
dns     A       192.168.x.x
www     A       192.168.x.100
file    A       192.168.x.101
  • NS 记录指定了域名服务器。
  • A 记录将域名映射到 IP 地址
  • MX记录 邮件记录以后再说

重启服务

首先关闭防火墙

重启服务

systemctl restart named

服务开机自动启动

systemctl enable named

查看服务状态

systemctl status named

测试

使用nslookup 进行测试

在此之前需要先首先正确配置IP和DNS