前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >玩转企业常见应用与服务系列(四):域名系统 DNS 服务详解

玩转企业常见应用与服务系列(四):域名系统 DNS 服务详解

作者头像
民工哥
发布2023-11-17 15:22:13
3540
发布2023-11-17 15:22:13
举报
文章被收录于专栏:民工哥技术之路

前面介绍了企业常用服务 NFS 网络文件共享存储文件共享服务 FTP 原理与实践、动态主机配置协议 DHCP 相关的知识点,今天我将详细的为大家介绍 域名系统 DNS服务相关知识,希望大家能够从中收获多多!如有帮助,请点在看、转发朋友圈支持一波!!!

DNS 概述

DNS(Domain Name System)是域名系统的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,用于 TCP/IP 网络。

DNS 服务器的层次结构

从上到下依次为根域名服务器、顶级域名服务器和权威域名服务器。域名和IP地址的映射关系必须保存在域名服务器中,供所有其他应用查询。

DNS 的作用

通常我们有两种方式识别主机:通过主机名或者 IP 地址。人们喜欢便于记忆的主机名表示,而路由器则喜欢定长的、有着层次结构的 IP 地址。为了满足这些不同的偏好,我们就需要一种能够进行主机名到IP 地址转换的目录服务,域名系统作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。

因此,即使不使用域名也可以通过IP地址来寻址目的主机,但域名与IP地址相比,便于人们记忆。因此对于大多数网络应用,我们一般使用域名来访问目的主机,而不是直接使用IP地址来访问。

对于本例,简单来说,当我们在浏览器地址栏中输入某个Web服务器的域名时。用户主机首先用户主机会首先在自己的DNS高速缓存中查找该域名所应的IP地址。

如果没有找到,则会向网络中的某台DNS服务器查询,DNS服务器中有域名和IP地映射关系的数据库。当DNS服务器收到DNS查询报文后,在其数据库中查询,之后将查询结果发送给用户主机。

现在,用户主机中的浏览器可以通过Web服务器的IP地址对其进行访问了。

DNS域名解析过程

域名解析包含两种查询方式,分别是递归查询和迭代查询。

递归查询

如果主机所询问的本地域名服务器不知道被查询域名的 IP 地址,那么本地域名服务器就以 DNS 客户端的身份,向其他根域名服务器继续发出查询请求报文,即替主机继续查询,而不是让主机自己进行下一步查询。

我们以一个例子来了解DNS递归查询的工作原理,假设图中的主机 (IP地址为m.xyz.com) 想知道域名y.abc.com的IP地址。

  • 1、主机首先向其本地域名服务器进行递归查询。
  • 2、本地域名服务器收到递归查询的委托后,也采用递归查询的方式向某个根域名服务器查询。
  • 3、根域名服务器收到递归查询的委托后,也采用递归查询的方式向某个顶级域名服务器查询。
  • 4、顶级域名服务器收到递归查询的委托后,也采用递归查询的方式向某个权限域名服务器查询。

过程如图所示:

当查询到域名对应的IP地址后,查询结果会在之前受委托的各域名服务器之间传递,最终传回给用户主机。过程如图所示:

迭代查询

当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出所要查询的IP 地址,要么告诉本地服务器下一步应该找哪个域名服务器进行查询,然后让本地服务器进行后续的查询。

迭代查询过程如下:

  • 1、主机首先向其本地域名服务器进行递归查询。
  • 2、本地域名服务器采用迭代查询,它先向某个根域名服务器查询。
  • 3、根域名服务器告诉本地域名服务器,下一次应查询的顶级域名服务器的IP地址。
  • 4、本地域名服务器向顶级域名服务器进行迭代查询。
  • 5、顶级域名服务器告诉本地域名服务器,下一次应查询的权限域名服务器的IP地址。
  • 6、本地域名服务器向权限域名服务器进行迭代查询。
  • 7、权限域名服务器告诉本地域名服务器所查询的域名的IP地址。
  • 8、本地域名服务器最后把查询的结果告诉主机。

过程如图所示:

由于递归查询对于被查询的域名服务器负担太大,通常采用以下模式:从请求主机到本地域名服务器的查询是递归查询,而其余的查询是迭代查询。

搭建DNS服务器

安装bind
代码语言:javascript
复制
bind #提供dns server程序,以及几个常用的测试工具。
bind-libs #提供bind和bind-utils包中的程序共同用到的库文件。
bind-utils #bind客户端程序集,例如提供dig, nslookup, dig等工具。
bind-chroot #类似chroot,把dns服务限制在某个范围之类。
代码语言:javascript
复制
yum install -y bind bind-utils bind-chroot
修改配置文件

为了防止错误的配置引起的故障,我们可以先将要配置的文件进行利用cp语句备份,-p 让复制出来的文件属性与源文件属性保持一致。

代码语言:javascript
复制
#备份配置文件
cp -p /etc/named.conf /etc/named.conf.bak
cp -p /etc/named.rfc1912.zones /etc/named.rfc1912.zones.bak
#修改主要配置文件
sed -i 's/127.0.0.1/172.25.250.103/g' /etc/named.conf
sed -i 's/allow-query   { localhost; };/allow-query   { any; };/g' /etc/named.conf
正向解析
  • 第一行的vincefans.com是域名。
  • 第三行的vincefans.com.zone是要做映射的解析文件。
代码语言:javascript
复制
vi /etc/named.rfc1912.zones
zone "vincefans.com" IN {
        type master;
        file "vincefans.com.zone";
        allow-update { none; };
};
区域解析库
  • 资源记录:rr(resource record)用于此记录解析的属性
    • SOA:Start Of Authority, 起始授权记录,一个区域解析库仅能有一个SOA记录,而且必须为解析库的第一条
    • NS:Name Server,域名服务器,专用于标明当前区域的DNS服务器
    • MX:Mail eXchange, 邮件交换器,MX记录有优先级属性(0-99)
    • A:internet Address,FQDN --> IP,专用于正向解析,用于实现将FQDN解析为IP地址
    • PTR:PoinTeR,IP --> FQDN,专用于反向解析,将IP地址解析为FQDN
    • AAAA:FQDN --> IPv6,专用于正向解析,将FQDN解析为IPv6地址
    • CNAME:Canonical Name,别名记录
依据SOA记录
  • serial:序列号,即数据库的版本号,主DNS服务器数据库内容发生变化时,其版本号要递增。
  • refresh:刷新时间间隔,从DNS服务器每隔多久到主DNS服务器检查序列号更新状况。
  • retry:重试时间间隔,从DNS服务器从主DNS服务器同步数据库失败时,定义多久之后再次发起尝试请求。
  • expire:过期时长,从DNS服务器始终联系不上主DNS服务器时,定义多久之后放弃从主DNS服务器同步数据库,并停止提供服务。
  • minimum:否定答案的缓存时长。
进行反向解析

第一行是的“250.25.172.in-addr.arpa”是所要解析IP的网段以及相应的数据文件名称。 第三行的vincefans.com.txt是要做映射的解析文件。

代码语言:javascript
复制
vi /etc/named.rfc1912.zones
zone "250.25.172.in-addr.arpa" IN {
        type master;
        file "vincefans.com.txt";
        allow-update { none; };
};
代码语言:javascript
复制
cp /var/named/named.empty /var/named/vincefans.com.txt
sed -i 's/@ rname.invalid./vincefans.com rname.invalid./g' /var/named/vincefans.com.txt
sed -i 's/@/dns.vincefans.com./g' /var/named/vincefans.com.txt
echo  '103     PTR     dns.vincefans.com.' >> /var/named/vincefans.com.txt
echo  '101     PTR     www.vincefans.com.' >> /var/named/vincefans.com.txt
  • rndc reload:在不重新启动DNS服务的情况下,重新加载配置文件及zone.
  • rndc reload zone:重新加载指定的zone。
  • rndc status:查看当前DNS服务器的状态。
  • rndc stats:将当前系统的DNS统计数据记录下来,默认会将数据存储为一个文件:/var/named/data/named_stats.txt。
  • rndc dumpdb:将当前DNS高速缓存中的数据记录下来,与stats类似,默认会将数据存储为一个文件:/var/named/data/cache_dump.db。
  • rndc flush:清空当前DNS服务器上的所有缓存。
对文件的属主进行修改
代码语言:javascript
复制
chown named /var/named/vincefans.com.*
systemctl restart named
systemctl enable named.service
firewall-cmd --add-service=dns
firewall-cmd --add-service=dns --permanent
查看本机网卡

将服务器端的信息添加进去并将其设置为静态获取IP。

查看本机DNS

查看本机DNS一定要指向自己配置的IP。

nslookup解析域名

测试使用域名访问web服务器:

代码语言:javascript
复制
curl www.vincefans.com
windows测试:

域名解析:

web访问:访问www.vincefans.com指向的172.25.250.101web服务器

测试缓存

第二次解析用了0秒,证明有生成缓存:

DNS 服务器主从复制

在DNS域名解析中,从服务器可以从主服务器上获取指定的区域数据文件,从而起到备份解析记录,与负载均衡的作用,因此通过部署从服务器,可以减轻主服务器负载压力,还可以提升用户的查询效率。

主服务器(master)
代码语言:javascript
复制
#首先通过yum仓库,安装bind域名解析系统,和bind-chroot,和域名解析工具bind-utils
yum install -y bind bind-chroot bind-libs bind-utils

编辑bind主配置文件,修改以下几行配置

代码语言:javascript
复制
#备份配置文件
cp -p /etc/named.conf /etc/named.conf.bak
cp -p /etc/named.rfc1912.zones /etc/named.rfc1912.zones.bak
vim /etc/named.conf
options {
        listen-on port 53 { any; };              #侦听任何ipv4地址
        listen-on-v6 port 53 { ::any; };         #侦听任何ipv6地址
        allow-query     { any; };                #允许任何主机查询
        .....
}
 接着创建区域名称,配置允许解析的IP地址:

vim /etc/named.rfc1912.zones
 
zone "vincefans.com" IN {                      #正向区域名
        type master;                           #区域类型(master/slave)
        file "vincefans.com.zone";             #区域文件名(/usr/named/vincefans.com.zone)
        allow-update { 172.25.250.102; };      #允许172.25.350.102过来缓存数据
#        masterfile-format text;               # 指定区域文件的格式为text,不指定有可能会为乱码
#        allow-transfer { 172.25.250.102; };    # 允许同步DNS的辅助服务器IP
#        also-notify { 172.25.250.102; };
};
zone "250.25.172.in-addr.arpa" IN {            #反向区域名(IP地址应反写)
        type master;                           #区域类型(master/slave)
        file "vincefans.com.arpa";             #区域文件名(/var/named/vincefans.com.arpa)
        allow-update { 172.25.250.102; };      #允许172.25.250.102过来缓存数据
#        masterfile-format text;               # 指定区域文件的格式为text,不指定有可能会为乱码
#        allow-transfer { 172.25.250.102; };    # 允许同步DNS的辅助服务器IP
#        also-notify { 172.25.250.102; };
};

编辑正向模板的zone记录,修改正向解析:

代码语言:javascript
复制
#拷贝默认区域配置模板,分别拷贝正向和反向模板
cp -a /var/named/named.localhost /var/named/vincefans.com.zone    #复制正向模板
cp -a /var/named/named.localhost /var/named/vincefans.com.arpa    #复制正向模板

vim /var/named/vincefans.com.zone
$TTL 3H
@       IN SOA  ns1.vincefans.com.  rname.invalid. (
#区域名  #SOA标识  #主域名服务器(FQDN)  #管理员邮件地址
                                        0       ; serial     #序列号
                                        1D      ; refresh    #刷新间隔
                                        1H      ; retry      #重试间隔
                                        1W      ; expire     #过期间隔
                                        3H )    ; minimum    #TTL
 
        NS      ns1.vincefans.com.                           #名称服务器
        NS      ns2.vincefans.com.                           #名称服务器
ns1     A       172.25.250.103                               #A记录解析自身(必须存在)
ns2     A       172.25.250.102                               #A记录解析自身(必须存在)
www     A       172.25.250.101                               #解析记录

编辑反向模板的zone记录,修改反向解析:

代码语言:javascript
复制
vim /var/named/vincefans.com.arpa
 
$TTL 3H
@       IN SOA  ns1.vincefans.com. rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      ns1.vincefans.com.
        NS      ns2.vincefans.com.
103     PTR     ns1.vincefans.com.
102     PTR     ns2.vincefans.com.
101     PTR     www.vincefans.com.

重启bind服务,并设置成开机自启动

代码语言:javascript
复制
systemctl restart named
systemctl enable named

将服务器端的信息添加进去并将其设置为静态获取IP,查看本机dns:

代码语言:javascript
复制
vim /etc/resolv.conf
# Generated by NetworkManager
nameserver 172.25.250.103
nameserver 172.25.250.102
vim /etc/sysconfig/network-scripts/ifcfg-ens33

验证正反向域名解析:

从服务器(slave)
代码语言:javascript
复制
#首先通过yum仓库,安装bind域名解析系统,bind-chroot,和域名解析工具bind-utils
yum install -y bind bind-chroot bind-utils

编辑bind主配置文件,修改以下几行配置

代码语言:javascript
复制
#备份配置文件
cp -p /etc/named.conf /etc/named.conf.bak
cp -p /etc/named.rfc1912.zones /etc/named.rfc1912.zones.bak
#修改主要配置文件
sed -i 's/127.0.0.1/any/g' /etc/named.conf
sed -i 's/allow-query     { localhost; };/allow-query     { any; };/g' /etc/named.conf

在从服务器中填写,需要同步的主服务器的IP地址,以及同步那个区域配置文件,其他无需修改,保存即可:

代码语言:javascript
复制
[root@localhost ~]# vim /etc/named.rfc1912.zones
 
zone "vincefans.com" IN {                               #正向区域名
        type slave;                                     #指定为从服务器
        masters { 172.25.250.103; };                    #指定主服务器IP
        file "slaves/vincefans.com.zone";               #指定同步后的文件
#        allow-update {  none;  };                       #不允许动态更新
#        masterfile-format text;               # 指定区域文件的格式为text,不指定有可能会为乱码
};
zone "250.25.172.in-addr.arpa" IN {                      #反向区域名
        type slave;                                     #指定为从服务器
        masters { 172.25.250.103; };                    #指定主服务器IP
        file "slaves/vincefans.com.arpa";               #指定同步后的文件
#        allow-update {  none;  };                       #不允许动态更新
#        masterfile-format text;               # 指定区域文件的格式为text,不指定有可能会为乱码
};

关闭防火墙或者放行53端口:

代码语言:javascript
复制
systemctl stop firewalld.service
或者:
firewall-cmd --add-port=53/tcp
firewall-cmd --add-port=53/tcp  --permanent

重启bind服务,并设置成开机自启动 :

代码语言:javascript
复制
systemctl restart named
systemctl enable named

查看同步过来的正反向记录:

查看DNS,申请静态获取IP BOOTPROYO=static:

代码语言:javascript
复制
vim /etc/resolv.conf
# Generated by NetworkManager
nameserver 172.25.250.103
nameserver 172.25.250.102
vim /etc/sysconfig/network-scripts/ifcfg-ens33

验证正反向域名解析:

假如master意外关掉,那么dns服务器(slave)172.25.250.102就会顶替上来:

代码语言:javascript
复制
#master关闭dns服务
[root@web03_server ~]# systemctl stop named.service 

域名解析的dns服务器是172.25.250.102

部署小型DNS缓存服务

DNS缓存服务器(Caching DNS Server),是一种不负责域名数据维护的DNS服务器,简单来说,缓存服务器就是把用户经常使用到的,域名与IP地址的解析记录保存在本机,从而提升下次解析请求的效率。以下实验,将配置一台主DNS服务,再配置一台缓存服务器,加快DNS的解析速度。

DNSmasq是一个轻巧的,容易使用的DNS服务工具,它可以应用在内部网和Internet连接的时候的IP地址NAT转换,也可以用做小型网络的DNS服务。它可以提供如下几个实用的功能:

  • 1 、提供dns服务
  • 2 、优先使用本地自定义dns
  • 3 、提供dhcp服务 一般情况下,我们可以用bind解决dns的问题,dhcpd解决dhcp的问题,另外,还可以用ypbind解决自定义hostname解析的ip(当然还有用户的功能)

主要用途:

  • 局域网有很多机器希望使用一份一样的hosts定义一批名称对应的ip,你需要经常维护这份列表。
  • 你希望局域网的人访问某个域名时,拦截下来到指定的ip,做缓存节省带宽或者其它用途都可以。
  • 禁止某个域名的正常解析。

dnsmasq是一个很不错的外部DNS中继,小巧且方便地用于配置DNS和DHCP的工具,适用于小型网络,不适用于跨区域的网络。DNSmasq主用适用于NAT的家庭网络,用modem,cable modem,ADSL设备连接到因特网,对于那些需求低资源消耗且配置方便简单的小型网络(最多可支持1000台主机)是一个很好的选择。

缓存DNS服务器,安装dnsmasq缓存工具。

代码语言:javascript
复制
yum install -y dnsmasq

打开dnsmasq的主配置文件,在配置文件底部写入要缓存的条目。

代码语言:javascript
复制
vim /etc/dnsmasq.conf 
 
#resolve-file指定dnsmasq从哪里获取上行DNS Server,默认是从/etc/resolv.conf获取
resolv-file=/etc/resolv.dnsmasq.conf
#表示严格安装 resolv-file 文件中的顺序从上到下进行 DNS 解析, 直到第一个成功解析成功为止
strict-order
#默认是监控在所有网卡上的,现在改为监控局域网上的172.25.250.103,172.25.250.102
listen-address=172.25.250.101,127.0.0.1
#dnsmasq从哪个文件中读取“地址 域名”记录,默认是系统文件/etc/hosts;
addn-hosts=/etc/dnsmasq.hosts
#设置缓存大小
#cache-size=1024
#开启debug模式,记录客户端查询记录到/var/log/debug中 
log-queries
 
#配置DHCP功能
expand-hosts
#设置domain为“vincefans.com”
domain=vincefans.com
#地址范围续订期为12个小时
dhcp-range=172.25.250.50,172.25.250.150,12h
#指定了默认网关
dhcp-option=3,172.25.250.2
代码语言:javascript
复制
#文件最后添加
vim /etc/dnsmasq.conf
 
#国内指定DNS
server=/cn/114.114.114.114
server=/taobao.com/114.114.114.114
server=/taobaocdn.com/114.114.114.114
#国外指定DNS
server=/google.com/223.5.5.5
#屏蔽网页广告:将指广告的URL指定127这个IP,就可以将网页上讨厌的广告给去掉了
address=/ad.youku.com/127.0.0.1
address=/ad.iqiyi.com/127.0.0.1
#指定域名解析到特定的IP上
address=/www.vincefans.com/172.25.250.103

修改本地上游DNS配置文件和本地hosts文件:

代码语言:javascript
复制
#复制本地上游DNS配置文件
cp /etc/resolv.conf /etc/resolv.dnsmasq.conf
#提示:resolv.dnsmasq.conf中设置的是真正的Nameserver,可以用电信、联通等公共的DNS。
vim /etc/resolv.dnsmasq.conf 
# Generated by NetworkManager
nameserver 114.114.114.114
nameserver 114.114.115.115
代码语言:javascript
复制
vim /etc/dnsmasq.hosts
#本地域名 
172.25.250.101  www.vincefans.com
172.25.250.102  www.vincefans.com
172.25.250.103  glpi.vincefans.com
#公网域名
10.4.29.106      www.taobao.com
10.4.24.116      www.baidu.com

重启dnsmasq服务,并设置开机自启动

代码语言:javascript
复制
systemctl restart dnsmasq.service 
systemctl enable dnsmasq.service 

验证:dig www.baidu.com,第一次是没有缓存,所以时间是31。

第二次再次测试,因为已经有了缓存,所以查询时间已经变成了0.

部署DNS加密同步

在如今的互联网中,绝大多数DNS服务器,都是靠Bind提供服务的,bind服务也为用户提供了一种加密措施,来保证数据在两台DNS服务器同步过程中的安全性,即TSIG加密机制,保证了DNS服务器之间区域数据传输的安全性。

配置加密主DNS

1.首先通过yum仓库,安装bind域名解析系统,和bind-chroot禁锢模块

代码语言:javascript
复制
yum install -y bind bind-chroot bind-libs

2.在主服务器中通过以下命令生成一个名称为master-slave的128位HMAC-MD5算法的名称为master-slave的密钥文件,并记住Kmaster-slave.+157+53234.private里面的key后期要用到这个钥匙同步数据。

代码语言:javascript
复制
dnssec-keygen -a HMAC-MD5 -b 128 -n HOST master-slave

记住这个Key:

3.在主服务器中创建密钥验证文件,并把刚刚创建的key写入到tansfer.key传输文件里面,并配置好相应的权限:

代码语言:javascript
复制
vim /var/named/chroot/etc/transfer.key
key "master-slave" {                           #写上刚刚的密钥名称
        algorithm hmac-md5;                    #指定加密算法
        secret "qlzb***************n3A==";     #写上上面的key
};
代码语言:javascript
复制
chown root:named /var/named/chroot/etc/transfer.key
chmod 640 /var/named/chroot/etc/transfer.key
ln /var/named/chroot/etc/transfer.key /etc/transfer.key
代码语言:javascript
复制
include "/etc/transfer.key";                                  #添加本行,导入密钥
 
allow-transfer { key master-slave; };             #添加本行,允许加载key

重启bind服务:

代码语言:javascript
复制
systemctl restart named
配置加密从DNS

1.安装bind域名解析系统,和bind-chroot禁锢模块:

代码语言:javascript
复制
yum install -y bind bind-chroot bind-libs

2.进入从DNS服务器,在相应目录下创建密钥文件,文件内容与主DNS服务器应相同,并赋予相应权限:

代码语言:javascript
复制
vim /var/named/chroot/etc/transfer.key
key "master-slave" {                           #内容必须和主DNS保持一致
        algorithm hmac-md5;                    
        secret "********************==";     
};
chown root:named /var/named/chroot/etc/transfer.key
chmod 640 /var/named/chroot/etc/transfer.key
ln /var/named/chroot/etc/transfer.key /etc/transfer.key

3.修改从DNS服务器的/etc/named.conf主配置文件,开启加密验证,并指定服务器IP地址:

代码语言:javascript
复制
vim /etc/name.conf
 
include "/etc/transfer.key";           #导入密钥对
......
server 172.25.250.103 {                #指定主服务器IP
        keys { master-slave; };        #指定密钥对
};

4.重启 bind服务:

代码语言:javascript
复制
systemctl restart named.service 

部署DNS分离解析

通常利用DNS的分离解析来达到针对不同的客户端访问网站时,分别解析到不同的主机,以达到负载均衡的目的。举例来说明,深圳的访客和广州的访客,同时访问一个网站,如果是深圳的访客我们将其解析到深圳的机房,如果是广州的访客我们将其解析到广州的机房,从而实现了快速上网,快速访问资源的目的,这一点有点类似于CND内容分发网络。

以下实验,将配置一台主DNS服务,通过使用view视图实现分离解析,广州的用户自动访问到广州的主机,深圳的用户自动访问到深圳的主机,由于没有合适的资源这里只做演示:

(注意:假设(IP=172.25.250.0/24是广州区域),(IP=172.25.240.0/24是深圳区域),(广州用户解析到IP=172.25.250.102),(深圳用户解析到IP=172.25.250.101))。

1.修改虚拟机的虚拟网络,使172.25.240.0和172.25.250.0两个网段之间互通:

2.首先通过yum仓库,安装bind域名解析系统,和bind-chroot:

代码语言:javascript
复制
yum install -y bind bind-chroot bind-libs

3.修改主配置文件,由于分离解析功能与DNS根域冲突,所以还要屏蔽zone根域区域:

代码语言:javascript
复制
vim /etc/named.conf
 
#zone "." IN {
#       type hint;
#       file "named.ca";
#};

4.编辑正反向区域配置文件,把区域配置文件原有内容清空,然后根据以下格式写入内容:

代码语言:javascript
复制
vim /etc/named.rfc1912.zones
 
acl "shenzhen" { 172.25.240.0/24; };                  #假设,这个网段属于shenzhen区域
acl "guangzhou" { 172.25.250.0/24; };                 #假设,这个网段属于ghuangzhou区域
 
view "shenzhen" {
 
        match-clients { "shenzhen"; };
        zone "vincefans.com" {
                type master;
                file "vincefans.com.shenzhen.zone";
        };
        zone "250.25.172.in-addr.arpa" {
                type master;
                file "vincefans.com.shenzhen.arpa";
        };
};
 
view "guangzhou" {
 
        match-clients { "guangzhou"; };
        zone "vincefans.com" {
                type master;
                file "vincefans.com.guangzhou.zone";
        };
        zone "250.25.172.in-addr.arpa" {
                type master;
                file "vincefans.com.guangzhou.arpa";
        };
};

5.建立对应的区域配置文件,分别拷贝两个模板:

代码语言:javascript
复制
#深圳正反向zone记录
cp -a /var/named/named.localhost /var/named/vincefans.com.shenzhen.zone
cp -a /var/named/named.localhost /var/named/vincefans.com.shenzhen.arpa
#广州正反向zone记录
cp -a /var/named/named.localhost /var/named/vincefans.com.guangzhou.zone
cp -a /var/named/named.localhost /var/named/vincefans.com.guangzhou.arpa
#修改文件权限
chown named:named /var/named/vincefans*

6.分别修改两个配置模板,shenzhen(172.25.240.0)解析成=172.25.250.101,guangzhou(172.25.250.0)解析成=172.25.250.102:

代码语言:javascript
复制
#深圳正反向解析配置文件:
vim /var/named/vincefans.com.shenzhen.zone 
$TTL 1D
@       IN SOA  dns.vincefans.com. rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.vincefans.com.
dns     A       127.0.0.1
www     A       172.25.250.101
 
vim /var/named/vincefans.com.shenzhen.arpa 
$TTL 1D
@       IN SOA  dns.vincefans.com. rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.vincefans.com.
1       PTR     dns.vincefans.com.
101     PTR     www.vincefans.com.
 
#广州正反向解析配置文件:
vim /var/named/vincefans.com.guangzhou.zone
$TTL 1D
@       IN SOA  dns.vincefans.com. rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.vincefans.com.
dns     A       127.0.0.1
www     A       172.25.250.102
 
vim /var/named/vincefans.com.guangzhou.arpa 
$TTL 1D
@       IN SOA  dns.vincefans.com rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.vincefans.com.
1       PTR     dns.vincefans.com.
102     PTR     www.vincefans.com.

8.重启bind服务:

代码语言:javascript
复制
systemctl restart named

9.172.25.240.0网段测试www.vincefans.com解析为=172.25.250.101:

10.172.25.250.0网段测试www.vincefans.com解析为=172.25.250.102:

部署DNS负载均衡

在日常的生产环境中,其实DNS也是可以作为一个负载均衡器使用的,下面我们将介绍通过配置DNS域名失效时间的方式,来实现一个负载调度器。

以下实验,将配置一台主DNS服务,并实现负载均衡。(注意:请自行搭建3个Http服务,之间相互通信,web01=172.25.250.101,web02=172.25.250.102,web03=172.25.250.103)。

1.首先通过yum仓库,安装bind域名解析系统,bind-chroot,域名解析工具bind-ulits

代码语言:javascript
复制
yum install -y bind bind-chroot bind-libs bind-ulits

2.编辑bind主配置文件,修改以下几行配置

代码语言:javascript
复制
vim /etc/named.conf
 
options {
        listen-on port 53 { any; };                                    #侦听任何ipv4地址
        listen-on-v6 port 53 { ::any; };                               #侦听任何ipv6地址
        allow-query     { any; };                                      #允许任何主机查询
        .....
}

3.接着创建区域名称,在配置文件底部

4.编辑正向模板的zone记录,修改正向解析,在正向解析记录的基础上简单修改即可实现:

代码语言:javascript
复制
vim /var/named/vincefans.com.guangzhou.zone 
$TTL 1D
@       IN SOA  dns.vincefans.com. rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.vincefans.com.
dns     A       127.0.0.1
www.vincefans.com.      A       172.25.250.102
www.vincefans.com.      A       172.25.250.101
www.vincefans.com.      A       172.25.250.103

5.重启bind服务:

代码语言:javascript
复制
systemctl status named

6.验证

部署DNS安全扩展dnssec

DNS做为互联网早期产物,使用无连接的UDP协议虽然降低了开销也保证了高效的通信,但是没有考虑安全问题。由于DNS使用目的端口为53的UDP明文进行通信,DNS解析器识别是自己发出的数据包的唯一标准就是随机的源端口号,如果端口号匹配则认为是正确回复,而不会验证来源。所以也带来了许多DNS安全问题,如DNS欺骗,DNS Cache污染,DNS放大攻击等。

针对DNS安全问题,业界提出了DNSSec(Domain Name System Security Extensions,也叫"DNS安全扩展")机制,使用密码学方法解决DNS安全问题,让客户端对域名来源身份。

尽管DNS的安全问题一直被互联网研究和工程领域广为关注,但是有一种普遍存在的攻击却始终没有解决,即DNS的欺骗和缓存污染问题。DNS安全扩展(DNS Security Extension, 即DNSSEC)主要是为了解决这一问题而提出的(尽管它还有其他用途)。因此,在介绍DNSSEC的原理之前有必要简单介绍DNS欺骗和缓存污染攻击的原理。

不过,目前配置了DNSSEC签名的域名非常少,据我所知一般有些国外政府域名有,当然paypal也有,而国内几乎没有(国内的支付宝并没有)。

1.激活DNSSEC

代码语言:javascript
复制
#首先,在BIND的配置文件(一般是/etc/named.conf)中打开DNSSEC选项,比如:
vim /etc/named.comf
 
options {
        dnssec-enable yes;
        dnssec-validation yes;
        dnssec-lookaside auto;
};

2.生成跟(.)的KSK和ZSK

代码语言:javascript
复制
cd /var/named/
#区(zone)文件生成密钥签名密钥KSK:
dnssec-keygen -a RSASHA1 -b 512 -n ZONE vincefans.com
#生成区签名密钥ZSK:
dnssec-keygen -a RSASHA1 -b 512 -f KSK -n ZONE vincefans.com

DS记录来源于顶级域名(com.)的 KSK 每一个DS记录都来源于子域,而信任锚可以是DNSKEY或者DS记录,就是为了最后确认可以的保证。

代码语言:javascript
复制
dnssec-dsfromkey -2 Kvincefans.com.+005+29011.key

3.签名

代码语言:javascript
复制
#签名之前,你需要把上面的两个DNSKEY写入到区文件中
vim /var/named/vincefans.com.guangzhou.zone
 
$INCLUDE "/var/named/Kvincefans.com.+005+16416.key"
$INCLUDE "/var/named/Kvincefans.com.+005+29011.key"
 
#然后执行签名操作:
dnssec-signzone -o vincefans.com /var/named/vincefans.com.guangzhou.zone
 
#检查配置文件和区域文件有没有错误
#如果有报错,修改好重新执行签名操作
named-checkconf /etc/named.conf 
named-checkzone vincefans.com  /var/named/vincefans.com.guangzhou.zone
named-checkzone vincefans.com  /var/named/vincefans.com.guangzhou.zone.signed

查看生成的两个文件:

4.创建“信任锚”文件

代码语言:javascript
复制
#其中的密钥部分是将权威服务器生成的K.+005+62317.key和K.+005+62541.key中密钥部分拷贝过来。
vim /var/named/trust-anchors.conf
trusted-keys {
        "vincefans.com." 256 3 5 "AwEAAb63RM1Lwael1MZRSc8E3Wmxhhk8lwoXPmgf9EHy6q52sfj4Si/z 5KJ333r1ImBrYeF49/8rTUC60alwvZiomN8=";
        "vincefans.com." 257 3 5 "AwEAAbv7HV3SEfZUQ+vD/Ff6iD/+MLYTWXkT2a/bTNJxiCJTXVl8Wh2b 8MEEjT62Mjm5zZDdJS5DtligREJkYHq3oTE=";
};
 
#在主配置文件最后面加入:
vim /etc/named.comf
 
include "/var/named/trust-anchors.conf";
 
#重启服务:
systemctl restart named.server

验证,flags:出现ad表示搭建成功:

代码语言:javascript
复制
dig @172.25.250.103  +dnssec vincefans.com.  NS
 
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.10 <<>> @172.25.250.103 +dnssec vincefans.com. NS
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28779
;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 3

参考链接:https://blog.csdn.net/weixin_45629285 /article/details/122969104 https://blog.csdn.net/ vincefans/article/details/128421356

推荐阅读 点击标题可跳转

最强国产开源监控系统推荐!真的牛逼。。。

弃用 Docker !事实证明,它更牛逼。。。

还是决定去华为了!!!

坐不住了!985 高校也开始裁员了。。。

突发!又一科技巨头宣布退出中国市场!

10 分钟快速构建一套虚拟开发环境,效率神器!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-11-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 民工哥技术之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • DNS 概述
    • DNS 服务器的层次结构
    • DNS 的作用
    • DNS域名解析过程
      • 递归查询
        • 迭代查询
        • 搭建DNS服务器
          • 安装bind
            • 修改配置文件
              • 正向解析
                • 进行反向解析
                  • 对文件的属主进行修改
                    • 查看本机网卡
                      • 查看本机DNS
                        • nslookup解析域名
                          • 测试缓存
                          • DNS 服务器主从复制
                            • 主服务器(master)
                              • 从服务器(slave)
                              • 部署小型DNS缓存服务
                              • 部署DNS加密同步
                                • 配置加密主DNS
                                  • 配置加密从DNS
                                  • 部署DNS分离解析
                                  • 部署DNS负载均衡
                                  • 部署DNS安全扩展dnssec
                                  相关产品与服务
                                  负载均衡
                                  负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
                                  领券
                                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档