# 前言
搭建自己的DNS服务器可以让你完全控制域名解析,提高隐私性或为内部网络提供服务。
DNS服务器软件:常见的选择:
-
BIND (Berkeley Internet Name Domain) - 最广泛使用的开源DNS软件
-
PowerDNS - 功能丰富的替代方案
-
Unbound - 更轻量级的递归解析器
-
dnsmasq - 适合小型网络和本地缓存
# 搭建个人私有DNS服务器
这里以centos2003.7.8版本为例子
# 安装DNS服务器软件(BIND为例子)
sudo yum install bind bind-utils
# 配置BIND服务器
# 主配置文件 (/etc/bind/named.conf 或 /etc/named.conf)
options {
directory "/var/cache/bind";
recursion yes; # 允许递归查询
allow-query { any; }; # 允许哪些客户端查询
forwarders {
8.8.8.8;
8.8.4.4;
}; # 上游DNS服务器
};
# 区域文件配置
zone "example.com" {
type master;
file "/etc/bind/db.example.com";
};
# 创建区域文件 (/etc/bind/db.example.com):
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2023071901 ; Serial
3600 ; Refresh
1800 ; Retry
604800 ; Expire
86400 ) ; Minimum TTL
IN NS ns1.example.com.
IN NS ns2.example.com.
IN A 192.168.1.100
ns1 IN A 192.168.1.100
ns2 IN A 192.168.1.101
www IN A 192.168.1.150
mail IN A 192.168.1.200
IN MX 10 mail.example.com.
# 检查配置启动服务
# 检查配置文件语法
sudo named-checkconf
sudo named-checkzone example.com /etc/bind/db.example.com
# 启动服务
sudo systemctl start named # 或 bind9
sudo systemctl enable named # 设置开机启动
# 防火墙配置
# 允许DNS流量 (UDP/TCP 53)
sudo ufw allow 53/tcp
sudo ufw allow 53/udp
# 测试DNS服务器(your-server-ip)
# 使用dig或nslookup测试
dig @your-server-ip example.com
nslookup example.com your-server-ip
高级配置选项
-
设置反向DNS区域 - 用于IP到域名的解析
-
配置从服务器 - 实现DNS冗余(对于生产环境,建议至少设置两个DNS服务器以实现冗)
-
设置DNSSEC - 增加DNS安全性
-
配置日志 - 用于监控和故障排除(置监控以跟踪服务器性能 )
用于公共DNS服务,确保服务器有足够的资源处理查询。
# 搭建公共DNS服务器
公共DNS服务器比搭建私有DNS要求更高,需要考虑性能、安全性和可靠性。
硬件要求
-
服务器配置:至少4核CPU,8GB内存,SSD存储
-
带宽要求:建议100Mbps以上带宽(每1000QPS约需1Mbps)
-
服务器位置:选择网络条件好的机房,建议多地域部署
网络要求
-
固定公网IP地址(至少2个不同子网)
-
确保UDP/TCP 53端口开放
软件选择
推荐使用 BIND 或 PowerDNS(本文以BIND 9为例)
安装与基础配置
# 安装与基础配置
sudo apt update
sudo apt install bind9 bind9utils bind9-doc -y
# 主配置文件 (/etc/bind/named.conf.options)
options {
directory "/var/cache/bind";
// 基本设置
listen-on { any; };
listen-on-v6 { any; };
allow-query { any; }; // 允许公共查询
// 性能优化
recursive-clients 10000; // 递归客户端数量
max-cache-size 512m; // 缓存大小
// 安全设置
allow-recursion { any; };
allow-transfer { none; }; // 禁止区域传输
// 上游服务器
forwarders {
8.8.8.8;
1.1.1.1;
};
// DNSSEC配置
dnssec-validation auto;
dnssec-enable yes;
// 防止DNS放大攻击
rate-limit {
responses-per-second 10;
window 5;
};
};
高级配置
# 配置置根区域提示文件
sudo cp /etc/bind/db.root /var/cache/bind/root.hints
# 日志配置 (/etc/bind/named.conf.logging)
logging {
channel query_log {
file "/var/log/named/query.log" versions 3 size 20m;
severity debug 3;
print-time yes;
};
channel security_log {
file "/var/log/named/security.log" versions 3 size 20m;
severity info;
print-time yes;
};
category queries { query_log; };
category security { security_log; };
};
# 创建日志目录
sudo mkdir /var/log/named
sudo chown bind:bind /var/log/named
性能优化
# 1、调整内核参数 (/etc/sysctl.conf)
# 增加UDP缓冲区
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.udp_mem = 4096 87380 16777216
# 快速回收TIME-WAIT sockets
net.ipv4.tcp_tw_reuse = 1
# 应用设置:
sudo sysctl -p
# 2、BIND性能调优
options {
// 增加线程数
minimal-responses no;
max-ncache-ttl 3600;
max-cache-ttl 86400;
// 使用多线程
coresize default;
datasize default;
stacksize default;
// 缓存优化
max-cache-size 1024m;
cleaning-interval 60;
};
安全加固
# 配置chroot环境
sudo apt install bind9-chroot
sudo systemctl restart bind9
# 启用DNSSEC
dnssec-enable yes;
dnssec-validation auto;
dnssec-lookaside auto;
# 防止滥用配置
// 限制递归查询
allow-recursion {
trusted-acls;
};
// 防止缓存投毒
avoid-v4-udp-ports { range 32768 60999; };
avoid-v6-udp-ports { range 32768 60999; };
# 部署架构建议
[负载均衡器]
/ | \
[DNS主] [DNS备1] [DNS备2] (不同机房)
全球部署建议:
至少3台服务器在不同地理位置
使用Anycast路由提高响应速度
监控与维护
# 监控与维护
sudo apt install dnstop dnsutils
# 常用监控命令
# 实时监控DNS查询
sudo dnstop -l 5 eth0
# 查看DNS统计
sudo rndc stats
# 日志分析
# 设置日志轮转 (/etc/logrotate.d/named):
/var/log/named/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 640 bind bind
sharedscripts
postrotate
/usr/sbin/rndc reconfig > /dev/null 2>&1 || true
endscript
}
测试与验证
1. 基本功能测试
dig @your-dns-ip example.com
dig +dnssec @your-dns-ip example.com
2. 性能测试
# 使用dnsperf进行压力测试
sudo apt install dnsperf
echo "example.com A" > queryfile
dnsperf -s your-dns-ip -d queryfile -c 100 -l 30
3. 安全测试
# 使用DNS测试工具
sudo apt install dnsdiag
dnseval -t A -f queryfile @your-dns-ip
上线后维护
定期更新:保持BIND版本最新
sudo apt update && sudo apt upgrade bind9
监控指标:
QPS(每秒查询量)
响应时间
错误率
缓存命中率
备份策略:
# 备份配置和区域文件
sudo tar czvf dns-backup-$(date +%F).tar.gz /etc/bind /var/cache/bind
搭建公共DNS服务器是一个持续优化的过程,需要根据实际流量和性能表现不断调整配置。建议初期从小规模开始。
809

被折叠的 条评论
为什么被折叠?



