在Linux内网搭建DNS服务器,主要有两种常见方案:BIND(功能完整)和dnsmasq(轻量级),以下是详细步骤:
方案一:使用BIND搭建完整DNS服务器
Ubuntu/Debian sudo apt update sudo apt install bind9 bind9-utils CentOS/RHEL sudo yum install bind bind-utils
编辑/etc/bind/named.conf 或/etc/named.conf:
sudo vim /etc/bind/named.conf
添加或修改以下内容:
options {
listen-on port 53 { 127.0.0.1; 192.168.1.10; }; # 监听IP
directory "/var/named";
allow-query { localhost; 192.168.1.0/24; }; # 允许查询的网段
recursion yes; # 启用递归查询
forwarders { 8.8.8.8; 114.114.114.114; }; # 上游DNS
};创建域定义文件/etc/bind/named.conf.local:
zone "example.local" IN {
type master;
file "/etc/bind/db.example.local";
allow-update { none; };
};创建区域数据文件/etc/bind/db.example.local:
$TTL 86400
@ IN SOA ns1.example.local. admin.example.local. (
2024010101 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Minimum TTL
@ IN NS ns1.example.local.
ns1 IN A 192.168.1.10
www IN A 192.168.1.20
ftp IN A 192.168.1.21
mail IN A 192.168.1.30在named.conf.local 添加:
zone "1.168.192.in-addr.arpa" IN {
type master;
file "/etc/bind/db.192.168.1";
allow-update { none; };
};创建反向解析文件/etc/bind/db.192.168.1:
$TTL 86400
@ IN SOA ns1.example.local. admin.example.local. (
2024010101
3600
1800
604800
86400 )
@ IN NS ns1.example.local.
10 IN PTR ns1.example.local.
20 IN PTR www.example.local.
21 IN PTR ftp.example.local.
30 IN PTR mail.example.local.检查语法 sudo named-checkconf sudo named-checkzone example.local /etc/bind/db.example.local 启动服务 sudo systemctl start named sudo systemctl enable named sudo systemctl status named
方案二:使用dnsmasq(轻量级)
Ubuntu/Debian sudo apt install dnsmasq CentOS/RHEL sudo yum install dnsmasq
编辑/etc/dnsmasq.conf:
sudo vim /etc/dnsmasq.conf
添加以下配置:
监听地址 listen-address=127.0.0.1,192.168.1.10 绑定到指定接口 interface=eth0 不读取/etc/hosts no-hosts 指定自定义hosts文件 addn-hosts=/etc/dnsmasq.hosts 上游DNS服务器 server=8.8.8.8 server=114.114.114.114 本地域名 local=/example.local/ DNS记录 address=/www.example.local/192.168.1.20 address=/ftp.example.local/192.168.1.21 address=/mail.example.local/192.168.1.30
sudo vim /etc/dnsmasq.hosts
添加记录:
192、168.1.20 www.example.local 192、168.1.21 ftp.example.local 192、168.1.30 mail.example.local
sudo systemctl start dnsmasq sudo systemctl enable dnsmasq
方案三:使用systemd-resolved(简单)
1. 编辑systemd-resolved配置
sudo vim /etc/systemd/resolved.conf
添加:
[Resolve] DNS=192.168.1.10 8.8.8.8 Domains=example.local
sudo vim /etc/hosts
添加:
192、168.1.10 dns.example.local 192、168.1.20 www.example.local 192、168.1.30 mail.example.local
客户端配置
临时修改 sudo vim /etc/resolv.conf 添加:nameserver 192.168.1.10 永久修改(NetworkManager) sudo vim /etc/NetworkManager/conf.d/dns.conf 添加:[main] dns=dnsmasq
1、打开"网络和共享中心"
2、选择"更改适配器设置"
3、右键选择网络连接 → 属性
4、选择"Internet协议版本4 (TCP/IPv4)"
5、使用以下DNS:192.168.1.10
测试DNS服务器
使用nslookup测试 nslookup www.example.local 192.168.1.10 使用dig测试 dig @192.168.1.10 www.example.local 测试反向解析 dig @192.168.1.10 -x 192.168.1.20 检查DNS服务状态 sudo netstat -tulnp | grep :53
防火墙配置
开放53端口 sudo ufw allow 53 或使用iptables sudo iptables -A INPUT -p tcp --dport 53 -j ACCEPT sudo iptables -A INPUT -p udp --dport 53 -j ACCEPT
注意事项
1、选择方案:
- 小型内网:推荐dnsmasq,配置简单
- 需要完整功能:选择BIND
- 极简需求:直接修改/etc/hosts
2、安全建议:
- 限制访问IP范围
- 定期更新系统补丁
- 配置日志监控
3、备份配置:
# 备份BIND配置 sudo tar -czf /backup/bind-config-$(date +%Y%m%d).tar.gz /etc/bind # 备份dnsmasq配置 sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf.bak
根据网络规模和需求选择合适的方案,对于大多数内网环境,dnsmasq是简单高效的选择。
文章摘自:https://idc.huochengrm.cn/dns/23950.html
评论
亢亦玉
回复在Linux内网搭建DNS,需要安装和配置BIND或dnsmasq等DNS服务器软件,配置解析区域文件、正向解析和反向解析记录,确保内网设备能正确解析域名。
鞠平雅
回复在Linux内网搭建DNS,可以使用bind或dnsmasq服务,配置域名解析和缓存策略,确保内网设备能正确解析域名。