zoukankan      html  css  js  c++  java
  • DNS主从配置详解

    实验环境

    主服务器:192.168.138.200
    从服务器:192.168.138.201

    bind安装

    安装很简单,执行以下命令即可:

    	yum install -y bind
    

    先看一下bind的版本和配置文件安装路径

    	# named -v
    	BIND 9.9.4-RedHat-9.9.4-51.el7_4.2 (Extended Support Version) 
    	# rpm -qc bind
    	/etc/logrotate.d/named
    	/etc/named.conf					
    	/etc/named.iscdlv.key
    	/etc/named.rfc1912.zones		
    	/etc/named.root.key
    	/etc/rndc.conf						
    	/etc/rndc.key
    	/etc/sysconfig/named
    	/var/named/named.ca
    	/var/named/named.empty
    	/var/named/named.localhost
    	/var/named/named.loopback
    

    /etc/named.conf,/etc/named.rfc1912.zones是主配置文件
    /var/named/named.ca是根区域解析库文件
    /var/named/named.localhost,/var/named/named.loopback 是本机和环回地址的解析库文件
    rndc---remote name domain controller这是一个辅助管理工具,默认情况下与BIND安装在同一主机,而且只能通过127.0.0.1连接named进程,监听的端口号是TCP/953。

    配置named.conf文件

    这个配置文件主要分3段内容,options是全局配置,logging是日志配置,最后是区域解析库配置以及所包含的区域解析库文件配置。

    # cat /etc/named.conf
    // 2个双//在这个配置文件中表示注释
    options {
    	//下面一行表示监听的端口和IP地址,其中2个{}内部两端都要有空格,IP地址要以;号结尾。
    	这里的IP地址至少应该包含宿主机可以和外部通迅的地址,也可以包含一个本地回环地址供rndc工具使用。也可以简写成{ any; }
    	每个语句结束同样都要以;结尾,如果不需要监听IPV6可以注释掉或删除。
    	listen-on port 53 { 192.168.138.200; 127.0.0.1; };
    //	listen-on-v6 port 53 { ::1; };
    	//下面一行表示named的工作目录为/var/named
    	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";
    	//下面一行表示允许哪些主机查询,改成any表示所有
    	allow-query     { any; };
    	//下面一行表示是否允许递归查询.
    	recursion yes;
    	dnssec-enable yes;
    	dnssec-validation yes;
    	/* Path to ISC DLV key */
    	bindkeys-file "/etc/named.iscdlv.key";
    	managed-keys-directory "/var/named/dynamic";
    	pid-file "/run/named/named.pid";
    	session-keyfile "/run/named/session.key";
    };
    
    logging {
            channel default_debug {
                    file "data/named.run";
                    severity dynamic;
            };
    };
    //.表示根区域,这个区域是必须要有的
    zone "." IN {
    	type hint;		  //hint表示根区域类型
    	file "named.ca";	//指定根区域解析库文件名称所在位置,相对于/var/named
    };
    //指定区域文件名称,所有的区域定义都可以写在named.rfc1912.zones文件中
    include "/etc/named.rfc1912.zones";
    include "/etc/named.root.key";
    

    配置主服务器192.168.138.200

    编辑/etc/named.rfc1912.zones在文件末尾添加一个正向解析区域和一个反向解析区域

    # cat /etc/named.rfc1912.zones
    zone "0.in-addr.arpa" IN {
    	type master;
    	file "named.empty";
    	allow-update { none; };
    };
    // 添加一个正向解析区域,并定义为主服务器
    zone "frank.com" IN {
        type master;			//master表示主服务器
        file "frank.com.zone";	//指明区域解析库文件,相对于/var/named/
    };
    //添加一个反向解析区域,并定义为主服务器
    zone "138.168.192.in-addr.arpa" IN {
        type master;
        file "138.zone";
    };
    

    创建frank.com.zone解析库文件

    # cat frank.com.zone 
    $TTL 1D
    frank.com.  IN SOA  ns.frank.com.    admin.frank.com. (
            201802001   ;序列号
            2H          ;刷新时间
            10M         ;重试时间间隔
            1W          ;过期时间
            1D          ;无法解析时否定答案的TTL值
            )
    frank.com.       IN  NS  ns1.frank.com.
                     IN  NS  ns2.frank.com.
    ns1.frank.com.   IN  A   192.168.138.200
    ns2.frank.com.   IN  A   192.168.138.200
    frank.com.       IN  MX 10  mx1.frank.com.
                     IN  MX 20  mx2.frank.com.
    mx1.frank.com.   IN  A   192.168.138.200
    mx2.frank.com.   IN  A   192.168.138.200
    www.frank.com.   IN  A   192.168.138.200
    master           IN CNAME   www.frank.com.
    web              IN CNAME   www.frank.com.
    

    创建138.zone反向解析库文件

    # cat 138.zone 
    $TTL 1d
    @    IN  SOA     ns.frank.com. admin.frank.com. (
                201802001;
                2H;
                10M;
                1W;
                1D;
                )
                    IN      NS  ns.frank.com.
    200             IN      PTR www.frank.com.
    200             IN      PTR ns.frank.com.  
    

    注意事项:

    • 区域解析库文件第一个记录必须是SOA记录,必须有NS记录并且正解区域要有NS记录的A记录,反解则不需要有NS记录对应的A记录。
    • $TTL表示宏定义,TTL(Time- To-Live),简单的说它表示一条域名解析记录在DNS服务器上缓存时间.当各地的DNS服务器接受到解析请求时,就会向域名指定的DNS服务器发出解析请求从而获得解析记录;在获得这个记录之后,记录会在DNS服务器中保存一段时间,这段时间内如果再接到这个域名的解析请求,DNS服务器将不再向DNS服务器发出请求,而是直接返回刚才获得的记录;而这个记录在DNS服务器上保留的时间,就是TTL值。
    • 这个文件里所有的域名结尾的点号一定不能省略。
    • 区域解析库文件是放在/var/named目录下,由named进程是以named用户运行,还要让区域解析库文件的属组为named。
    # ll /var/named
    total 16
    drwxrwx---. 2 named named   23 Feb 21 13:10 data
    drwxrwx---. 2 named named   60 Feb 21 13:11 dynamic
    -rw-r-----. 1 root  named 2281 May 22  2017 named.ca
    -rw-r-----. 1 root  named  152 Dec 15  2009 named.empty
    -rw-r-----. 1 root  named  152 Jun 21  2007 named.localhost
    -rw-r-----. 1 root  named  168 Dec 15  2009 named.loopback
    drwxrwx---. 2 named named   44 Feb 21 13:14 slaves
    

    检查配置文件语法

    # named-checkconf
    没有任何输出表示 /etc/named.conf没有语法错误
    
    # named-checkzone "frank.com" "frank.com.zone"
    zone frank.com/IN: loaded serial 201802001
    OK
    正向解析区域检查没问题
    
    # named-checkzone "frank.com" "138.zone"
    zone frank.com/IN: loaded serial 201802001
    OK
    反向解析区域检查没问题
    

    启动named服务

    # systemctl start named.service
    

    使用dig测试
    dig语法使用格式:
    dig -t [SOA|A|CNAME|NS|MX] 域名 [@dns服务器地址] [+[no]trace|recurse]

    dig -t A web.frank.com @192.168.138.200
    ; <<>> DiG 9.9.4-RedHat-9.9.4-51.el7_4.2 <<>> -t A web.frank.com @192.168.138.200
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40444
    ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;web.frank.com.			IN	A
    ;; 下面就是解析出的结果
    ;; ANSWER SECTION:
    web.frank.com.		86400	IN	CNAME	www.frank.com.
    www.frank.com.		86400	IN	A	192.168.138.200
    
    ;; AUTHORITY SECTION:
    frank.com.		86400	IN	NS	ns2.frank.com.
    frank.com.		86400	IN	NS	ns1.frank.com.
    
    ;; ADDITIONAL SECTION:
    ns1.frank.com.		86400	IN	A	192.168.138.200
    ns2.frank.com.		86400	IN	A	192.168.138.200
    
    ;; Query time: 0 msec
    ;; SERVER: 192.168.138.200#53(192.168.138.200)
    ;; WHEN: Wed Feb 21 12:35:24 CST 2018
    ;; MSG SIZE  rcvd: 144
    

    到此DNS主服务器已经配置完毕并能正常工作。

    从服务器配置192.168.138.201

    编辑/etc/named.conf将监听IP地址改一下,其它不需要更改

    # cat /etc/named.conf
    	listen-on port 53 { 192.168.138.201; 127.0.0.1; };
    

    编辑/etc/named.rfc1912.zones将type类型改为slave

    # cat /etc/named.rfc1912.zones
    zone "0.in-addr.arpa" IN {
    	type master;
    	file "named.empty";
    	allow-update { none; };
    };
    // 添加一个正向解析区域,并定义为从服务器
    zone "frank.com" IN {
        type slave;			//slave表示主服务器
        masters { 192.168.138.200; };	//指明主服务器IP
    	file “slaves/frank.com";		//指定从服务区域解析库文件位置
    };
    //添加一个反向解析区域,并定义为主服务器
    zone "138.168.192.in-addr.arpa" IN {
        type slave;
        masters { 192.168.138.200; };
    	file "slaves/138.zone";
    };
    

    注意事项:从服务器的区域解析库文件应当是从主服务器加载过来的,所以无需创建区域解析库文件。
    启动named服务

    # systemctl start named
    

    检查/var/named/slaves目录

    # ll /var/named/slaves/
    total 8
    -rw-r--r--. 1 named named 268 Feb 21 13:14 138.zone
    -rw-r--r--. 1 named named 554 Feb 21 13:14 frank.com.zone
    

    这2个文件是自动从主服务器同步过来的。
    使用dig验证

    dig -t MX frank.com @192.168.138.201
    
    ; <<>> DiG 9.9.4-RedHat-9.9.4-51.el7_4.2 <<>> -t MX frank.com @192.168.138.201
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57146
    ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 5
    
    ;; OPT PSEUDOSECTION:
    ; EDNS: version: 0, flags:; udp: 4096
    ;; QUESTION SECTION:
    ;frank.com.			IN	MX
    
    ;; ANSWER SECTION:
    frank.com.		86400	IN	MX	10 mx1.frank.com.
    frank.com.		86400	IN	MX	20 mx2.frank.com.
    
    ;; AUTHORITY SECTION:
    frank.com.		86400	IN	NS	ns1.frank.com.
    frank.com.		86400	IN	NS	ns2.frank.com.
    
    ;; ADDITIONAL SECTION:
    mx1.frank.com.		86400	IN	A	192.168.138.200
    mx2.frank.com.		86400	IN	A	192.168.138.200
    ns1.frank.com.		86400	IN	A	192.168.138.200
    ns2.frank.com.		86400	IN	A	192.168.138.200
    
    ;; Query time: 0 msec
    ;; SERVER: 192.168.138.201#53(192.168.138.201)
    ;; WHEN: Wed Feb 21 13:15:43 CST 2018
    ;; MSG SIZE  rcvd: 178
    

    rndc命令使用

    rndc reload:
    重载主配置文件和区域解析库文件,可以不用重启named服务情况下更新主配置文件和区域解析库文件。
    rndc reload zone_name:
    重域指定区域
    rndc retransfer zone:
    手动启动区域传送,不管序号是否增加或减少
    rndc notify zone:
    手动通知区域
    rndc reconfig:
    重载主配置文件
    rndc querylog:
    开启或关闭查询日志

    关于DNS服务器

    • DNS服务器主从服务器,一般情况下主从一同工作,在客户端一般会配有多个DNS地址,如果第一个DNS地址无法解析,那么第二DNS地址也是无法解析的,当第一个DNS地址联系不上时(宕机)才会联系第二个DNS地址并寻求解析。
    • DNS服务器如果自已无法解析时会去其它服务器查询,查询到了会缓存下来,当同一用户在缓存失效之前再次请求同一记录时会优先使用缓存回应给客户端。至于缓存多长时间大了和小了都有优点和缺点,一般互联网上的DNS缓存大概要2-4小时,也就是当你在互联网更改记录一般会2-4小时后才能生效。
    • DNS服务器也可以部署成为缓存服务器。
    • DNS服务器中的转发器,部署过windows服务器的都知道,如果本机解析不了的可以使用转发器将请求转发到当地运营商的DNS服务器请求解析。

    windows中的DNS服务器架设完成后,客户端会自动向DNS服务器注册,服务器端也会自动添加相应的A记录和PTR记录,linux系统当中是不是只能手动添加这些记录才能解析到局域网中的计算机名呢?

  • 相关阅读:
    强大的异或运算-深度好文
    40-3Sum Closest
    39-Remove Duplicates from Sorted Array
    谈谈AI
    38- Majority Element
    37-Invert Binary Tree
    36-Same Tree
    35-Remove Element
    34. Swap Nodes in Pairs
    33. Implement strStr()
  • 原文地址:https://www.cnblogs.com/mfyang/p/8467421.html
Copyright © 2011-2022 走看看