Berkeley Internet Name Domain

安装与启用

  • yum 包名:bind (建议直接安装bind-chroot)
    • systemctl 服务名:named
  • apt 包名:bind9

    • systemctl 服务名:bind9

      RHEL 系配置

  • /etc/named.conf

    • option {} - 全局选项
    • logging {} - 日志选项
    • zone “.” IN {} - 解析
      1. vim /etc/named.conf
      options {
      # 监听本机所有 IP 地址
      listen-on port 53 { any; };
      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";
      # 允许所有来源的 IP 请求 DNS 服务
      allow-query { any; };
      

      正向解析

  • 第1步:编辑区域配置文件。该文件中默认已经有了一些无关紧要的解析参数,旨在让用户有一个参考。我们可以将下面的参数添加到区域配置文件的最下面,当然,也可以将该文件中的原有信息全部清空,而只保留自己的域名解析信息:

    vim /etc/named.rfc1912.zones
    
    zone "linuxprobe.com" IN {
    # 定义为主服务器
    type master;
    file "linuxprobe.com.zone";
    # 允许那个从服务器来更新本服务器的数据
    allow-update {none;};
    };
    
  • 第2步:编辑数据配置文件。我们可以从/var/named目录中复制一份正向解析的模板文件(named.localhost),然后把域名和IP地址的对应数据填写数据配置文件中并保存。在复制时记得加上-a参数,这可以保留原始文件的所有者、所属组、权限属性等信息,以便让bind服务程序顺利读取文件内容:

    cp -a /var/named/named.localhost /var/named/linuxprobe.com.zone
    
    vim /var/named/linuxprobe.com.zone
    
    @       IN SOA    linuxprobe.com.    root.linuxprobe.com.    (    
              0       ;serial    #更新序列号
              1D      ;refresh    #更新时间
              1H      ;retry    #重试延时
              1W      ;expire    #失效时间
              3H )   ;minimum    #无效解析记录的缓存时间
          NS    ns.linuxprobe.com.    ;#域名服务器记录
    ns      IN A    192.168.10.10    ;#地址记录(ns.linuxprobe.com.)
          IN MX 10    mail.linuxprobe.com.    ;#邮箱交换记录
    mail    IN A    192.168.10.10    ;#地址记录(mail.linuxprobe.com.)
    www     IN A    192.168.10.10    ;#地址记录(www.linuxprobe.com.)
    bbs     IN A    192.168.10.20    ;#地址记录(bbs.linuxprobe.com.)
    

    反向解析

    一般要配置邮件服务的时候会配合用到反向解析

  • 第1步:编辑区域配置文件。在编辑该文件时,除了不要写错格式之外,还需要记住此处定义的数据配置文件名称,因为一会儿还需要在/var/named目录中建立与其对应的同名文件。反向解析是把IP地址解析成域名格式,因此在定义zone(区域)时应该要把IP地址反写,比如原来是192.168.10.0,反写后应该就是10.168.192,而且只需写出IP地址的网络位即可。把下列参数添加至正向解析参数的后面。

    vim /etc/named.rfc1912.zones
    
    zone "10.168.192.in-addr.arpa" IN {
    type master;
    # 实际路径 /var/named 下
    file "192.168.10.arpa";
    allow-update {none;};
    };
    
  • 第2步:编辑数据配置文件。首先从/var/named目录中复制一份反向解析的模板文件(named.loopback),然后把下面的参数填写到文件中。其中,IP地址仅需要写主机位

    cp -a /var/named/named.loopback /var/named/192.168.10.arpa
    
    vim /var/named/192.168.10.arpa
    
    $TTL 1D
    @       IN SOA  linuxprobe.com. root.linuxprobe.com. (
                                          0       ; serial
                                          1D      ; refresh
                                          1H      ; retry
                                          1W      ; expire
                                          3H )    ; minimum
          NS      ns.linuxprobe.com.
    ns      A       192.168.10.10
    10      PTR     ns.linuxprobe.com.
    10      PTR     mail.linuxprobe.com.
    10      PTR     www.linuxprobe.com.
    20      PTR     bbs.linuxprobe.com.
    
    systemctl restart named
    firewall-cmd --permanent --add-port=53/tcp
    firewall-cmd --permanent --add-port=53/udp
    firewall-cmd --reload
    

    从属服务器

  • 第1步:在主服务器的区域配置文件中允许该从服务器的更新请求,即修改allow-update {允许更新区域信息的主机地址;};参数,然后重启主服务器的DNS服务程序。

    vim /etc/named.rfc1912.zones
    
    zone "linuxprobe.com" IN {
    type master;
    file "linuxprobe.com.zone";
    allow-update { 192.168.10.20; };
    };
    zone "10.168.192.in-addr.arpa" IN {
    type master;
    file "192.168.10.arpa";
    allow-update { 192.168.10.20; };
    };
    
    systemctl restart named
    firewall-cmd --permanent --add-port=53/tcp
    firewall-cmd --permanent --add-port=53/udp
    firewall-cmd --reload
    
  • 第2步:在从服务器中填写主服务器的IP地址与要抓取的区域信息,然后重启服务。注意此时的服务类型应该是slave(从),而不再是master(主)。masters参数后面应该为主服务器的IP地址,而且file参数后面定义的是同步数据配置文件后要保存到的位置,稍后可以在该目录内看到同步的文件。

    vim /etc/named.rfc1912.zones
    
    zone "linuxprobe.com" IN {
    type slave;
    masters { 192.168.10.10; };
    # 实际路径 /var/named 下
    file "slaves/linuxprobe.com.zone";
    };
    zone "10.168.192.in-addr.arpa" IN {
    type slave;
    masters { 192.168.10.10; };
    file "slaves/192.168.10.arpa";
    };
    
    systemctl restart named
    ls /var/named/slaves
    firewall-cmd --permanent --add-port=53/tcp
    firewall-cmd --permanent --add-port=53/udp
    firewall-cmd --reload
    

    缓存服务器

    在 /etc/named.conf 里添加一行 forwarders { DNS_IP; }; 之后重启即可

    分离解析功能

  • 第1步:修改bind服务程序的主配置文件,把第11行的监听端口与第17行的允许查询主机修改为any。由于配置的DNS分离解析功能与DNS根服务器配置参数有冲突,所以需要把第51~54行的根域信息删除。

    vim /etc/named.conf
    

    zone “.” IN {
    type hint;
    file “named.ca“;
    };

  • 第2步:编辑区域配置文件。把区域配置文件中原有的数据清空,然后按照以下格式写入参数。首先使用acl参数分别定义两个变量名称(china与american),当下面需要匹配IP地址时只需写入变量名称即可,这样不仅容易阅读识别,而且也利于修改维护。

    vim /etc/named.rfc1912.zones
    
    acl "china" { 122.71.115.0/24; };
    acl "american" { 106.185.25.0/24; };
    view "china" {
      match-clients { "china"; };
      zone "linuxprobe.com" {
          type master;
          file "linuxprobe.com.china";
      };
    };
    view "american" {
      match-clients { "american"; };
      zone "linuxprobe.com" {
          type master;
          file "linuxprobe.com.american";
      };
    };
    

    Debian 系配置

  • /etc/bind/named.conf

  • /etc/bind/zones.rfc1918

待补充

其他相关知识

13台根DNS服务器的具体信息

名称 管理单位 地理位置 IP地址
A INTERNIC.NET 美国-弗吉尼亚州 198.41.0.4
B 美国信息科学研究所 美国-加利弗尼亚州 128.9.0.107
C PSINet公司 美国-弗吉尼亚州 192.33.4.12
D 马里兰大学 美国-马里兰州 128.8.10.90
E 美国航空航天管理局 美国加利弗尼亚州 192.203.230.10
F 因特网软件联盟 美国加利弗尼亚州 192.5.5.241
G 美国国防部网络信息中心 美国弗吉尼亚州 192.112.36.4
H 美国陆军研究所 美国-马里兰州 128.63.2.53
I Autonomica公司 瑞典-斯德哥尔摩 192.36.148.17
J VeriSign公司 美国-弗吉尼亚州 192.58.128.30
K RIPE NCC 英国-伦敦 193.0.14.129
L IANA 美国-弗吉尼亚州 199.7.83.42
M WIDE Project 日本-东京 202.12.27.33

解析记录分类

  • A记录 域名→IP地址
  • CNAME记录 域名→其他域名
  • MX记录 域名→邮件域名→A记录IP地址
  • NS记录 域名→name server域名