创建和使用域名服务器 (DNS)

域名服务器可以执行三种基本操作

  • 充当递归服务器,将查询转发到其他服务器

  • 对递归发现的记录进行本地缓存

  • 充当域的权威服务器

创建非权威服务器

前两个操作很简单,您可以使用命令 twistd -n dns --recursive --cache 创建一个执行这两个操作的服务器。您可能希望以 root 身份运行此命令,因为它将尝试绑定到 UDP 端口 53。尝试使用它执行查找操作,dig twistedmatrix.com @127.0.0.1

创建权威服务器

要充当域的权威服务器,需要满足两个条件:运行域名服务器的机器的地址必须注册为该域的域名服务器;并且域名服务器必须配置为充当权威服务器。第一个要求超出了本教程的范围,不会在此处介绍。

要将 Names 配置为充当 example-domain.com 的权威服务器,我们首先为该域创建一个区域文件。

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 指令。