企业级DNS服务器
1. DNS的基础定义
1.1 DNS的定义
- dns ,domin name service(域名解析服务)
- DNS使用TCP和UDP协议,使用端口号53。对于每一级域名长度的限制是63个字符,
- 域名总长度则不能超过253个字符。 53/TCP:完成区域传送; 53/UDP:完成主机名的解析查询。
1.2 DNS的意义
DNS是一个按层次结构排列的分布式系统,由许多DNS服务器组成。DNS服务器是注册加入DNS的任何计算机。当你在浏览器中键入域名时,浏览器会询问DNS服务器该域的IP地址是什么,DNS服务器会尝试告诉你,只有通过DNS找到域名对应的ip,才可以正常访问。如果它不知道,那么它会尝试从其他DNS服务器中找出。
1.3 DNS的分类
- 权威服务器,权威DNS :直接有客户需要的答案,客户给一个域名直接就能访问,存储并提供某区域 ( 整个 DNS 域或 DNS 域的一部分 ) 的实际数据。
- 权威名称服务器的类型包括: Master : 主DNS,包含原始区域数据,有时称作 “主要 ”名称服务器。 Slave : 辅助DNS ,通过区域传送从 Master 服务器获得的区域数据的副本,有时称作 “次要 ”名称服务器。
- 非权威 / 递归名称服务器,非权威DNS:里面没有客户需要的答案,但它会通过访问114.114.114.114等权威DNS找到答案给用户(相当于代购),客户端通过其查找来自权威名称服务器的数据。
- 递归名称服务器的类型包括:缓存名称服务器 : 仅用于查找 ,不负责解析域,只是缓存域名解析结果。
1.4 DNS查找过程
- 客户端上的 Stub 解析器(根解析器)将查询发送至 /etc/resolv.conf 中的名称服务器,如果名称服务器对于请求的信息具有权威性 , 会将权威答案发送至客户端,如果名称服务器在其缓存中有此请求的信息,则会将非权威答案发送至客户端,如果缓存中没有该信息 , 名称服务器将搜索权威名称服务器来查找信息 ,从根区域开始 ,按照DNS层次结构向下搜素 , 直至对于信息具有权威性的名称服务器 ,以此为客户端获得答案,在此情况中名称服务器将信息传递至客户端并在自己的缓存中保留一个副本 , 以备以后查找。
2. 搭建DNS服务器及排错
内容 | 含义 |
---|---|
A 记录 | ip地址叫做域名的 Address记录 |
SOA | 授权起始主机 |
dns | 顶级 |
. | 自动补齐域名 |
.com .net .org … | 次级 |
- 环境:
- 俩台主机,一台作为dns服务器,第二个作为客户端测试机
- 1. 客户端配置:
- 配置ip为172.25.254.210
- vim /etc/resolv.conf ## dns指向文件
- nameserver 172.25.254.110 (dns服务器的ip) ##文件内容
- host www.baidu.com ##地址解析命令
- dig www.baidu.com ##地址详细解析信息命令,这俩条命令用来测试
- 2. dns服务器配置
- bind ##安装包
- named ##服务名称
- /etc/named.conf ##主配置文件
- /var/named ##数据目录
- 53 ##端口
- 关于报错信息:
- 1. no servers could be reached ##服务无法访问(服务开启?火墙?网络?端口?)
- 2. 服务启动失败 ##配置文件写错 journalctl -xe ## 查询错误或cat /var/log/messages
- 3. dig查询状态
- NOERROR ##表示查询成功
- REFUSED ##服务拒绝访问
- SERVFAIL ##查询记录失败(dns服务器无法到达上级,拒绝缓存)
- NXDOMAIN ##此域名A记录在dns中不存在
- 2.1 dns 服务器配置文件修改的内容
- dnf install bind.x86_64 -y ##安装dns服务
- systemctl enable --now named ##启动dns服务
- vim /etc/named.conf ##编辑dns配置文件
- listen-on port 53 { any; }; ##允许所有人ip都可以访问53端口
- #listen-on-v6 port 53 { ::1; };## ipv6注释掉
- allow-query { any; }; ##允许任何用户使用此dns
- forwarders { 114.114.114.114; }; ##当找不到时,问114.114.114.114高速缓存dns
- dnssec-validation no; ##检验是否授权,花钱认证没有,没有直接不检测
- 3. 测试
- 客户机进行测试
- dig www.baidu.com
-
客户端的配置
-
服务端配置(保证有网)
vim /etc/named.conf
配置完成后一定要重启服务!!! -
测试
4. 配置文件不修改出现的错误
no servers could be reached
REFUSED
SERVFAIL,已经访问到,并且接收到了请求,但是此dns服务器解决不了,所以添加114.114.114.114dns服务器来帮忙解决!!
SERVFAIL
NOERROR
3. 告诉缓存DNS服务器(可提高访问内网的效率)
- vim /etv/named.conf
- forwarders { 114.114.114.114; };
- 实验在标题2中做
4. 正向解析
预热知识,提前了解一下。
@变量 | 含义 |
---|---|
主机记录(A记录) | 记录是用于名称解析的重要记录,它将特定的主机名映射到对应主机的ip地址上 |
别名记录(CNAME记录) | CNAME记录用于将某个别名指向到某个A记录,这样就不需要再为某个新名字创建一条新的记录 |
ipv4主机记录(A记录) | ipv4的标志,用于将特定的主机名映射到一个主机的ipv4地址 |
ipv6主机记录(AAAA记录) | ipv6的标志,与A记录对应,用于将特定的主机名映射到一个主机的ipv6地址 |
服务位置记录(SRV记录) | 用于定义提供特定服务的服务器的位置,如主机(hostname),端口(port number)等 |
NAPTR记录 | 它提供了正则表达式方式去映射一个域名,NAPTRA记录非常著名的一个应用是用于ENUM查询 |
PTR IPV4/IPV6 | 地址至名称 |
MX | 用于名称的邮件交换器(向何处发送电子邮件) |
NS | nameserver,管理这个域名的服务器的主机的名称 |
SOA | “授权起始”,DNS区域的信息(管理信息) |
文件内容 | 含义 |
---|---|
zone “westos.org” | 自己设置的域名 |
type master | 当前服务器为主dns |
allow-update | 允许更新主机列表 |
file “westos.org.zone” | 域名A记录文件 |
/var/name/westos.org.zone内部文件 | 含义 |
---|---|
TIME-TO-LIVE | DNS地址保存时间长度 |
SOA | SOA授权起始(Start of Authority) |
serial | 域名版本序列号,每次修改ip,都需要+1,别的主机才会同步ip |
refresh | 刷新时间(辅助dns) |
retry | 重试时间(辅助dns) |
expire | 过期时间(辅助dns,查询失败过期,停止对辅助域名的应答) |
minimum | A记录最短有效期 |
CNAME | 域名规范 |
MX 1 | 邮件解析,优先级为1 |
- 1. 先关闭/etc/named.conf中的高速缓存dns
- 2. vim /etc/named.rfc1912.zones ##编辑并添加如下内容
- zone "westos.org" IN {
- type master;
- file "westos.org.zone";
- allow-update { none; };
- };
- 3. 编写解析文件内容如下图
- cp -p name.localhost westos.org.zone ##复制模板文件,一定要复制权限
关闭高速缓存dns
vim /etc/named.rfc1912.zones
编写解析文件内容
完成后重启服务!!!
测试dig zhy.westos.org 查询正向解析
4.1 轮换
4.2 邮件解析
- dnf install postfix mailx -y
- systemctl enable --now postfix ##启动服务
- mail root@westos.org ##发送邮件
- mailq ##查询邮件,发现发送不成功
- vim /var/named/westos.org.zone
- westos.org. MX 1 172.25.254.110. 配置文件添加如下命令,MX邮件服务
- mail root@westos.org ##
- mailq ##再次发送查询,发现还是不行
- netstat -antlupe | grep master ##查询端口,发现25端口使用的是回环接口
- vim /etc/postfix/main.cf ##修改配置文件,内容如下
- 135行 inet_interfaces=all
- mail root@westos.org ##
- mailq ##再次发送查询,发现可以了
- dig -t mx westos.org ##测试
设置配置文件/var/named/westos.org.zone
稍作修改,让192.168.1.110来接收邮件!
邮件解析不成功的情况
5. 反向解析
- vim /etc/named.rfc1912.zones ##编写配置文件,内容如下
- zone "1.168.192.in-addr.arpa" IN {
- type master;
- file "192.168.1.ptr";
- allow-update { none; }
- };
-
- cd /var/named/
- cp -p named.loopback 192.168.1.ptr ##复制一份模板
-
- vim 192.168.1.ptr ##文件内容下图中看,我会标明
- systemctl restart named ##重启服务
- dig -x 192.168.1.333 ##测试(在客户端进行测试)
6. 双向解析
- dns服务器让不同的人解析不同的网络地址,设置客户端解析外网1.1.1.0网段
- 真机解析192.168.1.0网段
- 配置网址:服务端:ip addr add 1.1.1.110/24 dev enp1s0
- 客户端:ip addr add 1.1.1.210/24 dev enp1s0
- 真机:192.168.1.100 不需要变
- 设置dns解析文件,/etc/resolv.conf 客户机:nameserver=1.1.1.110
- 真机:nameserver=192.168.1.110
- 配置服务端:
- 因为有俩个客户端,一个client,一个真机
- 所以我们需要两份配置文件
- cp -p /var/named/westos.org.zone /var/named/westos.org.inter
- 修改内容:%s/192.168.1/1.1.1/g
- cp -p /etc/named.rfc1912.zones /etc/named.rfc1912.zones.inter
- 修改内容:zone "westos.org" IN {
- type master;
- file "westos.org.inter";
- allow-update { none; }
- };
- vim /etc/named.conf
- 注释掉51-57行 也就是 zone "." IN {
- type hint;
- file "named.ca";
- };
- include "/etc/named.rfc1912.zones";
- 然后编写如下内容:
- view localnet {
- match-clients {192.168.1.0/24; };
- zone "." IN {
- type hint;
- file "named.ca";
- };
- include "/etc/named.rfc1912.zones";
- };
-
- view internet {
- match-clients {1.1.1.0/24; };
- zone "." IN {
- type hint;
- file "named.ca";
- };
- include "/etc/named.rfc1912.zones.inter";
- };
6.1 服务机、客户机、真机的配置
服务机
客户机
真机
6.2 配置服务机
- 相当于有俩个客户端,现在需要做俩份配置文件
更改/var/named/文件
更改/etc/named.rfc1912.zones 和 /etc/named.rfc1912.zones.inter
更改/etc/named.conf
完成后重启服务!!!
6.3 测试:真机和客户端分别dig zhy.westos.org
真机:
客户机
7. DNS集群
7.1 dns 集群的搭建
- 服务端:
- 首先注释掉之前的双向解析的内容,还原文件信息,保证实验环境的纯净。也可以不还原。
- vim /etc/named.rfc1912.zones ##书写内容如下:
- zone "westos.org" IN {
- type master;
- file "westos.org.zone";
- allow-update { none; };
- also-notify { 192.168.1.210; }; ##允许210主机作为集群,读取110主机的数据
- };
- 客户端:
- dnf install bind.x86_64 -y ##安装dns服务
- systemctl enable --now named ##启动dns服务
- vim /etc/named.conf ##编辑主配置文件内容如下
- listen-on port 53 { any; };
- allow-query { ant; };
- dnssec-validation no;
- vim /etc/named.rfc1912.zones
- zone “westos.org” IN {
- type slave; ##dns状态位,表示辅助dns
- masters {192.168.1.110; }; ##主dns
- file "slaves/westos.org.zone"; ##同步的数据文件,即配置文件
- };
- systemctl restart named
服务端:
/etc/named.rfc1912.zones
客户机:
7.2 同步集群和主dns的解析数据(更新)
测试:
7.2.1 临时同步和更新(每台主机都需要手动操作,麻烦)
服务端更新,客户端删除文件在重启服务,也会更新。
7.2.2 自动更新
- vim /var/named/westos.org.zone ##编辑配置文件修改ip
- ##同时修改参数serial ,此参数是递增变化的
- ##每修改一次ip,这个参数设置+1,从属dns自动同步
- systemctl restart named ##重启服务
7.2.3 通过设定ip,来进行更新
设置服务端文件内容,增加允许更新的主机ip
- 服务端
- vim /etc/named.rfc1912.zones
- zone "westos.org" IN {
- type master;
- file "westos.org.zone";
- allow-update { 192.168.1.210; }; ##增加这一行,允许210更新110dns服务器
- also-notify { 192.168.1.210; };
- };
-
- 客户端
- nsupdate
- > server 192.168.1.110 ##发送到的dns服务器
- > update add test.westos.org 86400 A 192.168.1.123 ##更新一个网址和ip
- > send ##发送
- > quit ##退出
服务端设置允许更新的ip
客户端发送更新数据
服务端查看是否接收到客户端发来的更新数据
恢复环境,保证下一种恢复方法的环境纯净
客户端删除刚才发送的数据
服务端删除刚才接收到的数据文件
7.2.4 通过密钥的方式来进行更新(更安全)
前言
- rpm -ql bind | less ##分页方式显示bind安装的所有文件
- /etc/rndc.key ##我们可以用来参考里面的密钥类型及用法
- dnssec-keygen --help ##查看密钥加密的帮助
- -a 表示采用什么加密方式 -b 指密钥长度 -n 指加密的类型
-
服务端加密过程及命令
- dnssec-keygen -a HMAC-SHA256 -b 128 -n host westos ##westos是起得名字
- cp -p /etc/rndc.key /etc/westos.key ##复制一份当作模板文件
- vim /etc/westos.key ##编辑此密钥文件,输入以下内容
- key "生成密钥时起的名字" {
- alogrithm hamc-sha256; ##加密类新
- secret “从刚才生成的密钥文件中复制”
- };
- vim /etc/named.conf ##编辑主配置文件,加入密钥信息
- include "/etc/westos.key"; ## 我加在了52行左右
- vim /etc/named.rfc1912.zones ##编辑配置文件,设置允许更新为密钥更新
- zone "westos.org" IN {
- type master;
- file "westos.org.zone";
- allow-update { key westos; };
- also-notify { 192.168.1.210; };
- };
- systemctl restart named ##重启服务
- scp Kwestos.+163+42627.* root@192.168.1.210:/mnt ##将密钥发送给210客户端
-
客户端测试:
- nsupdate -k Kwestos.+163+30796.private ##更新成功
服务端的操作流程:
客户端的操作:
8. 配置动态dns,动态域名解析,即ddns(dns+dhcp)
- 服务端:
- 基础配置的修改
- dnf install dhcp-server ##安装 dhcp服务
- cp /usr/share/doc/dhcp-server/dhcpd.conf.example /etc/dhcp/dhcpd.conf
- 然后修改基础配置,这部分之前学过,我就不写了,我会在下面截图
- ddns配置的修改
- vim /etc/dhcp/dhcpd.conf ##编辑配置文件修改内容,修改内容如下
- ddns-update-style interim;
- key westos {
- algorithm hmac-sha256;
- secret 8dCEDvn8PKKNt+B67aQtNA==; ##密钥时之前生成的
- };
- zone westos.org. {
- primary 127.0..0.1; ##自身作为服务器,所以直接写成回环接口就可以,也可以写成192.168.1.110
- key westos;
- };
- systemctl restart dhcpd
- 测试:
- 服务端修改dhcp服务的ip范围,客户端会自动更新ip
- dig 测试端hostname.westos.org ##是给每一个客户端分配ip,所以需要知道客户端的主机名
- ##即dig 主机名.westos.org
下载并进行基本配置文件的修改
设置客户端的获取ip方式为dhcp方式
设置ddns工作方式
测试