1. 程式人生 > >實現智能DNS

實現智能DNS

linux

智能DNS

智能DNS實現如下圖:當用戶通過瀏覽器訪問www.sina.com,瀏覽器向DNS服務器查找服務器地址,北京的用戶,返回區域代理服務器1的ip地址,上海的用戶返回區域服務器2的ip地址,以此類推。以北京用戶為例:當DNS服務器返回區域代理服務器1的地址,用戶訪問區域代理服務器1,區域代理服務器一般存放靜態的一些內容,當用戶只訪問靜態的內容時,區域代理服務器1提供服務,當用戶訪問一些動態內容時,區域代理服務器1就向web服務器尋找,然後返回給用戶。


技術分享

實驗:實現上海和北京和其他地區的智能DNS管理

說明: 實現當上海地區訪問www.sina.com 返回ip為6.6.6.6

當北京地區訪問www.sina.com 返回ip為1.1.1.1

當其他地區訪問www.sina.com 返回ip為2.2.2.2

以ip地址來劃分區域,上海的ip地址段為:

192.168.191.0/24;

192.168.192.0/24;

北京的ip地址段為:

172.17.251.0/24;

172.18.251.0/24;

以此來模擬智能DNS實現過程。

實現步驟:三大步:

第一、準備數據庫文件

地址www.sina.com 返回的地址等信息

第二、定義acl

定義某個區域的ip地址

第三、定義view

關聯acl和數據庫文件

1、安裝包

yum install bind

2、啟動服務

systemctl start named

註意:DNS服務的包名為bind ,服務名為named

主配置文件:/etc/named.conf, /etc/named.rfc1912.zones,/etc/rndc.key

解析庫文件 /var/named/ZONE_NAME.ZONE

3、創建DNS數據庫文件

cd /var/named

vim sina.com.zone.beijing

$TTL 1D
@       IN SOA  dns1 rname.invalid. (
                                        2017101101      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       NS      dns1
dns1    A      172.17.251.107
dns1        A  192.168.191.107
www     A      1.1.1.1

vim sina.com.zone.shanghai

$TTL 1D
@       IN SOA  dns1 rname.invalid. (
                                        2017101101      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       NS      dns1
dns1    A       172.17.251.107
dns2        A              192.168.191.107
www     A       6.6.6.6

vim sina.com.zone.other

$TTL 1D
@       IN SOA  dns1 rname.invalid. (
                                        2017101101      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
@       NS      dns1
dns1    A      172.17.251.107
dns1        A            192.168.191.107
www     A      2.2.2.2

4、創建acl和view

vim /etc/named.conf

(1)註釋這兩行

options {
//      listen-on port 53 { localhost; };
        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";
//      allow-query     { any; };

第一行代表53端口綁定的ip,allow-query {};表示允許查詢的主機

將這兩行註釋;或者改成上面,localhost表示允許該主機上的所有ip都可以綁定53端口,any代表所有ip

(2)在該文件添加

acl shanghainet {
        192.168.191.0/24;
        192.168.192.0/24;
};
acl beijingnet {
        172.17.251.0/24;
        172.18.251.0/24;
};

(3)創建view

將下面的文件修改成下面

創建view的方法1:關聯數據庫文件時,直接寫文件名

方法2:將文件寫在/etc/named.rfc1912.zone.shanghai,中,在該文件中指定文件。

view  beijingview {
        match-clients { beijingnet;};  //連接acl
        zone "sina.com" {
                type master;
                file "sina.com.zone.beijing";  // 指定數據庫文件
        };
        zone "." IN {
                type hint;    //允許該地區的用戶直接訪問根地址
                file "named.ca";
        };
};
view  shanghaiview {
        match-clients { shanghainet;};
        include "/etc/named.rfc1912.zones.shanghai"; 
        zone "." IN {
                type hint;
                file "named.ca";
        };
};
view otherview {
        match-clients {any;};
        include "/etc/named.rfc1912.zones.other";
         zone "." IN {
                type hint;
                file "named.ca";
        };
};
include "/etc/named.root.key";

整個文件如下

acl shanghainet {
        192.168.191.0/24;
        192.168.192.0/24;
};
acl beijingnet {
        172.17.251.0/16;
        172.18.251.0/16;
};

options {
//      listen-on port 53 { localhost; };
        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";
//      allow-query     { any; };
        allow-transfer   { none; };
        /* 
         - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
         - If you are building a RECURSIVE (caching) DNS server, you need to enable 
           recursion. 
         - If your recursive DNS server has a public IP address, you MUST enable access 
           control to limit queries to your legitimate users. Failing to do so will
           cause your server to become part of large scale DNS amplification 
           attacks. Implementing BCP38 within your network would greatly
           reduce such attack surface 
        */
        recursion yes;

        dnssec-enable no;
        dnssec-validation no;

        /* 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;
        };
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

view  beijingview {
        match-clients { beijingnet;};
        zone "sina.com" {
                type master;
                file "sina.com.zone.beijing";
        };
        zone "." IN {
                type hint;
                file "named.ca";
        };
};
view  shanghaiview {
        match-clients { shanghainet;};
        include "/etc/named.rfc1912.zones.shanghai";
        zone "." IN {
                type hint;
                file "named.ca";
        };
};
view otherview {
        match-clients {any;};
        include "/etc/named.rfc1912.zones.other";
         zone "." IN {
                type hint;
                file "named.ca";
        };
};
include "/etc/named.root.key";

5、 將/etc/named.rfc1912.zones 復制兩份命名為/etc/named.rfc1912.zones.shanghai

/etc/named.rfc1912.zones.other

vim /etc/named.rfc1912.zones.shanghai

添加如下內容

zone "sina.com" IN {
        type master;
        file "sina.com.zone.shanghai";
};

vim /etc/named.rfc1912.zones.other

添加如下內容

zone "sina.com" IN {
        type master;
        file "sina.com.zone.other";
};

6、啟動服務

重新加載服務:rndc reload

註意:在centos6或centos7上最好不要用restart,容易把服務死掉,起不來服務。

這裏rndc reload 這個命令時專門管理DNS服務的,如果必要重啟服務了,先關閉服務,再開啟服務。

7、測試:

在某一客戶端上,將該客戶端的DNS執行服務器主機

(1)如果網絡是自動獲取的,則修改vim /etc/resolv.conf

nameserver 172.17.251.107

(2)如果網絡時自己配置的,/etc/sysconfig/network-scripts ,修改該目錄下的橋接網卡的DNS1=172.17.251.107 。

重啟服務 systemctl restart network

在客戶端測試:

dig www.sina.com @192.168.191.107

dig www.sina.com @172.17.251.107

[[email protected] named]# dig www.sina.com @192.168.191.107


; <<>> DiG 9.9.4-RedHat-9.9.4-37.el7 <<>> www.sina.com @192.168.191.107

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 57522

;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1


;; OPT PSEUDOSECTION:

; EDNS: version: 0, flags:; udp: 4096

;; QUESTION SECTION:

;www.sina.com. IN A


;; Query time: 0 msec

;; SERVER: 192.168.191.107#53(192.168.191.107)

;; WHEN: Thu Oct 12 11:10:48 CST 2017

;; MSG SIZE rcvd: 41

遇到錯誤

排錯:1、查看防火墻iptables -vnL ,清除防火墻策略iptables -F

2、查看網絡連接。dig www.baidu.com
rndc flush 清除緩存

rndc reload 重新啟動

發現這兩個都清除了,還是出現相同錯誤

最後發現是數據庫文件的權限問題,在運行DNS時,是用named這個用戶,執行操作的,所以當文件的所有者,所屬組為root是,將權限改成644


上海用戶,解析出來6.6.6.6。成功

[[email protected] network-scripts]# dig www.sina.com @192.168.191.107


; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6 <<>> www.sina.com @192.168.191.107

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63539

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2


;; QUESTION SECTION:

;www.sina.com. IN A


;; ANSWER SECTION:

www.sina.com. 86400 IN A 6.6.6.6


;; AUTHORITY SECTION:

sina.com. 86400 IN NS dns1.sina.com.


;; ADDITIONAL SECTION:

dns1.sina.com. 86400 IN A 172.17.251.107

dns1.sina.com. 86400 IN A 192.168.191.107


;; Query time: 2 msec

;; SERVER: 192.168.191.107#53(192.168.191.107)

;; WHEN: Mon Oct 9 13:34:41 2017

;; MSG SIZE rcvd: 97




本文出自 “Linux 學習記錄” 博客,請務必保留此出處http://guanm.blog.51cto.com/13126952/1971653

實現智能DNS