云网牛站
所在位置:首页 > Linux云服务器 > 采用BIND9在Ubuntu 18.04/16.04上设置Authoritative DNS Server

采用BIND9在Ubuntu 18.04/16.04上设置Authoritative DNS Server

2019-01-26 22:34:44作者:浦洪稿源:云网牛站

本文介绍采用BIND9在Ubuntu 18.04、Ubuntu 16.04系统上设置Authoritative DNS Server的方法。

 

背景

如果你拥有域名并希望自己的DNS服务器处理域名的名称解析而不是使用域名注册商的DNS服务器,则需要设置Authoritative DNS Server,域名所有者使用Authoritative DNS Server来存储DNS记录。

同时你需要两台服务器,一台服务器用于主DNS服务器,另一台服务器用于从DNS服务器。理想情况下,两台服务器应位于不同的物理位置,如果一个DNS服务器处于脱机状态,则另一个DNS服务器仍然可以响应你对域名的DNS查询。

注意:

术语主DNS服务器仅表示此服务器存储区域文件的主副本,在DNS解析方面,它没有更高的优先级。更改区域文件时始终更新SOA序列号。

 

安装BIND9及配置的说明

注:安装BIND 9的命令:sudo apt install bind9 bind9utils bind9-doc

请先阅读使用BIND9在Ubuntu 18.04上设置本地DNS解析器:https://ywnz.com/linuxyffq/3986.html一文,本文所讲的操作跟文章里一样,一直操作到本地DNS解析程序的配置——编辑/etc/bind/namd.conf.options文件,接下来的步骤按照本文介绍的做:

sudo nano /etc/bind/named.conf.options

将以下行添加到named.conf.options文件中:

// hide version number from clients for security reasons.

version "not currently available";

// disable recursion on authoritative DNS server.

recursion no;

// enable the query log

querylog yes;

// disallow zone transfer

allow-transfer { none; };

从技术上讲,你只需要添加recursion no,到disable recursion,但添加其他3个指令是一个好方式,保存并关闭文件,然后重启BIND:

sudo systemctl restart bind9

 

主DNS服务器配置

选择两个服务器中的一个作为主DNS服务器,我们将其命名为ns1.example.com。

主DNS服务器保存区域文件的主副本,DNS记录的更改在此服务器上进行,域可以有一个或多个DNS区域,每个DNS区域都有一个区域文件,其中包含该区域中的每个DNS记录,为简单起见,本文假设你要使用单个DNS区域来管理域名的所有DNS记录。

/etc/bind/named.conf.default-zones文件定义根区域和localhost区域,要为你的域名添加区域,请编辑/etc/bind/named.conf.local文件:

sudo nano /etc/bind/named.conf.local

将以下行添加到named.conf.local文件中,将example.com替换为自己的域名,将12.34.56.78替换为从DNS服务器的IP地址:

zone "example.com" {

type master;

file "/etc/bind/db.example.com";

allow-transfer { 12.34.56.78; };

};

在上面的配置中,我们使用zone子句创建了一个新区域,并指定这是主区域,区域文件是/etc/bind/db.example.com,我们将在其中添加DNS记录,区域传输仅允许从DNS服务器。

我们可以使用区域模板文件,而不是从头开始创建区域文件,将db.empty的内容复制到新文件:

sudo cp /etc/bind/db.empty /etc/bind/db.example.com

区域文件可以包含3种类型的条目:

评论:以分号开头(;)。

指令:以美元符号开头($)。

资源记录:又称DNS记录。

区域文件通常由以下类型的DNS记录组成。

SOA(权限开始)记录:定义区域的关键特征,它是区域文件中的第一个DNS记录,是必需的。

NS(名称服务器)记录:指定哪些服务器用于存储DNS记录并回答域名的DNS查询,区域文件中必须至少有两条NS记录。

MX(邮件交换器)记录:指定哪些主机负责域名的电子邮件传递。

A(地址)记录:将DNS名称转换为IPv4地址。

AAAA(Quad A)记录:将DNS名称转换为IPv6地址。

CNAME记录(规范名称):它用于为DNS名称创建别名。

TXT记录:SPF,DKIM,DMARC等。

现在让我们编辑区域文件:

sudo nano /etc/bind/db.example.com

默认情况下,它看起来像这样:

采用BIND9在Ubuntu 18.04/16.04上设置Authoritative DNS Server

可以将其更改:

采用BIND9在Ubuntu 18.04/16.04上设置Authoritative DNS Server

Where:

$TTL指令定义区域的默认生存时间值,即DNS记录可以缓存在DNS解析器上的时间,该指令是强制性的,时间以秒为单位指定。

$ORIGIN指令定义基本域。

域名必须以点(.)结尾,这是根域,当域名以点结尾时,它是完全限定的域名(FQDN)。

@符号引用基域。

IN是DNS类,它代表互联网,存在其他DNS类但很少使用。

区域文件中的第一条记录是SOA(开始授权)记录,该记录包含以下信息:

主DNS服务器。

区域管理员的电子邮件地址,RFC 2142建议使用电子邮件地址hostmaster@example.com,在区域文件中,此电子邮件地址采用以下格式:hostmaster.example.com,因为@符号在区域文件中具有特殊含义。

区域序列号,序列号是从DNS服务器跟踪区域更改的一种方法,按照惯例,序列号采用日期格式:yyyymmddss,其中yyyy是四位数年份数,mm是月份​​,dd是日期,ss是当天的序列号,更改区域文件时,必须更新序列号。

刷新价值,当达到刷新值时,从DNS服务器将尝试从主DNS服务器读取SOA记录,如果序列号变高,则启动区域传输。

重试值,如果从DNS服务器无法连接到主DNS服务器,则以秒为单位定义重试间隔。

到期:如果从属DNS服务器在这段时间内未能与主DNS服务器联系,则从属服务器将停止响应此区域的DNS查询。

负缓存TTL:为不存在的DNS名称(NXDOMAIN)定义DNS响应的生存时间值。

TXT记录通常用双引号括起来,如果添加DKIM记录,还需要用括号括起该值。

保存并关闭文件,然后运行以下命令以检查主配置文件中是否存在syntax错误,默认输出表示未发现错误:

sudo named-checkconf

然后检查区域文件的syntax:

sudo named-checkzone example.com /etc/bind/db.example.com

如果未找到错误,则重新启动BIND9:

sudo systemctl restart bind9

如果使用的是简单防火墙(UFW),请打开TCP和UDP端口53:

sudo ufw allow 53/tcp

sudo ufw allow 53/udp

如果直接使用iptables防火墙,请运行以下命令:

sudo iptables -A INPUT -p tcp --dport 53 -j ACCEPT

sudo iptables -A INPUT -p udp --dprot 53 -j ACCEPT

 

从属DNS服务器配置

现在我们使用另一台服务器作为从DNS服务器,它将命名为ns2.example.com。

首先,编辑named.conf.local文件:

sudo nano /etc/bind/named.conf.local

添加如下所示的区域,将12.34.56.78替换为主DNS服务器的IP地址:

zone "example.com" {

type slave;

file "db.example.com";

masters { 12.34.56.78; };

};

在上面的配置中,我们指定这是example.com区域的从DNS服务器,它只接受来自可信IP地址的区域传输。

保存并关闭文件,然后运行以下命令以检查主配置文件中是否存在syntax错误:

sudo named-checkconf

如果未找到错误,请重新启动BIND9:

sudo systemctl restart bind9

从DNS服务器上的区域文件是从区域传输加载的,区域传输用于将DNS记录更改从主DNS服务器同步到从DNS服务器,BIND9重启后,区域传输将立即启动,使用以下命令检查BIND9日志:

sudo journalctl -eu bind9

可以看到如下所示的消息,表示区域传输成功:

named[31518]: transfer of 'example.com/IN' from 12.34.56.78#53: Transfer completed: 1 messages, 16 records, 886 bytes, 0.004 secs (221500 bytes/sec)

区域文件将另存为/var/cache/bind/db.example.com。

如果使用的是简单防火墙(UFW),请打开TCP和UDP端口53:

sudo ufw allow 53/tcp

sudo ufw allow 53/udp

如果直接使用iptables防火墙,请运行以下命令:

sudo iptables -A INPUT -p tcp --dport 53 -j ACCEPT

sudo iptables -A INPUT -p udp --dprot 53 -j ACCEPT

 

关于区域传输

当达到SOA记录中的刷新时间时,从DNS服务器将再次联系主服务器,如果主服务器上的序列号大于从服务器上的序列号,则将启动区域传输,区域传输有两种类型:

完整区域传输(AXFR):传输区域文件的完整副本。

增量区域传输(IXFR):仅传输更改的DNS记录。

两种类型的区域传输都使用TCP端口53,默认情况下,从DNS服务器上的BIND将请求增量区域传输,主DNS服务器上的BIND将仅允许区域动态时的增量区域传输。

区域传输间隔是DNS记录更改传播速度的主要因素,而不是等待从DNS服务器进行联系,BIND主服务器将在对区域进行更改时通知从属服务器,这可以大大减少将区域更改传播到Internet的时间。

 

反向区域

反向区域包含将IP地址映射到DNS名称的PTR记录,它是DNS A记录的对应物,邮件服务器通常需要PTR记录来传递垃圾邮件过滤器,此记录不属于域,你需要在托管服务提供商的控制面板上创建PTR记录,或者询问您的ISP,因此我不打算在BIND中创建反向区域。

 

创建Glue记录

如果拥有域名example.com并且使用子域作为权威DNS服务器(ns1.example.com和ns2.example.com),则需要在域名注册商处创建Glue记录,Glue记录是ns1.example.com和ns2.example.com的A记录,创建Glue记录后,更改域名注册商控制面板上的名称服务器。

以上信息将发送给通过可扩展供应协议(EPP)运行TLD DNS服务器的注册管理执行机构,以便TLD DNS服务器知道你域名的authoritative DNS servers的名称和IP地址。

将Glue记录和NS记录传播到Internet后,你的DNS服务器将响应你的域名的DNS查询,可以使用以下命令检查查询日志:

sudo journalctl -eu bind9

 

相关主题

在Ubuntu 18.04 LTS系统上安装和配置Dnsmasq的步骤

精选文章
热门文章