1 DNS介绍

1.1 什么是域名?

域名(Domain Name),简称域名,网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或者计算机组的名称,用于在数据传输时标识计算机的电子方位。具有独一无二,不可重复的特性。

域名其实是为了方便人们的记忆。

1.2 什么是DNS?

域名系统(Domain Name System,缩写:DNS)是互联网的一项服务(DHCP是局域网的服务应用,DNS则是互联网的服务应用,即可以在公网和内网使用)。域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便的访问到网站的一种服务。IP地址是网络上标识站点的数字地址,为了方便记忆,采用域名来代替IP地址标识站点地址。域名解析就是域名到IP地址的转换过程。

DNS作用是将域名和IP地址映射关系做记录,以及查询的功能。DNS 是将域名和IP地址之间进行互相转换的服务。

域名的解析工作由 DNS 服务器来完成。可以理解为DNS就是翻译官。

正向解析:域名 —> IP地址 反向解析:IP地址 —> 域名 反解使用场景:邮件服务器,用于过滤有问题的邮件

1.3 域名的组成和分类

IPv6 的DNS服务器可以兼容IPv4 的DNS服务器,IPv4 的DNS服务无法兼容IPv6 的DNS服务。
IPv4 的DNS 根域服务器只有13台。
03 DNS 域名系统服务 - 图1

常见格式:www.kubesphere.com 完整格式:www.kubesphere.com.

. :根域,可以省略不写 com:顶级域,由ICANN组织指定的管理 分类:

  • 国家地区域名:cn(中国)、hk(香港)、sg(新加坡)等
  • 通用顶级域名:com(商业机构)、org(非营利组织)、edu(教育机构)、net(网络服务商)等
  • 新通用顶级域名:red(红色、热情)、top(顶级、高端)等

kubesphere:二级域(注册域),可由个人或者组织申请注册(二级域以上级别的域名,统称为子域) www:三级域(子域),服务器网站名代表 主机名: kubesphere-node01.www.kubesphere.com. 中的kubesphere-node01 就是主机名,一般用来表示具体的某一台主机。 主机名是包含在域名中的。其实域名中的主机名指的就是域名中的完整的子域名。比如:http:www.baidu.com,其中.com就是顶级域名,而 www.baidu 就是子域名,www.baidu.com 就是完整的子域名,也就是我们所说的主机名。我们一般记企业域名网站的时候,只是记忆子域名就可以了,后缀基本就是com或cn,这种应用最广泛的,也最经典的后缀了。

扩展:com.cn 属于”二级域名”,是 cn 顶级域的子域。
例如:www.kubesphere.com.cn. 其中 . 为根域,cn. 是顶级域,com.cn. 是二级域,kubesphere.com.cn 是三级域,www.kubesphere.com.cn. 是四级域。
03 DNS 域名系统服务 - 图2

域名分级与域名解析过程(DNS)

image.png

2 域名解析过程

2.1 DNS域名解析过程

03 DNS 域名系统服务 - 图4
image.png

  1. 客户机首先查看查找浏览器缓存,是否存在本条目的缓存,如果有则直接返回,否则进行下一步
  2. 客户机查看本地缓存 hosts 文件,如果有则返回,否则进行下一步
  3. 将请求转发给指向的 DNS 服务器
  4. 查看域名是否本地解析,是则本地解析返回,否则进行下一步
  5. 本地DNS服务器首先在缓存中查找,有则返回,无则进行下一步
  6. 向全球13台根域服务器发起DNS请求,根域返回 org 域的地址列表
  7. 使用某一个 org 域的IP地址,发起DNS请求,org 域返回的是 kernel 域服务器的地址列表
  8. 使用某一个 kernel 域的IP地址,发起 DNS 请求,kernel 域返回的 www.kernel.org 主机的IP地址,本地DNS服务收到后,返回给客户机,并在本地DNS服务器保存一份。

    递归查询:客户机和本地DNS服务器之间DNS的查询方式 如果 A 请求 B,那么 B 作为请求的接收者一定要给 A 想要的答案 image.png 迭代查询:本地DNS服务器和域服务器(根域,顶级域,二级域,三级域等)之间的DNS查询方式 如果接收者 B 没有请求者 A 所需要的准确内容,接收者 B 将告诉请求者 A,如何去获得这个内容,但是自己并不去发出请求 image.png

image.png

第一步:检查浏览器缓存中是否缓存过该域名对应的IP地址 第二步:如果在浏览器缓存中没有找到IP,那么将继续查找本机系统是否缓存过IP 第三步:向本地域名解析服务系统发起域名解析的请求 第四步:向根域名解析服务器发起域名解析请求 第五步:根域名服务器返回gTLD域名解析服务器地址 第六步:向gTLD服务器发起解析请求 第七步:gTLD服务器接收请求并返回Name Server服务器 第八步:Name Server服务器返回IP地址给本地服务器 第九步:本地域名服务器缓存解析结果 第十步:返回解析结果给用户

2.2 DNS分布式服务器

03 DNS 域名系统服务 - 图9

  • 根域服务器保存的是所有顶级域的IP地址顶级域保存的是所属二级域的IP地址二级域保存的是三级域名的IP地址但并不知道下属的DNS服务器
  • DNS服务器若要连接顶级域服务器和二级域服务器,需要先查询上级域服务器的条目。即DNS服务器需要先访问根域服务器获取顶级域服务器的IP地址,再通过顶级域服务器获取二级域服务器的IP地址,之后访问二级域服务器获取三级域的条目
  • 分布式:同一个任务,由不同步骤共同完成的过程就叫分布式(例如:生产车间中的某一条流水线,流水线上有很多步骤,不同步骤之间就叫分布式)分布式的含义并不是DNS域名解析的过程,而是借助分布式的主机备份和缓存机制
  • 负载均衡:将用户的请求,分配到多个功能相同的服务器上。其实就是任务分配(例如:生产车间中的多条相同功能的流水线)

3 DNS 软件信息

软件名称

bind bind-utils

服务名称

named

软件端口

UDP 53 #数据通信(域名解析) TCP 53 #数据同步(主从同步)

配置文件
主配置文件:/etc/named.conf(服务器运行参数)
image.png
image.png
区域配置文件:/etc/named.rfc1912.zones(服务器解析的区域配置,正反向区域定义信息)
image.png

  • 正向解析区域

zone “localhost.localdomain” 是写域,而不是域名。即www.kubesphere.com中,该区域写的是kubesphere.com。 file 定义正向/反向数据配置文件的名称(默认保存在/var/name/下)。 allow-update 是否允许数据更新的列表,none表示不更新。若填写则一般是从服务器的IP地址。

  • 反向解析区域

zone “1.0.0.127.in-addr.arpa” 分为两个部分:1.0.0.127. | in-addr.arpa:1.0.0.127是IP地址的反写。后面的in-addr.arpa 是固定格式。一般不写 host,而是 network,即 0.168.192.in-addr.arpa

数据配置文件:/var/named/xx.xx(主机名和IP地址的对应解析关系,以及主从同步信息)。
其中/var/named/named.localhost 是正向解析配置文件。
/var/named/named.loopback 是反向解析配置文件。
保存记录13台根域服务器位置:/var/named/named.ca。
/var/named/slaves 由于DNS主从同步时使用的从服务器保存的配置。
image.png
image.png

/var/named/named.localhost 和 /var/named/named.loopback 中基本上在 A、AAAA、PTR字段会做修改,其余地方,可以保持一致。 image.png

记录类型:

A 地址记录,用来指定域名的IPv4地址的记录
CNAME 将域名指向另一个域名,再由另一个域名提供IP地址,就需要添加CNAME记录,可以理解为域名别名
TXT 可填写任何东西,长度限度255,绝大多数的TXT记录是用来做 SPF的(反垃圾邮件)
NS 域名服务器记录,如果需要把子域名交给其他DNS服务商解析,就需要添加NS记录
AAAA 地址记录,用来指定域名的IPv6地址的记录
MX 邮件交换记录,如果需要设置邮箱,让邮箱能收到邮件,就需要添加MX记录

4 DNS 实验搭建

4.1 DNS 服务搭建

03 DNS 域名系统服务 - 图16
先关闭服务器和客户机上的防火墙和SELLinux

  1. #Ubuntu关闭防火墙和安装apache2
  2. ~ ufw disable
  3. ~ apt update
  4. ~ apt install -y apache
  5. ~ echo "DNS Test Web Server" > /var/www/html/index.html
  6. ~ ss -tunlp
  7. #CentOS6关闭防火墙和安装浏览器访问软件
  8. ~ vim reset_centos6.sh
  9. #!/bin/bash
  10. #SHELL ENV
  11. function color()
  12. {
  13. RES_COL=60;
  14. MOVE_TO_COL="echo -en \\033[${RES_COL}G";
  15. SETCOLOR_SUCCESS="echo -en \\033[1;32m";
  16. SETCOLOR_FAILURE="echo -en \\033[1;31m";
  17. SETCOLOR_WARNING="echo -en \\033[1;33m";
  18. SETCOLOR_NORMAL="echo -en \E[0m";
  19. echo -n "$1" && $MOVE_TO_COL;
  20. echo -n "[";
  21. if [ $2 = "success" -o $2 = "0" ] ;then
  22. ${SETCOLOR_SUCCESS};
  23. echo -n $" OK ";
  24. elif [ $2 = "failure" -o $2 = "1" ] ;then
  25. ${SETCOLOR_FAILURE};
  26. echo -n $"FAILED";
  27. else
  28. ${SETCOLOR_WARNING};
  29. echo -n $"WARNING";
  30. fi
  31. ${SETCOLOR_NORMAL};
  32. echo -n "]";
  33. echo
  34. }
  35. #Step1:关闭SELinux功能
  36. function set_selinux()
  37. {
  38. setenforce 0
  39. sed -i '/^SELINUX=/c\SELINUX=disabled' /etc/selinux/config
  40. color "关闭SELinux功能成功" 0
  41. }
  42. #Step2:关闭防火墙功能
  43. function set_firewalld()
  44. {
  45. service iptables stop
  46. chkconfig iptables off
  47. color "关闭防火墙功能成功" 0
  48. }
  49. #Step3:设置光盘源
  50. function set_yum()
  51. {
  52. CDROM=$(lsblk | grep sr0 &> /dev/null ; echo $?)
  53. if [ $CDROM -eq 0 ] ;then
  54. color "系统光盘已挂载,开始设置光盘源" 0
  55. else
  56. { color "系统光盘未挂载,无法设置光盘源" 1 ; exit ; }
  57. fi
  58. mkdir -p /mnt/cdrom ; mount /dev/sr0 /mnt/cdrom
  59. mkdir /etc/yum.repos.d/repobak ; mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/repobak
  60. cat > /etc/yum.repos.d/CentOS-ISO.repo <<EOF
  61. [CentOS-ISO]
  62. name=CentOS-ISO
  63. baseurl=file:///mnt/cdrom
  64. enabled=1
  65. gpgcheck=0
  66. EOF
  67. yum repolist
  68. color "设置光盘源成功" 0
  69. }
  70. #Stpe4:关闭NetworkManager功能
  71. function set_network_manager()
  72. {
  73. service NetworkManager stop
  74. chkconfig NetworkManager off
  75. color "关闭NetworkManager功能成功" 0
  76. }
  77. set_selinux
  78. set_network_manager
  79. set_firewalld
  80. set_yum

image.png

  1. 软件安装

    1. yum install -y bind bind-utils
  2. 配置主配置文件(/etc/named.conf)

    1. ~ vim /etc/named.conf
    2. options {
    3. listen-on port 53 { any; };
    4. listen-on-v6 port 53 { any; };
    5. ......
    6. allow-query { any; };
    7. ......
    8. }

    image.png

  3. 配置区域文件(/etc/named.rfc1912.zones)

    注意:先对区域文件进行备份,删除多余的模板,只留下一个正向和一个反向(反向修改时,网络位的反写格式:如192.168.100.2 —> 2.100.168.192)

  1. ~ cp /etc/named.rfc1912.zones{,.bak}
  2. ~ vim /etc/named.rfc1912.zones
  3. #正向解析区域
  4. zone "kubesphere.com" IN {
  5. type master;
  6. file "kubesphere.localhost";
  7. allow-update { none; };
  8. };
  9. #反向解析区域
  10. zone "0.0.10.in-addr.arpa" IN {
  11. type master;
  12. file "kubesphere.loopback";
  13. allow-update { none; };
  14. };

image.png

  1. 配置数据文件 /var/named/

    A、先复制生成正向解析文件和反向解析文件 B、编辑正向解析文件(注意域名结尾的”;”) C、编辑反向解析文件(注意域名结尾的”;”) D、编辑域或者域名时一定要写根域

~ cp -a /var/named/named.localhost /var/named/kubesphere.localhost
~ cp -a /var/named/named.loopback /var/named/kubesphere.loopback

~ vim /var/named/kubesphere.localhost
$TTL 1D
@       IN SOA  kubesphere.com. rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.kubesphere.com.
dns     A       10.0.0.40 ;
www     A       10.0.0.100 ;

image.png

/var/named/kubesphere.localhost 正向解析实现的效果就是 dns.kubesphere.com 域名被解析成 10.0.0.40 机器。www.kubesphere.com 域名被解析成 10.0.0.100 机器

~ vim /var/named/kubesphere.loopback
$TTL 1D
@       IN SOA  kubesphere.com. rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.kubesphere.com.
20      PTR     dns.kubesphere.com. ;
100     PTR     www.kubesphere.com. ;

image.png

/var/named/kubesphere.loopback 反向解析实现的效果就是 在之前的区域配置文件中写入了”0.0.10.in-addr.arpa” 即是以 10.0.0. 网段的。20 就代表IP地址为10.0.0.20 可以解析成域名 dns.kubesphere.com. ,100 就代表IP地址 10.0.0.100 可以解析成域名 www.kubesphere.com.

  1. 重启DNS服务

    named 用户的权限要足够使用

###需要对named用户进行ACL权限规划
setfacl -m u:named:rwx /etc/named.conf
setfacl -m u:named:rwx /etc/named.rfc1912.zones
setfacl -R -m u:named:rwx /var/named/
#启动named服务
service named reload ; service named restart 
chkconfig named on
#查看端口
ss -tunlp | grep ":53"
netstat -tunalp | grep 53

#查看访问日志
tail -f /var/log/messages
  1. 客户端测试 ```bash 在网卡配置文件中添加DNS服务器的地址,然后用nslookup测试

~ vim /etc/sysconfig/network-scripts/ifcfg-eth0

DNS设置为内网DNS服务器

DNS1=10.0.0.40

重启网络服务

service NetworkManager stop ; chkconfig NetworkManager off service network restart

~ dig www.kubesphere.com ~ curl www.kubesphere.com DNS Test Web Server ~ elinks www.kubesphere.com

正向解析成功

~ nslookup www.kubesphere.com Server: 10.0.0.40 Address: 10.0.0.40#53

Name: www.kubesphere.com Address: 10.0.0.100

反向解析成功

~ nslookup 10.0.0.100 Server: 10.0.0.40 Address: 10.0.0.40#53

100.0.0.10.in-addr.arpa name = www.kubesphere.com.

![image.png](https://cdn.nlark.com/yuque/0/2022/png/2555283/1656227348087-ee5b4520-02ae-4813-894c-8cd34defdead.png#clientId=u814b174d-31b6-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=81&id=u67c8fc71&margin=%5Bobject%20Object%5D&name=image.png&originHeight=81&originWidth=1262&originalType=binary&ratio=1&rotation=0&showTitle=false&size=4755&status=done&style=none&taskId=u7e0198f7-7935-4fab-b1fa-4d36c7d6b65&title=&width=1262)
<a name="j048S"></a>
## 4.2 主从DNS服务器
![](https://cdn.nlark.com/yuque/0/2022/jpeg/2555283/1656229179206-641aaabd-e08c-420c-93c1-2708342fa3ff.jpeg)<br />实验目的:<br />减轻主服务器的压力,以及对主服务器的数据进行备份的作用
> 先关闭服务器和客户机上的防火墙和SELinux

实验准备:<br />一台主服务器(10.0.0.40),一台从服务器(10.0.0.41),一台测试机(IP:10.0.0.100)<br />搭建过程:

1. 搭建主服务器步骤(同上,不截图):
> a、安装 bind 软件
> b、主配置文件的修改 /etc/named.conf
> c、区域配置文件的修改 /etc/named.rfc1912.zones
> d、配置数据文件 
> 正向数据文件
> 反向数据文件(可选做)
> e、启动 named 服务
> 注意:主DNS的区域配置文件中的 allow-update 参数添加从服务器的IP地址

2. 搭建从服务器步骤:
> a、安装 bind 软件
> b、修改主配置文件 /etc/named.conf
> c、配置区域文件( /etc/named.rfc1912.zones )
> 注意:从配置文件的类型需要修改为 slave,并且需要填写主服务器的地址,如下:
> > type slave
> > masters { 10.0.0.40; }; #大括号两侧留有空格
> > 文件保存位置修改为 file "slaves/kubesphere.localhost";
> d、重启服务
> e、在测试机上填写从服务器的IP地址,并且使用 nslookup / dig 进行测试

```bash
###使用CentOS6的初始化环境脚本进行初始化后进行后续的操作
~ bash reset_centos6.sh

#10.0.0.40 --> DNS-Master
~ hostname dns-master-server.kubesphere.com
~ sed -i '/^HOSTNAME=/c\HOSTNAME=dns-master-server.kubesphere.com' /etc/sysconfig/network
~ yum install -y bind bind-untils
~ vim /etc/named.conf
options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { any; };
        ......
        allow-query     { any; };
        ......
}
~ cp /etc/named.rfc1912.zones{,.bak}
~ vim /etc/named.rfc1912.zones
zone "kubesphere.com" IN {
        type master;
        file "kubesphere.localhost";
        allow-update { 10.0.0.41; };
};

zone "0.0.10.in-addr.arpa" IN {
        type master;
        file "kubesphere.loopback";
        allow-update { 10.0.0.41; };
};
~ cd /var/named/
~ cp named.localhost kubesphere.localhost ; cp named.loopback kubesphere.loopback
~ vim /var/named/kubesphere.localhost
$TTL 1D
@       IN SOA  kubesphere.com. rname.invalid. (
                                        1       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.kubesphere.com.
dns     A       10.0.0.40
www     A       10.0.0.100
~ vim /var/named/kubesphere.loopback
$TTL 1D
@       IN SOA  kubesphere.com. rname.invalid. (
                                        1       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.kubesphere.com.
40      PTR     dns.kubesphere.com.
100     PTR     www.kubesphere.com.
###需要对named用户进行ACL权限规划
setfacl -m u:named:rwx /etc/named.conf
setfacl -m u:named:rwx /etc/named.rfc1912.zones
setfacl -R -m u:named:rwx /var/named/
#启动named服务
~ service named restart 
~ chkconfig named on
#查看端口
~ ss -tunlp | grep ":53"
~ netstat -tunalp | grep 53

#查看访问日志
~ tail -f /var/log/messages

#########################
#10.0.0.41 --> DNS-Slave
~ hostname dns-slave-server.kubesphere.com
~ sed -i '/^HOSTNAME=/c\HOSTNAME=dns-slave-server.kubesphere.com' /etc/sysconfig/network
~ yum install -y bind bind-untils
~ vim /etc/named.conf
options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { any; };
        ......
        allow-query     { any; };
        ......
}
~ cp /etc/named.rfc1912.zones{,.bak}
~ vim /etc/named.rfc1912.zones
zone "kubesphere.com" IN {
        type slave;
        masters { 10.0.0.40; };
        file "slaves/kubesphere.localhost";
        allow-update { none; };
};

zone "0.0.10.in-addr.arpa" IN {
        type slave;
        masters { 10.0.0.40; };
        file "slaves/kubesphere.loopback";
        allow-update { none; };
};
~ cd /var/named/
#从服务器的数据配置文件就不需要手动创建了。
#当启动服务时,主DNS服务器会将数据配置文件同步到/var/named/slave/目录下
###需要对named用户进行ACL权限规划
setfacl -m u:named:rwx /etc/named.conf
setfacl -m u:named:rwx /etc/named.rfc1912.zones
setfacl -R -m u:named:rwx /var/named/
#启动named服务
#service named reload
~ service named restart 
~ chkconfig named on
#查看端口
~ ss -tunlp | grep ":53"
~ netstat -tunalp | grep 53
#查看同步效果
~ ls -lh /var/named/slaves/
total 8.0K
-rw-r--r--. 1 named named 335 Jun 26 16:11 kubesphere.localhost
-rw-r--r--. 1 named named 366 Jun 26 16:11 kubesphere.loopback

#10.0.0.100 --> webserver
~ hostnamectl set-hostname webserver.kubesphere.com
~ apt install apache2
~ echo "DNS Test Web Server" > /var/www/html/index.html
~ ufw disable
~ systemctl enable --now apache2
~ ss -ntlp

范例:测试机测试效果

~ /etc/sysconfig/network-scripts/ifcfg-eth0
DNS1=10.0.0.40
DNS2=10.0.0.41
~ service network restart

~ curl www.kubesphere.com
DNS Test Web Server
~ nslookup www.kubesphere.com
Server:         10.0.0.40
Address:        10.0.0.40#53

Name:   www.kubesphere.com
Address: 10.0.0.100
#将DNS服务器10.0.0.40服务停止
service named stop
#不影响DNS解析,DNS服务器选择了10.0.0.41机器进行解析
~ nslookup www.kubesphere.com
Server:         10.0.0.41
Address:        10.0.0.41#53

Name:   www.kubesphere.com
Address: 10.0.0.100
~ curl www.kubesphere.com
DNS Test Web Server

~ yum install -y elinks
~ elinks www.kubesphere.com

image.png

主从DNS服务器相对独立,在一定时间内,从服务器不需要向主服务器同步数据,超过一定时间后再来进行同步操作,默认时间为1 天。若同步超时,则会间隔一段时间再次进行同步操作。

4.3 DNS缓存服务器

先关闭服务器和客户机上的防火墙和SELinux

实验作用:
加快解析速度,提高工作效率
实验软件:
dnsmasq
配置文件:

vim /etc/dnsmasq.conf
domain=域名                #需要解析的域名
server=ip                    #主DNS服务器的IP
cache-size=15000    #声明缓存条数

重启服务

service dnsmasq restart

测试效果:
在测试机上填写 DNS 缓存服务器的IP地址

###默认执行CentOS6初始化脚本
#主DNS服务器
~ yum install -y bind bind-untils
~ hostname dns-server
~ sed -i '/^HOSTNAME=/c\HOSTNAME=dns-server.kubesphere.com' /etc/sysconfig/network
~ vim /etc/named.conf
options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { any; };
        ......
        allow-query     { any; };
        ......
}
~ cp /etc/named.rfc1912.zones{,.bak}
~ vim /etc/named.rfc1912.zones
zone "kubesphere.com" IN {
        type master;
        file "kubesphere.localhost";
        allow-update { 10.0.0.41; };
};

zone "0.0.10.in-addr.arpa" IN {
        type master;
        file "kubesphere.loopback";
        allow-update { 10.0.0.41; };
};
~ cd /var/named/
~ cp named.localhost kubesphere.localhost ; cp named.loopback kubesphere.loopback
~ vim /var/named/kubesphere.localhost
$TTL 1D
@       IN SOA  kubesphere.com. rname.invalid. (
                                        1       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.kubesphere.com.
dns     A       10.0.0.40
www     A       10.0.0.100
~ vim /var/named/kubesphere.loopback
$TTL 1D
@       IN SOA  kubesphere.com. rname.invalid. (
                                        1       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.kubesphere.com.
40      PTR     dns.kubesphere.com.
100     PTR     www.kubesphere.com.
###需要对named用户进行ACL权限规划
setfacl -m u:named:rwx /etc/named.conf
setfacl -m u:named:rwx /etc/named.rfc1912.zones
setfacl -R -m u:named:rwx /var/named/
#启动named服务
~ service named restart ; chkconfig named on
#查看端口
~ ss -tunlp | grep ":53"
~ netstat -tunalp | grep 53

#查看访问日志
~ tail -f /var/log/messages

#缓存DNS服务器
~ hostname dns-cache.kubesphere.com
~ sed -i '/^HOSTNAME=/c\HOSTNAME=dns-cache.kubesphere.com' /etc/sysconfig/network
~ yum install -y bind bind-untils dnsmasq
~ vim /etc/named.conf
options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { any; };
        ......
        allow-query     { any; };
        ......
}
~ cp /etc/named.rfc1912.zones{,.bak}
~ vim /etc/named.rfc1912.zones
zone "kubesphere.com" IN {
        type slave;
        masters { 10.0.0.40; };
        file "slaves/kubesphere.localhost";
        allow-update { none; };
};

zone "0.0.10.in-addr.arpa" IN {
        type slave;
        masters { 10.0.0.40; };
        file "slaves/kubesphere.loopback";
        allow-update { none; };
};
~ cd /var/named/
#从服务器的数据配置文件就不需要手动创建了。
#当启动服务时,主DNS服务器会将数据配置文件同步到/var/named/slave/目录下
###需要对named用户进行ACL权限规划
setfacl -m u:named:rwx /etc/named.conf
setfacl -m u:named:rwx /etc/named.rfc1912.zones
setfacl -R -m u:named:rwx /var/named/
#启动named服务
#service named reload
~ service named restart ; chkconfig named on
#查看端口
~ ss -tunlp | grep ":53"
~ netstat -tunalp | grep 53
#查看同步效果
~ ls -lh /var/named/slaves/
total 8.0K
-rw-r--r--. 1 named named 335 Jun 26 16:11 kubesphere.localhost
-rw-r--r--. 1 named named 366 Jun 26 16:11 kubesphere.loopback
#dnsmasq配置文件修改
~ vim /etc/dnsmasq.conf
domain=kubesphere.com                #需要解析的域名
server=10.0.0.40                        #主DNS服务器的IP
cache-size=15000                        #声明缓存条数
#重启服务
~ service dnsmasq restart
Shutting down dnsmasq:                                     [  OK  ]
Starting dnsmasq:                                          [  OK  ]

#10.0.0.100 --> webserver
~ hostnamectl set-hostname webserver.kubesphere.com
~ apt install apache2
~ echo "DNS Test Web Server" > /var/www/html/index.html
~ ufw disable
~ systemctl enable --now apache2
~ ss -ntlp

范例:测试效果

~ vim /etc/sysconfig/network-scripts/ifcfg-eth0
DNS1=10.0.0.41    #缓存DNS服务器
~ service network restart 

~ curl www.kubesphere.com
DNS Test Web Server
~ nslookup www.kubesphere.com
Server:         10.0.0.41
Address:        10.0.0.41#53

Non-authoritative answer:
Name:   www.kubesphere.com
Address: 10.0.0.100

~ nslookup dns.kubesphere.com
Server:         10.0.0.41
Address:        10.0.0.41#53

Name:   dns.kubesphere.com
Address: 10.0.0.40

客户端先访问DNS缓存服务器,当DNS缓存服务器没有相应的条目后,DNS缓存服务器会向主DNS服务器要相应的条目。DNS缓存服务器会将条目缓存到自己的数据配置文件中,再将DNS的条目返回给客户端使用。

4.4 智能DNS(分离解析)

03 DNS 域名系统服务 - 图23
03 DNS 域名系统服务 - 图24
03 DNS 域名系统服务 - 图25
实验原理:DNS分离即将相同域名解析为不同的IP地址。现实网络中一些网站为了让用户有更好的体验效果解析速度更快,就把来自不同运营商的用户解析到相对应的服务器,这样就大大提升了访问的速度。
实验环境:

一台内网测试机(单网卡 VMnet 1) 一台网关+DNS(双网卡 VMnet 8 + VMnet 1) 一台外网测试机(单网卡 VMnet 8) 一台web服务器(双网卡 VMnet 8 + VMnet 1) VMnet 8(外网):10.0.0.0/24 ;VMnet 1(内网):192.168.10.0/24

先关闭服务器和客户机上的防火墙和 SELinux
实验步骤:

  1. 安装 bind 软件
  2. 内核配置文件开启路由转发,修改 /etc/sysctl.conf
  3. 修改主配置文件/etc/named.conf

image.png
注意:不同的解析放在了各自的区域配置文件(便于区分和维护更新)。/etc/named.conf 是自上而下匹配的,即匹配到条目后就使用该条目的内容,不会往下进行匹配。

  1. 生成自己定义的区域文件(反向解析省略掉了)

    cp -a /etc/named.rfc1912.zones /etc/lan.zones
    cp -a /etc/named.rfc1912.zones /etc/wan.zones
    
  2. 配置数据文件

    配置内网的正向解析文件
    配置外网的正向解析文件
    
  3. 重启服务

    service named restart
    
  4. 效果测试

    内网客户端网卡配置:将DNS和网关都指为网关服务器的内网口地址 外网客户端网卡配置:将DNS和网关都指为网关服务器的外网口地址

范例:实验操作

#前提将所有的机器的网络设置完毕,并且初始化的环境设置好

###Apache机器
~ hostnamectl set-hostname webserver
~ apt install -y apache2
~ echo "DNS test web page" > /var/www/html/index.html
#所有机器均可以访问该页面即可
~ curl 10.0.0.101 
~ curl 192.168.10.101

###dns-server机器
~ hostname dns-server
~ sed -i '/^HOSTNAME=/c\HOSTNAME=dns-server.kubesphere.com' /etc/sysconfig/network
~ yum install -y bind bind-untils
~ vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
~ sysctl -p
~ vim /etc/named.conf
options {
        listen-on port 53 { any; };
        listen-on-v6 port 53 { any; };
        ...
        allow-query     { any; };
}

view lan {
        #match-clients用来匹配相应的网段地址
        match-clients { 192.168.10.0/24; };
        zone "." IN {
                type hint;
                file "named.ca";
        };
        #匹配成功,则调用该区域配置文件进行解析
        include "/etc/lan.zones";
};

view wan {
        #match-clients用来匹配相应的网段地址
        match-clients { any; };
        zone "." IN {
                type hint;
                file "named.ca";
        };
        #匹配成功,则调用该区域配置文件进行解析
        include "/etc/wan.zones";
};

#include "/etc/named.rfc1912.zones";
###配置区域配置文件
~ cp -a /etc/named.rfc1912.zones /etc/lan.zones
~ vim /etc/lan.zones
zone "kubesphere.com" IN {
        type master;
        file "lan.localhost";
        allow-update { none; };
};

~ cp -a /etc/lan.zones /etc/wan.zones
~ vim /etc/wan.zones
zone "kubesphere.com" IN {
        type master;
        file "wan.localhost";
        allow-update { none; };
};

~ cp /var/named/named.localhost /var/named/lan.localhost
~ vim /var/named/lan.localhost
$TTL 1D
@       IN SOA  kubesphere.com. rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.kubesphere.com.
dns     A       192.168.10.30
www     A       192.168.10.101
~ cp lan.localhost wan.localhost
~ vim wan.localhost
$TTL 1D
@       IN SOA  kubesphere.com. rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.kubesphere.com.
dns     A       10.0.0.40
www     A       10.0.0.101

###需要对named用户进行ACL权限规划
setfacl -m u:named:rwx /etc/named.conf
setfacl -m u:named:rwx /etc/named.rfc1912.zones
setfacl -R -m u:named:rwx /var/named/
#启动named服务
#service named reload
~ service named restart ; chkconfig named on
#查看端口
~ ss -tunlp | grep ":53"
~ netstat -tunalp | grep 53
  • 主配置文件 /etc/named.conf

image.png

  • 区域配置文件 /etc/lan.zones /etc/wan.zones

image.png

  • 数据配置文件 lan.localhost wan.localhost

image.png
范例:验证测试效果

~ hostname -I
~ curl www.kubesphere.com
~ nslookup www.kubesphere.com

image.png
image.png