@DNS服务器搭建配置优化-Linux
DNS服务器搭建&配置优化
一、准备工作
1. 系统要求
- Linux服务器(推荐CentOS 7+/Ubuntu 18.04+)
- root或sudo权限
- 稳定的网络连接
2. 软件选择
- BIND9(最常用的DNS服务器软件)
- dnsmasq(轻量级DNS/DHCP服务器)
- PowerDNS(功能丰富的DNS服务器)
本文以BIND9为例
二、BIND9安装
1. 安装BIND9
CentOS/RHEL:
sudo yum install -y bind bind-utils
sudo systemctl enable named
sudo systemctl start named
Ubuntu/Debian:
sudo apt-get update
sudo apt-get install -y bind9 bind9utils bind9-doc
sudo systemctl enable bind9
sudo systemctl start bind9
2. 验证安装
named -v
# 应显示BIND版本信息
三、基础配置
1. 主配置文件修改
sudo vi /etc/named.conf
修改以下内容:
options {listen-on port 53 { any; }; # 允许所有IP监听listen-on-v6 port 53 { 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";allow-query { any; }; # 允许所有查询recursion yes; # 启用递归查询dnssec-enable yes; # 启用DNSSECdnssec-validation yes; # 启用DNSSEC验证forwarders { # 设置上游DNS8.8.8.8;8.8.4.4;};// 性能优化参数max-cache-size 256M; # 最大缓存大小max-cache-ttl 3600; # 最大缓存TTLmin-cache-ttl 300; # 最小缓存TTL
};
2. 创建区域文件
正向解析区域
sudo vi /etc/named.rfc1912.zones
添加:
zone "example.com" IN {type master;file "example.com.zone";allow-update { none; };
};
反向解析区域(可选)
zone "1.168.192.in-addr.arpa" IN {type master;file "192.168.1.rev";allow-update { none; };
};
3. 创建区域数据文件
正向解析文件
sudo vi /var/named/example.com.zone
内容:
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (2023062001 ; Serial3600 ; Refresh1800 ; Retry604800 ; Expire86400 ; Minimum TTL
)IN NS ns1.example.com.IN NS ns2.example.com.IN MX 10 mail.example.com.ns1 IN A 192.168.1.10
ns2 IN A 192.168.1.11
www IN A 192.168.1.100
mail IN A 192.168.1.200
反向解析文件(可选)
sudo vi /var/named/192.168.1.rev
内容:
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (2023062001 ; Serial3600 ; Refresh1800 ; Retry604800 ; Expire86400 ; Minimum TTL
)IN NS ns1.example.com.IN NS ns2.example.com.10 IN PTR ns1.example.com.
11 IN PTR ns2.example.com.
100 IN PTR www.example.com.
200 IN PTR mail.example.com.
4. 设置文件权限
sudo chown root:named /var/named/example.com.zone
sudo chmod 640 /var/named/example.com.zone
sudo chown root:named /var/named/192.168.1.rev
sudo chmod 640 /var/named/192.168.1.rev
5. 检查配置文件语法
sudo named-checkconf
sudo named-checkzone example.com /var/named/example.com.zone
6. 重启BIND服务
sudo systemctl restart named # CentOS/RHEL
sudo systemctl restart bind9 # Ubuntu/Debian
四、DNS服务器优化配置
1. 性能优化参数
编辑/etc/named.conf
,在options部分添加:
// 性能优化参数
max-cache-size 512M; # 根据服务器内存调整
max-cache-ttl 7200; # 最大缓存时间
min-cache-ttl 300; # 最小缓存时间
max-ncache-ttl 3600; # 否定缓存最大时间// 查询限制
max-clients-per-query 10; # 每个查询的最大客户端数
max-recursion-queries 75; # 递归查询最大数量
recursive-clients 1000; # 并发递归客户端数// 响应速率限制
rate-limit {responses-per-second 10;window 5;
};
2. 启用多线程处理
options {// 启用多线程server-threads 4; # 根据CPU核心数设置listen-on port 53 { any; };...
};
3. 日志优化配置
添加日志配置:
logging {channel query_log {file "/var/log/named/query.log" versions 3 size 20m;severity info;print-time yes;print-category yes;};category queries { query_log; };channel security_log {file "/var/log/named/security.log" versions 3 size 20m;severity info;print-time yes;print-category yes;};category security { security_log; };
};
创建日志目录:
sudo mkdir /var/log/named
sudo chown named:named /var/log/named
4. 启用DNSSEC
确保/etc/named.conf
中有:
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;
5. 配置TSIG密钥(用于主从同步)
生成密钥:
sudo dnssec-keygen -a HMAC-SHA256 -b 128 -n HOST example.com
在/etc/named.conf
中添加:
key "example.com" {algorithm hmac-sha256;secret "生成的密钥内容";
};
五、主从DNS服务器配置(可选)
1. 主服务器配置
在/etc/named.conf
中修改区域定义:
zone "example.com" IN {type master;file "example.com.zone";allow-transfer { 192.168.1.11; }; # 从服务器IPalso-notify { 192.168.1.11; }; # 从服务器IP
};
2. 从服务器配置
安装BIND9后,在/etc/named.conf
中添加:
zone "example.com" IN {type slave;file "slaves/example.com.zone";masters { 192.168.1.10; }; # 主服务器IP
};
六、安全加固
1. 限制区域传输
zone "example.com" IN {type master;file "example.com.zone";allow-transfer { none; }; # 或指定IP
};
2. 禁用版本信息
options {version "Not disclosed";...
};
3. 启用响应策略区域(RPZ)
options {response-policy { zone "rpz"; };
};zone "rpz" {type master;file "/var/named/rpz.db";allow-query { localhost; };
};
4. 配置防火墙
# 允许DNS查询
sudo firewall-cmd --permanent --add-service=dns
sudo firewall-cmd --reload
七、监控与维护
1. 监控DNS服务
# 查看DNS统计信息
sudo rndc stats
# 查看DNS缓存
sudo rndc dumpdb -cache
2. 日志轮转
创建/etc/logrotate.d/named
:
/var/log/named/*.log {dailymissingokrotate 7compressdelaycompressnotifemptycreate 0640 named namedsharedscriptspostrotate/usr/bin/systemctl reload named.service > /dev/null 2>&1 || trueendscript
}
3. 定期检查
# 检查DNS解析
dig @localhost example.com
# 检查反向解析
dig -x 192.168.1.10
# 检查DNS服务器性能
dnstop -l eth0
八、故障排除
1. 常见问题解决
- 服务无法启动:检查
/var/log/messages
或journalctl -u named
- 解析失败:检查区域文件语法
named-checkzone
- 性能问题:调整缓存大小和TTL值
2. 调试命令
# 详细日志模式
sudo rndc querylog on
# 重新加载配置
sudo rndc reload
# 刷新缓存
sudo rndc flush
九、定期维护
- 定期更新BIND软件包
- 监控DNS查询日志
- 定期检查DNSSEC密钥过期时间
- 根据使用情况调整缓存大小和性能参数
SOP附录: