>  기사  >  마스터-슬레이브 DNS 배포 - 매우 상세한 실험 작업

마스터-슬레이브 DNS 배포 - 매우 상세한 실험 작업

Linux中文社区
Linux中文社区앞으로
2023-08-02 15:46:421382검색

마스터-슬레이브 DNS 배포 - 매우 상세한 실험 작업

독자의 요청에 따라 오늘은 DNS 마스터와 슬레이브에 대한 지식을 추가하겠습니다.

마스터-슬레이브 DNS 배포와 관련하여 업무상 거의 사용되지 않지만, 마주쳤을 때 모두가 빠르게 환경을 설정할 수 있도록 연습을 해보겠습니다.

DNS 소프트웨어 설치:

[root@slave1 ~]# yum -y install bind*

구성 파일 분석

/etc/named.conf 이 구성 파일은 주로 3개 섹션으로 나뉘며 옵션은 전역 구성, 로깅은 로그입니다. 구성, 마지막으로 지역 파싱 라이브러리 구성과 포함된 지역 파싱 라이브러리 파일 구성입니다.

[root@slave1 ~]# vim /etc/named.conf
options {
        listen-on port 53 { 10.0.0.62; };
        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";
        recursing-file "/var/named/data/named.recursing";
        secroots-file "/var/named/data/named.secroots";
        allow-query { any; };

        /*
         - 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 yes;
        dnssec-validation yes;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.root.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; //指定根区域类型。
        file "named.ca"; //指定根区域解析库文件名称所在位置,相对于/var/named
};

//指定区域文件名称,所有的区域定义都可以写在named.rfc1912.zones文件中
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

配置文件详解:

listen-on port 53 { 10.0.0.62; };表示监听的端口和IP地址,其中{}内部两端都要有空格,IP地址要以;号结尾。

directory指定named的工作目录,后面的域配置文件、日志文件都存放在这里。例如上面示例中的named.ca就是保存在/var/named中

allow-query表示允许哪些主机可以访问当前dns服务,改成any表示任何主机都可以访问当前的dns服务

recursion如果你打算构建一个递归(缓存)DNS服务器,那这里就要设置为yes;如果是构建权威服务器,那这里就应该设置为off。

zone用于定义DNS服务器所服务的区域,其中包括区域名、区域类型和区域文件名等信息。

DNS 영역은 정방향 조회 영역과 역방향 조회 영역의 두 가지 범주로 나뉩니다.

정방향 조회 영역은 FQDN(호스트 이름 + 도메인 이름)을 IP 주소에 매핑하는 데 사용됩니다. DNS 클라이언트가 특정 FQDN 확인을 요청하면 DNS 서버는 정방향 조회 영역에서 검색하여 이를 DNS에 반환합니다.

역방향 조회 영역은 IP 주소를 FQDN에 매핑하는 데 사용됩니다. DNS 클라이언트가 IP 주소 확인을 요청하면 역방향 조회 영역에서 검색하여 반환합니다. to DNS 클라이언트에 해당하는 FQDN입니다.

파일: 영역 데이터베이스 파일의 이름을 지정합니다. 파일 이름 주위에는 큰따옴표를 사용해야 합니다. 여기에는 파일 이름만 기록됩니다. 해당 파일은 어디에 저장되어 있나요? 실제로 저장 위치는 옵션 섹션의 디렉토리 옵션에 의해 지정됩니다. 이 옵션의 기본값은 /var/named입니다.

type: 지역 유형을 지정합니다. 힌트(hint), 마스터(master), 슬레이브(slave), 전달(forward)과 같은 유형이 있으며 각각 루트 영역, 기본 영역, 보조 영역 및 전달 영역을 나타냅니다. 힌트는 루트에게 넘겨준다는 뜻으로, 루트존 종류가 버퍼서버임을 나타냅니다.

재귀 DNS 서버, 권한 있는 DNS 서버

1. 재귀 서버

클라이언트가 인터넷 요청을 시작하고 다양한 로컬 캐시를 쿼리한 후 해당 확인 레코드를 얻지 못한 경우 로컬 DNS 서버에 대한 쿼리 요청을 시작합니다. 또한 공개 계정의 최고 기술 배경을 검색하고 "API 인터페이스"라고 답하면 깜짝 선물 패키지를 얻을 수 있습니다.

로컬 DNS 서버는 먼저 자체 로컬 캐시를 쿼리하고 결과가 없으면 클라이언트로 직접 반환하며 루트 DNS 서버로 이동합니다. 최상위 도메인 네임 서버, 2차 도메인 네임 서버 등 재귀 쿼리 후, 최종적으로 도메인 이름에 해당하는 권한 있는 서버를 찾아 결과를 클라이언트에 반환하고 해당 기록을 로컬 캐시에 저장합니다.

요약: 전체 DNS 쿼리 과정에서 클라이언트가 처음에 로컬 도메인 이름 서버(또는 로컬 DNS 서버)에 요청하는 것을 제외하고 나머지 부분에서는 로컬 도메인 이름 서버가 대신 재귀 쿼리를 수행합니다. 시간. 여기서 로컬 도메인 이름 서버는 재귀 DNS 서버입니다.

2. 권한 있는 서버

도메인 이름의 최종 확인을 담당하는 서버가 권한 있는 서버입니다. 권한 있는 서버는 재귀 서버와 다르며 클라이언트가 재귀 쿼리를 수행하고 확인 레코드를 반환하도록 돕는 역할을 하지 않습니다.

10T 기술 기간 한정 자원 증정! Linux, 가상화, 컨테이너, 클라우드 컴퓨팅, 네트워킹, Python, Go 등을 포함하되 이에 국한되지 않습니다. 오픈소스 리눅스 공식 계정에 "10T"라고 답하시면 무료로 받아보실 수 있습니다!

每个特定的域名,权威DNS服务器可能并不相同。这种权威DNS服务器只对自己所拥有的域名进行域名解析,对于自己不负责域名则无法进行解析。比如递归DNS去taobao.com的权威DNS服务器查询baidu.com的域名肯定会查询失败。

因此递归解析服务器是运营商搭建,帮助所属网络用户去响应的权威DNS服务器查询解析结果。而权威解析服务器一般是企业自建或域名服务商建设,给购买域名的企业和个人使用,方便其对域名进行解析管理。

配置主服务器

[root@slave1 ~]# vim /etc/named.conf
options {
        listen-on port 53 { 10.0.0.62; }; //主服务器的地址
        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";
        recursing-file "/var/named/data/named.recursing";
        secroots-file "/var/named/data/named.secroots";
        allow-query { any; }; //允许任何主机可以访问本DNS服务

        /*
         - 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; //配置成递归DNS服务器

        dnssec-enable yes;
        dnssec-validation yes;

        /* Path to ISC DLV key */
        bindkeys-file "/etc/named.root.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;
        file "named.ca";
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";


# 在/etc/named.rfc1912.zones文件末尾添加正向解析区域和反向解析区域
[root@slave1 ~]# vim /etc/named.rfc1912.zones
......
// 在文件最后添加一个正向解析区域,并定义为主服务器
zone "test1.com" IN {
    type master; //master表示主服务器
    file "test1.com.zone"; //指明区域解析库文件,相对于/var/named/
};

//在文件最后添加一个反向解析区域,并定义为主服务器
zone "0.0.10.in-addr.arpa" IN {
    type master;
    file "test1.com.local";
};

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

# 复制模板来创建区域文件
[root@slave1 ~]# cd /var/named/

# 注意:复制的时候要用-a选项,以便保持用户拥有者等属性信息,否则named程序无法解析。当然你也可以手动修改属性,使复制后的文件的拥有者和所属组都是named
[root@slave1 named]# cp -a named.localhost test1.com.zone
[root@slave1 named]# cp -a named.loopback test1.com.local

# 设置正向解析
[root@slave1 named]# cat test1.com.zone
$TTL 1D
@ IN SOA @ rname.invalid. (
          0  ; serial
          1D ; refresh
          1H ; retry
          1W ; expire
          3H ) ; minimum
  NS @
  A 10.0.0.62
www IN A 10.0.0.62
ftp IN A 10.0.0.62
mail IN CNAME www

# 设置反向解析
[root@slave1 named]# cat test1.com.local
$TTL 1D
@ IN SOA test1.com. rname.invalid. (
          0  ; serial
          1D ; refresh
          1H ; retry
          1W ; expire
          3H ) ; minimum
  NS test1.com.
  A 10.0.0.62
10 IN PTR www.test1.com.
11 IN PTR ftp.test1.com.

# 重新配置本机的DNS:
[root@slave2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
......
IPADDR=10.0.0.62
PREFIX=24
GATEWAY=10.0.0.2
DNS1=10.0.0.62

启动named服务:

牛逼啊!接私活必备的 N 个开源项目!赶快收藏
[root@slave1 ~]# systemctl start named

# 测试一下
[root@slave1 ~]# nslookup www.test1.com
Server: 10.0.0.62
Address: 10.0.0.62#53

Name: www.test1.com
Address: 10.0.0.62
[root@slave1 named]# nslookup ftp.test1.com
Server: 10.0.0.62
Address: 10.0.0.62#53

Name: ftp.test1.com
Address: 10.0.0.62

配置从服务器

# 修改主配置文件,只改两行,其余保持默认即可
[root@slave2 ~]# cat /etc/named.conf
......
options {
  listen-on port 53 { 10.0.0.63; }; # ip地址改成本地地址
  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";
  recursing-file "/var/named/data/named.recursing";
  secroots-file "/var/named/data/named.secroots";
  allow-query { any; }; # 任何主机都可以访问本地dns服务
......


# 在/etc/named.rfc1912.zones文件末尾添加正向解析区域和反向解析区域
[root@slave2 ~]# vim /etc/named.rfc1912.zones
......
zone "test1.com" IN {
        type slave;
        masters { 10.0.0.62; };
        allow-notify { 10.0.0.62; };
        file "slaves/test1.com.zone";
};

zone "0.0.10.in-addr.arpa" IN {
        type slave;
        masters { 10.0.0.62; };
        allow-notify { 10.0.0.62; };
        file "slaves/test1.com.local";
};

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

启动named服务:

[root@slave2 ~]# systemctl start named

# 重新配置本机的DNS:
[root@slave2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
......
IPADDR=10.0.0.63
PREFIX=24
GATEWAY=10.0.0.2
DNS1=10.0.0.63

# 启动以后,会自动生成区域解析库文件,这两个文件来源于主服务器
[root@slave2 ~]# ll /var/named/slaves/
total 8
-rw-r--r-- 1 named named 336 Sep 5 20:02 test1.com.local
-rw-r--r-- 1 named named 319 Sep 5 20:02 test1.com.zone

# 测试验证
[root@slave2 ~]# nslookup www.test1.com
Server: 10.0.0.63
Address: 10.0.0.63#53

Name: www.test1.com
Address: 10.0.0.62

[root@slave2 ~]# nslookup ftp.test1.com
Server: 10.0.0.63
Address: 10.0.0.63#53

Name: ftp.test1.com
Address: 10.0.0.62

客户端验证

# 配置DNS:客户端需要配置多个dns,我们这里配置主从dns的地址
[root@master ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
......
IPADDR=10.0.0.61
PREFIX=24
GATEWAY=10.0.0.2
DNS1=10.0.0.62    
DNS2=10.0.0.63

# 重启网络使配置生效
[root@master ~]# systemctl restart network

[root@master ~]# nslookup www.test1.com
Server: 10.0.0.62
Address: 10.0.0.62#53

Name: www.test1.com
Address: 10.0.0.62

[root@master ~]# nslookup ftp.test1.com
Server: 10.0.0.62
Address: 10.0.0.62#53

Name: ftp.test1.com
Address: 10.0.0.62

主从一同工作,在客户端会配有多个DNS地址,如果第一个DNS地址无法解析,那么第二DNS地址也是无法解析的,当第一个DNS地址联系不上时(宕机)才会联系第二个DNS地址并寻求解析。

故障测试

# 停止master DNS
[root@slave1 ~]# systemctl stop named

# 到客户端上去验证
[root@master ~]# nslookup www.test1.com
Server: 10.0.0.63
Address: 10.0.0.63#53

Name: www.test1.com
Address: 10.0.0.62

通过上面的实验我们可以发现,停掉master DNS服务以后,客户端还是可以继续解析到域名, 即从DNS已经开始启用了。

위 내용은 마스터-슬레이브 DNS 배포 - 매우 상세한 실험 작업의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 Linux中文社区에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제