局域网自建DNS服务器:
在局域网(LAN)中自建DNS服务器可以有效地管理和解析本地网络中的域名,这对网络管理员和技术爱好者来说都是一个非常实用的解决方案。
以下是设置一个基本的局域网DNS服务器的一般步骤和建议:
选择合适的软件
有几种常用的DNS服务器软件可以选择:
- BIND (Berkeley Internet Name Domain): 非常流行且功能强大的DNS服务器软件,适合中大型网络。
- dnsmasq: 轻量级的DNS和DHCP服务器,适合小型网络和嵌入式设备。
- Unbound: 主要用于递归DNS查询,非常安全且配置简单。
- Microsoft DNS: 集成在Windows Server中,适合Windows网络环境。
安装和配置DNS服务器(以 BIND 为例):
-----------------------------------------------
在CentOS 7上安装BIND:
-----------------------------------------------
- BIND 9通常通过bind包来安装BIND和BIND工具
sudo yum update -y
sudo yum install -y bind bind-utils
- 配置BIND
BIND的主要配置文件通常位于 /etc/named.conf。你需要对其进行一些基本配置。
编辑配置文件 /etc/named.conf:
sudo vi /etc/named.conf
文件内容示例:
options {
listen-on port 53 {127.0.0.1; any; };
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";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { localhost;10.0.1.0/24;};
forwarders {
223.5.5.5; // 阿里云 DNS
8.8.8.8; // Google DNS
8.8.4.4;
};
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
};
zone "example.com" {
type master;
file "example.com.zone";
allow-update { none; };
};
- 修改options块,允许所有IP进行查询(或者仅允许你的本地网络):
directory:指定BIND存储区域文件的位置。
allow-query:指定允许向BIND服务器发送查询请求的IP范围。根据你的网络情况,你可以设置为允许来自特定子网的请求,如 192.168.1.0/24。
forwarders:指定一个或多个上游DNS服务器的IP地址。BIND会将无法本地解析的DNS查询转发给这些服务器。
区域配置zone:根据需求定义主区域(master zone);
创建区域文件(通常存放在 /var/named 目录下):区域文件通常以.zone结尾,例如:db.example.com.zone。
sudo nano /var/named/example.com.zone
在文件中添加你的DNS记录,例如:
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2024080701 ; Serial
3600 ; Refresh
1800 ; Retry
1209600 ; Expire
86400 ) ; Minimum TTL
IN NS ns1.example.com.
ns1 IN A 192.168.1.10
www IN A 192.168.1.20
DNS区域文件的内容定义了example.com域的DNS记录,包括该域的SOA(Start of Authority)记录、NS(Name Server)记录和A(Address)记录。下面是对每一部分的解释:
$TTL 86400
$TTL:默认的生存时间(Time To Live),单位为秒。
86400:表示24小时(86400秒)。这是记录在DNS缓存中保存的时间。在此时间段内,缓存的DNS服务器不会向原始DNS服务器请求新的记录。
@ IN SOA ns1.example.com. admin.example.com. (...)
@:代表当前的域名(即example.com)。
IN:表示Internet类的记录。
SOA:Start of Authority,标志域名的权威起点,定义了DNS区域的基本信息。
ns1.example.com.:主DNS服务器的域名。这是负责该域名区域的主要DNS服务器。
admin.example.com.:域名管理员的电子邮件地址,.替代了@符号(如 admin@example.com)。
(...):括号内的字段分别是:
2024080701 - Serial:序列号,用于标识此区域文件的版本。每当该文件有修改时,序列号应递增。格式通常为 YYYYMMDDNN(年份+月份+日期+修改次数)。
3600 - Refresh:刷新间隔,单位为秒。此时间表示从属DNS服务器应该多长时间检查主DNS服务器以获取更新。3600秒即1小时。
1800 - Retry:重试间隔,单位为秒。如果从属DNS服务器在尝试获取更新失败后,需要等待多长时间再进行重试。1800秒即30分钟。
1209600 - Expire:失效时间,单位为秒。如果从属DNS服务器在指定的失效时间内无法与主DNS服务器通信,则该DNS区域数据被认为是无效的。1209600秒即14天。
86400 - Minimum TTL:在之前版本的BIND中,Minimum TTL被用作负面缓存(Negative Caching)的默认TTL。在现代BIND版本中,它仍然定义了该区域的TTL值。
IN NS ns1.example.com.
IN:表示Internet类的记录。
NS:Name Server记录,指定该域名的权威DNS服务器。
ns1.example.com.:指定example.com的权威DNS服务器为ns1.example.com。
ns1 IN A 192.168.1.10
ns1:主机名,即 ns1.example.com。
IN A:A记录,将主机名映射到IPv4地址。
192.168.1.10:ns1.example.com的IP地址。
www IN A 192.168.1.20
www:主机名,即 www.example.com。
IN A:A记录,将主机名映射到IPv4地址。
192.168.1.20:www.example.com的IP地址。
-
设置BIND启动与开机自启动
- 启动BIND:
sudo systemctl start named
- 启用BIND服务,使其在系统启动时自动启动:
sudo systemctl enable named
-
配置防火墙:
- 确保你的防火墙允许DNS查询通过(默认端口53), 在CentOS 7上,使用以下命令安装防火墙:
sudo firewall-cmd --permanent --add-port=53/udp sudo firewall-cmd --permanent --add-port=53/tcp sudo firewall-cmd --reload
-
测试BIND配置
使用以下命令测试BIND配置是否正确:
sudo named-checkconf sudo named-checkzone example.com /var/named/example.com.zone
如果没有错误信息返回,则配置文件和区域文件是正确的。
配置客户端
在局域网中的客户端设备上,将DNS服务器的IP地址设置为刚刚配置的DNS服务器的IP地址(如 192.168.1.2)。这可以在网络设置中手动配置,也可以通过DHCP服务器自动分发。测试DNS服务器:
使用 nslookup工具测试DNS解析功能,确保配置正确。定期检查和更新DNS记录,保持数据的准确性和网络的正常运行。
nslookup example.com localhost
也可以直接使用ping 命令测试域名解析功能。
ping example.com
如果解析成功,BIND 9已经成功安装并配置为DNS服务器。
-----------------------------------------------
在Ubuntu系统上安装BIND:
-----------------------------------------------
- 使用以下命令安装BIND:
sudo apt update
sudo apt install bind9
-配置BIND
配置文件通常位于 /etc/bind 目录下。主要的配置文件是 named.conf 和 zone 文件。
- 编辑主配置文件 named.conf(配置基本选项和引入区域文件):
// /etc/bind/named.conf
options {
directory "/var/cache/bind";
recursion yes;
allow-query { any; };
forwarders {
8.8.8.8; // Google DNS 或其他外部DNS服务器
8.8.4.4;
};
};
- 配置区域(zone)named.conf.local文件(创建区域文件定义本地网络的域名和IP地址的映射):
// /etc/bind/named.conf.local
zone "example.local" {
type master;
file "/etc/bind/db.example.local";
};
- 创建区域文件:
// /etc/bind/db.example.local
$TTL 604800
@ IN SOA ns1.example.local. admin.example.local. (
2024080701 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
; Name servers
@ IN NS ns1.example.local.
; A records for name servers
ns1 IN A 192.168.1.2
; A records for other hosts
www IN A 192.168.1.3
-
重启BIND服务:
sudo systemctl restart bind9
配置客户端
在局域网中的客户端设备上,将DNS服务器的IP地址设置为刚刚配置的DNS服务器的IP地址(如 192.168.1.2)。这可以在网络设置中手动配置,也可以通过DHCP服务器自动分发。测试DNS服务器:
使用 nslookup工具测试DNS解析功能,确保配置正确。定期检查和更新DNS记录,保持数据的准确性和网络的正常运行。
nslookup example.com localhost
也可以直接使用ping 命令测试域名解析功能。
ping example.com
如果解析成功,BIND 9已经成功安装并配置为DNS服务器。