DNS服务

插播
host only 模式下的主机网卡设置好ip dns onboot onproto 之后可以ping网关和同样设置的其他同网段主机,但是ping不了外网————解决办法:网卡添加 GATEWAY

dns简介

当前TCP/IP网络中的设备之间进行通信,是利用和依赖于IP地址实现的。但数字形式的IP地址是很难记忆的。当网络设备众多,想要记住每个设备的IP地址,可以说是"不可能完成的任务"。我们可以给每个网络设备起一个友好的名称,如: www.baidu.com,这种由文字组成的名称,显而易见要更容易记忆。但是计算机不理解这种名称,我们可以利用一种名字解析服务将名称转化成成IP地址。从而我们就可以利用名称来直接访问网络中设备了。除此之外还有一个重要功能,利用名称解析服务可以实现主机和IP的解耦,即:当主机IP变化时,只需要修改名称服务即可,用户仍可以通过原有的名称进行访问而不受影响。

dns服务器的分层分级

主机名+域名+顶级域名
在这里插入图片描述
主机和子域的概念
以www.baidu.com为例,www为主机名,baidu.com是域名,baidu是com域子域。
www.tieba.baidu.com中,www是主机名,tieba是baidu域的子域,baidu是com域子域。

即网址最前面的字串是主机名。

dns服务工作原理

递归查询 和 迭代查询
递归查询的流程:
在这个查询过程中,一直是以本地名称服务器(Local DNS)为中心的,DNS客户端只是发出原始的域名查询请求报文,然后就一直处于等待状态的,直到本地名称服务器发来了最终的查询结果。此时的本地名称服务器就相当于中介代理的作用。如果考虑了本地名称服务器的缓存技术(也就是在DNS服务器上对一定数量的以前查询记录保存一定时间,这样后面查询同样的域名信息时就可直接从缓存中调出来,以加速查询效率)的话,则递归解析的基本流程如下:
1)、客户端向本机配置的本地名称服务器(在此仅以首选DNS服务器为例进行介绍,所配置其它备用DNS服务器的解析流程完全一样)发出DNS域名查询请求

2)、本地名称服务器收到请求后,先查询本地的缓存,如果有该域名的记录项,则本地名称服务器就直接把查询的结果返回给客户端;如果本地缓存中没有该域名的记录,则本地名称服务器再以DNS客户端的角色发送与前面一样的DNS域名查询请求发给根名称服务器

3)、根名称服务器收到DNS请求后,把所查询得到的所请求的DNS域名中顶级域名所对应的顶级名称服务器地址返回给本地名称服务器

4)、本地名称服务器根据根名称服务器所返回的顶级名称服务器地址,向对应的顶级名称服务器发送与前面一样的DNS域名查询请求

5)、对应的顶级名称服务器在收到DNS查询请求后,也是先查询自己的缓存,如果有所请求的DNS域名的记录项,则相接把对应的记录项返回给本地名称服务器,然后再由本地名称服务器返回给DNS客户端,否则向本地名称服务器返回所请求的DNS域名中的二级域名所对应的二级名称服务器地址

然后本地名称服务器继续按照前面介绍的方法一次次地向三级、四级名称服务器查询,直到最终的对应域名所在区域的权威名称服务器返回到最终的记录给本地名称服务器。然后再由本地名称服务器返回给DNS客户,同时本地名称服务器会缓存本次查询得到的记录项

迭代查询:本地名称服务器和其他名称服务器之间的查询即是迭代查询

DNS客户端和本地名称服务器是递归

完整的dns请求过程:
client -->hosts文件 -->client DNs service Local cache --> DNs server (recursion递归) --> DNS server cache -->DNS iteration(迭代)–>根–>顶级域名DNS–>二级域名DN…

dns资源记录

SOA: Start Of Authority,起始授权记录;一个区域解析库有且仅能有一个SOA记录,必须位于解析库的第一条记录

A: internet Address,作用,FQDN --> IP

AAAA: FQDN -->IPv6 解析为ipv6地址

PTR: PoinTeR,IP -->FQDN 反向解析

NS: Name Server,专用于标明当前区域的DNS服务器

CNAME: Canonical Name,别名记录

MX: Mail exchanger,邮件交换器

TXT:对域名进行标识和说明的一种方式,一般做验证记录时会使用此项,如: SPF(反垃圾邮件)记录,https验证等

阿里云购买公网域名

企业内的dns服务

安装dns软件 bind

#bind-utils 为调试工具
[root@rocky8-10 ~]#yum install -y bind bind-utils

#查询bind相关的文件
[root@rocky8-10 ~]#rpm -ql bind
/etc/named.conf  #bind的主要配置文件
/var/name   #区域数据库文件
named.service  #service文件,即dns的服务名为named

安装后设置开机启动并启动
[root@rocky8-10 ~]#systemctl enable --now named

主机11更改网卡文件,修改dns地址,将dns指定为主机10
或者用以下命令修改dns

添加 DNS 服务器地址到指定网络接口:
nmcli connection modify <connection_name> ipv4.dns <DNS_server_IP>

清除特定网络接口的 DNS 设置:
nmcli connection modify <connection_name> ipv4.dns ""


将 DNS 设置为 DHCP 提供的值:
nmcli connection modify <connection_name> ipv4.dns-auto yes

主机10安装并启动dns
主机11改网卡文件将dns指向主机10,ping百度域名操作发现失败

主机11可以用dig host 工具查看失败详情

ss -nutlp 查看主机10端口号
发现主机10的53端口只监听地址127.0.0.1 ,因此需要修改端口指向

options {
#       listen-on port 53 { 127.0.0.1; };
#将此行注释后将监听所有ip
        listen-on-v6 port 53 { ::1; };
        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";
        secroots-file   "/var/named/data/named.secroots";
        recursing-file  "/var/named/data/named.recursing";
#       allow-query     { localhost; };
#注释后允许任何主机查询

/etc/named.conf文件修改后,使用 utils 提供的工具 named-checkconf 检查conf文件的语法是否错误
检查后重启服务以生效
或者使用
命令 rndc reload 代替重启

udp53 只用于查询解析主机
tcp53 用于主从数据库的推拉同步操作

至此主机11可以通过10提供的dns服务进行网络上的域名解析

总结:
主机10安装bind
修改named.conf文件,启动named
主机11的dns指向10

实现企业内部主机之间的域名解析

/var/named 目录下存放了 ip 和 域名 对应关系的区域数据文件,
为了安全,手动创建这种文件后,权限应改为640,所属组改为named

创建一个区域数据库文件 guojie.org.zone
文件格式可以参考 named.local

soa记录必须在第一条,是一些元数据
@代表本域域名

关于NS记录的解释
NS记录(Name Server记录)是域名系统(DNS)中的一种记录类型,用于指定域名的权威域名服务器,这些服务器负责存储特定域名下的DNS信息

example.com.   IN   NS   ns1.example.com.
example.com.   IN   NS   ns2.example.com.

这表示 example.com 域名的权威域名服务器是 ns1.example.com 和 ns2.example.com。当其他DNS服务器收到对 example.com 的查询时,它们会向这两个权威服务器发出请求以获取域名example.com 的相关记录信息。

zone文件格式参考

[root@centos7 named]# cat named.localhost 
$TTL 1D
@	IN SOA	@ rname.invalid. (
					0	; serial   # 数据库版本号
					1D	; refresh  #从机拉取动作的间隔
					1H	; retry   #拉取失败后多就后重试
					1W	; expire  #从节点数据库有效期,到期未更新,失效
 					3H )	; minimum #不存在的结果的保存时间
	NS	@
	A	127.0.0.1
	AAAA	::1

#以下示例来自gpt,时间单位不写则默认为秒,s
#在区域文件中,@ 符号代表域名本身。它作为一种简写方式。例如此处 @ = example.com
; 文件名:example.com.zone
$TTL 86400      ; 该区域的默认生存时间,对ttl进行全局设置
@ IN SOA ns1.example.com. admin.example.com. (
              2023010101 ; 序列号
              3600       ; 刷新时间
              1800       ; 重试时间
              604800     ; 过期时间
              86400      ; 默认TTL
              )
@ IN NS ns1.example.com.  ; 主名称服务器,指定了这个区域的主名称服务器是 ns1.example.com.

; 定义主机名到IP地址的映射,上面的ns1.example.com.记录在下面必须有记录
ns1.example.com. IN A 192.168.1.1
www.example.com. IN A 192.168.1.2

; 邮件服务器的MX记录
example.com. IN MX 10 mail.example.com.

; IPv6地址
ipv6.example.com. IN AAAA 2001:0db8:85a3:0000:0000:8a2e:0370:7334

; 别名记录
ftp.example.com. IN CNAME www.example.com.

; 反向解析记录
1.1.168.192.in-addr.arpa. IN PTR ns1.example.com.
2.1.168.192.in-addr.arpa. IN PTR www.example.com.

实现guojie.org域名
/var/named 目录下,创建guojie.org.zone

$TTL 1D
@       IN SOA guojie.org.  qq.com (
                                        1       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimup
        NS  guojie.org.
guojie.org. IN A  192.168.137.10  #NS记录中的域名在下方必须相应的地址记录,否则服务报错
www   IN  A   192.168.137.10
db    IN  A   192.168.137.11

区域解析文件写好,编辑 dns 配置文件 /etc/named.conf 文件
有两种方式
方式1.named.conf文件,主配置文件中直接写个zone

zone "guojie.org" {
    type master;
    file "guojie.org.zone"; #这样写,路径默认是/var/named/guojie.org.zone
};

方式2.将上面的zone记录写入/etc/named.rfc1912.zones文件
推荐第二种方式

写好检查zone文件的正确性

named-checkzone guojie.org /var/named/guojie.org.zone

然后 rndc reload 重新加载配置文件,systemctl 重启服务

验证:
将客户端主机网卡指定dns为10主机

[root@centos7 ~]nmcli con mod ens33 ipv4.address 192.168.137.10
#客户端 host 命令 成功解析此域名为10主机
[root@centos7 ~]# host www.guojie.org
www.guojie.org has address 192.168.137.10

#客户端 dig db.guojie.org 成功解析此域名为11主机
[root@centos7 ~]# host db.guojie.org
db.guojie.org has address 192.168.137.11

dns主服务器实现总结:
1./var/named中新建一个区域数据库文件
2./etc/named.rfc1912.zones中新建zone配置行
3.rndc reload

插播:
此时,在zone文件中将一个主机名对应多个ip地址,如添加多条如下的记录

db    IN  A   192.168.137.11
db    IN  A   192.168.137.100
.....

可以实现轮询式的简单的负载均衡:如果客户端没有做dns缓存操作,客户端源源不断的db.guojie.org请求会轮询这些列出的地址。

dns反向解析

反向解析 ip地址–>域名,多用于对ip进行检查,反垃圾邮件

反向解析树
.
arpa
in-addr
192
168
100
10

即 10.100.168.192.in-addr.arpa.–> ip

反向解析实现

  1. /var/named中新建一个区域数据库文件192.168.100.zone
$TTL 1D
@ IN SOA  master admin.com (2 0 1D 1H 1W 3H )
      NA    @
master A 192.168.100.10
10     PTR   www.guojie.org
11     PTR   db.guojie.org
  1. /etc/named.conf中新建zone配置行(或者rfc1912文件)
zone "100.168.192.in-addr.arpa" IN {
    type master;
    file "192.168.100.zone"
};
  1. rndc reload

客户端测试反向解析
dig -x 192.168.100.10

dig -t ptr 10.100.168.192.in-addr.arpa.

实现dns主从服务器

slave 主机11中
1安装bind

2注释主配置文件中的两行

3 /etc/named.rfc1912 里写zone

zone "guojie.org" In {
        type slave;
        file "slaves/guojie.org.slave";#数据库文件存放位置
        masters {192.168.137.10;}; #主机地址
};

将主节点的区域数据库同步到 /var/named/slaves 目录下并命名为guojie.org.slaves(名字没有要求,可任意),这个数据库同步操作似乎系统会自动执行。

4
11主机启动服务,从客户端进行验证,证明11已经可以提供服务

# 指定dns为11
[root@centos7 ~]# dig @192.168.137.11 db.guojie.org
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.15 <<>> @192.168.137.11 db.guojie.org
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41436
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;db.guojie.org.			IN	A

;; ANSWER SECTION:
db.guojie.org.		86400	IN	A	192.168.137.11

;; AUTHORITY SECTION:
guojie.org.		86400	IN	NS	guojie.org.

;; ADDITIONAL SECTION:
guojie.org.		86400	IN	A	192.168.137.10

;; Query time: 1 msec
;; SERVER: 192.168.137.11#53(192.168.137.11)
;; WHEN: 三 110 11:08:41 CST 2024
;; MSG SIZE  rcvd: 88

dns主从服务器的数据库文件的同步实现

主服务器推送实现同步:
数据库数据修改后,修改主服务器的数据库的版本号,系统将自动同步至从服务器。
在这之前,主服务器需要新增从服务器的NS记录,指定从机地址。

NS  slave
slave  A  192.168.100.11
rndc reload

推数据库同步成功

区域数据库文件的安全性
当前从机可以不经过任何许可获得区域数据库,存在安全风险。事实上客户端使用 dig -t axfr guojie.org 即可获取该域名下的所有的主机和ip对应关系。

[root@centos7 ~]# dig -t axfr guojie.org 

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.15 <<>> -t axfr guojie.org
;; global options: +cmd
guojie.org.		86400	IN	SOA	guojie.org. qq.com.guojie.org. 2 120 3600 604800 10800
guojie.org.		86400	IN	NS	slave.guojie.org.
guojie.org.		86400	IN	NS	guojie.org.
guojie.org.		86400	IN	A	192.168.137.10
db.guojie.org.		86400	IN	A	192.168.137.11
slave.guojie.org.	86400	IN	A	192.168.137.11
www.guojie.org.		86400	IN	A	192.168.137.10
guojie.org.		86400	IN	SOA	guojie.org. qq.com.guojie.org. 2 120 3600 604800 10800
;; Query time: 1 msec
;; SERVER: 192.168.137.10#53(192.168.137.10)
;; WHEN: 三 110 11:36:54 CST 2024
;; XFR size: 8 records (messages 1, bytes 223)

[root@centos7 ~]# 
[root@centos7 ~]# dig -t axfr qq.com 

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.15 <<>> -t axfr qq.com
;; global options: +cmd
; Transfer failed.
[root@centos7 ~]# 
#可见qq.com做了安全加固

安全加固:
主节点 named.conf 文件中添加

allow-transfer {192.168.100.11;}; #从机ip

此时只允许从节点抓数据库

在从机上的/etc/named.conf

allow-transfer {none;}

不允许任何人抓从机数据库
修改后

[root@centos7 ~]# dig -t axfr guojie.org

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.15 <<>> -t axfr guojie.org
;; global options: +cmd
; Transfer failed.

dns地各种资源记录和子域委派

MX类型:邮件服务器
邮件的发送过程:
2500@qq.com -->stmp.qq.com -->dns服务–>stmp.163.com -->qwer@163.com
stmp.qq.com是qq这个域名下安装了邮件服务的某个服务器,任何邮件的发送都是用户先发送给本域名下的邮件服务器,然后再转发的。

dns服务器中需要写MX记录:记录此域的邮件服务器的地址

@  MX 10 mail1  #10为权重
@  MX 20 mail2  #20为权重
mail1  A 10.0.0.11
mail2  A  10.0.0.10 

查询域的邮件服务器

dig -t mx guojie.org
dig -t mx qq.com

CNAME类型:别名

www  CNAME websrv
websrv  A 10.0.0.10

泛域名解析:未设置的主机名记录将全部对应此条记录。此时ping一个不存在的主机名,如354.guojie.org,将对应主机192.168.100.13

*  A 192.168.100.13

不输主机名也匹配到某个主机

@  A   192.168.100.14

此时不输入www.guojie.org 而输入guojie.org 也将指向192.168.100.14

子域委派

为深圳分公司创建名为sz的子域,即sz.guojie.org
总部dns服务器,主机1的guojie.org.zone文件中添加类似如下的记录

 sz   NS   ns2
 ns2  A 192.168.100.11

即指定了 sz 这个子域的dns服务器在192.168.100.11上

sz公司的dns服务器(192.168.100.11)上安装bind和bind-utils
修改named主配置文件,允许监听其他地址的其他端口。
rfc1912文件添加sz分公司自己的zone文件。
/var/namd中添加sz自己的对应数据库文件。

$TTL 1D
@	IN SOA	master sz.guojie.org. (
					1	; serial
					30	; refresh
					3M	; retry
					1W	; expire
					3H )	; minimum
	NS	master
master  A       127.0.0.1
wwwsz	A	    192.168.100.13
dbsz    A       192.168.100.14

而后更改数据库文件的权限和所属组(chmod 640 chgrp named)。
重启服务 rndc reload。

此时使用由主机1提供的dns服务的客户端,可以解析域名sz.guojie.org下的各个主机记录

[root@centos8-12 ~]# host wwwsz.sz.guojie.org
wwwsz.sz.guojie.org has address 192.168.100.13

成功一次之后,主机1会有对sz域名下主机的缓存,此时sz的dns服务器主机二挂了,客户端也可正常解析sz域名下的主机

主机1可以使用 rndc flush 清楚缓存

对于使用dns服务的客户端,如果系统为centos,默认没有缓存,ubuntu默认有缓存(由一个服务实现)

如果dns服务器压力过大
centos安装软件 nscd 可以实现缓存,需要在安装后设置成开机启动

dns转发

需求:
k8s集群的某个pod需要连接外网
分公司某电脑需要连接外网
一种实现方案:
在这里插入图片描述
需要在core dns 和fgs dns 上做dns转发
在这两个dns的named.conf文件中

forward first | only;
fowarders {集团bind dns 的IP;};

以下两个设置需要改成no
dnssec-enable yes;
dnssec-validation yes; 

first:先去指定的集团bind上解析,不成功则自己去根服务器寻找解析
only:只去指定的集团bind上解析,不成功就玩完

智能dns

实现用户的就近访问
集团的服务器遍布全国各地,如何让全国各地的用户获取最近的服务器的数据?

CDN 内容分发网络
利用了CNAME

CDN工作原理
1.用户向浏览器输入www.a.com这个域名,浏览器第一次发现本地没有dns缓存,则向网站的DNS服务器请求
⒉网站的DNS域名解析器设置了CNAME,指向了www.a.tbcdn.com,请求指向了CDN网络中的智能DNS负载均衡系统
3.智能DNS负载均衡系统解析域名,把对用户响应速度最快的IP节点返回给用户;
4.用户向该IP节点(CDN服务器)发出请求
5.由于是第一次访问,CDN服务器会通过Cache内部专用DNS解析得到此域名的原web站点IP,向原站点服务器发起请求,并在CDN服务器上缓存内容
6.请求结果发给用户

公司内部实现智能dns

acl + view

ACL:把一个或多个地址归并为一个集合,并通过一个统一的名称调用
注意:只能先定义后使用,因此一般定义在配置文件中,处于options的前面
格式范例:

acl sznet {
172.16.0.0/16;
10.10.10.10;
};

view:将acl和区域数据库之间实现对应关系

view SZVIEW {

match-clients {sznet;};

zone "sz.guojie.org"{
type master;
file "sz.guojie.org.zone";
};

include "/etc/named.rfc1912.zones";
};

建立sz.guojie.org.zone的数据库文件(省略)
之后,sznet中定义的ip172.16.0.0/16;10.10.10.10;访问dns时,系统将使用view中指定的区域数据库文件sz.guojie.org.zone。

  • 27
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值