# Linux服务Day04: 一站式DNS入门(原理+单域+多域+Web实战+分离解析)
前言
DNS 是互联网最基础、最重要的服务之一,没有DNS我们就只能记一串难用的IP地址访问网站。
今天我们完整掌握:
✅ DNS 是什么、怎么工作
✅ 单域名DNS解析搭建
✅ 多域名+Web虚拟主机实战
✅ DNS 分离解析(不同来源IP解析到不同IP)
一、DNS 服务基础(必懂理论)
1.1 DNS 到底是什么?
- DNS(Domain Name System) = 域名解析服务,把好记的域名 → 翻译成IP地址
- 相当于互联网的114查号台/导航员
- 访问流程:客户机使用域名访问 → 向DNS服务器发起解析请求 → DNS 服务器返回给客户端对应 IP → 客户端根据返回的IP访问服务器 → 服务器向客户端提供数据和服务
1.2 两种解析方式
- 正向解析(最常用):域名 → IP
- 反向解析(不常用):IP → 域名
1.3 DNS 分布式结构
域名是层级结构,所有域名最后都以.(根域)结尾:
根域 → 一级域 → 二级域 → 三级域 → 主机站点
常见一级域名:
- 国家域:
.cn.us.hk - 组织域:
.com(商业机构公司)、.net(网络服务机构)、.edu(教育机构)、.org(公益)、.gov(政府部门)
DNS 分布详解:
域名是从右往左读的,越靠右级别越高!最右边的
.就是根域。完整层级结构(详解)
- 根域 · 最高级(.)
- 写法:.(一个点)
- 全球只有13组根域服务器
- 所有域名的最顶端、起点
- 平时我们看不见,系统自动补全
- 比如:
www.baidu.com.真实完整写法(最后有个点)
- 一级域(顶级域) 根域的下一级,分两类:
- 国家域:
.cn(中国)、.us、.hk- 组织域:
.com、.net、.edu、.org、.gov
- 二级域 在一级域前面,自己注册的名字:
baidu.com
.com一级域baidu二级域tb.cn
.cn一级域tb二级域
- 三级域(子域) 二级域前面再细分:
image.baidu.compan.baidu.comwww.jx.edu.cn
- 主机站点(最前面) 具体服务器的名字:
wwwftp举个最经典例子:
www.baidu.com从右往左看:
- .→ 根域(隐藏)
- com→ 一级域(组织域)
- baidu→ 二级域(你买的域名)
- www→ 主机名(服务器)
结构顺序:
根域 → 一级域 → 二级域 → 主机站点举课堂实验例子
www.tb.cn
- .根域
- cn一级域(中国)
- tb二级域
- www主机名
从右往左读,点越靠右级别越高!
根域(.)→ 一级 → 二级 → 主机名
1.4 FQDN 完全合格域名
FQDN:Fully Qualified Domain Name,完全合格域名 / 全域名
定义:主机名 + 域名,是互联网上完整、唯一、精确的主机地址。
格式:主机名.域名(主机名.二级域名.顶级域名)
示例:www.baidu.com
- www:主机站点
- baidu.com:域名
1.5 域名管理机构
- IANA(Internet Assigned Numbers Authority):互联网数字分配机构
- 整个域名系统的最高权威机构
- 主管DNS根、.int、.arpa等国际化域名资源
- CNNIC(China Internet Network Information Center):中国互联网络信息中心
- 主管国家顶级域.cn
- 域名注册/购买域名商:
- 阿里云(https://www.aliyun.com/)
- 华为云(https://www.huaweicloud.com/)
- 腾讯云(https://www.cloud.tencent.com/)
二、单域 DNS 解析(BIND 服务搭建)
本章实战:搭建一台DNS服务器,解析tb.cn域名。
2.1 BIND 服务概述
- BIND(Berkeley Internet Name Daemon):伯克利 Internet域名服务。
- 官方站点:https://www.isc.org/
DNS(Domain Name Server):域名解析服务
Linux 下最常用DNS软件 =BIND
- 软件包:
bind,bind-chroot(运行时的虚拟根环境) ,bind-utils - 服务名:
named - 端口:TCP/UDP 53
- 主配置文件:
/etc/named.conf(记录负责哪些域名) - 地址库文件:
/var/named/xxx.zone(地址库文件记录具体域名的对应IP)
2.2 实验环境
- DNS服务器:server 192.168.8.101(DNS 服务器,提供解析)
- 客户端:client 192.168.8.100(DNS 客户端,发起解析请求)
2.3 部署步骤
① server主机安装bind,bind-chroot,bind-utils
[root@server ~]# dnf -y install bind bind-chroot bind-utils #1.安装软件[root@server ~]# cp -p /etc/named.conf /opt/ #备份主配置文件,此文件易写错② 修改主配置 /etc/named.conf
- /etc/named.conf主要记录本机可以解析哪些域名及域名对应的地址库文件
- 修改主配置文件,支持tb.cn域名,地址库文件/var/named/tb.cn.zone
若希望所有ip都监听,或有多地址需要监听53端口,可以这样写: listen-on port 53 { any; };
options{listen-on port53{192.168.8.101;};#192.168.8.101监听53端口,注意空格directory"/var/named";#地址库文件 存储位置allow-query{any;};#允许任意主机查询(访问),注意空格};zone"tb.cn"IN{#指定负责的域名typemaster;#此服务器为主服务器file"tb.cn.zone";#此域名对应的地址库文件(/var/named/tb.cn.zone)};检查语法:
named-checkconf /etc/named.conf#检查主配置文件语法是否有误③ 编辑地址库文件
- server主机修改地址库文件/var/named/tb.cn.zone,完成如下解析
- www.tb.cn 解析为 1.2.3.4
- ftp.tb.cn 解析为 5.6.7.8
[root@server ~]# cp -p /var/named/named.localhost /var/named/tb.cn.zone #使用模板拷贝地址库文件,一定要保留属性[root@server ~]# ls -l /var/named/tb.cn.zone #查看地址库文件属性-rw-r-----1root named1524月132022/var/named/tb.cn.zone- 使用named-checkzone 域名 [地址库文件] 检查地址库文件语法是否有误
- NS记录为 NameServer,指定DNS服务器地址
- A记录 为 正向解析记录,解析域名对应的IP地址
编辑地址库:
[root@server ~]# vim /var/named/tb.cn.zone #修改地址库文件...此处省略1万字... tb.cn. NS server#声明DNS服务器server A192.168.8.101#DNS服务器是192.168.8.101。www A1.2.3.4#解析记录(www.tb.cn,域名自动补齐)ftpA5.6.7.8#解析记录(ftp.tb.cn,域名自动补齐)[root@server ~]# named-checkzone tb.cn /var/named/tb.cn.zone #检查地址库文件语法[root@server ~]# systemctl start named #启动服务[root@server ~]# systemctl enable named #将服务设置为开机自启2.4 客户端测试
配置 DNS 指向服务器:
echo"nameserver 192.168.8.101">/etc/resolv.conf/etc/resolv.conf是 Linux 系统的 DNS 客户端配置文件
安装测试工具并验证:
dnf-yinstallbind-utilsnslookupwww.tb.cn# 解析为1.2.3.4nslookupftp.tb.cn# 解析为5.6.7.8排错方法: 如果nslookup不行,从以下四个角度来排查问题:
1.防火墙或者selinux没关。 关掉即可再次进行尝试
2.DNS 服务没启动 在服务端启动一下服务:systemctl restart named , systemctl enable named并且查看是否监听 53 端口:ss -nutlp | grep named
3.客户端 DNS 地址没配置对cat /etc/resolv.conf看看自己IP地址对不对,只有输出:
’nameserver IP地址‘ 才是正常的
4.两台机器网络不通 直接ping一下服务端看网络是不是有问题
标准 DNS 解析完整流程(客户端 + 服务端)
- 客户端发起域名解析请求
- 优先查询本地 hosts 文件
- 若找到对应域名 → 直接返回 IP,流程结束
- 若 hosts 无记录,读取
/etc/resolv.conf- 获取配置的 DNS 服务器地址
- 客户端向 DNS 服务器发送 DNS 查询报文
- DNS 服务器收到请求
- 服务器先查询主配置文件,主配置文件告诉服务端去哪里读 zone 文件,然后服务器查询zone文件(自身区域数据库文件(zone 文件)
- 有记录 → 构造 DNS 响应报文,返回对应 IP
- 无记录 → 按配置进行递归/迭代查询,向上级 DNS 发起请求
- 最终将查询到的 IP 地址返回给客户端
三、多域 DNS + Web 虚拟主机 实战
本章目标:
DNS解析www.baidu.com→ 指向Web服务器,实现域名访问网站。
3.1 实验环境
- client:192.168.8.100(测试客户端)。
- server:192.168.8.101(DNS 服务器)。
- web:192.168.8.102(Web 服务器,提供网页服务)。
3.2 部署 Web 虚拟主机(192.168.8.102)
① 安装httpd
dnf-yinstallhttpd② 虚拟主机配置
vim/etc/httpd/conf.d/mysite.conf<VirtualHost *:80>ServerName www.baidu.com# 网站域名DocumentRoot /var/www/baidu# 网页根目录</VirtualHost>③ 创建网页
mkdir/var/www/baiduecho"I am local baidu haha">/var/www/baidu/index.html④ 重启服务并测试
systemctl restart httpd ss-nutlp|grep:80# 检查80端口curl192.168.8.102# 本地访问测试3.3 DNS 配置(server 主机新增baidu.com域)
① 修改 named.conf 追加
vim/etc/named.conf zone"baidu.com"IN{typemaster;file"baidu.com.zone";};语法检查:named-checkconf /etc/named.conf
② 创建地址库
cp-p/var/named/named.localhost /var/named/baidu.com.zone③ 编辑解析记录
baidu.com. NS server server A192.168.8.101 www A192.168.8.102# www.baidu.com → Web服务器IP语法检查:named-checkzone baidu.com /var/named/baidu.com.zone
④ 重启DNS
systemctl restart named3.4 客户端测试
nslookupwww.baidu.com# 解析为192.168.8.102curlwww.baidu.com# 成功访问Web服务器首页内容能看到网页内容即成功。
四、DNS 分离解析(高级功能)
4.1 什么是分离解析?
定义:不同来源 IP 的客户端,访问同一个域名,解析到不同 IP。
作用:负载均衡、就近访问、分流压力,典型场景如 CDN、12306 多地区镜像节点。
核心:用view匹配客户端 IP,调用不同地址库,返回不同解析结果。
4.2 核心规则
- 使用
view {}匹配客户端来源IP - 一旦用view,所有zone必须写在view里面不能单独存在
配置结构:
view"名称1"{match-clients{匹配IP;};zone"域名"IN{typemaster;file"地址库1";};};view"名称2"{match-clients{any;};zone"域名"IN{typemaster;file"地址库2";};};4.3 实验需求
- 删除原tb.cn配置,避免冲突。
- client(192.168.8.100):www.baidu.com → 192.168.8.102。
- web(192.168.8.102):www.baidu.com → 10.20.30.40。
4.4 配置步骤
① 修改主配置 named.conf
vim/etc/named.conf view"vip"{# 匹配客户端192.168.8.100match-clients{192.168.8.100;};zone"baidu.com"IN{typemaster;file"baidu.com.zone";};};view"other"{# 匹配其他所有客户端match-clients{any;};zone"baidu.com"IN{typemaster;file"baidu.com.other";};};语法检查:named-checkconf /etc/named.conf
② 新建第二套地址库
cp-p/var/named/baidu.com.zone /var/named/baidu.com.other③ 编辑baidu.com.other,修改解析 IP
baidu.com. NS server server A192.168.8.101 www A10.20.30.40语法检查:named-checkzone baidu.com /var/named/baidu.com.other
重启服务:systemctl restart named
4.5 分离解析测试
- client(192.168.8.100):nslookup www.baidu.com → 192.168.8.102
- web(192.168.8.102):配置 DNS 后nslookup www.baidu.com → 10.20.30.40
分离解析成功!
五、DNS 两种查询方式
- 递归解析:户端向 DNS 服务器发起请求,直接等待最终解析结果。
- 客户端 → DNS,直接等结果(用户端)
- 迭代解析:DNS 服务器逐级向根域、顶级域、二级域查询,最终返回结果给客户端。
- DNS → 根→顶级→二级,一层层查(服务器间)
六、高频易错点(必看)
/etc/named.conf括号、分号、空格不能错- 复制区域库必须加
-p保留权限,否则启动失败 - view 一旦使用,所有 zone 必须放进 view
- 测试命令:
nslookup需要装bind-utils - DNS端口:53,Web端口:80
七、全文总结
本篇完整覆盖云计算运维 DNS 核心内容:
- DNS 域名解析原理与结构
- BIND 单域解析完整部署
- 多域 DNS + Web 虚拟主机实战
- DNS 分离解析(view 高级配置)
- 命令、配置、测试、排错一站式掌握
