域名查找
域名结构
根域名:
根域名:.
全世界一共有13台根域服务器,记录了所有的顶级域信息
顶级域
也称为一级域名,常见顶级域:.com .cn .edu .cc .us .top
等
主域名
也成为二级域名,比如:aliyun.com huya.com cczu.edu
等,需要购买
子域名
也称为三级域名,比如:api.aliyun.com docs.qq.com
等,三级域名根据主域名注册的服务商来决定数量有多少
DNS的域名查找流程
关于/etc/hosts文件
/etc/hosts文件是一个用于本地域名解析的操作系统文件,该文件用于将特定的IP地址与域名进行映射,从而允许在本地系统上进行域名解析,而无需依赖DNS服务器。查找域名对应IP时,优先查找hosts文件解析,如果hosts文件中不存在此条记录,再按以下dns查找顺序来找。
假设我们要查找网址www.example.com
的IP地址,那么域名查找的示例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| 用户在浏览器中输入网址www.example.com。
优先查找本机hosts文件和本地DNS解析器,hosts文件以及本地DNS缓存中不存在此条记录
操作系统的客户端将该查询发送给本地域名服务器。
本地域名服务器检查缓存文件,没有找到对应的解析结果。
本地域名服务器发送一个迭代查询给根域名服务器,询问.com域的顶级域名服务器的地址。
根域名服务器返回一个指向.com顶级域名服务器的地址。
本地域名服务器发送一个迭代查询给.com顶级域名服务器,询问example.com的权威域名服务器的地址。
.com顶级域名服务器返回一个指向example.com权威域名服务器的地址。
本地域名服务器发送一个迭代查询给example.com权威域名服务器。
example.com权威域名服务器返回www.example.com的IP地址。
本地域名服务器将IP地址返回给DNS客户端,并将解析结果保存到缓存中。
DNS客户端将IP地址返回给操作系统和浏览器。
浏览器通过IP地址连接到服务器www.example.com。
|
查看DNS域名查找路径
1
| dig +trace www.dengjinjun.site # 展示一个简单的从域名到ip的查找过程,dig命令用来查看域名解析关系,很重要
|
实践添加腾讯云A记录三级域名
域名记录类型
1 2 3 4 5 6 7 8 9
| 记录类型 使用目的 A 记录 将域名指向一个 IP 地址(外网地址)。A记录类型是用的最频繁的,因为他是直接指向了一个ip地址 CNAME 记录 将域名指向另一个域名,再由另一个域名提供 IP 地址(外网地址)。将当前要访问的域名,转发给另一个域名,用在CDN部署上 MX 记录 设置邮箱,让邮箱能收到邮件。 NS 记录 将子域名交给其他 DNS 服务商解析。 AAAA 记录 将域名指向一个 IPv6 地址。 SRV 记录 用来标识某台服务器使用了某个服务,常见于微软系统的目录管理。 TXT 记录 对域名进行标识和说明,绝大多数的 TXT 记录是用来做 SPF 记录(反垃圾邮件)。 隐/显性URL 记录将一个域名指向另外一个已经存在的站点。
|
添加流程
在域名提供商官网进行操作,添加解析记录,填写三级域名,指定记录类型,记录值一般填写自己的服务器IP地址,也可以指定其他IP地址,保存即可。
详细可参考阿里云官方手册:https://help.aliyun.com/document_detail/29716.html
搭建dns服务器
当前使用云服务器的公司大多使用云厂商提供的DNS服务器,一般很少自己搭建。这部分知识点便于理解原理,部署不难。
bind软件
使用bind软件搭建一台DNS服务器,作为权威域名服务器,把二级域名dengjinjun.site
添加到DNS服务器中,并添加三级域名。
准备两台机器
1 2
| 172.16.1.61机器 服务端 172.16.1.7机器 客户端
|
服务器端安装bind软件包
1 2 3
| yum install bind bind-utils -y # bind软件是dns服务器的主软件 bind-utils 是提供dns解析的命令,如dig命令 getenforce # 检查selinux iptables -L # 检查防火墙规则不要禁用DNS
|
修改DNS服务器主配置文件
1 2 3 4 5 6 7 8 9 10 11
| vim /etc/named.conf # 修改主配置文件
# 允许dns服务端,运行在0.0.0.0:53 上 12 options { 13 listen-on port 53 { 127.0.0.1; any; };
# 允许所有客户端的访问 21 allow-query { localhost;any; };
# 主配置文件导入了子配置文件(域配置文件) 59 include "/etc/named.rfc1912.zones";
|
创建DNS服务器的子配置文件
1 2 3 4 5 6 7
| vim /etc/named.rfc1912.zones # 修改子配置文件,文件末尾添加如下内容,定义一个二级域名dengjinjun.site
zone "dengjinjun.site" IN { type master; file "dengjinjun.site.zone"; allow-update { none; }; };
|
创建该二级域名的主机记录配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| # 安装bind时已经准备好了二级域名的模板文件,从模板文件中迁移子配置文件,# cp -p 保持原文件的属性,命名为 [主域名].zone cp -p /var/named/named.localhost /var/named/dengjinjun.site.zone
# 修改为如下内容 $TTL 1D @ IN SOA @ rname.invalid. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS @ A 172.16.1.61 # 表示二级域名的解析记录,要把原本的127.0.0.1改为主机IP AAAA ::1
www A 172.16.1.61 # 添加三级域名的解析记录,指定记录类型和IP地址 linux A 172.16.1.61 # 再添加一个
|
启动bind程序
1 2
| systemctl start named # 启动服务 netstat -tunlp |grep named # 检查named程序状态
|
在客户端指定DNS服务器地址
1 2 3 4 5
| vim /etc/resolv.conf # 编辑DNS的配置文件,添加以下内容
nameserver 172.16.1.61
# 如果访问DNS服务器中的域名,可以直接返回地址。如果访问的是互联网中的域名,该bind软件,默认会递归查询,继续向上, 从dns解析流程走一遍
|
dnsmasq软件
dnsmasq是一个轻量级的服务,很容易实现DNS服务器功能,部署简单,许多集群环境内部部署DNS服务器,都是使用dnsmasq
部署dnsmasq之前注意停掉bind服务,并且恢复dns设置
1 2
| systemctl stop named vim /etc/resolv.conf
|
服务端安装dnsmasq软件包
修改dnsmasq配置文件
1 2 3 4 5
| vim /etc/dnsmasq.conf # 修改配置文件,设置以下内容
resolv-file=/etc/resolv.dnsmasq.conf # 指定保存上游dns服务器地址的文件,默认是/etc/resolv.conf,也可以自定义(需要自己创建) listen-address=172.16.1.61 # 指定DNS服务的IP地址,一般是本机的IP addn-hosts=/etc/hosts.dnsmasq.conf # 指定本地的域名解析记录文件,默认是/etc/hosts文件,也可以自定义(需要自己创建)
|
创建对应的数据文件
1 2 3 4 5 6 7
| echo "nameserver 223.5.5.5" > /etc/resolv.dnsmasq.conf # 创建指定上游DNS服务器的文件(如上文中定义了则需要创建)
cat >/etc/hosts.dnsmasq.conf <<EOF 172.16.1.7 web-7 172.16.1.8 web-8 172.16.1.9 web-9 EOF # 创建本地的域名解析记录文件,并添加几条记录(如上文中定义了则需要创建)
|
启动dnsmasq服务
客户端测试
1 2 3
| vim /etc/resolv.conf # 编辑dns配置文件,使用上文中创建的DNS服务器地址
# 如果访问DNS服务器域名解析文件中的域名,可以直接返回地址。如果访问的是互联网中的域名,该bind软件,默认会递归查询,继续向上, 从dns解析流程走一遍
|