Linux系统工程师
实验所用系统为Redhat-rhel8.2。
目录
Linux的系统工程师–企业dns服务器搭建
一、关于dns的名词解释
域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。
1、客户端
/etc/resolv.conf ##dns指向文件
nameserver 172.25.254.20
- 测试
host www.baidu.com ##地址解析命令
dig www.baidu.com ##地址详细解析信息命令
- A记录
A (Address) 记录是用来指定主机名(或域名)对应的IP地址记录。用户可以将该域名下的网站服务器指向到自己的网页服务器(web server)上。同时也可以设置域名的子域名。 - SOA
授权起始主机 - DNS等级
现在全球共有13个根域名服务器,根服务器是互联网域名解析(DNS)系统中最高级别的域名服务器,目前的分布是:主根服务器美国1个,设置在弗吉尼亚州的杜勒斯;辅根服务器美国9个,英国、瑞典、日本各1个,根域我们用一个点表示,其实每个网址的最后边都有一个点,只是我们平时省略而已,例www.asuszp.net.。接下来就是按照国家分的顶级域名。比如中国是.CN、日本是.JP、美国是.US、香港是.HK等。二级域名就是按照我们的行业来制定的,比如商业用途的.com、网络用途的.net、非盈利性组织的.org。三级域名呢?比如.asuszp.net、.88hxt.com、.v8d8.com等,其实在每个net了com了后边还有一个根域的"点",那这里呢?我们就省略不写,上边也写过这块的内容。最后呢就是主机头,何为主机头呢,比如www.asuszp.net,mail.asuszp.net 或者是bbs.v8d8.com,前边的www mail bbs 等都成为主机头。然而好多网址都是以http://开头这个又是什么呢,这个是一种通讯协议比如我们常见的http。
2、服务端
bind ##安装包
named ##服务名称
/etc/named.conf ##主配置文件
/var/named ##数据目录
53 ##端口
- 报错信息
- no servers could be reached
服务无法访问(服务开启;火墙;网络;端口) - 服务启动失败
配置文件写错journalctl
-xe
查询错误 - dig 查询状态
NOERROR ##表示查询成功
REFUSED ##服务拒绝访问
SERVFAIL ##查询记录失败,(dns服务器无法到达上级,拒绝缓存)
NXDOMAIN ##此域名A记录在dns中不存在
二、dns服务的安装与启用
- 安装
dnf install bind.x86_64 -y
- 启用
systemctl enable --now firewalld
firewall-cmd --permanent --add-service=dns
firewall-cmd --reload
vim /etc/named.conf ##主配置文件
///
11 listen-on port 53 { any; }; ##在本地所有网络接口上开启53端口
19 allow-query { any; }; ##允许查询A记录的客户端列表
34 dnssec-validation no; ##禁用dns检测使dns能够缓存外部信息到本机
///
systemctl restart named
#配置文件设定
#启用服务
- 网关设定(详情可看网络配置)
###真机
firewall-cmd --add-masquerade ##地址伪装
###westosa
vim /etc/sysconfig/network-scripts/ifcfg-westosa
///
BOOTPROTO=none
IPADDR=172.25.254.109
PREFIX=24
NAME=westosa
DEVICE=ens3
ONBOOT=yes
GATEWAY=172.25.254.250
DNS1=114.114.114.114
///
nmcli connection reload
nmcli connection show
ifconfig
route -n ##查看网关
cat /etc/resolv.conf ##查看DNS
ping www.baidu.com ##查看网络是否畅通
#网关设定
- 测试
###dns主机(当前是虚拟机a172.25.254.109)
vim /etc/resolv.conf
///
nameserver 114.114.114.114
///
###测试主机:
vim /etc/resolv.conf
///
nameserver 114.114.114.114
///
dig www.baidu.com
查看状态:NOERROR
vim /etc/resolv.conf
///
nameserver 172.25.254.109
///
dig www.baidu.com
查看状态:SERVFAIL
vim /etc/named.conf
///
34 dnssec-validation no; ##禁用dns检测使dns能够缓存外部信息到本机
///
systemctl restart named
dig www.baidu.com
查看状态:NOERROR
#得到域名www.baidu.com的地址详细解析信息,NOERROR
表示解析成功
#对一个不存在的域名进行解析得到的地址详细解析信息中,NXDOMAIN表示此域名A记录不存在,对这一解析结果负责的授权起始主机有两台
三、高速缓存dns
当内网主机访问www.baidu.com时,内网主机需要通过访问地址解析服务器得到www.baidu.com的ip,这一过程花费时间较多
同样的,当内网网段其他主机访问时也需要通过访问地址解析服务器得到ip
因为第一台主机已经获得了解析资源,所以在第一台主机上搭建高速缓存dns
这样内网网段其他主机访问www.baidu.com时可以直接在第一台主机上进行地址解析
内网通信速度比外网通信快,节省时间。
实验步骤:
- 虚拟机westosa
vim /etc/named.conf
///
20 forwarders { 114.114.114.114; }; ##使用国内域名解析服务器源114.114.114.114进行数据缓存(而不是根dns服务器,节省时间)
///
systemctl restart named
测试:
- 虚拟机westosb
vim /etc/resolv.conf
///
nameserver 172.25.254.109
///
dig www.taobao.com
#Query time: 1328 msec
- 真机
vim /etc/resolv.conf
///
nameserver 172.25.254.109
///
dig www.taobao.com
#Query time: 55 msec
#真机dns设定
#虚拟机westosb耗时1328ms
#真机耗时55ms
因为westosb主机已经缓存在109主机,所以真机速度很快
四、dns的正向解析
1、dns正向解析
- 实验步骤
vim /etc/named.conf
///
# forwarders { 114.114.114.114; }
##搭建一个对外提供dns解析服务的服务器,所以需要注释掉询问别的dns主机的内容
///
systemctl restart named
vim /etc/named.rfc1912.zones ##编辑指定外网的维护域名
///
zone "westos.org" IN { ##维护的域名
type master; ##当前服务器位主dns
file "westos.org.zone"; ##指定进行解析动作时读取的域名A记录文件
allow-update { none; }; ##允许更新主机列表
};
///
编辑域名A记录文件
cd /var/named/ ##dns服务的数据目录
cp -p named.localhost westos.org.zone ##复制域名A记录文件模板为 /etc/named.rfc1912.zones中指定读取的域名A记录文件
vim westos.org.zone ##外网解析记录文件
///
$TTL 1D ##TIME-TO-LIVE(dns地址保存时间长度)
@ IN SOA dns.westos.org. root.westos.org. ( #SOA授权起始(Start of Authority)
##修改@符号的值等于文件中书写的维护域名
0 ; serial #域名版本序列号
1D ; refresh #刷新时间(辅助dns)
1H ; retry #重试时间(辅助dns)
1W ; expire #过期时间(辅助dns,查询失败过期停止对辅助域名的应答)
3H ) ; minimum #A记录最短有效期
NS dns.westos.org.
dns A 172.25.254.109 ##添加正向解析A记录
www A 172.25.254.9
www A 172.25.254.119
///
systemctl restart named
#将www.westos.org解析为172.25.254.9;将www.westos.org解析为172.25.254.119
[注意] “.”,dns服务器会通过$ORIGIN补足剩余部分.westos.org
- 测试
###westosb
dig www.westos.org #查询正向解析(此时两个ip会相互交换位置)
#得到dns服务器westosa域名A记录文件的正向解析记录中对应的IP
[注意] 当同一个域名对应两个ip时,dig时两个ip会轮换,不应太快速,轮换需要时间
2、规范性域名解析,转换CNAME
- 实验步骤
vim westos.org.zone
///
www CNAME westos.a.westos.org. ##规范域名
westos.a A 172.25.254.119 ##正向解析记录,将www.westos.org解析为172.25.254.9
westos.a A 172.25.254.9 ##将www.westos.org解析为172.25.254.119
///
systemctl restart named
#添加规范域名转换及对应的正向解析A记录
- 测试
此时在westosb中dig www.westos.org,westosa会先对www.westos.org进行规范域名转换,将其转换为westos.a.westos.org,再进一步得到域名A记录文件的正向解析记录中域名对应的IP
###westosb
dig www.westos.org
#得到域名A记录文件的正向解析记录中域名对应的IP
3、dns邮件记录的正向解析
发送邮件时,需要先对接收方的域名进行解析获得接收方IP地址后,,才能发送邮件,解析过程称为正向解析。
MX记录用来定义用于域的邮件交换。这有助于电子邮件正确到达您的邮件服务器。
- 实验步骤
###westosb
dnf install postfix mailx -y
systemctl start postfix.service
###westosa
vim westos.org.zone
///
westos.org. MX 1 172.25.254.109. ##邮件解析记录(mx-邮件服务器IP),1表示优先级为1
///
systemctl restart named
#添加邮件解析记录
- 测试
###westosb
#此时在那安装邮件软件,就在哪里测试
mail root@westos.org ##需要先安装postfix mailx
mailq ##查看是否有邮件记录,但是被拒绝,因为不能解析邮件来源
#邮件中可以看到接受方IP为westosa主机IP
五、dns的反向解析
DNS反向解析:将IP地址转化为域名
vim /etc/named.rfc1912.zones
///
zone "254.25.172.in-addr.arpa" IN { ##定义解析库名,IP反写
type master;
file "172.25.254.ptr"; ##定义区域解析库文件名(反向解析一般在文件名后加一个.ptr的后缀)
allow-update { none; };
};
///
#指定反向解析ptr的维护网段和反向解析记录文件
cd /var/named ##dns服务的数据目录
cp -p named.loopback 172.25.254.ptr ##复制反向解析记录文件模板
vim 172.25.254.ptr
///
$TTL 1D
@ IN SOA dns.westos.org. root.westos.org. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.westos.org.
dns A 172.25.254.109
109 PTR mail.westos.org. ##添加反向解析PTR记录,将172.25.254.109解析为mail.westos.org
209 PTR www.westos.com. ##将172.25.254.209解析为www.westos.com.
///
systemctl restart named
#编写该反向解析记录文件,添加反向解析PTR记录
- 测试
###真机/westosb
dig -x 172.25.254.109
#ip被反向解析为反向解析PTR记录中所对应的域名
#ip被反向解析为反向解析PTR记录中所对应的域名
六、dns的双向解析
DNS双向解析: 通过内网和外网访问同一个域名时,获取到不同的ip地址
1、实验环境
- 不同网段的客户端两台
- 有对应两个网段ip的服务端一台
- 配置两台客户端主机的dns地址为对应网段的服务器ip
##客户端2台
#1.1.1网段(虚拟机b)
vim /etc/sysconfig/network-scripts/ifcfg-westosb
///
BOOTPROTO=none
IPADDR=1.1.1.209
PREFIX=24
NAME=westosb
DEVICE=ens3
ONBOOT=yes
DNS1=1.1.1.109
///
nmcli connection reload
nmcli connection up westosb
#172.25.254网段(真机)
172.25.254.9
##服务端1台(虚拟机a)2个网段的ip
vim /etc/sysconfig/network-scripts/ifcfg-westosa
///
BOOTPROTO=none
IPADDR0=172.25.254.109
PREFIX0=24
NAME=westosa
GATEWAY=172.25.24.250
DNS1=114.114.114.114
DEVICE=ens3
ONBOOT=yes
IPADDR1=1.1.1.109 ##添加一个ip
PREFIX1=24
///
nmcli connection reload
nmcli connection up westosa
#在1.1.1网段的客户主机中(1.1.1.209)
vim /etc/resolv.conf ##dns地址
///
nameserver 1.1.1.109
///
#在172.25.254网段的客户主机中(172.25.254.9)
vim /etc/resolv.conf
///
nameserver 172.25.254.109
///
#westosb主机网络图形设定方式
#westosa主机网络设定
#真机(172网段客户机)dns设定
#虚拟机b(1网段客户主机)dns设定
2、实验
- 在dns服务的数据目录/var/named中复制模板(-p),编写外网解析记录文件westos.org.inter
cd /var/named/
cp -p westos.org.zone westos.org.inter
vim westos.org.inter ##外网解析记录文件
///
$TTL 1D
@ IN SOA dns.westos.org. root.westos.org (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.westos.org.
dns A 1.1.1.109
www CNAME westos.a.westos.org.
westos.a A 1.1.1.109
westos.a A 1.1.1.9
westos.org. MX 1 1.1.1.109. #mail exchanger
///
##可以使用:%s/172.25.254/1.1.1/g将172.25.254统一修改为1.1.1
#外网解析记录文件配置
- 在westosa中复制/etc/named.rfc1912.zones得到/etc/named.rfc1912.zones.inter,编写该文件指定外网的维护域名和解析记录文件
cp -p /etc/named.rfc1912.zones /etc/named.rfc1912.inters ##-p复制权限
vim /etc/named.rfc1912.inters
zone "westos.org" IN { ##编辑指定外网的维护域名
type master;
file "westos.org.inter"; ##解析记录文件
allow-update { none; };
};
#编辑子配置文件
- 注释掉原有解析体系,建立内外网两个不同的解析体系,设定1内网网段主机进行域名解析时读取记录内网维护域名的语句块的文件 /etc/named.rfc1912.inters,设定其余外网网段主机进行域名解析时读取记录外网维护域名的语句块的文件 /etc/named.rfc1912.zones
vim /etc/named.conf ##dns主配置文件
///
#zone "." IN {
## type hint;
## file "named.ca";
##};
#
##include "/etc/named.rfc1912.zones";
##include "/etc/named.root.key";
view localnet {
match-clients { 1.1.1.0/24; };
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.inters";
};
view anyone {
match-clients { any; };
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/named.rfc1912.zones";
};
///
systemctl restart named ##注意重启服务
#编辑主配置文件
- 测试
分别在2个网段的主机中作同样域名的地址解析,得到的A记录不同
dig www.westos.org
#真机(172网段客户主机)解析得到172网段ip
#虚拟机b(1网段客户主机)解析得到1网段ip
七、dns集群
DNS服务器一般在用的时候,为了缓解服务器的压力,多使用一个主DNS服务器,
多个副DNS服务器,这些DNS服务器就组成了一个DNS集群
1、实验准备
将westosb虚拟机ip还原为172网段(172.25.254.209)
还原westosa主机配置文件/etc/named.conf中的解释体系
关闭两台主机的火墙
将westosb(172.25.254.209)主机作为辅DNS服务器,将westosa(172.25.254.109)主机作为主DNS服务器
#设定westosb主机ip为172网段
2、实验
1)主DNS服务器:westosa(172.25.254.109)主机
- 编辑dns服务器westosa的配置文件 /etc/named.conf,注释(/* */)掉建立的内外网两个不同的解析体系,还原之前的解析体系
#还原解释体系
- 设定当westosa中解析记录文件更新时通知辅助dns
vim /etc/named.rfc1912.zones ##编写区域文件
///
zone "westos.org" IN {
type master;
file "westos.org.zone";
allow-update { none; };
also-notify { 172.25.254.209; }; ##主动通知的辅助dns主机(这里可以设置多个,用;隔开)
};
///
systemctl restart named
#维护域模块中添加also-notify
参数,设定主动通知的辅助dns主机
2)辅DNS服务器:westosb(172.25.254.209)主机
- 安装bind软件并启用
dnf install bind -y
firewall-cmd --add-service=dns
- 编辑主配置文件,在本地所有网络接口上开启53端口,允许所有访问客户端查询A记录,关闭dns安全检测功能参数
vim /etc/named.conf ##主配置文件
///
listen-on port 53 { any; }; #监听端口53,监听ip:所有网段的ip
allow-query { any; }; ##允许所有人访问dns服务
dnssec-validation no; ##无需互联网认证
///
- 编写区域文件,指定维护域名,指定该dns服务器类型为辅助dns(master—主dns slave—辅助dns),指定其主dns的ip,指定解析时读取存放在/var/named/slaves目录下的解析记录文件
vim /etc/named.rfc1912.zones ##区域文件
///
zone "westos.org" IN {
type slave; ##dns状态位辅助dns
masters { 172.25.254.109; }; ##主dns
file "slaves/westos.com.zone"; ##同步数据文件(默认区域解析库文件在/var/named/slaves目录下)
};
///
#指定维护域名,指定该dns服务器类型为辅助dns,指定其主dns的ip
- 将westosb的/etc/resolv.conf中的域名解析指向设置为它自己的ip,重启服务
vim /etc/resolv.conf
///
nameserver 172.25.254.209
///
systemctl restart named
3)测试
- 在westosb中dig域名可以得到与westosa中相同的解析IP
- 修改westosa主dns服务器A记录文件,并变更域名版本序列号的值
vim /var/named/westos.org.zone
systemctl restart named
#修改区域解析库文件
- 辅助dns的dig值跟随主dns变化
#dig值跟随主dns服务器变化
八、dns的更新
1、问题详情
当westosb主机设定为自动获取ip时,dig其自身并不能实时改变ip
- dns主机(westosa109)
配置dhcp服务,为westosb主机随机分配ip
##配置dhcp服务
dnf install dhcp-server.x86_64 -y
cp /usr/share/doc/dhcp-server/dhcpd.conf.example /etc/dhcp/dhcpd.conf
vim /etc/dhcp/dhcpd.conf
///
set nu ##设置行号
27,28 ##多余的,“#”注释
39之后 ##不需要,删掉或注释(命令模式下d删掉光标之后的内容,u可以恢复)
7 --westos.org ##域名
8 --172.25.254.109
32 172.25.254.0 255.255.255.0 ##网络位和子网掩码
33 172.25.254.60 172.25.254.90 ##地址池,客户主机获取ip的范围(和子网同一个网络位)
34 172.25.254.109 ##dhcp获得的网关,企业的网关是已知的,此时是无关的,所以可以随便设置
///
systemctl restart dhcpd
systemctl restart named
- westosb
设定自动获取ip,获取到ip为60
nm-connection-editor(dhcp) ##注意删除原有ip
nmcli connrction reload
nmcli connrction up westosb
ifconfig(ip=60)
#设定自动获取ip
#获取到ip为60
- westosa
编辑dns服务器westosa的域名A记录文件,为主机域名为westosb.westos.org的虚拟主机westosb添加A记录,重启服务
vim /var/named/westos.org.zone
///
westosb A 172.25.254.60
///
systemctl restart named
- westosb
dig其自身域名,可以获取到自身ip
dig westosb.westos.org
- westosa
更改dhcp配置文件中地址池范围,为westosb主机重新分配ip
vim /etc/dhcp/dhcpd.conf
///
33 172.25.254.61 172.25.254.90
///
systemctl restart dhcpd
systemctl restart named
- westosb
重启网络连接,获取到ip为61,但是dig其自身域名,并不能获得自身ip,因为受westosa主机/var/named/westos.org.zone文件控制
#重新获取ip为61
#dig自身时,ip并未改变
2、dns基于ip地址的更新
- 在dns中设定:
vim /etc/named.rfc1912.zones
///
zone "westos.org" IN {
type master;
file "westos.org.zone";
allow-update { 172.25.254.109; }; ##允许指定客户端更新westos域
also-notify { 172.25.254.209; };
};
///
systemctl restart named
#允许指定客户端更新westos域
- 更改dns服务器westosa的域名A记录文件,重启服务
vim /var/named/westos.org.zone
///
westosb A 172.25.254.61
///
systemctl restart named
- westosb中,dig自身域名,获取到ip
dig westosb.westos.org
3、dns基于key更新
- 删除dns服务器westosa的域名A记录文件,重启服务
- 查看/etc/rndc.key中默认的dns更新许可密钥的加密方式,切换到一个/mnt目录中,dnssec-keygen为dns生成更新许可密钥(-a指定加密方式,选择默认加密方式;-b指定生成的密钥长度;-n指定密钥的名称类型,这里是为本机HOST生成密钥)
cd /mnt
dnssec-keygen -a HMAC-SHA256 -b 128 -n HOST westoskey ##生成key -a,加密方式;-b 加密长度;-n 指定密钥的名称类型
ls
cat Kwestoskey.+163+29512.private
///
key "westoskey" {
algorithm hmac-sha256;
secret "SJAdtuVj3Let6faZVJVMKg==";
};
///
- 复制dns更新密钥指定模板,修改生成更新密钥指定文件
- 接着编辑dns服务的主配置文件添加读取更新密钥指定文件语句,再编辑/etc/named.rfc1912.zones在维护域模块中修改allow-update参数的值,设定拥有指定密钥才可以更新dns的解析A记录文件,重启服务
vim /etc/named.conf
///
44 include "/etc/westos.key"; ##使dns知道key文件存在
///
vim /etc/named.rfc1912.zones
///
zone "westos.org" IN {
type master;
file "westos.org.zone";
allow-update { key westoskey; };
also-notify { 172.25.254.209; };
};
///
systemctl restart named
#添加读取更新密钥指定文件语句
#修改allow-update参数的值
- ddns(dhcp+dns)编辑dhcp配置文件,开启dhcp更新dns的功能,为dhcp分发更新dns的认证密钥,指定使用密钥的域
vim /etc/dhcp/dhcpd.conf
///
14 #ddns-update-style interim; ##删除注释符,修改none为interim
38 key westoskey {
39 algorithm hmac-sha256;
40 secret SJAdtuVj3Let6faZVJVMKg==;
41 };
42
43 zone westos.org. {
44 primary 127.0.0.1; ##dns和dhcp为同一台主机,所以使用回环接口就可以通信
45 key westoskey;
46 }
///
systemctl restart dhcpd
- 测试
在westosa主机修改/etc/dhcp/dhcpd.conf文件中的地址池,在westosb主机中重启网路,获取新ip,dig自身域名,得到对应ip
#修改地址池
#获取ip
#dig自身域名,获得对应ip