DNS

DNS原理

dns架构

image.png

一次DNS查询的过程

Client --> hosts文件 --> DNS Service Local Cache --> DNS Server (recursion)
--> Server Cache --> iteration(迭代) --> 根 --> 顶级域名DNS --> 二级域名DNS…

资源记录

  • 语法:name [TTL] IN rr_type value
  • name: 域名
  • TTL:缓存存活时间
  • IN:保留
  • rr_type
  • value: IP

资源记录类型

rr_type comments
SOA 起始授权记录;一个区域解析库有且仅有一个SOA记录,必须位于解析库第一条记录
A Internet address,FQDN --> IP
AAAA FQDN --> IPv6
PTR PointTeR, IP -->FQDN
NS Name Server, 专用于标明当前区域的DNS服务器
CNAME Canonical Name, 别名记录
MX Mail eXchanger, 邮件交换器
TXT 对域名进行标识和说明的一种方式,一般做验证记录时使用,如SPF(反垃圾邮件)记录,https验证等
$TTL 1D          #解析记录在缓存中保存的时间
@   IN SOA  master admin.coding.com. (
# @ 表示本域名即coding.com.
# IN 保留字段
# SOA:ttr_type
# master.coding.com  主dns名称
# admin.coding.com.: 主dns管理员邮箱
                    0   ; serial          # 当前dns数据版本号,在主从复制时参照
                    1D  ; refresh        # 主从复制时同步间隔时间
                    1H  ; retry            # 主从复制同步失败时,重试时间
                    1W  ; expire          # 同步失败多长时间,记录失效
                    3H )    ; minimum        # 失败的dns记录保存在缓存时间
    NS master                # 标明当前区域内dns

master A 192.168.80.11
@ MX 10 mailsrv              # 邮件交换
mailsrv A 192.168.37.123
ftp A 1.1.1.1
db A 2.2.2.2
www CNAME websrv        # 别名
websrv A 192.168.80.13
websrv A 192.168.80.14
coding.com  CNAME websrv
@       A 3.3.3.3        # 匹配 coding.com
*       A 4.4.4.4          # 匹配wwwwww.coding.com
$GENERATE 1-254 HOST$ A 1.2.3.$

DNS测试工具

  1. host
  2. dig
    dig [-t type] name [@SERVER] [query options]
查询选项 comments
+ trace 跟踪解析过程:dig +trace coding.com
+ recurse 进行递归解析
-x IP 测试反向解析 dig -x 192.168.80.11
dig -t axfr zone_name @server 查询区域数据记录
dig -t ns qq.com 查询qq的dns服务器
dig -t soa qq.com 查询qq的soa记录
  1. rndc
command comments
reload 重载主配置文件和区域解析库文件
reload zonename 重载区域解析库文件
retransfer zonename 手动启动区域传送,不管序列号是否增加
notify zonename 重新对区域传送发通知
reconfig 重载主配置文件
querylog 开启或关闭查询日志文件/var/log/message
flush 清空dns缓存记录

端口作用

tcp 53 -- 实现主从同步
udp 53 -- 实现查询和主从同步

搭建只缓存dns服务器

  1. 安装dns软件包bind机器工具
yum install bind* -y
  1. 编辑bind配置文件
# vim /etc/named.conf
listen-on port 53 { localhost; };
allow-query     { any; };
  1. 启动服务
rndc reload
or
systemctl restart named
# 查看dns监听端口和ip
ss -nltu
  1. 测试
# 将机器dns指向刚刚配置dns
dig www.baidu.com
host www.baidu.com

搭建主DNS服务器

  1. 创建区域解析数据库
  • 复制区域解析数据库模板
cd /var/named
cp -p named.localhost coding.com.zone # note保留named权限
  • 编辑数据库文件
# vim coding.com.zone

$TTL 1D
@   IN SOA  master.coding.com admin.coding.com. (
                    0   ; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
    NS master

master A 192.168.80.11
ftp A 1.1.1.1
db A 2.2.2.2
www CNAME websrv
websrv A 192.168.80.13
websrv A 192.168.80.14
  1. 将 区域解析数据库记录加入到bind配置文件
#vim /etc/named.rfc1912.zones
zone "coding.com"{
        type master;
        file "coding.com.zone"
};
  1. 检查配置文件
named-checkconf
  1. 检查解析数据库记录
named-checkzone coding.com /var/named/coding.com.zone
  1. 重启DNS服务
rndc reload

实现反向解析区域 PTR记录

  1. 创建数据解析记录
vim /etc/named.rfc1912.zones 
zone "80.168.192.in-addr.arpa" IN {
        type master;
        file "192.168.80.zone";
}
  1. 编辑/var/named/192.168.80.zone
vim /var/named/192.168.80.zone
$TTL 1D
@ IN SOA ns1.coding.com. admin ( 1 1D 1H 1W 2D )
        NS ns1
ns1     A       192.168.80.11
12      PTR     ftp.coding.com.
15      PTR     db.coding.com.
13      PTR     websrv.coding.com
14      PTR     websrv.coding.com

# 配置所有组和权限
chown :named /var/named/192.168.80.zone
chmod 640 /var/named/192.168.80.zone
  1. 重启服务
rndc reload
  1. 测试配置
dig -x 192.168.80.12
host 192.168.80.12
12.80.168.192.in-addr.arpa domain name pointer ftp.coding.com.

DNS 主从复制

192.168.80.11 --- 主服务器
192.168.80.13 --- 从服务器

  1. 搭建从DNS服务器(192.168.80.13)
# 安装
yum install bind

# 编辑配置文件
vim /etc/named.conf
listen-on port 53 { localhost; };
allow-query     { any; };

vim /etc/named.rfc1912.zones
zone "coding.com" {
        type slave;
        masters {192.168.80.11;};
        file "slaves/coding.com.zone.slave";
};

systemctl start named
  1. 增加一条记录在主DNS(192.168.80.11)上面, 更新版本号, 添加从dns
vim /var/named/coding.com.zone
       
        NS master
        NS slave

master  A 192.168.80.11
slave   A 192.168.80.13

@       MX      10      mailsrv
mailsrv A       1.1.1.1

rndc reload
  1. 测试从DNS
dig -t mx coding.com @192.168.80.13

4 安全加固

在主dns
vim /etc/named.conf

       allow-query     { any; };
       allow-transfer {192.168.80.13;};                  # 仅允许从服务器同步数据

在从dns
vim /etc/named.conf
      allow-query     { any; };
      allow-transfer  { none; };                               # 禁止所有机器同步

子域

同一机器同一区域实现子域 bejing.coding.com

添加一个A记录
vim /var/named/coding.com.zone
www.beijing     A 22.22.22.22

同一机器不同区域实现子域beijing.coding.com

# 创建子域的区域
cp /var/named/coding.com.zone /var/named/beijing.coding.com.zone -p
vim /var/named/beijing.coding.com.zone
$TTL 1D
@   IN SOA      master admin.coding.com. (
                                        3       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS master

master  A 192.168.80.11
www     CNAME websrv
websrv  A 5.5.5.5
# 添加子域配置文件
vim /etc/named.rfc1912.zones
zone "beijing.coding.com"{
        type master;
        file "beijing.coding.com.zone";
};

不同机器上实现子域委派

在192.168.80.14上实现子域shanghai.coding.com

  1. 在主dns上添加一条NS和A记录
vim /var/named/coding.com
shanghai NS ns3
ns3     A 192.168.80.14

1.1 关掉dns安全相关选项

dnssec-enable no;
ndssec-validation no;
  1. 在192.168.80.14上配置主DNS服务
  2. 测试
dig www.shanghai.coding.com

转发

192.168.80.11:主缓存服务器
192.168.80.12:dns转发服务器
配置成只缓存服务器,并将转发发送到192.168.80.11

vim /etc/named.conf
forward first|only
forwarders {192.168.80.11;};

CDN

image.png

GSLB :Global Server Load Balance全局负载均衡

image.png

智能DNS,类CDN服务

1.  
vim /etc/named.conf
acl beijingnet  {
        192.168.80.0/24;
         192.168.90.0/24;
};
acl shanghainet {
        172.16.0.0/16;
         172.17.0.0/16;
};
acl othernet {
        any;
};

view view_beijing {
        match-clients { beijingnet;};
        include "/etc/named.rfc1912.zones.bj";
};
view view_shanghai {
        match-clients { shanghainet;};
       include "/etc/named.rfc1912.zones.sh";
};
view view_other {
        match-clients { othernet;};
        include "/etc/named.rfc1912.zones";
};

2. 
vim /etc/named.rfc1912.zones.bj"
zone "coding.com" {
        type master;
        file "coding.com.zone.bj";
};
vim /etc/named.rfc1912.zones.sh
zone "coding.com" {
        type master;
        file "coding.com.zone.sh";
};
vim /etc/named.rfc1912.zones
zone "coding.com" {
        type master;
        file "coding.com.zone.other";
};
3. 
vim coding.com.zone.bj
$TTL 1D
@ IN SOA ns1 admin ( 1 1H 1H 1D 3H )
                NS ns1
ns1 A 192.168.37.7
www A 192.168.37.100

vim coding.com.zone.sh
$TTL 1D
@ IN SOA ns1 admin ( 1 1H 1H 1D 3H )
                NS ns1
ns1 A 192.168.37.7
www A 172.168.16.100

vim coding.com.zone.other
$TTL 1D
@ IN SOA ns1 admin ( 1 1H 1H 1D 3H )
                NS ns1
ns1 A 192.168.37.7
www A 10.10.10.100
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。