DIY 博客域名解析(一)主服务器

前一篇提到过,本博客所用的 DNS 服务被墙了,导致部分读者无法正常访问,无奈之下只好自己架设了独立的 Name Server。这里先简单介绍一下 Name Server 的配置方法。

本博客目前运行于 Ubuntu 14.04 LTS 之上,Ubuntu 中自带的 DNS 软件是 bind9。bind9 可以配置成通用的 DNS 服务器,也可以做成特定域名的 Name Server。

安装 bind9

创建 Zone 文件

一个 Zone 对应了一个域名,以下内容是一些简单的针对 leonax.net 的设置,保存于 /etc/bind/db.leonax.net 文件中。

Zone 文件包括一系列的记录(Record),每个记录形如:<名称> IN <类型> <值>,常见的记录类型有:

  • SOA:Start of Authority,它指定了当前域名的权威 Name Server 地址。所谓权威 Name Server,就是说只有这个服务器返回的记录,才会被认为是有效记录。SOA 中的字段按顺序依次为:
    1. 权威 Name Server 地址,是一个域名,如上述的 ns.leonax.net;
    2. 联系人邮箱地址,这里要用“.”代替“@”;
    3. 当前 Zone 文件的版本,是一个整数,通常使用“年月日序号”的方式来表示,这个值在多服务器间同步的时候有作用;
    4. 从属服务器的缓存刷新时间,推荐值为[1200 .. 43200],即 20 分钟到 12 小时;
    5. 从属服务器刷新失败后,等待再次刷新的时间,推荐值为[120 .. 7200],即 2 分钟到 3 小时;
    6. 当前 Zone 的设定在从属服务器刷新失败一定时间后,自动作废,推荐值为[604800 .. 1209600],即一周到两周;
    7. 从属服务器中无效响应的缓存时间,推荐值为[3600 .. 86400],即一小时到一天;
  • A:指向一个 IPv4 地址的记录;
  • AAAA:指向一个 IPv6 地址的记录;(由于我所用的主机不支持 IPv6,所以上面的列表就没有写 AAAA 记录)
  • NS:Name Server 的地址,它的值是一个域名,而不是 IP 地址;
  • TXT:文本记录;
  • MX:邮件服务器地址;

除了记录之外,还有一些特殊变量,如上面的“$ORIGIN”。如果在记录中使用了“@”来表示裸域名,则需要用 $ORIGIN 来指定默认的裸域名是什么。还有 $TTL,表示默认的缓存时间,在记录中可以使用形如“1h”(一小时)之类的值来覆盖。

使用 Zone 文件

创建了 Zone 文件之后,需要设置 bind9 来让它知道这个 Zone 的存在。修改 /etc/bind/named.conf.local 文件,添加如下内容:

这样就创建了一个“主服务器”(Master),从属服务器(Slave)的设置下次再继续。

重启 bind9

bind9 的日志会写在 /var/log/syslog 文件中,有什么问题都可以从日志中找出。如果没有问题,下面的命令:

将会有类似如下的输出:

另外,我使用了 ns.leonax.net 来解析 leonax.net,这产生了一个死循环,即客户端想知道 ns.leonax.net 的 IP 地址,就必须先知道 leonax.net 的 IP 地址,而前者又是后者的 Name Server。要解决这个问题,我们需要使用 Glue Record。这是一个在域名注册商那里填写的内容,比如 Google Domains 就支持这一项。Glue Record 的作用是在根域名服务器中写入 ns.leonax.net 的地址,这样一来,客户端在查询 leonax.net 的 Name Server 的时候,不仅能知道 ns.leonax.net,还能知道它的 IP 地址,也就解决了死循环的问题。

这样我们就完成了单服务器的设置,简单来说,这样的设置满足了小型服务器的需求,本博客已经不依赖于第三方的 Name Server 而可以独立解析了。


4 条评论 添加

发表评论

电子邮件地址不会被公开。 必填项已用*标注