提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
一、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层次结构向下搜素 , 直至对于信息具有权威性的名称服务器 ,以此为客户端获得答案,在此情况中名称服务器将信息传递至客户端并在自己的缓存中保留一个副本 , 以备以后查找。
二、DNS服务器搭建
环境准备
俩台主机,一台作为dns服务器(是我的server4),第二个作为客户端测试机(我的server3)
2.1 客户端配置
配置ip为1.2.3.3
vim /etc/resolv.conf ## dns指向文件
nameserver 1.2.3.4 (dns服务器的ip) ##文件内容
host www.baidu.com ##地址解析命令
dig www.baidu.com ##地址详细解析信息命令,这俩条命令用来测试
2.2 dns服务器配置
- 概括
bind ##安装包
named ##服务名称
/etc/named.conf ##主配置文件
/var/named ##数据目录
53 ##端口
- 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; ##检验是否授权,花钱认证没有,没有直接不检测
- 关于报错信息:
1. no servers could be reached ##服务无法访问(服务开启?火墙?网络?端口?)
2. 服务启动失败 ##配置文件写错 journalctl -xe
## 查询错误或cat /var/log/messages
2.3 dig查询状态
NOERROR ##表示查询成功
REFUSED ##服务拒绝访问
SERVFAIL ##查询记录失败(dns服务器无法到达上级,拒绝缓存)
NXDOMAIN ##此域名A记录在dns中不存在
- 测试
客户机进行测试
dig www.baidu.com
三、高速DNS服务器(缓存dns解析到本地,加速本地机访问)
3.1 对dns服务器设置
vim /etc/named.conf
- listen-on port 53 { any; }; ## 允许所有主机,默认是127.0.0.1
- allow-query { any; }; ## 允许所有用户,默认是本地用户 localhost
- forwarders { 114.114.114.114; }; ##从114上缓存dns
- dnssec-validation no; ##关闭dns认证,因为本地dns服务器未认证
3.2 对客户机的设置
vim /etc/resolv.conf
- nameserver dns服务器ip
3.3 测试
1)服务器时间
2) 设置为1.2.3.4 dns服务的客户机dig 百度时间
3) 普通客户机
四、正向解析
注:正向解析就是给一个域名,dns服务器自动给解析成ip地址,可以解析成一个,可以解析成多个
相关配置文件内术语解释
@变量 | 含义 |
---|---|
主机记录(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 “haojin.com” | 自己设置的域名 |
type master | 当前服务器为主dns |
allow-update | 允许更新主机列表 |
file “haojin.com.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 |
4.1 轮巡解析
1)注释配置文件forwarders,关闭高速dns
2)主配置文件写
zone “haojin.com” IN {
type master;
file “haojin.com.zone”
};
都写非常长,把上面内容写进子配置文件 /etc/named.rfc1912.zones
也可
3)编写解析文件,首先进入到/var/named/
目录下,然后拷贝一份模板(-p加上文件权限)
cp -p named.localhost haojin.com.zone -p 复制文件权限
vim haojin.com.zone
原始内容:
修改成:
实现dns服务器轮巡解析功能。
使用dig测试,100和101地址轮换!这里测试不要太快,就可以看到变化。
4.2 邮件解析(邮件无法发送)
- dnf install postfix mailx -y
- systemctl enable --now postfix ##启动服务
- mail root@haojin.com ##发送邮件
- mailq ##查询邮件,发现发送不成功
- vim /var/named/haojin.com.zone
haojin.com. MX 1 172.25.254.110. 配置文件添加如下命令,MX邮件服务
- mail root@haojin.org
- mailq ##再次发送查询,发现还是不行
- netstat -antlupe | grep master ##查询端口,发现25端口使用的是回环接口
- vim /etc/postfix/main.cf ##修改配置文件,内容如下
135行 inet_interfaces=all
- mail root@haojin.com ##
- mailq ##再次发送查询,发现可以了
- dig -t mx haojin.org ##测试
问题
五、反向解析
注:反向解析,就是通过IP地址将域名解析出来
-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 ##测试(在客户端进行测试)
修改内容:
修改内容
测试:
六、双向解析
注:双向解析是dns服务器根据不同的人解析不同的IP地址。
6.1 实验要求
这里首先设置环境与实验要求
客户机1解析1.1.1.0网段
客户机2解析192.168.1.0网段
6.2 配置网址
缺少实验哪个网段就加哪个网段!
- 服务端(dns机): ip addr add 192.168.1.110/24 dev enp1s0
- 客户端1: ip addr add 192.168.1.233/24 dev enp1s0
- 客户机2: 1.2.3.3 不需要变
6.3 设置dns解析文件
vim /etc/resolv.conf
客户机1:nameserver=192.168.1.110
客户机2:nameserver=1.2.3.4
6.4 配置dns机的配置文件
因为有俩个客户端,客户机1,客户机2
所以我们需要两份配置文件
- cp -p /var/named/haojin.com.zone /var/named/haojin.com.inter
修改内容:%s/1.2.3/192.168.1/g
- cp -p /etc/named.rfc1912.zones /etc/named.rfc1912.zones.inter
修改内容:zone "haojin.com" IN {
type master;
file "haojin.com.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";
};
1) 增加客户机1 和dns主机的ip地址,因为我原来所有主机默认是1.2.3.0的网段。
2)给客户机1,客户机2配置dns服务器的不同ip地址
3)修改dns配置
测试:
七、(重点)DNS集群
7.1 dns 集群的搭建
- 主dns服务器设置:
首先注释掉之前的双向解析的内容,还原文件信息,保证实验环境的纯净。也可以不还原。
vim /etc/named.rfc1912.zones ##书写内容如下:
zone "haojin.com" IN {
type master;
file "haojin.com.zone";
allow-update { none; };
also-notify { 1.2.3.3; }; ##通知3主机作为集群的辅dns,允许其读取主dns机的数据
};
- 辅dns主机设置:
- dnf install bind.x86_64 -y ##安装dns服务
- systemctl enable --now named ##启动dns服务
- vim /etc/named.conf ##编辑主配置文件内容如下
listen-on port 53 { any; };
allow-query { any; };
dnssec-validation no;
- vim /etc/named.rfc1912.zones
zone “haojin.com” IN {
type slave; ##dns状态位,表示辅助dns
masters {1.2.3.4; }; ##主dns
file "slaves/haojin.com.zone"; ##同步的数据文件,即配置文件
};
- systemctl restart named
7.2 同步主dns的解析数据(更新)
如果主dns服务器的解析表有改动,辅dns会不会自动更新?
测试:
可以看到,主dns解析的已经改动!
辅dns解析的却没有变化!
7.2.1 手动更新(每台主机都需要手动操作,比较麻烦)
服务端更新,客户端删除文件在重启服务,也会更新。
测试成功:
7.2.2 自动更新
- 主dns服务器设置:
vim /etc/named.rfc1912.zones ##书写内容如下:
zone "haojin.com" IN {
type master;
file "haojin.com.zone";
allow-update { none; };
also-notify { 1.2.3.3; }; ##通知3主机作为集群的辅dns,并可以刷新其文件。
};
- vim /var/named/westos.org.zone ##编辑配置文件修改解析表
##同时修改参数serial ,此参数是递增变化的
##每修改一次ip,这个参数设置+1,从属dns自动同步
- systemctl restart named ##重启服务
辅dns主机自动更新
注:如果这里的防火墙未允许dns服务,是不可以被更新的
7.2.3 (重点)通过指定主机ip,来进行更新dns
指定1.2.3.200这个ip机去更新dns服务
- dns服务端
vim /etc/named.rfc1912.zones
zone "haojin.com" IN {
type master;
file "haojin.com.zone";
allow-update { 1.2.3.200; }; ##增加这一行,指定1.2.3.200这个ip机去更新dns服务
#also-notify { 192.168.1.210; };
};
- 客户端(200地址去更新),使用测试命令!
nsupdate
> server 1.2.3.4 ##发送到的dns服务器
> update add test.haojin.com 86400 A 1.2.3.11 ##更新一个网址和ip
> send ##发送
> quit ##退出
- 另一个客户(使用该dns服务解析)
dig test.haojin.com ## 测试
7.2.4 (重点)通过密钥的方式来进行更新(更安全)
上一节指定ip更新dns服务,只要是局域网内任意机器改成这个ip就可以改dns服务,存在安全隐患;这里通过加密方式消除此隐患
实验前知识储备
- rpm -ql bind | less ##分页方式显示bind安装的所有文件
/etc/rndc.key ##我们可以用来参考里面的密钥类型及用法
- dnssec-keygen --help ##查看密钥加密的帮助
-a 表示采用什么加密方式 -b 指密钥长度 -n 指被加密的类型
dns服务端加密过程及命令
- 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; ##加密类型,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 { 1.2.3.3; };
- };
- systemctl restart named ##重启服务
- scp Kwestos.+163+42627.* root@1.2.3.200:/mnt ##将密钥发送给200客户端
客户端测试:
- nsupdate -k Kwestos.+163+30796.private ##更新成功
1)实验前知识储备
2)dns服务端加密过程及命令
3) 客户端测试
八、(重点)配置ddns,动态域名解析,即(dhcp+dns)
8.1 dns服务端配置
基础配置的修改
- dns服务机安装dhcp服务(server4)
dnf install dhcp-server ##安装 dhcp服务
cp /usr/share/doc/dhcp-server/dhcpd.conf.example /etc/dhcp/dhcpd.conf
systemctl enable --now dhcpd
- 对客户端(测试机)的网卡配置需要设置成dhcp!
这部分设置详见linux下的DHCP服务搭建
ddns配置的修改(server4)
这里不会怎么办,可以使用命令 man 5 dhcpd
然后在里面搜索dns
- vim /etc/dhcp/dhcpd.conf ##编辑配置文件修改内容,修改内容如下
ddns-update-style interim;
key westos {
algorithm hmac-sha256;
secret 8dCEDvn8PKKNt+B67aQtNA==; ##密钥时之前生成的
};
zone haojin.com {
primary 127.0.0.1; ##自身作为服务器,所以直接写成回环接口就可以,也可以写成这台主机的ip 1.2.3.4
key westos;
};
- systemctl restart dhcpd
8.2 测试
- 服务端修改dhcp服务的ip范围,客户端会自动更新ip
- dig 测试端hostname.haojin.com ##是给每一个客户端分配ip,所以需要知道客户端的主机名
即dig 主机名.haojin.com
企业级别的dns服务搭建就这么多,感谢耐心观看的你和耐心学习的你!