前置概念
正向解析
正向解析是最常见的 DNS 查询方式:通过域名查询 IP 地址。
例如:
你访问网站 www.hello.com
,操作系统就会问 DNS 服务器:“www.hello.com
对应的 IP 是什么?”
DNS 服务器返回:127.0.0.1
或其他公网 IP。
这就是正向解析,对应你配置的 zone 文件中类似这样的记录:
www IN A 127.0.0.1
反向解析
反向解析是通过 IP 地址查找域名。
例如
你有一个 IP:127.0.0.1
,你想知道这个 IP 对应的域名(如果有)。
这是靠一个特殊的域名来完成,比如: 1.0.0.127.in-addr.arpa
DNS 服务器会查找这个反向 zone 文件,比如:
1 IN PTR www.hello.com.
DNS记录介绍
核心记录类型
记录类型 | 作用 | 示例 |
---|---|---|
A | 将域名指向 IPv4 地址 | example.com A 192.0.2.1 |
AAAA | 将域名指向 IPv6 地址 | example.com AAAA 2606:4700::1 |
CNAME | 域名别名(指向另一个域名) | www.example.com CNAME example.com |
MX | 邮件服务器地址 | example.com MX 10 mail.example.com |
TXT | 文本信息(如验证、SPF 记录等) | example.com TXT "v=spf1 mx ~all" |
其他重要记录
记录类型 | 作用 | 示例 |
---|---|---|
NS | 指定域名的权威 DNS 服务器 | example.com NS ns1.cloudflare.com |
SOA | 域名的起始授权记录(管理信息) | (包含主 DNS 服务器、管理员邮箱等) |
PTR | 反向解析(IP → 域名) | 1.2.0.192.in-addr.arpa PTR example.com |
SRV | 定义服务地址(如 VoIP、LDAP) | _sip._tcp.example.com SRV 10 60 5060 sipserver.example.com |
CAA | 指定允许签发 SSL 证书的机构 | example.com CAA 0 issue "letsencrypt.org" |
Windows
从链接中下载对应的版本,解压用,用管理员权限打开 BINDInstall.exe
安装程序。输入用户名和密码以完成安装
配置 BIND DNS 服务器
此处以hello.com为例,我们将hello.com指向127.0.0.1
配置文件结构
BIND 的核心配置文件是 named.conf
。它指定了 DNS 服务器的操作选项、区域和其他相关设置。以下是配置步骤
创建 named.conf
文件
在安装目录下(例如 C:\\Program Files\\ISC BIND 9\\etc
),创建一个名为 named.conf
的文件,内容如下:
options {
directory "C:/Program Files/ISC BIND 9/etc"; # 设置工作目录
listen-on port 53 { 127.0.0.1; }; # 仅监听本机地址
allow-query { any; }; # 允许任何人查询
};
zone "hello.com" IN {
type master;
file "hello.com.zone";
};
options
部分设置了工作目录、监听的端口和查询权限。zone
部分配置了你要管理的 DNS 区域文件,这里是hello.com
,可以根据自己的需求替换为其他域名。
创建 example.com.zone
文件
在 C:/Program Files/ISC BIND 9/etc
目录下创建一个名为 hello.com.zone
的文件,用于指定该域的资源记录。文件内容如下:
$TTL 86400
@ IN SOA ns.hello.com. admin.hello.com. (
2025041701 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Minimum TTL
IN NS ns.hello.com.
ns IN A 127.0.0.1
@ IN A 127.0.0.1
www IN A 127.0.0.1
$TTL 86400
设置了缓存的最大存活时间(TTL),单位是秒。SOA
记录指定了权威名称服务器和管理员的联系方式。NS
记录指定了域名的名称服务器(NS)。A
记录指定了主机名的 IP 地址。
检查配置文件
在bin目录下以管理员身份启动cmd,使用一下工具判断是否配置文件导入正确
named-checkconf
启动服务
net start named
关闭就是 net stop named
测试 DNS 解析
在本机 IPV4 协议中指定使用dns服务器为127.0.0.1
在 Windows 上,你可以使用 nslookup
工具来测试 DNS 解析是否正常:
nslookup www.hello.com
配置 named.root
在新版本的BIND会自己获取 named.root
, 故此处是否配置这个文件,效果都是一样的,为了说明,依旧阐述过程。
在 named.root
中配置以下内容:
zone "." {
type hint;
file "C:/Program Files/ISC BIND 9/etc/named.root";
};
可以把 named.root
想象成DNS 系统的“电话簿目录”,它告诉你的 DNS 服务器:“如果不知道某·个域名该问谁,就先问这些根服务器!”
配置 rndc.key
配置 rndc.key
的主要作用是 安全地远程管理 BIND (DNS 服务器),相当于为 DNS 管理员提供了一个加密的“遥控器”。
在bin目录下以管理员身份启动cmd
rndc-confgen -a
会自动生成一个rndc.key在etc目录下
name.conf
include "C:/Program Files/ISC BIND 9/etc/rndc.key";
options {
directory "C:/Program Files/ISC BIND 9/etc";
allow-query { any; };
recursion yes;
};
controls {
inet 127.0.0.1 allow { 127.0.0.1; } keys { "rndc-key"; };
};
zone "hello.com" IN {
type master;
file "hello.com.zone";
};
配置反向解析
多数邮件服务器会检查发件域的反向解析记录。若发送方的IP没有对应的PTR记录,或记录与域名不匹配,邮件可能被拒收或标记为垃圾邮件。
named.conf
:
zone "0.0.127.in-addr.arpa" IN {
type master;
file "127.0.0.zone"; # 这里指定使用 127.0.0.zone 文件
};
127.0.0.zone
:
$TTL 86400
@ IN SOA ns1.hello.com. admin.hello.com. (
2023041701 ; Serial
3600 ; Refresh
1800 ; Retry
1209600 ; Expire
86400 ) ; Minimum TTL
@ IN NS ns1.hello.com.
1 IN PTR hello.com.
linux
此处使用ubuntu来作为例子。
安装
sudo apt install bind9 bind9utils bind9-doc -y
配置
在 Ubuntu(Debian 系列)中,BIND 的主配置文件为:
/etc/bind/named.conf
这个文件 不会直接配置 zone,而是通过 include
引用其他文件:
include "/etc/bind/named.conf.options"; // 全局选项
include "/etc/bind/named.conf.local"; // 本地 zone 定义
include "/etc/bind/named.conf.default-zones"; // 默认的根域/反向域配置
所以它就像是一个入口,把不同职责分发到不同文件中。各个文件职责如下:
文件路径 | 作用 | 是否建议修改 |
---|---|---|
/etc/bind/named.conf |
主配置入口 | ❌ 不直接修改 |
/etc/bind/named.conf.options |
DNS 服务器的全局配置,例如转发器、监听接口 | ✅ 可配置 |
/etc/bind/named.conf.local |
添加自定义的 zone(比如你要解析的 example.com ) |
✅ 推荐放这 |
/etc/bind/named.conf.default-zones |
默认的 root hints、localhost、反向解析模板 | ❌ 不建议修改 |
同样,我们在 /etc/bind/named.conf.local
中编辑添加
zone "hello.com" {
type master;
file "/etc/bind/zones/db.hello.com";
};
创建zone文件
sudo nano /etc/bind/zones/db.hello.com
写上以下内容
$TTL 604800
@ IN SOA ns.hello.com. admin.hello.com. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
IN NS ns.hello.com.
ns IN A 127.0.0.1
@ IN A 127.0.0.1
www IN A 127.0.0.1
服务指令
启动 BIND 服务
sudo systemctl start bind9
停止 BIND 服务
sudo systemctl stop bind
重启
sudo systemctl restart bind9