一、简介
当前TCP/IP网络中的设备之间进行通信,是利用和依赖于IP地址实现的。但数字形式的IP地址是很难记忆的。当网络设备众多,想要记住每个设备的IP地址,可以说是“不可能完成的任务”。那么如何解决这一难题呢?我们可以给每个网络设备起一个友好的名称,如:www.magedu.org,这种由文字组成的名称,显而易见要更容易记忆。但是计算机不会理解这种名称的,我们可以利用一种名字解析服务将名称转化成(解析)成IP地址。从而我们就可以利用名称来直接访问网络中设备了。而实现此服务的方法是多样的。如下面所述:
本地名称解析配置文件:hosts
Linux: /etc/hosts
windows: %WINDIR%/system32/drivers/etc/hosts
DNS(Domain Name System,域名系统)应用层协议,是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网
基于C/S架构,服务器端:53/udp, 53/tcp
BIND:Bekerley Internet Name Domain,由 ISC (http://www.isc.org/)提供的DNS软件实现
/etc/resolv.conf文件:DNS客户机配置文件
公共DNS查询网:https://dns.jiayongluyou.com/
DNS域名结构
- 根域
- 一级域名:Top Level Domain: tld
com, edu, mil, gov, net, org, int,arpa
三类:组织域、国家域(.cn, .ca, .hk, .tw)、反向域:arpa 这是反向解析的特殊顶级域。
- 二级域名:magedu.com
- 三级域名:study.magedu.com
- 最多可达到127级域名
ICANN(The Internet Corporation for Assigned Names and Numbers)互联网名称与数字地址分配机构,负责在全球范围内对互联网通用顶级域名(gTLD)以及国家和地区顶级域名(ccTLD)系统的管理、以及根服务器系统的管理
DNS服务工作原理
DNS查询类型
- 递归查询:最终结果,负责到底
- 迭代查询:最好结果,不负责到底
名称服务器
Name Server,域内负责解析本域内的名称的DNS服务器
根名称服务器:13组负责解析根域的DNS服务器
解析类型
- FQDN –> IP 正向解析
- IP –> FQDN 反向解析注意:正反向解析是两个不同的名称空间,是两棵不同的解析树
完整的查询请求经过的流程
Client -->hosts文件 --> Client DNS Service Local Cache --> DNS Server (recursion) --> DNS Server Cache -->iteration(迭代) --> 根--> 顶级域名DNS-->二级域名DNS…
DNS 服务相关概念和技术
DNS服务器的类型
主DNS服务器
从DNS服务器
缓存DNS服务器(转发器)
主DNS服务器
管理和维护所负责解析的域内解析库的服务器
从DNS服务器
从主服务器或从服务器“复制”(区域传输)解析库副本
- 序列号:解析库版本号,主服务器解析库变化时,其序列递增
- 刷新时间间隔:从服务器从主服务器请求同步解析的时间间隔
- 重试时间间隔:从服务器请求同步失败时,再次尝试时间间隔
- 过期时长:从服务器联系不到主服务器时,多久后停止服务
- 通知机制:主服务器解析库发生变化时,会主动通知从服务器
区域传输
完全传输:传送整个解析库
增量传输:传递解析库变化的那部分内容
解析形式
- 正向:FQDN( Fully Qualified Domain Name) --> IP
- 反向: IP --> FQDN
负责本地域名的正向和反向解析库
正向区域
反向区域
解析答案
肯定答案:存在对应的查询结果
否定答案:请求的条目不存在等原因导致无法返回结果
权威答案:直接由存有此查询结果的DNS服务器(权威服务器)返回的答案
非权威答案:由其它非权威服务器返回的查询答案
各种资源记录
区域解析库:由众多RR组成:
资源记录:Resource Record, RR
记录类型:A, AAAA, PTR, SOA, NS, CNAME, MX
- SOA:Start Of Authority,起始授权记录;一个区域解析库有且仅能有一个SOA记录,必须位于解析库的第一条记录
- A:internet Address,作用,FQDN –> IP
- AAAA:FQDN –> IPv6
- PTR:PoinTeR,IP –> FQDN
- NS:Name Server,专用于标明当前区域的DNS服务器
- CNAME : Canonical Name,别名记录
- MX:Mail eXchanger,邮件交换器
- TXT:对域名进行标识和说明的一种方式,一般做验证记录时会使用此项,如:SPF(反垃圾邮件)记录,https验证等,如下示例:
_dnsauth TXT 2012011200000051qgs69bwoh4h6nht4n1h0lr038x
资源记录定义的格式
name [TTL] IN rr_type value
注意:
- TTL可从全局继承
- 使用 “@” 符号可用于引用当前区域的名字
- 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应
- 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机
SOA记录
name: 当前区域的名字,例如“magedu.org.”
value: 有多部分组成
注意:
- 当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字
- 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般用.替换
例如:admin.magedu.org
- 主从服务区域传输相关定义以及否定的答案的统一的TTL
范例:
magedu.org. 86400 IN SOA ns.magedu.org. nsadmin.magedu.org. ( 2015042201 ;序列号 2H ;刷新时间 10M ;重试时间 1W ;过期时间 1D ;否定答案的TTL值 )
NS记录
name: 当前区域的名字
value: 当前区域的某DNS服务器的名字,例如ns.magedu.org.
注意:
- 相邻的两个资源记录的name相同时,后续的可省略
- 对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有一个A记录
- 一个区域可以有多个NS记录
范例:
magedu.org. IN NS ns1.magedu.org. magedu.org. IN NS ns2.magedu.org.
MX记录
name: 当前区域的名字
value: 当前区域的某邮件服务器(smtp服务器)的主机名
注意:
- 一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级;数字越小优先级越高
- 对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录
范例:
magedu.org. IN MX 10 mx1.magedu.org. IN MX 20 mx2.magedu.org.
A记录
name: 某主机的FQDN,例如:www.magedu.org.
value: 主机名对应主机的IP地址
避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址
范例:
www.magedu.org. IN A 1.1.1.1 www.magedu.org. IN A 2.2.2.2 mx1.magedu.org. IN A 3.3.3.3 mx2.magedu.org. IN A 4.4.4.4 GENERATE 1-254 HOST IN A 1.2.3.$ *.magedu.org. IN A 5.5.5.5 magedu.org. IN A 6.6.6.6
范例:阿里云
AAAA记录
name: FQDN
value: IPv6
PTR记录
name: IP,有特定格式,把IP地址反过来写,1.2.3.4,要写作4.3.2.1;而有特定后缀:in-addr.arpa.,所以完整写法为:4.3.2.1.in-addr.arpa.
value: FQDN
注意:网络地址及后缀可省略;主机地址依然需要反着写
例如:
4.3.2.1.in-addr.arpa. IN PTR www.magedu.org. #如1.2.3为网络地址,可简写成: 4 IN PTR www.magedu.org.
CNAME别名记录
name: 别名的FQDN
value: 真正名字的FQDN
例如:
www.magedu.org. IN CNAME websrv.magedu.org.
子域授权
每个域的名称服务器,都是通过其上级名称服务器在解析库进行授权,类似根域授权tld
glue record:粘合记录,父域授权子域的记录
范例:
.com. IN NS ns1.com. .com. IN NS ns2.com. ns1.com. IN A 2.2.2.1 ns2.com. IN A 2.2.2.2 #magedu.org. 在.com的名称服务器上,解析库中添加资源记录 magedu.org. IN NS ns1.magedu.org. magedu.org. IN NS ns2.magedu.org. magedu.org. IN NS ns3.magedu.org. ns1.magedu.org. IN A 3.3.3.1 ns2.magedu.org. IN A 3.3.3.2 ns3.magedu.org. IN A 3.3.3.3
互联网域名
代理商:万网, 新网, godaddy
域名注册
注册完成以后,想自己用专用服务来解析
管理后台:把NS记录指向的服务器名称,和A记录指向的服务器地址
DNS软件bind
DNS服务器软件:bind,powerdns,unbound
BIND相关程序包
yum list all bind*
- bind:服务器
- bind-libs:相关库
- bind-utils: 客户端
- bind-chroot: 安全包,将dns相关文件放至 /var/named/chroot/
范例:安装bind软件
yum install bind bind-utils
BIND包相关文件
- BIND主程序:/usr/sbin/named
- 服务脚本和Unit名称:/etc/rc.d/init.d/named,/usr/lib/systemd/system/named.service
- 主配置文件:/etc/named.conf, /etc/named.rfc1912.zones, /etc/rndc.key
- 管理工具:/usr/sbin/rndc:remote name domain controller,默认与bind安装在同一主机,且只能通过127.0.0.1连接named进程,提供辅助性的管理功能;953/tcp
- 解析库文件:/var/named/ZONE_NAME.ZONE注意:
(1) 一台物理服务器可同时为多个区域提供解析
(2) 必须要有根区域文件;named.ca
(3) 应该有两个(如果包括ipv6的,应该更多)实现localhost和本地回环地址的解析库
主配置文件
- 全局配置:options {};
- 日志子系统配置:logging {};
- 区域定义:本机能够为哪些zone进行解析,就要定义哪些zone
zone "ZONE_NAME" IN {};
注意:
- 任何服务程序如果期望其能够通过网络被其它主机访问,至少应该监听在一个能与外部主机通信的IP地址上
- 缓存名称服务器的配置:监听外部地址即可
- dnssec: 建议关闭dnssec,设为no
实现主DNS服务器
主DNS服务器配置
- 在主配置文件中定义区域
vim /etc/named.conf #注释掉下面两行 // listen-on port 53 { 127.0.0.1; }; // allow-query { localhost; }; zone "ZONE_NAME" IN { type {master|slave|hint|forward}; file "ZONE_NAME.zone"; };
- 定义区域解析库文件
出现的内容
宏定义
资源记录 - 范例:区域数据库
$TTL 86400 $ORIGIN magedu.org. @ IN SOA ns1.magedu.org. admin.magedu.org ( 2015042201 1H 5M 7D 1D ) IN NS ns1 IN NS ns2 IN MX 10 mx1 IN MX 20 mx2 ns1 IN A 172.16.100.11 ns2 IN A 172.16.100.12 mx1 IN A 172.16.100.13 mx2 IN A 172.16.100.14 websrv IN A 172.16.100.11 websrv IN A 172.16.100.12 www IN CNAME websrv
主配置文件语法检查
named-checkconf
解析库文件语法检查
named-checkzone "magedu.org" /var/named/magedu.org.zone
配置生效
rndc reload systemctl reload named service named reload
测试和管理工具
dig 命令
dig只用于测试dns系统,不会查询hosts文件进行解析
命令格式:
dig [-t type] name [@SERVER] [query options] query options: +[no]trace:跟踪解析过程 : dig +trace magedu.org +[no]recurse:进行递归解析
范例:
#测试反向解析 dig -x IP = dig –t ptr reverseip.in-addr.arpa #模拟区域传送 dig -t axfr ZONE_NAME @SERVER dig -t axfr magedu.org @10.10.10.11 dig –t axfr 100.1.10.in-addr.arpa @172.16.1.1 dig -t NS . @114.114.114.114 dig -t NS . @a.root-servers.net
host命令
命令格式:
host [-t type] name [SERVER]
范例
host -t NS magedu.org 172.16.0.1 host -t soa magedu.org host -t mx magedu.org host -t axfr magedu.org host 1.2.3.4
nslookup命令
nslookup 可以支持交互和非交互式两种方式执行
全令格式:
nslookup [-option] [name | -] [server]
交互式模式:
nslookup>
server IP: 指明使用哪个DNS server进行查询
set q=RR_TYPE: 指明查询的资源记录类型
NAME: 要查询的名称
rndc 命令
利用rndc工具可以实现管理DNS功能
rndc 监听端口: 953/tcp
命令格式:
rndc COMMAND COMMAND: status: 查看状态 reload: 重载主配置文件和区域解析库文件 reload zonename: 重载区域解析库文件 retransfer zonename: 手动启动区域传送,而不管序列号是否增加 notify zonename: 重新对区域传送发通知 reconfig: 重载主配置文件 querylog: 开启或关闭查询日志文件/var/log/message trace: 递增debug一个级别 trace LEVEL: 指定使用的级别 notrace:将调试级别设置为 0 flush:清空DNS服务器的所有缓存记录
实战案例:实现DNS正向主服务器
实验目的
搭建DNS正向主服务器,实现web服务器基于FQDN的访问
环境要求
需要三台主机
DNS服务端:192.168.8.8
web服务器:192.168.8.7
DNS客户端:192.168.8.6
前提准备
关闭SElinux 关闭防火墙 时间同步
实现步骤
在DNS服务端安装bind
yum install bind -y
修改bind 配置文件
vim /etc/named.conf #注释掉下面两行 // listen-on port 53 { 127.0.0.1; }; // allow-query { localhost; }; vim /etc/named.rfc1912.zones #加上下面内容 zone "magedu.org" IN { type master; file "magedu.org.zone"; };
DNS区域数据库文件
cp -p /var/named/named.localhost /var/named/magedu.org.zone #如果没有加-p选项,需要修改所有者或权限。chgrp named magedu.org.zone vim /var/named/magedu.org.zone $TTL 1D @ IN SOA master admin.magedu.org. ( 2019042210 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS master master A 192.168.8.8 www A 192.168.8.7
检查配置文件和数据库文件格式,并启动服务
named-checkconf named-checkzone magedu.org /var/named/magedu.org.zone systemctl start named #第一次启动服务 rndc reload #不是第一次启动服务
实现WEB服务
#安装http服务 yum install httpd #配置主页面 echo www.magedu.org > /var/www/html/index.html #启动服务 systemctl start httpd
在客户端实现测试
vim /etc/sysconfig/network-scripts/ifcfg-eth0 DNS1=192.168.8.8 #centos7 以上版执行现下面命令生效 nmcli con reload nmcli con up eth0 #centos 6 执行下面命令生效 service network restart #有以下记录,算是成功 cat /etc/resolv.conf # Generated by NetworkManager nameserver 192.168.23.129 #测试网页,能显示就是成功 curl www.magedu.org www.magedu.org
允许动态更新
动态更新:可以通过远程更新区域数据库的资源记录
实现动态更新,需要在指定的zone语句块中:
Allow-update {any;};
范例:
chmod 770 /var/named setsebool -P named_write_master_zones on nsupdate >server 127.0.0.1 >zone magedu.org >update add ftp.magedu.org 88888 IN A 8.8.8.8 >send >update delete www.magedu.org A >send #测试 dig ftp.magedu.org @127.0.0.1 ls -l /var/named/magedu.org.zone.jnl cat /var/named/magedu.org.zone
实现反向解析区域
反向区域:即将IP反向解析为FQDN
区域名称:网络地址反写.in-addr.arpa.
示例:
172.16.100. --> 100.16.172.in-addr.arpa.
(1) 定义区域
zone "ZONE_NAME" IN { type {master|slave|forward}; file "网络地址.zone" };
(2) 定义区域解析库文件
注意:不需要MX,以PTR记录为主
范例:
$TTL 86400 $ORIGIN 8.168.192.in-addr.arpa. @ IN SOA ns1.magedu.org. admin.magedu.org. ( 2015042201 1H 5M 7D 1D ) IN NS ns1.magedu.org. 11 IN PTR ns1.magedu.org. 11 IN PTR www.magedu.org. 12 IN PTR mx1.magedu.org. 12 IN PTR www.magedu.org. 13 IN PTR mx2.magedu.org.
实现从服务器
只有一台主DNS服务器,存在单点失败的问题,可以建立主DNS服务器的备份服务器,即从服务器来实现DNS服务的容错机制。从服务器可以自动和主服务器进行单向的数据同步,从而和主DNS服务器一样,也可以对外提供查询服务,但从服务器不提供数据更新服务。
DNS从服务器
- 应该为一台独立的名称服务器
- 主服务器的区域解析库文件中必须有一条NS记录指向从服务器
- 从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中
- 主服务器得允许从服务器作区域传送
- 主从服务器时间应该同步,可通过ntp进行
- bind程序的版本应该保持一致;否则,应该从高,主低
定义从区域
格式:
zone "ZONE_NAME" IN { type slave; masters { MASTER_IP; }; file "slaves/ZONE_NAME.zone"; };
实战案例:实现DNS从服务器
实验目的
搭建DNS主从服务器架构,实现DNS服务冗余
6.3.2 环境要求
需要四台主机 DNS主服务器:192.168.8.8 DNS从服务器:192.168.8.18 web服务器:192.168.8.7 DNS客户端:192.168.8.6
6.3.3 前提准备
关闭SElinux 关闭防火墙 时间同步
6.3.4 实现步骤
6.3.4.1 主DNS服务端配置(参看前面案例)
yum install bind -y vim /etc/named.conf #注释掉下面两行 // listen-on port 53 { 127.0.0.1; }; // allow-query { localhost; }; #只允许从服务器进行区域传输 allow-transfer { 从服务器IP;}; vim /etc/named.rfc1912.zones #加上这段 zone "magedu.org" { type master; file "magedu.org.zone"; }; cp -p /var/named/named.localhost /var/named/magedu.org.zone #如果没有-p,需要改权限。chgrp named magedu.org.zone vim /var/named/magedu.org.zone $TTL 1D @ IN SOA master admin.magedu.org. ( 1 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS master NS slave master A 192.168.8.8 slave A 192.168.8.18 systemctl start named #第一次启动服务 rndc reload #不是第一次启动服务
从DNS服务器配置
yum install bind -y vim /etc/named.conf // listen-on port 53 { 127.0.0.1; }; // allow-query { localhost; }; #不允许其它主机进行区域传输 allow-transfer { none;}; vim /etc/named.rfc1912.zones zone "magedu.org" { type slave; masters { 主服务器IP;}; file "slaves/magedu.org.slave"; }; systemctl start named #第一次启动服务 rndc reload #不是第一次启动服务 ls /var/named/slaves/magedu.org.slave #查看区域数据库文件是否生成
客户端测试主从DNS服务架构
vim /etc/sysconfig/network-scripts/ifcfg-eth0 DNS1=主服务器 DNS2=从服务器 #验证从DNS服务器是否可以查询 dig www.magedu.org curl www.magedu.org #在主服务器上停止DNS服务 systemctl stop named #验证从DNS服务器仍然可以查询 dig www.magedu.org curl www.magedu.org
实现子域
子域委派授权
将子域委派给其它主机管理,实现分布式DNS数据库
正向解析区域子域方法
范例:定义两个子域区域
shanghai.magedu.org. IN NS ns1.ops.magedu.org. shanghai.magedu.org. IN NS ns2.ops.magedu.org. shenzhen.magedu.org. IN NS ns1.shenzhen.magedu.org. shenzhen.magedu.org. IN NS ns2.shenzhen.magedu.org. ns1.shanghai.magedu.org. IN A 1.1.1.1 ns2.shanghai.magedu.org. IN A 1.1.1.2 ns1.shenzhen.magedu.org. IN A 1.1.1.3 ns2.shenzhen.magedu.org. IN A 1.1.1.4
范例:实现DNS父域和子域服务
实验目的
搭建DNS父域和子域服务器
环境要求
需要五台主机
DNS父域服务器:192.168.8.8
DNS子域服务器:192.168.8.18
父域的web服务器:192.168.8.7,www.magedu.org
子域的web服务器:192.168.8.17,www.shanghai.magedu.org
DNS客户端:192.168.8.6
前提准备
关闭SElinux 关闭防火墙 时间同步
实现步骤
在父域DNS服务器上实现主magedu.org域的主DNS服务
yum install bind -y vim /etc/named.conf #注释掉下面两行 // listen-on port 53 { 127.0.0.1; }; // allow-query { localhost; }; #只允许从服务器进行区域传输 allow-transfer { 从服务器IP;}; dnssec-enable no; dnssec-validation no; vim /etc/named.rfc1912.zones #加上这段 zone "magedu.org" { type master; file "magedu.org.zone"; }; cp -p /var/named/named.localhost /var/named/magedu.org.zone #如果没有-p,需要改权限。chgrp named magedu.org.zone vim /var/named/magedu.org.zone $TTL 1D @ IN SOA master admin.magedu.org. ( 1 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS master shanghai NS shanghains master A 192.168.8.8 shanghains A 192.168.8.18 websrv A 192.168.8.7 www CNAME websrv systemctl start named #第一次启动服务 rndc reload #不是第一次启动服务
实现子域的DNS服务器
yum install bind -y vim /etc/named.conf #注释掉下面两行 // listen-on port 53 { 127.0.0.1; }; // allow-query { localhost; }; allow-transfer { none;}; vim /etc/named.rfc1912.zones zone "shanghai.magedu.org" { type master; file "shanghai.magedu.org.zone"; }; cp -p /var/named/named.localhost /var/named/shanghai.magedu.org.zone #如果没有-p,需要改权限。chgrp named magedu.org.zone vim /var/named/shanghai.magedu.org.zone $TTL 1D @ IN SOA master admin.magedu.org. ( 2019042214 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS master master A 192.168.8.18 websrv A 192.168.8.7 www CNAME websrv systemctl start named #第一次启动服务 rndc reload #不是第一次启动服务
在父域和子域的web服务器上安装httpd服务
#父域的web服务器利用上面案例(略) #在子域的web服务器上安装http服务 yum install httpd #配置主页面 echo www.shanghai.magedu.org > /var/www/html/index.html #启动服务 systemctl start httpd
客户端测试
dig www.shanghai.magedu.org www.shanghai.magedu.org
实现DNS转发(缓存)服务器
DNS转发
利用DNS转发,可以将用户的DNS请求,转发至指定的DNS服务,而非默认的根DNS服务器,并将指定服务器查询的返回结果进行缓存,提高效率。
注意:
- 被转发的服务器需要能够为请求者做递归,否则转发请求不予进行
- 在全局配置块中,关闭dnssec功能
dnssec-enable no; dnssec-validation no;
转发方式
全局转发:
对非本机所负责解析区域的请求,全转发给指定的服务器
在全局配置块中实现:
Options { forward first|only; forwarders { ip;}; };
特定区域转发
仅转发对特定的区域的请求,比全局转发优先级高
zone "ZONE_NAME" IN { type forward; forward first|only; forwarders { ip;}; };
first:先转发至指定DNS服务器,如果无法解析查询请求,则本服务器再去根服务器查询
only: 先转发至指定DNS服务器,如果无法解析查询请求,则本服务器将不再去根服务器查询
实战案例:实现DNS forward(缓存)服务器
实验目的
搭建DNS转发(缓存)服务器
环境要求
需要四台主机
DNS只缓存服务器:192.168.8.8
DNS主服务器:192.168.8.18
web服务器:192.168.8.7
DNS客户端:192.168.8.6
前提准备
关闭SElinux 关闭防火墙 时间同步
实现步骤
实现转发(只缓存)DNS服务器
yum install bind -y vim /etc/named.conf #注释掉两行 // listen-on port 53 { 127.0.0.1; }; // allow-query { localhost; }; forward first; forwarders { 192.168.8.18;}; #关闭dnsec功能 dnssec-enable no; dnssec-validation no; systemctl start named #第一次启动服务 rndc reload #不是第一次启动服务
实现主DNS服务器
yum install bind -y vim /etc/named.conf #注释掉两行 // listen-on port 53 { 127.0.0.1; }; // allow-query { localhost; }; vim /etc/named.rfc1912.zones #加上下面这段 zone "magedu.org" { type master; file "magedu.org.zone"; }; cp -p /var/named/named.localhost /var/named/magedu.org.zone #如果没有-p,需要改权限。chgrp named magedu.org.zone vim /var/named/magedu.org.zone $TTL 1D @ IN SOA master admin.magedu.org. ( 2019042214 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS master master A 192.168.8.18 websrv A 192.168.8.7 www CNAME websrv systemctl start named #第一次启动服务 rndc reload #不是第一次启动服务
web服务器配置(参看前面案例,略)
在客户端测试
#客户端配置(参看前面案例,略)
dig www.magedu.org
curl www.magedu.org
实现智能DNS
GSLB
GSLB:Global Server Load Balance全局负载均衡
GSLB是对服务器和链路进行综合判断来决定由哪个地点的服务器来提供服务,实现异地服务器群服务质量的保证
GSLB主要的目的是在整个网络范围内将用户的请求定向到最近的节点(或者区域)
GSLB分为基于DNS实现、基于重定向实现、基于路由协议实现,其中最通用的是基于DNS解析方式
范例:查询VIP使用网宿的CDN服务
[root@centos6 ~]#dig www.vip.com ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.el6 <<>> www.vip.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 44153 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 5, ADDITIONAL: 0 ;; QUESTION SECTION: ;www.vip.com. IN A ;; ANSWER SECTION: www.vip.com. 180 IN CNAME www.vip.com.wscdns.com.#wscdn 网宿服务商 www.vip.com.wscdns.com. 60 IN A 111.206.176.92 ;; AUTHORITY SECTION: wscdns.com. 172800 IN NS dns2.wscdns.info. wscdns.com. 172800 IN NS dns3.wscdns.org. wscdns.com. 172800 IN NS dns4.wscdns.info. wscdns.com. 172800 IN NS dns5.cdn30.org. wscdns.com. 172800 IN NS dns1.wscdns.org. ;; Query time: 1290 msec ;; SERVER: 10.0.0.18#53(10.0.0.18) ;; WHEN: Wed Feb 12 18:05:17 2020 ;; MSG SIZE rcvd: 200
CDN (Content Delivery Network)内容分发网络
CDN工作原理
- 用户向浏览器输入www.a.com这个域名,浏览器第一次发现本地没有dns缓存,则向网站的DNS服务器请求
- 网站的DNS域名解析器设置了CNAME,指向了www.a.tbcdn.com,请求指向了CDN网络中的智能DNS负载均衡系统
- 智能DNS负载均衡系统解析域名,把对用户响应速度最快的IP节点返回给用户;
- 用户向该IP节点(CDN服务器)发出请求
- 由于是第一次访问,CDN服务器会通过Cache内部专用DNS解析得到此域名的原web站点IP,向原站点服务器发起请求,并在CDN服务器上缓存内容
- 请求结果发给用户
CDN服务商
- 服务商:阿里,腾讯,蓝汛,网宿,帝联等
- 智能DNS: dnspod dns.la
智能DNS相关技术
bind中ACL
acl: 把一个或多个地址归并为一个集合,并通过一个统一的名称调用
注意:只能先定义后使用;因此一般定义在配置文件中,处于options的前面
格式:
acl acl_name { ip; net/prelen; …… }; #范例 acl beijingnet { 172.16.0.0/16; 10.10.10.10; };
bind有四个内置的acl
- none 没有一个主机
- any 任意主机
- localhost 本机
- localnet 本机的IP同掩码运算后得到的网络地址
访问控制的指令:
- allow-query {}: 允许查询的主机;白名单
- allow-transfer {}:允许区域传送的主机;白名单
- allow-recursion {}: 允许递归的主机,建议全局使用
- allow-update {}: 允许更新区域数据库中的内容
view 视图
View:视图,将ACL和区域数据库实现对应关系,以实现智能DNS
- 一个bind服务器可定义多个view,每个view中可定义一个或多个zone
- 每个view用来匹配一组客户端
- 多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件
注意:
- 一旦启用了view,所有的zone都只能定义在view中
- 仅在允许递归请求的客户端所在view中定义根区域
- 客户端请求到达时,是自上而下检查每个view所服务的客户端列表
view 格式
view VIEW_NAME { match-clients { beijingnet; }; zone “magedu.org” { type master; file “magedu.org.zone.bj”; }; include “/etc/named.rfc1912.zones”; }; view VIEW_NAME { match-clients { shanghainet; }; zone “magedu.org” { type master; file “magedu.org.zone.sh”; }; include “/etc/named.rfc1912.zones”; };
实战案例:利用view实现智能DNS
实验目的
搭建DNS主从服务器架构,实现DNS服务冗余
环境要求
需要五台主机
DNS主服务器和web服务器1:192.168.8.8/24,172.16.0.8/16
web服务器2:192.168.8.7/24
web服务器3:172.16.0.7/16
DNS客户端1:192.168.8.6/24
DNS客户端2:172.16.0.6/16
前提准备
关闭SElinux 关闭防火墙 时间同步
实现步骤
DNS 服务器的网卡配置
#配置两个IP地址 #eth0:192.168.8.8/24 #eth1: 172.16.0.8/16 ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:f9:8d:90 brd ff:ff:ff:ff:ff:ff inet 192.168.8.8/24 brd 192.168.8.255 scope global noprefixroute eth0 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fef9:8d90/64 scope link valid_lft forever preferred_lft forever 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0c:29:f9:8d:11 brd ff:ff:ff:ff:ff:ff inet 172.16.0.8/16 brd 172.16.0.255 scope global noprefixroute eth1 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fe11:8d90/64 scope link valid_lft forever preferred_lft forever
主DNS服务端配置文件实现view
yum install bind -y vim /etc/named.conf #在文件最前面加下面行 acl beijingnet { 192.168.8.0/24; }; acl shanghainet { 172.16.0.0/16; }; acl othernet { any; }; #注释掉下面两行 // listen-on port 53 { 127.0.0.1; }; // allow-query { localhost; }; #其它略 # 创建view view beijingview { match-clients { beijingnet;}; include "/etc/named.rfc1912.zones.bj"; }; view shanghaiview { match-clients { shanghainet;}; include "/etc/named.rfc1912.zones.sh"; }; view otherview { match-clients { othernet;}; include "/etc/named.rfc1912.zones.other"; }; include "/etc/named.root.key";
实现区域配置文件
vim /etc/named.rfc1912.zones.bj zone "." IN { type hint; file "named.ca"; }; zone "magedu.org" { type master; file "magedu.org.zone.bj"; }; vim /etc/named.rfc1912.zones.sh zone "." IN { type hint; file "named.ca"; }; zone "magedu.org" { type master; file "magedu.org.zone.sh"; }; vim /etc/named.rfc1912.zones.other zone "." IN { type hint; file "named.ca"; }; zone "magedu.org" { type master; file "magedu.org.zone.other"; }; chgrp named /etc/named.rfc1912.zones.bj chgrp named /etc/named.rfc1912.zones.sh chgrp named /etc/named.rfc1912.zones.other
创建区域数据库文件
vim /var/named/magedu.org.zone.bj TTL 1D @ IN SOA master admin.magedu.org. ( 2019042214 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS master master A 192.168.8.8 websrv A 192.168.8.7 www CNAME websrv vim /var/named/magedu.org.zone.shTTL 1D @ IN SOA master admin.magedu.org. ( 2019042214 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS master master A 192.168.8.8 websrv A 172.16.0.7 www CNAME websrv vim /var/named/magedu.org.zone.other $TTL 1D @ IN SOA master admin.magedu.org. ( 2019042214 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS master master A 192.168.8.8 websrv A 127.0.0.1 www CNAME websrv chgrp named /var/named/magedu.org.zone.bj chgrp named /var/named/magedu.org.zone.sh chgrp named /var/named/magedu.org.zone.other systemctl start named #第一次启动服务 rndc reload #不是第一次启动服务
实现位于不同区域的三个WEB服务器
#分别在三台主机上安装http服务 #在web服务器1:192.168.8.8/24实现 yum install httpd echo www.magedu.org in Other > /var/www/html/index.html systemctl start httpd #在web服务器2:192.168.8.7/16 echo www.magedu.org in Beijing > /var/www/html/index.html systemctl start httpd #在web服务器3:172.16.0.7/16 yum install httpd echo www.magedu.org in Shanghai > /var/www/html/index.html systemctl start httpd
客户端测试
#分别在三台主机上访问 #DNS客户端1:192.168.8.6/24 实现,确保DNS指向192.168.8.8 curl www.magedu.org www.magedu.org in Beijing #DNS客户端2:172.16.0.6/16 实现,确保DNS指向172.16.0.8 curl www.magedu.org www.magedu.org in Shanghai #DNS客户端3:192.168.8.8 实现,,确保DNS指向127.0.0.1 curl www.magedu.org www.magedu.org in Other
DNS排错
范例:
dig A example.com ; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> A example.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30523 ... SERVFAIL:The nameserver encountered a problem while processing the query.
可使用dig +trace排错,可能是网络和防火墙导致
NXDOMAIN:The queried name does not exist in the zone.
可能是CNAME对应的A记录不存在导致
REFUSED:The nameserver refused the client’s DNS request due to policy restrictions.
可能是DNS策略导致
实战案例:综合案例,实现Internet 的DNS 服务架构
实验目的
搭建DNS实现internet dns架构
环境要求
需要8台主机
DNS客户端:192.168.8.6/24
本地DNS服务器(只缓存):192.168.8.8/24
转发目标DNS服务器:192.168.8.18/24
根DNS服务器:192.168.8.28/24
org域DNS服务器:192.168.8.38/24
magedu.org域主DNS服务器:192.168.8.48/24
magedu.org域从DNS服务器:192.168.8.58/24
www.magedu.org的WEB服务器:192.168.8.68/24
前提准备
关闭SElinux
关闭防火墙
时间同步
实现步骤
各种主机的网络配置(参看上面的环境要求)
#在客户端配置DNS服务器地址 vim /etc/sysconfig/network-scripts/ifcfg-ens33 NAME=eth0 DEVICE=eth0 BOOTPROTO=static IPADDR=192.168.8.6 NETMASK=255.255.255.0 DNS1=192.168.8.8 ONBOOT=yes service network restart
实现WEB服务
#在web服务器192.168.8.68/24上实现 yum install httpd echo www.magedu.org > /var/www/html/index.html systemctl start httpd
实现magedu.org域的主DNS服务器
#在magedu.org域主DNS服务器192.168.8.48/24上实现 yum install bind -y vim /etc/named.conf #注释掉下面两行 // listen-on port 53 { 127.0.0.1; }; // allow-query { localhost; }; #只允许从服务器进行区域传输 allow-transfer { 从服务器IP;}; vim /etc/named.rfc1912.zones #加上这段 zone "magedu.org" { type master; file "magedu.org.zone"; }; vim /var/named/magedu.org.zone $TTL 1D @ IN SOA master admin.magedu.org. ( 1 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum NS master NS slave master A 192.168.8.48 slave A 192.168.8.58 www A 192.168.8.68 chgrp named /var/named/magedu.org.zone systemctl start named #第一次启动服务 rndc reload #不是第一次启动服务
实现magedu.org域的从DNS服务器配置
#在magedu.org域从DNS服务器192.168.8.58/24上实现 yum install bind -y vim /etc/named.conf // listen-on port 53 { 127.0.0.1; }; // allow-query { localhost; }; #不允许其它主机进行区域传输 allow-transfer { none;}; vim /etc/named.rfc1912.zones zone "magedu.org" { type slave; masters { 主服务器IP;}; file "slaves/magedu.org.slave"; }; systemctl start named #第一次启动服务 rndc reload #不是第一次启动服务 ls /var/named/slaves/magedu.org.slave #查看区域数据库文件是否生成
实现org域的主DNS服务器
#在org域的主DNS服务器192.168.8.38/24上实现 yum install bind -y vim /etc/named.conf #注释掉两行 // listen-on port 53 { 127.0.0.1; }; // allow-query { localhost; }; vim /etc/named.rfc1912.zones #加上这段 zone "org" { type master; file "org.zone"; }; vim /var/named/org.zone $TTL 1D @ IN SOA master admin.magedu.org. ( 1 1D 1H 1W 3D ) NS master magedu NS mageduns1 magedu NS mageduns2 master A 192.168.8.38 mageduns1 A 192.168.8.48 mageduns2 A 192.168.8.58 chgrp named /var/named/org.zone systemctl start named #第一次启动服务 rndc reload #不是第一次启动服务
实现根域的主DNS服务器
#在根域的主DNS服务器192.168.8.28/24上实现 yum install bind -y vim /etc/named.conf #注释掉两行,第13行和第21行 // listen-on port 53 { 127.0.0.1; }; // allow-query { localhost; }; #将下面行改为: zone "." IN { type master; file "root.zone"; }; vim /var/named/root.zone $TTL 1D @ IN SOA master admin.magedu.org. ( 1 1D 1H 1W 3D ) NS master org NS orgns master A 192.168.8.28 orgns A 192.168.8.38 #安全加固 chgrp named /var/named/root.zone chmod 640 /var/named/root.zone systemctl start named #第一次启动 rndc reload #不是第一次启动
实现转发目标的DNS服务器
#在转发目标的DNS服务器192.168.8.18/24上实现 yum install bind -y vim /etc/named.conf #注释掉两行,第13行和第21行 // listen-on port 53 { 127.0.0.1; }; // allow-query { localhost; }; vim /var/named/named.ca . 518400 IN NS a.root-servers.net. a.root-servers.net. 3600000 IN A 192.168.8.28 systemctl start named #第一次启动 rndc reload #不是第一次启动
实现本地只缓存DNS服务器
#在转发目标的DNS服务器192.168.8.8/24上实现 yum install bind -y vim /etc/named.conf #注释掉两行,第13行和第21行 // listen-on port 53 { 127.0.0.1; }; // allow-query { localhost; }; forward only; forwarders { 192.168.8.18;}; dnssec-enable no; dnssec-validation no systemctl start named #第一次启动 rndc reload #不是第一次启动
客户端测试
cat /etc/resolv.conf nameserver 192.168.8.8 dig www.magedu.org ; <<>> DiG 9.9.4-RedHat-9.9.4-61.el7 <<>> www.magedu.org ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40755 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;www.magedu.org. IN A ;; ANSWER SECTION: www.magedu.org. 86181 IN A 192.168.8.68 ;; AUTHORITY SECTION: magedu.org. 86181 IN NS ns2.magedu.org. magedu.org. 86181 IN NS ns1.magedu.org. ;; ADDITIONAL SECTION: ns2.magedu.org. 86181 IN A 192.168.8.48 ns1.magedu.org. 86181 IN A 192.168.8.58 ;; Query time: 1 msec ;; SERVER: 192.168.8.8#53(192.168.8.8) ;; WHEN: Fri May 10 17:28:39 CST 2019 ;; MSG SIZE rcvd: 127 成功 curl www.magedu.org www.magedu.org