debian配置BIND DNS服务器

前言

局域网内有很多台主机,IP难以记忆。

而修改hosts文件又难以做到配置共享和统一,需要一台内网的DNS服务器。

效果展示

这里添加了一个域名hello.dog,将其指向为192.168.1.100。

同时,外网的域名不会受到影响,优先使用内网域名。

注意:添加太多DNS服务器不好。即使靠前的DNS中找到了解析,仍然可能向靠后的DNS服务器发送解析请求,引起不必要的开销。

一、安装

shell 复制代码
apt install bind9

二、配置文件说明

配置文件位于/etc/bind

有两类文件,一种是:

  • name.conf
  • name.conf.default-zones
  • name.conf.options
  • name.conf.local

另一类是:

  • db.127
  • db.255
  • ...

1. named.conf

这个配置文件是最主要的,可以看到它里面其实是引入了其他文件,把实现都转到其他地方了,感兴趣自己挨个看下。

named.conf是最基本的,引入的内容都可以直接写在这个文件里面。

举个例子,一个简单形式的的named.conf如下:

shell 复制代码
options {
	directory "/var/cache/bind";

	forwarders {
		8.8.8.8;
		114.114.114.114;
	};
	
	dnssec-validation auto;
	listen-on-v6 { any; };
	allow-query { any; };
};

zone "dog" {
	type master;
	file "/etc/bind/db.dog";
};
zone "com" {
	type master;
	file "/etc/bind/db.com";
};
zone "net" {
	type master;
	file "/etc/bind/db.net";
};

其中options是配置项,然后是一些自定义的域。

forwarders很重要,它是你的下一级DNS域名,当你的本地中找不到记录时,会委托给它去查找,也就是递归查找。

2. db.XXX

里面定义了实际的域名和IP映射关系。

三、实例

举个例子,这里以为局域网配置一个顶级域名dog,以及一些子域名。

1. 添加dog顶级域名

shell 复制代码
vim /etc/bind/named.conf

在里面加上dog域名,并指定它的映射文件为/etc/bind/db.dog(可以用相对路径)。

shell 复制代码
zone "dog" {
	type master;
	file "/etc/bind/db.dog";
};

就像下面这样:

2. 配置映射文件db.dog

shell 复制代码
vim /etc/bind/db.dog

创建db.dog并写入映射条目:

shell 复制代码
$TTL	1h

@	IN	SOA	dog. sixqaq.outlook.com. (
				2		;Serial
				3h		; Refresh after 3 hours
				1h		; Retry after 1hour
				100000	; Expire after 1 week
				1h		; Negative caching TTL of 1 hour
				)
@	IN	NS	localhost.
@	IN	A	192.168.1.104

hello.dog.	IN	A	 192.168.1.100
world.dog.	IN	A	 192.168.1.104

(注意,域名结尾还有一个点,漏掉解析失败的,日志也会提醒)

这里的h后缀表示小时,也可以不要h后缀,单位是秒。

最需要关注的是TTL,可以改成0。

  • 刷新时间(Refresh):这个字段表示其他 DNS 服务器应该多久来重新获取该区域的 SOA 记录。单位是秒。
  • 重试时间(Retry):这个字段表示其他 DNS 服务器在刷新失败后应该等待多久来重试。单位是秒。
  • 过期时间(Expire):这个字段表示在这个时间之后,其他 DNS 服务器应该停止回答关于该区域的查询。单位是秒。
  • 最小 TTL(Minimum TTL):这个字段表示其他 DNS 服务器在缓存该区域的记录时应该使用的最小 TTL 值。单位是秒。

3. 关闭验证

shell 复制代码
vim /etc/bind/named.conf.options

dnssec-validation设为no,否则会用不了(因为要验证签名,感觉很麻烦,局域网自己用一下得了不会有问题的)。

内容如下:

shell 复制代码
options {
	directory "/var/cache/bind";


	forwarders {
		8.8.8.8;
		114.114.114.114;
	};

	
	c no;

	listen-on-v6 { any; };
	allow-query { any; };
};

4. 修改DNS

先启动我们的DNS服务器:

shell 复制代码
service named start
shell 复制代码
service named status

启动了最好看一下状态,如果有红色报错或黄色警告,说明有问题,用不了。

可以以本机为例验证,或者在用其他主机测试:

shell 复制代码
vim /etc/resolv.conf

修改DNS服务器:

shell 复制代码
nameserver XXX.XXX.XXX.XXX

这里XXX是你的DNS所在的主机的IP,本机测试填127.0.0.1就可以。

最后,记得防火墙开放53号端口(TCP和UDP都要)。

NetworkManager会覆盖我们写在resolv.conf中的DNS配置,自己再改回去很麻烦,

解决方案见另一篇博客:解决NetworkManager覆盖/etc/resolv.conf的问题

四、DDNS

  • 待办

参考资料


相关推荐
开压路机3 小时前
进程控制
linux·服务器
2401_873479403 小时前
如何从零搭建私有化IP查询平台?数据采集、清洗、建库到API发布全流程
服务器·网络·tcp/ip
代码中介商5 小时前
Linux 帮助手册与用户管理完全指南
linux·运维·服务器
金融Tech趋势派6 小时前
OpenClaw火了,AI Agent下一步走向哪里?
人工智能·github·企业微信·openclaw·企微管家claw
cccccc语言我来了6 小时前
C++轻量级消息队列服务器
java·服务器·c++
xiaoshuaishuai86 小时前
C# Codex 脚本编写
java·服务器·数据库·c#
Ai173163915797 小时前
GB200 NVL72超节点深度解析:架构、生态与产业格局
大数据·服务器·人工智能·神经网络·机器学习·计算机视觉·架构
思茂信息7 小时前
CST交叉cable的串扰(crosstalk)仿真
服务器·开发语言·人工智能·php·cst
weixin_449173657 小时前
Linux -- 项目中查找日志的常用Linux命令
linux·运维·服务器
琉璃榴8 小时前
Visual Studio Code连接远程服务器
服务器·vscode·github