有互联网才有很多网络技术应用,让不同设备接入到网络从而达到互联网目的,就和现实世界中物流系统一样,互联网的前身美苏冷战时期的 ARPANET 最初在 1980 年代作为区域学术和军事网路连接的骨干网络,最后苏联解体了结束了冷战,最后这些已经曾在的网络基础设施,逐渐开始转向为民用网络系统了。

这篇文章要讲解的是 World Wide Web 这是存在于因特网之上的互联网应用服务,我日常见过很多人和同行认为万维网就是互联网,这是一个错误的认知,他们是有着本质上的区别的,万维网更多是指我们能通过浏览器或者支持通过 HTTP 协议能访问到的网络资源,例如文档、图片、视频、存在其他计算机所提供的资源集合并且通过网络进行开放访问。日常生活中使用的最多是浏览器访问 www 网站服务,而目前程序员做的事情通过不同编程语言和编程技术实现能动态服务的网站。


DNS 服务器

每当我们访问一个已知的网址都是在浏览器的地址栏中输入一串字符串,这个字符串就时域名,而域名是 IP 地址的一串别名,浏览器底层发送一个网络请求时数据包时提供 TCP 协议栈发送出去的,我们也可以通过 IP 地址进行访问万维网服务,但是很少有人这么做,因为 IP 地址时一串由 4 个字节组成的 32 Bit 位数字串,往往一般人很难记住。这和日常生活中的电话号码一样,我们很少记住别人的电话号码的数字,而是通过手机的通讯录保存一个联系人名字,拨打电话时提供联系人姓名来打电话呼叫别人。

同理在计算机中也是这样设计的只不过名称叫 DNS 服务,通过把目标 IP 地址绑定到一串特定便于记忆的字符串域名上,我们通过域名来服务网站,这比通过记住一串数字要容易的多,DNS 服务就是便于使用者查询对应域名所绑定的 IP 信息的,从而把组装数据包通过 TCP 协议栈发送出去。

DNS 服务是由全球 13 组根服务器所提供的,10 台在美国,另外 3 台分别在欧洲的挪威、伦敦和东亚的日本,就这 13 组根服务器为我们提供了 DNS 服务,不过目前世界上有很多 DNS 从服务器和缓存服务器方便我们快速查找和及时响应查询请求所设置,缓存服务器大部分是缓存已经查询过的域名信息,目录前世界上流行的公共 DNS 服务器 IP 地址有下列表:

IP 地址供应商
8.8.8.8Google Public DNS
1.1.1.1Cloudflare Public DNS

DNS 服务器会根据客户的请求的内容,返回对于的信息,这些信息被注册到 DNS 服务器至上,分为不同类型的 DNS 信息,DNS 在设计的时候就考虑到了不是单单为网站域名服务,还有一些其他的类型服务,例如邮箱服务器地址查询,也是由 DNS 服务器负责的,在 DNS 服务器信息有一个 Class 字段,这个字段就是用来区分不同网络服务类型的,目前大部分类型为 IN,一个简单例子如下:

NameClassTypeData
www.ibyte.meINA66.888.88.8
ibyte.meINMXmxbiz1.qq.com.
imgINAAAA2001:4860:4860::8888
blogINCNAMEwww.ibyte.me
ptrINPTR192.168.0.1
sevINSEV127.0.0.1

整个 DNS 服务可以看作为一个交通指挥中心,存储着互联网上的交通路由表。


Linux 的 DNS 服务

在 Linux 中默认的 DNS 相关的配置有很多文件来制定,/etc/resolv.conf 为 DNS 解析服务器的配置文件,这样每当我们查询域名信息时,会从配置文件中找到 DNS 服务器的 IP 发送 DNS 查询请求,/etc/hosts.conf 为本机自定义 DNS 域名绑定映射文件,而另外一个至关重要的是 /etc/nsswitch.conf 文件,可以设置每次查询 DNS 服务的步骤。

在 Linux 中如果默认使用 wget 命令和 curl 命令完全根据本地 DNS 配置方案进行查询步骤的,而 Linux 内置的 hostdig 命令是不会按照 hosts.conf 文件和 nsswitch.conf 的规则的,而是按照 resolv.conf 文件配置的远程 DNS 根服务器进行的查询。

[root@cs9 ~]# dig www.ibyte.me

; <<>> DiG 9.16.23-RH <<>> www.ibyte.me
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61241
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;www.ibyte.me.            IN    A

;; ANSWER SECTION:
www.ibyte.me.        300    IN    A    104.21.48.119
www.ibyte.me.        300    IN    A    172.67.151.15

;; Query time: 129 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sun Mar 26 17:58:41 CST 2023
;; MSG SIZE  rcvd: 73

[root@cs9 ~]# host www.ibyte.me.
www.ibyte.me has address 104.21.48.119
www.ibyte.me has address 172.67.151.15
www.ibyte.me has IPv6 address 2606:4700:3037::6815:3077
www.ibyte.me has IPv6 address 2606:4700:3030::ac43:970f
[root@cs9 ~]#

dig 命令是目前最为常用的命令:

# 对 IP 地址逆向解析
dig -x 166.111.4.100
# 查询域名邮箱服务器信息 XM 记录
dig -t XM ibyte.me
# 查询 A 记录
dig -t A ibyte.me
# 跟踪整个域名的解析过程
dig +trace ibyte.me

BIND 9 服务

目前 Linux 常用的 DNS 解析服务软件有 BIND ,全名为 Berkeley Internet Name Domain 是目前全球范围内使用的最多的 DNS 域名解析服务软件,可以运行在很多 Linux 发行版本至上,目前最新的版本是 BIND 9 ,下面介绍如何安装该版本到 Linux 上并且配置一些本地 DNS 解析服务:

# 安装 DNS 解析服务
yum -y install bind-chroot

核心的几个配置文件为,主配置文件 /etc/named.conf 、区域配置文件 /etc/named.rfc1912.zones 和数据配置目录 /etc/named,修改主配置文件 /etc/named.conf 让本机能提供 DNS 服务响应其他程序发送的 DNS 解析查询请求,将 listen-on port 和 allow-query 字段设置为 any ,表示接受任何 IP 的请求。

光修改了主配置文件是没有任何解析作用的,因为没有添加 DNS 映射记录,改修 /etc/named.rfc1912.zones 文件将要添加的域名解析记录添加到其中,一个简单正向解析模版:

zone "ibyte.me" IN {
        type master;
        file "ibyte.me.zone";
        allow-update { none;};
};

其中 type 字段为类型,目前支持 3 中类型,也对于的域名级别来区分:

类型作用说明
master主区域
hint根区域
slave辅助区域

其他可能的区域类型包括 type slave、type stub 和 type forward ,这些类型的作用如下:

  • type slave: 从服务器,它会从 Master Server 中复制数据,并将这些数据提供给其他请求者。Slave Server 可以提高服务器的可靠性和性能,因为它可以处理大量的查询请求。
  • type stub: 存根服务器,它只保存指向特定域名的 NS 记录(权威 DNS 服务器)。当 BIND 9 接收到查询请求时,它将使用这些 NS 记录来查找适当的权威 DNS 服务器,并请求该服务器提供所需的解析数据。
  • type forward: 转发服务器,它会将所有接收到的查询请求转发到其他 DNS 服务器进行处理。转发服务器可以在本地缓存中存储解析数据,以便更快地响应查询请求,并减少对其他 DNS 服务器的查询量。

最后要创建一个域名解析对应的数据文件,默认在 /var/named/ 文件夹中有默认的数据文件模版,照着改就行了,比如下面这种格式的:

$TTL 1D
@               IN SOA          ns1.example.com. hostmaster.example.com. (
                                2019032601 ; Serial
                                8H         ; Refresh
                                2H         ; Retry
                                1W         ; Expire
                                1D )       ; Minimum TTL
                IN NS           ns1.example.com.

ns1             IN A            192.168.0.1
www             IN A            192.168.0.2

修改配置文件的参数解析如下表格:

参数解释
$TTL该参数表示该区域文件中所有记录的默认 TTL 时间(生存时间)。这里的 1D 表示 1 天。如果某个记录没有指定 TTL 时间,就会使用该默认值。
@表示当前域名,这里就是 example.com。
IN表示这是一个 Internet 类型的域名。
SOA表示 Start of Authority 记录,它包含了一些关于该域名的基本信息。
ns1.example.com.表示该域名的主 DNS 服务器是 ns1.example.com。
hostmaster.example.com.表示该域名的管理员邮箱地址是 hostmaster.example.com。
2019032601表示该域名的版本号,一般是一个日期和一个序号的组合。
8H表示该域名的刷新时间(Refresh),也就是从主 DNS 服务器更新该域名信息的间隔时间。
2H表示该域名的重试时间(Retry),也就是从主 DNS 服务器更新该域名信息失败后重试的间隔时间。
1W表示该域名的过期时间(Expire),也就是该域名信息在本地 DNS 服务器上保存的最长时间。
1D表示该域名记录的最短 TTL 时间,也就是在该时间内,本地 DNS 服务器不会再次向主 DNS 服务器查询该域名的信息。
NS表示 Name Server 记录,用于指定该域名的 DNS 服务器。
A表示 Address 记录,用于指定域名的 IP 地址。

支持的解析类型还有很多没有列出,可以查看这片博文DNS 原理入门,当前为正向解析,DNS 还可以通过 IP 进行逆向解析和 DNS 缓存服务器,这些后面有时间再介绍。


其他资料


便宜 VPS vultr
最后修改:2023 年 07 月 05 日
如果觉得我的文章对你有用,请随意赞赏 🌹 谢谢 !