创建和使用域名服务器 (DNS)¶
域名服务器可以执行三种基本操作
充当递归服务器,将查询转发到其他服务器
对递归发现的记录进行本地缓存
充当域的权威服务器
创建非权威服务器¶
前两个操作很简单,您可以使用命令 twistd -n dns --recursive --cache
创建一个执行这两个操作的服务器。您可能希望以 root 身份运行此命令,因为它将尝试绑定到 UDP 端口 53。尝试使用它执行查找操作,dig twistedmatrix.com @127.0.0.1
。
创建权威服务器¶
要充当域的权威服务器,需要满足两个条件:运行域名服务器的机器的地址必须注册为该域的域名服务器;并且域名服务器必须配置为充当权威服务器。第一个要求超出了本教程的范围,不会在此处介绍。
要将 Names 配置为充当 example-domain.com
的权威服务器,我们首先为该域创建一个区域文件。
zone = [
SOA(
# For whom we are the authority
'example-domain.com',
# This nameserver's name
mname = "ns1.example-domain.com",
# Mailbox of individual who handles this
rname = "root.example-domain.com",
# Unique serial identifying this SOA data
serial = 2003010601,
# Time interval before zone should be refreshed
refresh = "1H",
# Interval before failed refresh should be retried
retry = "1H",
# Upper limit on time interval before expiry
expire = "1H",
# Minimum TTL
minimum = "1H"
),
A('example-domain.com', '127.0.0.1'),
NS('example-domain.com', 'ns1.example-domain.com'),
CNAME('www.example-domain.com', 'example-domain.com'),
CNAME('ftp.example-domain.com', 'example-domain.com'),
MX('example-domain.com', 0, 'mail.example-domain.com'),
A('mail.example-domain.com', '123.0.16.43'),
PTR('43.16.0.123.in-addr.arpa', 'mail.example-domain.com'),
]
接下来,运行命令 twistd -n dns --pyzone example-domain.com
。现在尝试在本地查询该域(同样,使用 dig):dig -t any example-domain.com @127.0.0.1
。
Names 还可以读取传统的 BIND 语法区域文件。使用 --bindzone
参数指定这些文件。目前不支持 $GENERATE 和 $INCLUDE 指令。