网络接入之DNS服务器搭建 | 豆包MarsCode AI刷题

126 阅读3分钟

在网络接入这一节课中了解到了企业都是会自建权威DNS服务器以此来确保自己的域名解析不会由于外部DNS服务器宕机而受阻。所以尝试去实践一下搭建DNS服务器。

0. 环境

  • CentOS Linux release 7.9
  • BIND 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.16

1. bind安装

sudo yum install bind -y

2. 配置named服务


//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// See the BIND Administrator's Reference Manual (ARM) for details about the
// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html

options {
	listen-on port 8053 { 127.0.0.1; };
	listen-on-v6 port 53 { ::1; };
	directory 	"/var/named";// 指定named的目录,后面我们的zone文件就放在这里
	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";
	recursing-file  "/var/named/data/named.recursing";
	secroots-file   "/var/named/data/named.secroots";
	allow-query     { localhost; };
	recursion yes; //开启递归查询

	dnssec-enable yes;
	dnssec-validation yes;

	/* Path to ISC DLV key */
	bindkeys-file "/etc/named.root.key";

	managed-keys-directory "/var/named/dynamic";

	pid-file "/run/named/named.pid";
	session-keyfile "/run/named/session.key";
        forward first;//首先尝试将查询转发到下面两个DNS服务器去解析,要是失败再自己解析
	forwarders {
		223.5.5.5;
		223.6.6.6;
	};
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "example.com" IN {//DNS域定义 
	type master;//权威服务器
	file "example.com.zone";//从这个文件中读取example.com区域的DNS记录。
};


3. 创建域文件

$TTL 10M
@ IN SOA ns1.example.com admin.example.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ; minimum
)
@ NS ns1.example.com.
@ NS ns2.example.com.
@ A 192.168.44.1
ns1 A 192.168.44.2
ns2 A 192.168.44.3
www A 192.168.44.4

$TTL 控制了 DNS 记录在递归服务器和本地解析器中的缓存时间。

ns1.example.com. 是主DNS服务器的域名。

admin.example.com. 是管理这个区域的管理员的电子邮件地址,通常以.代替@符号

serial为序列号,用于版本控制,每次更新zone文件都应该增加

NS 记录定义了域的权威名称服务器。

@ 表示默认域名,也就是是example.com

A 记录将域名映射到IPv4地址。

refresh 从服务器多久从主服务器刷新一次数据

retry 从服务器连接主服务器失败,多久重试一次

expire 从服务器与主服务器断联多久,域文件配置失效

minimum 从服务器的最低TTL

编写完成之后,可以先检查一下是否有语法错误

sudo named-checkconf
sudo named-checkzone example.com /var/named/example.com.zone

4. 运行

sudo systemctl start named

看看是否在正常监听了

image.png

然后测试一下是否生效:

image.png

image.png

可以看到,DNS服务正常工作。

同一个局域网连接:

把上面named.conf里面的ip定义成listen-on port 8053 { any; };,拿局域网里面另一个机器连一下:

image.png

可以正常连接。

4. 主从配置

使用主从配置更加符合实际部署情况,从服务器从主服务器读取zone文件。从服务器可以布置到离用户更近的位置上。

改写master DNS配置允许从服务器读取配置:

zone "example.com" IN {
        type master;
        file "example.com.zone";
        allow-transfer {192.168.44.129};
};

从服务器配置同上,只有在zone定义的时候不同:

zone "example.com" IN {
        type slave;
        file "slaves/example.com.zone";
        masters { 192.168.132.20; };
};

这里配置的zone文件地址并不需要自己去配置,服务启动之后,从服务器会主动向主服务器拉取。

5. 个人DNS服务器

除了在企业使用这种自建的DNS服务器之外,我们个人也可以拿这个服务器搭建一个在局域网中生效的DNS服务。我们可以通过配置路由器设置来实现。登录路由器后台之后,在DHCP设置页面,找到“DNS服务器”或“DNS转发”设置。将默认的DNS服务器地址更改为你的自定义DNS服务器的IP地址。这样,在其他人连接到这个路由器的时候,路由器将会在DHCP分发IP的时候分发DNS服务器的地址,这样就可以实现链接到这个路由器的人都可以访问专属于这个局域网的URL了。