DNS-服务器搭建

简介

DNS (Domain Name System), 用于将域名和服务器的 IP 地址进行对应和解析.

TCP/UDP 一般使用 53 端口.

通常使用 BIND (Berkeley Internet Name Domain) 服务实现.

除了让 DNS 本身做解析服务外, 也可以设置为:

  • Cache-only, 只有 . 这个 zone file, 需要自己向其他 DNS 服务器查询
  • Forwarding, 没有任何 zone file, 需指定一个上层 DNS 服务器, 将查询任务传送过去

两种模式.

一些基本概念

顶级域, 二级域名

根域 . 的下一级则为顶级域.

正向解析

指通过 “域名” 查找 “IP”.

反向解析

通过 “IP” 查找 “域名”.

主要用于邮箱域名解析.

此时的顶级域为 arpa (Address and Routing Parameter Area)

FQDN

FQDN (Fully Qualified Domain Name), 指包含完整域名层级的 domain name (包含 . 根域), 如:

  • www.example.com.
  • mail.google.com.

zone

Zone 指一个 domain 之下的数据文件. 包含解析条目.

客户端域名正向解析流程

  1. 在本地缓存中查找是否有对应 IP 地址
  2. 查看本地 hosts 文件中是否有静态域名解析
  3. 向本地 DNS 服务器发送查询请求
  4. 本地 DNS 服务器将地址返回给客户端

DNS 服务器的查询流程

  1. 若本身无记录, 则向 . 查询
  2. 逐层向下询问
  3. 找到记录后暂存内存并返回给用户

安装

1
dnf install -y bind

配置

主要要设置好两类数据:

  • BIND 本身的配置文件, /etc/named.conf
  • 正反解数据库档案 (zone file), 可以在 /etc/named.conf 中指定 (因此名字随便取)

相关文件:

  • /etc/named.conf, 主配置文件
  • /etc/sysconfig/named, 启动 chroot 的额外参数
  • /var/named, 数据库文件默认存放
  • /var/run/named, pid-file

设置为 forwarding 模式

修改 /etc/named.conf 文件为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
options {
listen-on port 53 { any; }; // 监听哪一个网络接口, 这里是 any
directory "/var/named"; // zone file 存放的位置
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { any; }; // 哪些客户端可进行查询
recursion yes;
forward only; // 设置为 cache only
forwarders { // 转交给哪些 DNS 服务器
168.95.1.1;
139.175.10.20;
};
};

可能需要先刷新一下证书文件:

1
systemctl restart systemd-resolved

正解 zone file 内的 RR

正解的 zone 常包括:

  • RR (Resource Record) 资源记录, 这是一种格式(标志), 如:
    1
    2
    3
    4
    5
    6
    7
    [domain]  IN [[RR type] [RR data]]
    主机名. IN A IPv4地址
    主机名. IN AAAA IPv6地址
    领域名. IN NS 管理这个领域名的服务器主机名字
    领域名. IN SOA 管理这个领域名的七个重要参数
    领域名. IN MX 顺序数字 接收邮件的服务器主机名字
    主机别名. IN CNAME 实际代表这个主机别名的主机名字

这里的 . 加上之后则为 FQDN.

SOA 需要编写的 7 个参数为:

  • Master DNS 服务器主机名
  • 管理员的 email
  • 序号 (Serial), 越大表示数据库越新
  • 更新频率 (Refresh)
  • 失败重新尝试时间 (Retry)
  • 失效时间 (Expire)
  • 快取时间 (Minimum TTL)

反解文件记录的 RR 数据

反解时的 zone 中 IP 反写的原因: 对于域名的解析, 如 www.ksu.edu.tw 越右边的网域越大, 因此查询是从右往左, 但是 IP 如 120.114.100.101 是越左边网域越大(此时就需要从左往右查询), 因此将 IP 反写(结尾加上 .in-addr.arpa.), 就可以设置为从右往左查询.

其 zone 文件中的 RR 数据有:

  • PTR (PoinTeR), 用 IP 查询主机名.

zone 文件示例

正解的网域是 domain name.

反解的网域是 IP 范围.

若要设置正解网域为 centos.vbird, 反解网域为 192.168.100.0/24, 则需设置的文件有:

  • named.conf, 主配置文件
  • named.centos.vbird, 关于 centos.vbird 的正解文件
  • named.192.168.100, 关于 192.168.100.0/24 的反解文件
  • named.ca, 由 bind 提供的 . 的正解文件

设置 named.conf 文件

设置 options 以及 zone. 如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
options {
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
allow-query { any; };
recursion yes;
allow-transfer { none; };
};

zone "." IN {
type hint;
file "named.ca";
}

zone "centos.vbird" IN {
type master;
file "named.centos.vbird";
}

zone "100.168.192.in-addr.arpa" IN {
type master;
file "named.192.168.100";
}

allow-transfer 决定是否允许来自 slave DNS 对数据的传送.

zone 中的 type 一般设定有 3 个值:

  • hint 用于 . 的设置
  • master, 用于手动更新数据库文件
  • slave, 用于自动更新数据库文件

named.ca

文件内容如:

正解文件设置

一定需要设置的 RR 标志有:

  • TTL (快取记忆时间), ORIGIN (领域名)
  • SOA
  • NS, A
  • 其他

文件内容的格式要求:

  • 每一个 domain 的设置顶行写, 不顶行表明接着前一个 domain 的设置
  • @, 代表 zone
  • ; 表示注释 (#~ 也是)

示例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$TTL 600
@ IN SOA master.centos.vbird. vbird.www.centos.vbird. (2011080401 3H 15M 1W 1D)
@ IN NS master.centos.vbird.
master.centos.vbird. IN A 192.168.100.254
@ IN MX 10 www.centos.vbird.

www.centos.vbird. IN A 192.168.100.254
linux.centos.vbird. IN CNAME www.centos.vbird
ftp.centos.vbird. IN CNAME www.centos.vbird
forum.centos.vbird. IN CNAME www.centos.vbird

slave.centos.vbird. IN A 192.168.100.10
clientlinux.centos.vbird. IN A 192.168.100.10
workstation.centos.vbird. IN A 192.168.1.101
winxp.centos.vbird. IN A 192.168.100.20
win7 IN A 192.168.100.30

(注意一行一个记录)

若域名后没有加上 ., 则会默认加上 zone + .

反解文件设置

至少设置 TTL, SOA, NS, PTR:

1
2
3
4
5
6
$TTL    600
@ IN SOA master.centos.vbird. vbird.www.centos.vbird. (2011080401 3H 15M 1W 1D)
@ IN NS master.centos.vbird.

254 IN PTR master.centos.vbird.
254 IN PTR www.centos.vbirt

因为 zone 为 100.168.192.in-addr.arpa, 因此这里写 254 就相当于 254.100.168.192.in-addr.arpa.

设置 bind 程序启动的 root 目录

bind-chroot 命令, 其将 bind 程序限定在某一个目录下. (暂时无示例)

检查配置文件语法

1
named-checkconf -z

检查 zone file 语法

1
named-checkconf zone_name /path/to/zone_file

热加载配置文件

1
rndc reload

相关命令行工具

dig

查看查询流程

1
dig +trace www.google.com

指定查询类型

1
dig -t a www.google.com 

反向解析

1
dig -x 154.83.14.134

whois

查询域名管理者

1
whois centos.org

DNS-服务器搭建
http://example.com/2023/12/01/DNS-服务器搭建/
作者
Jie
发布于
2023年12月1日
许可协议