有互联网才有很多网络技术应用,让不同设备接入到网络从而达到互联网目的,就和现实世界中物流系统一样,互联网的前身美苏冷战时期的 ARPANET 最初在 1980 年代作为区域学术和军事网路连接的骨干网络,最后苏联解体了结束了冷战,最后这些已经曾在的网络基础设施,逐渐开始转向为民用网络系统了。
DNS 服务器
每当我们访问一个已知的网址都是在浏览器的地址栏中输入一串字符串,这个字符串就时域名,而域名是 IP 地址的一串别名,浏览器底层发送一个网络请求时数据包时提供 TCP 协议栈发送出去的,我们也可以通过 IP 地址进行访问万维网服务,但是很少有人这么做,因为 IP 地址时一串由 4 个字节组成的 32 Bit 位数字串,往往一般人很难记住。这和日常生活中的电话号码一样,我们很少记住别人的电话号码的数字,而是通过手机的通讯录保存一个联系人名字,拨打电话时提供联系人姓名来打电话呼叫别人。
DNS 服务是由全球 13 组根服务器所提供的,10 台在美国,另外 3 台分别在欧洲的挪威、伦敦和东亚的日本,就这 13 组根服务器为我们提供了 DNS 服务,不过目前世界上有很多 DNS 从服务器和缓存服务器方便我们快速查找和及时响应查询请求所设置,缓存服务器大部分是缓存已经查询过的域名信息,目录前世界上流行的公共 DNS 服务器 IP 地址有下列表:
IP 地址 | 供应商 |
---|---|
8.8.8.8 | Google Public DNS |
1.1.1.1 | Cloudflare Public DNS |
Name | Class | Type | Data |
---|---|---|---|
www.ibyte.me | IN | A | 66.888.88.8 |
ibyte.me | IN | MX | mxbiz1.qq.com. |
img | IN | AAAA | 2001:4860:4860::8888 |
blog | IN | CNAME | www.ibyte.me |
ptr | IN | PTR | 192.168.0.1 |
sev | IN | SEV | 127.0.0.1 |
整个 DNS 服务可以看作为一个交通指挥中心,存储着互联网上的交通路由表。
Linux 的 DNS 服务
在 Linux 中默认的 DNS 相关的配置有很多文件来制定,/etc/resolv.conf
为 DNS 解析服务器的配置文件,这样每当我们查询域名信息时,会从配置文件中找到 DNS 服务器的 IP 发送 DNS 查询请求,/etc/hosts.conf
为本机自定义 DNS 域名绑定映射文件,而另外一个至关重要的是 /etc/nsswitch.conf
文件,可以设置每次查询 DNS 服务的步骤。
host
和 dig
命令是不会按照 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 的请求。
/etc/named.rfc1912.zones
文件将要添加的域名解析记录添加到其中,一个简单正向解析模版:
zone "ibyte.me" IN {
type master;
file "ibyte.me.zone";
allow-update { none;};
};
其中 type
字段为类型,目前支持 3 中类型,也对于的域名级别来区分:
类型 | 作用说明 |
---|---|
master | 主区域 |
hint | 根区域 |
slave | 辅助区域 |
- 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 缓存服务器,这些后面有时间再介绍。