linux中部署DNS分离解析技术

     在Internet环境中,许多大型站点(新浪、网易、腾讯、搜狐……)会分别部署多台镜像服务器,不同地区或不同ISP接入的用户会自动连接到离他们最近的镜像服务器。针对类似这样的需求,对于这些站点的权威DNS服务器来说,如何根据客户机的来源不同而引导其访问正确的镜像服务器。需要用到“DNS分离解析”,有时候也成为智能解析。。。。。下面就来了解下"DNS分离解析"的运作原理吧!(http://www.mamicode.com/info-detail-7299.html)。

     实质:依据不同来源的DNS查询,将同一个域名解析为不同的IP地址,这些IP地址对应的镜像服务器提供的内容是一样的。 

     

     下面实验一共由两台虚拟机完成:

     DNS服务器: PC1

     客户端: PC2

1、在PC1中安装bind服务

[root@PC1 ~]# yum install bind-chroot -y
Loaded plugins: langpacks, product-id, subscription-manager
This system is not registered to Red Hat Subscription Management. You can use subscription-manager to register.
rhel7                                                    | 4.1 kB     00:00     
Resolving Dependencies
--> Running transaction check
---> Package bind-chroot.x86_64 32:9.9.4-14.el7 will be installed
--> Processing Dependency: bind = 32:9.9.4-14.el7 for package: 32:bind-chroot-9.9.4-14.el7.x86_64
--> Running transaction check
---> Package bind.x86_64 32:9.9.4-14.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package             Arch           Version                 Repository     Size
================================================================================
Installing:
 bind-chroot         x86_64         32:9.9.4-14.el7         rhel7          81 k
Installing for dependencies:
 bind                x86_64         32:9.9.4-14.el7         rhel7         1.8 M

Transaction Summary
================================================================================
Install  1 Package (+1 Dependent package)

Total download size: 1.8 M
Installed size: 4.3 M
Downloading packages:
--------------------------------------------------------------------------------
Total                                              9.7 MB/s | 1.8 MB  00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : 32:bind-9.9.4-14.el7.x86_64                                  1/2 
  Installing : 32:bind-chroot-9.9.4-14.el7.x86_64                           2/2 
rhel7/productid                                          | 1.6 kB     00:00     
  Verifying  : 32:bind-9.9.4-14.el7.x86_64                                  1/2 
  Verifying  : 32:bind-chroot-9.9.4-14.el7.x86_64                           2/2 

Installed:
  bind-chroot.x86_64 32:9.9.4-14.el7                                            

Dependency Installed:
  bind.x86_64 32:9.9.4-14.el7                                                   

Complete!

2、在pc1中修改bind服务主配置文件

…………
  9 
 10 options {
 11         listen-on port 53 { any; };   ## 设定任何网卡都可以提供DNS服务
 12         listen-on-v6 port 53 { ::1; };
 13         directory       "/var/named";
 14         dump-file       "/var/named/data/cache_dump.db";
 15         statistics-file "/var/named/data/named_stats.txt";
 16         memstatistics-file "/var/named/data/named_mem_stats.txt";
 17         allow-query     { any; };    ## 任何用户均可使用DNS查询服务
 18 
 19         /* 
 20          - If you are building an AUTHORITATIVE DNS server, do NOT enable re    cursion.
……………
44 logging {
 45         channel default_debug {
 46                 file "data/named.run";
 47                 severity dynamic;
 48         };
 49 };
 50 
 51 #zone "." IN {     ## 注释掉 51-54 行,与分离解析服务冲突
 52 #       type hint;
 53 #       file "named.ca";
 54 #};
 55 
 56 include "/etc/named.rfc1912.zones";
 57 include "/etc/named.root.key";
……

3、在PC1服务器中编辑区域配置文件

[root@PC1 ~]# vim /etc/named.rfc1912.zones
acl "china" { 122.71.115.0/24; };   ## 指定变量,将122.71.115.0/24网段指定为 china 变量,当做国内用户的网段
acl "america" { 106.185.25.0/24; };  ##  作为美国用户的网段
view "china"{
match-clients { "china"; };    ## 匹配
zone "linuxprobe.com" {        ## 指定匹配规则文件
type master;
file "linuxprobe.com.china";
};
};
view "america"{
match-clients { "america"; };
zone "linuxprobe.com" {
type master;
file "linuxprobe.com.america";
};
};

4、在PC1服务器中建立数据配置文件

[root@PC1 ~]# cd /var/named/
[root@PC1 named]# ls
chroot  dynamic   named.empty      named.loopback
data    named.ca  named.localhost  slaves
[root@PC1 named]# cp -a named.localhost linuxprobe.com.china
[root@PC1 named]# cp -a named.localhost linuxprobe.com.america
[root@PC1 named]# vim linuxprobe.com.china  ## 编辑国内用户匹配时使用的数据配置文件,国内用户访问 www.linuxprobe.com时,解析为122.71.115.10
$TTL 1D
@       IN SOA  linuxprobe.com. root.linuxprobe.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      ns.linuxprobe.com.
ns      IN A    122.71.115.10
www     IN A    122.71.115.10
[root@PC1 named]# vim linuxprobe.com.america  ## 编辑美国用户匹配时使用的数据配置文件,美国用户访问时,解析为106.185.25.10
$TTL 1D
@       IN SOA  linuxprobe.com. root.linuxprobe.com. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      ns.linuxprobe.com.
ns      IN A    106.185.25.10
www     IN A    106.185.25.10

5、配置PC1主服务器网卡,网卡中要指定两个IP,这两个IP要分别在指定的国内网段(122.71.115.0/24)和美国网段(106.185.25.0/24

6、重启PC1主机网卡、重启PC1主机bind服务,清空PC1主机防火墙

[root@PC1 named]# systemctl restart network
[root@PC1 named]# systemctl restart named
[root@PC1 named]# iptables -F   ## 这一步很重要

7、模拟测试国内用户,将客户机PC2的IP配置为122.71.115.20(在122.71.115.0/24国内网段即可),DNS服务设置为122.71.115.1(PC1主机服务器对应网段IP

8、重启PC2网卡服务(测试国内用户,IP在122.71.115.0/24内

[root@PC2 network-scripts]# systemctl restart network
[root@PC2 network-scripts]# ifconfig | head -n 3
eno16777728: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 122.71.115.20  netmask 255.255.255.0  broadcast 122.71.115.255
        inet6 fe80::20c:29ff:fe25:bb3e  prefixlen 64  scopeid 0x20<link>

9、在PC2中检测网络连通性(测试国内用户,IP在122.71.115.0/24内)

[root@PC2 network-scripts]# ping -c 3 122.71.115.20  ## 测试PC2本机
PING 122.71.115.20 (122.71.115.20) 56(84) bytes of data.
64 bytes from 122.71.115.20: icmp_seq=1 ttl=64 time=0.071 ms
64 bytes from 122.71.115.20: icmp_seq=2 ttl=64 time=0.043 ms
64 bytes from 122.71.115.20: icmp_seq=3 ttl=64 time=0.047 ms

--- 122.71.115.20 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.043/0.053/0.071/0.015 ms
[root@PC2 network-scripts]# ping -c 3 122.71.115.1   ## 测试PC2客户端和PC1服务端连通性
PING 122.71.115.1 (122.71.115.1) 56(84) bytes of data.
64 bytes from 122.71.115.1: icmp_seq=1 ttl=64 time=0.374 ms
64 bytes from 122.71.115.1: icmp_seq=2 ttl=64 time=0.226 ms
64 bytes from 122.71.115.1: icmp_seq=3 ttl=64 time=0.197 ms

--- 122.71.115.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.197/0.265/0.374/0.079 ms

9、测试国内用户请求DNS解析时返回的www.linuxprobe.com域名的IP

[root@PC2 network-scripts]# nslookup 
> www.linuxprobe.com
Server:        122.71.115.1
Address:    122.71.115.1#53

Name:    www.linuxprobe.com
Address: 122.71.115.10

10、同理,模拟测试美国用户,在pc2中将IP地址修改为106.185.25.25(106.185.25.0/24美国网段即可),DNS服务设定为106.185.25.1,重启网卡,测试DNS解析效果

[root@PC2 network-scripts]# systemctl restart network  ## 测试 网络连通
[root@PC2 network-scripts]# ifconfig | head -n 3
eno16777728: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 106.185.25.25  netmask 255.255.255.0  broadcast 106.185.25.255
        inet6 fe80::20c:29ff:fe25:bb3e  prefixlen 64  scopeid 0x20<link>
[root@PC2 network-scripts]# nslookup 
> www.linuxprobe.com
Server:        106.185.25.1
Address:    106.185.25.1#53

Name:    www.linuxprobe.com
Address: 106.185.25.10

 通过以上实验可见:

      国内用户请求解析www.linuxprobe.com时,返回122.71.115.10

      美国用户请求解析www.linuxprobe.com时,返回106.185.25.10

也就是说实现了:同一个域名(www.linuxprobe.com)依据访客的不同解析为了不同的IP。

DNS分离解析的关键点:

     DNS服务器中要设置不同的网段(例如国内和美国),和各自网段对应的DNS服务数据配置文件(域名和IP对应关系文件),这些不同的网段用户不同的访客访问时进行匹配,从而使用不同的数据配置文件实现域名解析。

     DNS服务器中的IP地址要设置不同的IP,这些IP在对应的网段即可,客户端用户将使用对应的IP作为DNS服务,DNS服务器中不用指定DNS服务。

     客户端主机使用的IP要与DNS服务器中定义的网段范围内(国内用户在国内用户范围内,美国用户在美国用户范围内),客户端的DNS服务应使用DNS服务器中对应网段的IP。也就是说客户端主机IP、客户端的DNS服务地址和DNS服务器中的IP应在同一网段中,其中客户端的DNS服务地址和DNS服务器中的IP是相同(以上针对一个地区而言,另一个地区时,同样如此)。

   

原文地址:https://www.cnblogs.com/liujiaxin2018/p/14127325.html