玄子Share-DNS域名解析服务
DNS 服务介绍
DNS是英文Domain Name System的缩写,翻译过来就是域名解析系统。
它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。
- 协议:UDP协议
- 架构:C/S
DNS 系统的作用
DNS系统在网络中的作用就是维护一个地址数据库,其中记录了各种主机域名与IP地址的对应关系,以便为客户程序提供正向或反向的地址查询服务,即正向解析和反向解析;
- 正向解析:根据域名查找对应的IP地址
- 反向解析:根据IP地址查找对应的域名
DNS 系统的分布式数据结构
DNS 域名解析服务的应用场景
A.公司内部
DNS 系统的介绍
Internet 域名空间的最顶层是根域(.)
- 全球有 13 台根服务器
- 1 个主根域名服务器
- 12 个辅根域名服务器
DNS 根域下面是顶级域
- 由 Internet 域名注册授权机构管理。共有 3 种类型的顶级域
- 国际顶级域名:采用 3 个字符的代号,如
.com
、.edu
、.org
- 国家或地区域名:采用 2 个字符的国家或地区代号,如
.cn 为中国
、.kr 为韩国
、.us 为美国
- 新通用顶级域名:也叫新顶级域名、新顶域,如
xin
、.top
、.xyz
、.vip
DNS 域名 | 组织类型 | 举例 |
---|---|---|
com | 商业公司 | www.xuanzishare.com |
edu | 教育机构 | www.harvard.edu |
net | 网络公司 | www.csdn.net |
gov | 非军事政府机构 | www.whitehouse.gov |
mil | 军事政府机构 | www.navy.mil |
org | 非营利组织 | www.linux.org |
xx | 国家/地区 | www.cas.cn |
DNS域名解析查询过程
DNS查询方式
- 递归查询(主机向本地域名服务器查询采用递归查询)
在该模式下,DNS服务器接收到客户机请求,必须使用一个准确的查询结果回复客户机。如果DNS服务器本地没有存储查询DNS信息,那么该服务器会询问其他服务器,并将返回的查询结果提交给客户机。
- 迭代查询(本地域名服务器向域名服务器查询采用迭代查询)
DNS另外一种查询方式为迭代查询,当客户机发送查询请求时,DNS服务器并不直接回复查询结果,而是告诉客户机另一台DNS 服务器地址,客户机再向这台DNS 服务器提交请求,依次循环直到返回查询的结果为止。
常见DNS服务器地址
- Google 谷歌公司:8.8.8.8(主),8.8.4.4 (备)
- 国内电信DNS:114.114.114.114
- 阿里巴巴公司:223.5.5.5 (主),223.6.6.6 (备)
DNS系统类型
- 缓存域名服务器
- 也称为DNS高速缓存服务器
- 通过向其他域名服务器查询获得域名 -> IP地址记录
- 将客户端域名查询结果缓存到本地,提高重复查询时的速度和效率。
- 主域名服务器
- 特定DNS区域的权威服务器,具有唯一性
- 负责维护该区域内所有域名->IP地址的映射记录
- 需要自行建立所负责区域的地址数据文件
- 从域名服务器
- 也称为辅助域名服务器,是对主域名服务器的热备份
- 其维护的域名->IP地址记录来源于主域名服务器
- 需要从主域名服务器自动同步区域地址数据库
BIND 软件安装
BIND(Berkeley Internet Name Daemon)
- BIND是应用最广泛的DNS服务程序
- 官方站点:https://www.isc.org/
安装bind程序所需的包有:
- bind:主程序包,提供域名解析服务的主要程序和相关配置文件
- bind-utils:提供 DNS 域名解析使用的各种测试工具,如:nslookup
- bind-libs:提供 bind、bind-utils 实现功能的各种库函数
- bind-chroot:安装 bind 服务时提供的一个伪装目录(/var/named/chroot),提高配置文件和区域数据文件的安全性
- /etc/named.conf – /var/named/chroot/etc/named.conf
BIND 服务
- BIND服务器端程序
- 主要执行程序:/usr/sbin/named
- 默认监听端口:53
- 主配置文件:/etc/named.conf
- DNS解析记录的数据文件路径:/var/named/
- BIND服务控制
- systemctl [status|start|stop|restart] named.service
主配置文件 named.conf
全局配置部分
- 设置DNS服务器的全局参数
- 包括监听地址和端口、区域数据文件存放的目录等
- 使用options { …… }; 的配置段
options {
# 全局的选项和设置
listen-on port 53 { 192.168.60.11; };
# 监听 DNS 查询的 53 端口
directory "/var/named";
# 指定区域文件存储的目录
allow-query { 192.168.60.0/24; 192.168.70.0/24; };
# 允许来自指定 IP 段的 DNS 查询
};
区域配置部分
- 设置本服务器提供域名解析的特定DNS区域
- 包括域名、服务器角色、数据文件名等
- 使用zone “区域名” IN { …… }; 的配置段
zone "xuanzi.cloud" IN {
# 定义 xuanzi.cloud 区域
type master;
# 将此区域定义为主区域
file "xuanzi.com.zone";
# 指向包含 xuanzi.cloud 区域数据的文件
allow-transfer { 192.168.60.12; };
# 允许区域传输到指定的 IP 地址
};
zone "16.16.173.in-addr.arpa" IN {
# 定义 16.16.173.in-addr.arpa 的反向查找区域
type master;
# 将此区域定义为主区域
file "173.16.16.arpa";
# 指向包含反向查找区域数据的文件
allow-transfer { 192.168.60.12; };
# 允许区域传输到指定的 IP 地址
};
全局 TTL 配置项及 SOA 记录
全局TTL配置项及SOA记录
- $TTL(Time To Live,生存时间)
- SOA(Start Of Authority,授权信息开始)
- 分号 “;” 开始的部分表示注释信息
$TTL 86400
# 有效解析记录的生存周期
@ IN SOA bdqn.com. admin.bdqn.com.(
# SOA标记、区域名称 管理邮箱地址
2011030501
# 更新序列号,可以是10位以内的整数
3H
# 刷新时间,重新下载地址数据的间隔
15M
# 重试延时,下载失败后的重试间隔
1W
# 失效时间,超过该时间仍无法下载则放弃,从服务器更新参数
1D
# 无效解析记录的生存周期
)
正向解析记录
- NS 域名服务器(Name Server)记录
- MX 邮件交换(Mail Exchange)记录
- A 地址(Address)记录,只用在正向解析区域中
- CNAME 别名(Canonical Name)记录
@ IN NS ns1.bdqn.com.
IN MX 10 mail.bdqn.com.
ns1 IN A 58.119.74.203
www IN A 173.16.16.1
mail IN A 173.16.16.4
ftp IN CNAME www
反向解析记录
- PTR 指针(Point)记录
- 记录的第一列指定 IP 地址中的主机地址部分
1 IN PTR www.bdqn.com.
4 IN PTR mail.bdqn.com.
基于域名解析的负载均衡
同一域名对应到多个IP地址
www IN A 173.16.16.173
www IN A 173.16.16.174
www IN A 173.16.16.175
泛域名解析
找不到精确对应的A记录时,使用“*”进行匹配
* IN A 173.16.16.173
对配置文件进行语法检查
named-checkconf 工具
named-checkconf [主配置文件]
[root@localhost ~]# named-checkconf -z /etc/named.conf
# -z 尝试加载主配置文件中对应的区域数据库文件
zone bdqn.com/IN: loading from master file bdqn.com.zone failed: file not found
…… //省略部分内容
named-checkzone 工具
named-checkzone <域名> <区域数据文件>
[root@localhost ~]# cd /var/named/
[root@localhost named]# named-checkzone bdqn.com bdqn.com.zone
zone bdqn.com/IN: loaded serial 2011030501
OK
DNS 服务配置实战
主服务器配置
vim /etc/sysconfig/network-scripts/ifcfg-ens33
# 先修改 网络配置文件中,DNS 地址
DNS1=192.168.254.11
DNS2=192.168.254.12
# 安装 bind 软件
[root@xuanzi ~]# mkdir /media/cdrom
[root@xuanzi ~]# mount /dev/cdrom /media/cdrom/
[root@xuanzi ~]# cd /media/cdrom/Packages/
[root@xuanzi Packages]# rpm -ivh bind-9.9.4-72.el7.x86_64.rpm
# 错误:依赖检测失败:python-ply 被 bind-32:9.9.4-72.el7.x86_64 需要
[root@xuanzi Packages]# rpm -ivh python-ply-3.4-11.el7.noarch.rpm
[root@xuanzi Packages]# rpm -ivh bind-9.9.4-72.el7.x86_64.rpm
# 安装 bind 包
[root@xuanzi Packages]# cp /etc/named.conf /etc/named.conf.bak
# 备份配置文件
[root@xuanzi Packages]# vim /etc/named.conf
named.conf
options {
# 全局的选项和设置
listen-on port 53 { 192.168.254.13; };
# 监听 DNS 查询的 53 端口
directory "/var/named";
# 指定区域文件存储的目录
allow-query { 192.168.254.0/24; 192.168.70.0/24; };
# 允许来自指定 IP 段的 DNS 查询
};
zone "xuanzi.cloud" IN {
# 定义 xuanzi.cloud 区域
type master;
# 将此区域定义为主区域
file "xuanzi.cloud.zone";
# 指向包含 xuanzi.cloud 区域数据的文件
allow-transfer { 192.168.254.13; };
# 允许区域传输到指定的 IP 地址
};
zone "16.16.173.in-addr.arpa" IN {
# 定义 16.16.173.in-addr.arpa 的反向查找区域
type master;
# 将此区域定义为主区域
file "173.16.16.arpa";
# 指向包含反向查找区域数据的文件
allow-transfer { 192.168.254.13; };
# 允许区域传输到指定的 IP 地址
};
[root@xuanzi ~]# cd /var/named/
[root@xuanzi named]# vim xuanzi.cloud.zone
# :r named.localhost
# 导入模板文件
xuanzi.cloud.zone
$TTL 86400
@ IN SOA xuanzi.cloud. admin.xuanzi.cloud. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ IN NS ns1.xuanzi.cloud.
IN NS ns2.xuanzi.cloud.
IN MX 10 mail.xuanzi.cloud.
ns1 IN A 192.168.254.11
ns2 IN A 192.168.254.13
www IN A 173.16.16.1
mail IN A 173.16.16.2
study IN A 173.16.16.3
ftp IN A 173.16.16.4
web IN CNAME 173.16.16.1
* IN A 173.16.16.1
173.16.16.arpa
$TTL 86400
@ IN SOA xuanzi.cloud. admin.xuanzi.cloud. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ IN NS ns1.xuanzi.cloud.
IN NS ns2.xuanzi.cloud.
IN MX 10 mail.xuanzi.cloud.
ns1 IN A 192.168.254.11
ns2 IN A 192.168.254.13
mail IN A 173.16.16.2
1 IN PTR www.xuanzi.cloud.
2 IN PTR mail.xuanzi.cloud.
3 IN PTR study.xuanzi.cloud.
4 IN PTR ftp.xuanzi.cloud.
[root@xuanzi named]# named-checkconf -z /etc/named.conf
# 检查主配置文件
[root@xuanzi named]# named-checkzone xuanzi.cloud /var/named/xuanzi.cloud.zone
zone xuanzi.cloud/IN: loaded serial 0
OK
# 检查区域配置文件
[root@xuanzi named]# named-checkzone xuanzi.cloud /var/named/173.16.16.arpa
zone xuanzi.cloud/IN: loaded serial 0
OK
# 检查区域配置文件
systemctl enable named
systemctl start named
systemctl status named
[root@xuanzi named]# netstat -anpt | grep named
设置 WIndows Server IP 信息
使用
nslookup
命令进行测试
从服务器配置
基础配置与主服务器一致即可
vim /etc/sysconfig/network-scripts/ifcfg-ens33
# 先修改 网络配置文件中,DNS 地址
DNS1=192.168.254.11
DNS2=192.168.254.12
# 安装 bind 软件
[root@xuanzi ~]# mkdir /media/cdrom
[root@xuanzi ~]# mount /dev/cdrom /media/cdrom/
[root@xuanzi ~]# cd /media/cdrom/Packages/
[root@xuanzi Packages]# rpm -ivh bind-9.9.4-72.el7.x86_64.rpm
# 错误:依赖检测失败:python-ply 被 bind-32:9.9.4-72.el7.x86_64 需要
[root@xuanzi Packages]# rpm -ivh python-ply-3.4-11.el7.noarch.rpm
[root@xuanzi Packages]# rpm -ivh bind-9.9.4-72.el7.x86_64.rpm
# 安装 bind 包
[root@xuanzi Packages]# cp /etc/named.conf /etc/named.conf.bak
# 备份配置文件
[root@xuanzi Packages]# vim /etc/named.conf
options {
listen-on port 53 { 192.168.254.13; };
directory "/var/named";
allow-query { 192.168.254.0/24; 192.168.70.0/24; };
};
zone "xuanzi.cloud" IN {
type slave;
file "slaves/xuanzi.cloud.zone";
masters { 192.168.254.11; };
};
zone "16.16.173.in-addr.arpa" IN {
type slave;
file "slaves/173.16.16.arpa";
masters { 192.168.254.11; };
};
systemctl enable named
systemctl start named
systemctl status named
[root@xuanzi named]# netstat -anpt | grep named
[root@xuanzi named]# ll /var/named/slaves
设置 WIndows Server IP 信息
使用
nslookup
命令进行测试
缓存服务器配置
前置配置与主服务器一致,仅修改 named.conf 配置文件即可
options {
listen-on port 53 { 192.168.254.11; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
query-source port 53;
allow-query { 192.168.254.0/24; };
recursion yes;
};
zone "." IN {
type hint;
file "named.ca";
};
分离解析配置
新添加网卡,且修改为仅主机模式
vim /etc/sysconfig/network-scripts/ifcfg-ens33
IPADDR=192.168.1.1
NETWORK=2555.255.255.0
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens33 ifcfg-ens36
vim ifcfg-ens36
BOOTPROTO=static
DEFROUTE=yes
NAME=ens36
DEVICE=ens36
ONBOOT=yse
IPADDR=173.16.16.1
NETWORK=255.255.0.0
systemctl restart network
ifconfig ens36
然后常规安装 bind 修改 named.conf
options {
listen-on port 53 { any; };
directory "/var/named";
allow-query { any; };
};
view "LAN" {
match-clients { 192.168.1.0/24; };
zone "bt.com" IN {
type master;
file "bt.com.zone.lan";
};
};
view "WAN" {
match-clients { any; };
zone "bt.com" IN {
type master;
file "bt.com.zone.wan";
};
};
cd /var/named/
vim bt.com.zone.lan
$TTL 86400
@ IN SOA bt.com. admin.bt.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ IN NS ns1.bt.com.
ns1 IN A 192.168.1.1
www IN A 192.168.1.4
mail IN A 192.168.1.5
ftp IN A 192.168.1.6
cp bt.com.zone.lan bt.com.zone.wan
vim bt.com.zone.wan
$TTL 86400
@ IN SOA bt.com. admin.bt.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ IN NS ns1.bt.com.
ns1 IN A 192.168.1.1
www IN A 173.16.16.101
mail IN A 173.16.16.102
ftp IN A 173.16.16.103
内网,网卡模式改为 NAT,然后使用 nslookup 测试
外网,网卡模式改为 仅主机,然后使用 nslookup 测试
玄子Share-DNS域名解析服务 2024.04.09