如果你想搭建自己的域名解析服务器,Bind一定是你的不二之选。以下将介绍为你的域名提供解析的基本配置。
安装Bind9
sudo apt update sudo apt install bind9
配置需要解析的域名
bind9 配置文件位于 /etc/bind/
,核心配置文件为named.conf
,包含引用了 named.conf.options
,named.conf.local
, named.conf.default-zones
配置文件。
在/etc/bind/named.conf.local
中添加自己的域名zone:
zone "example.tld" { type master; file "/var/cache/bind/db.example.tld"; };
最基本的配置只需要包含两个信息,你需要指定DNS服务器类型: type master;
意味着作为主服务器提供域名解析服务。主服务器可以将域名记录同步与之对应的从服务器( type slave;
)
file "/var/cache/bind/db.example.tld";
意味着包含域名zone记录信息文件的位置,推荐将zone配置文件放置在/var/cache/bind/
目录下。
编写zone文件
一个基础zone配置文件包含以下必须的信息:
SOA( start of authority )记录,什么是SOA记录,包含了主域名解析服务器名,邮箱(@以.来代替),和序列号(用于客户端确认记录是否更改,可以设置为当前的时间),刷新时间(辅助服务器在向主要服务器询问 SOA 记录以查看其是否已更新之前应等待的时间长度),update retry(服务器再次向无响应的主要名称服务器请求更新前应等待的时间),expiry(当主服务器无响应时,从服务器记录的过期时间),minimum(负缓存TTL)
NS(Name Server)记录,此处为你的域名解析服务器名,如ns1.example.tld
编写/var/cache/bind/db.example.tld
:
bind9官方的zone参考
$TTL 2d ; 指定 TTL(Time to Live)默认值 $ORIGIN example.com. ; base domain-name 指定ORIGIN为example.com. (可选) ; Start of Authority RR defining the key characteristics of the zone (domain) @ IN SOA ns1.example.com. hostmaster.example.com. ( 2003080800 ; serial number序列号 12h ; refresh 刷新时间 15m ; update retry 更新再尝试时间 3w ; expiry 过期时间 2h ; minimum (Negative response caching TTL) 负缓存TTL ) ; name server RR for the domain IN NS ns1.example.com. ns1 IN A 192.168.254.2 ;替换为你的IP
$TTL
在域名解析系统中意味着记录的有效期,$TTL 2d
意味着如果以下记录如果不指定TTL,将使用这个指定的默认TTL值 2d,需要指定记录的TTL值时,应写在 IN
前。minimum指在客户端缓存无法查询到当前记录的时间(Negative Caching)。
@
意味着当前的ORIGIN,此处为你的域名(example.tld.),可以用example.tld.来代替。
值得注意的是配置文件中域名填写的方法:bind9以 . 结尾(如ns1.example.tld.)来表示完整的域名;如果末尾不加 .
,bind9会将其视为不完整的域名,并为其添加域名后缀,如填写ns1.example.tld,bind9会将其视为ns1.example.tld.example.tld.
注释以 ; 开始
除了NS记录,当我们使用自己搭建的DNS服务器时,我们需要为这个NS记录添加A记录。
CloudFlare参考写法
$TTL 86400 ;; SOA Record example.tld. 3600 IN SOA alice.ns.cloudflare.com. dns.cloudflare.com. 2046598643 10000 2400 604800 3600 ;; NS Records example.tld. 86400 IN NS alice.ns.cloudflare.com. example.tld. 86400 IN NS lennox.ns.cloudflare.com. ;; A Records ns1.example.tld. IN A 192.168.254.2 www.example.tld. IN A 192.168.254.2
按照你的信息改写后可以通过named-checkconf命令查看配置填写是否存在错误。重启bind9服务
sudo systemctl reload bind9 或者 sudo rndc reload
你可以通过dig查询本机,并通过显示的序列号来确认记录的更改是否成功(不要忘记在更改记录时增加序列号;事实上即使序列号不变,其它公共DNS服务器也会通过实际查询的记录进行同步)
在确认服务器正常返回记录后,你可以在域名注册商填写你的Name Server。如果你使用相同的域名为本域名提供域名解析服务,如使用ns1.example.tld作为example.tld的域名解析服务器,你还需要在域名注册商填写胶水记录(glue record)。
如在spaceship中,在personal nameservers中填写:
更新 root.hints
根服务器地址信息(可选)。root.hints
存储着根服务器的IP地址等信息,它们通常不会经常更新。关于根服务器
wget -O /usr/share/dns/root.hints https://www.internic.net/domain/named.root
其它可参考文档: