编辑
/etc/resolv.conf
,添加 nameserver
行(如 8.8.8.Linux配置DNS详细教程
DNS服务基础概念
DNS(Domain Name System)是互联网的核心服务之一,负责将域名解析为IP地址,在Linux系统中配置DNS服务器需要理解以下核心概念:
术语 | 说明 |
---|---|
正向解析 | 将域名转换为IP地址(如www.example.com → 192.168.1.100) |
反向解析 | 将IP地址转换为域名(如192.168.1.100 → www.example.com) |
区域文件 | 存储域名与IP映射关系的文件 |
递归查询 | DNS服务器逐级向上查询直到获取结果 |
迭代查询 | DNS服务器直接返回上级服务器地址,由客户端继续查询 |
选择DNS服务软件
Linux系统常用的DNS服务软件对比:
软件 | 特点 |
---|---|
BIND | 最主流的DNS服务器软件,功能强大,支持视图、TSIG等高级特性 |
Dnsmasq | 轻量级DNS缓存服务器,适合小型网络,集成DHCP功能 |
Unbound | 强调安全和性能的现代DNS解析器,配置简单 |
pdns | 高性能DNS代理,支持多种后端,适合高并发环境 |
本教程以BIND 9为例进行讲解(CentOS/RHEL/Ubuntu通用)
安装BIND服务
1 不同系统的安装命令
# Ubuntu/Debian系统 sudo apt update sudo apt install bind9 bind9utils bind9doc y # CentOS/RHEL系统 sudo yum install bind bindutils y
2 检查安装状态
# 查看版本 named v # 预期输出示例:BIND 9.16.1 (Extended Support Version)
配置文件结构分析
BIND主要配置文件路径:
文件名 | 作用 |
---|---|
/etc/named.conf | 主配置文件 |
/etc/named.rfc1912.zones | 默认区域声明文件(某些系统) |
/var/named/ | 运行时数据目录(chroot环境) |
/etc/rndc.conf | 远程管理配置文件 |
/etc/rndc.key | 远程管理密钥文件 |
正向解析配置实战
1 编辑主配置文件
sudo vi /etc/named.conf
添加以下配置(示例):
options { directory "/var/named"; // 数据文件存放目录 dumpfile "/var/named/data/cache_dump.db"; statisticsfile "/var/named/data/named_stats.txt"; recursion yes; // 启用递归查询 allowquery { any; } // 允许所有客户端查询 };
2 创建正向区域文件
sudo vi /var/named/example.com.zone
$TTL 86400 @ IN SOA ns1.example.com. admin.example.com. ( 2023100101 ; Serial 3600 ; Refresh 1800 ; Retry 1209600 ; Expire 86400 ) ; Minimum TTL IN NS ns1.example.com. IN NS ns2.example.com. ns1 IN A 192.168.1.100 ns2 IN A 192.168.1.101 www IN A 192.168.1.100 @ IN A 192.168.1.100 ; @表示根域
3 声明区域文件
在named.conf中添加:
zone "example.com" { type master; file "example.com.zone"; allowtransfer { 192.168.1.101; } # 允许同步的辅助DNS服务器 };
反向解析配置方法
1 创建反向区域文件
sudo vi /var/named/1.168.192.zone
$TTL 86400 @ IN SOA ns1.example.com. admin.example.com. ( 2023100101 ; Serial 3600 ; Refresh 1800 ; Retry 1209600 ; Expire 86400 ) ; Minimum TTL IN NS ns1.example.com. IN NS ns2.example.com. 100 IN PTR ns1.example.com. 101 IN PTR ns2.example.com. 102 IN PTR www.example.com.
2 声明反向区域
在named.conf中添加:
zone "1.168.192.inaddr.arpa" { type master; file "1.168.192.zone"; allowtransfer { 192.168.1.101; } };
安全加固配置
1 限制递归查询范围
修改named.conf中的options:
options { ... allowrecursion { 192.168.0.0/16; } # 仅允许内网递归查询 ... }
2 配置访问控制列表(ACL)
acl "trusted" { address 192.168.1.0/24; port 53; }; acl "untrusted" { any; }; zone "example.com" { ... allowtransfer { trusted; ); allowquery { trusted; untrusted; ); };
3 启用TSIG签名(高级安全)
include "/etc/named/tsig.key";
创建密钥文件:
sudo namedcompilekey K /etc/named/tsig.key o /etc/named/tsig.key f KSK exampleksk. sudo namedcompilekey K /etc/named/tsig.key o /etc/named/tsig.key f ZSK examplezsk.
服务控制与验证
1 启动服务并设置开机自启
# 检查配置文件语法 sudo namedcheckconf /etc/named.conf sudo namedcheckzone example.com.zone /var/named/example.com.zone # 启动服务 sudo systemctl start named sudo systemctl enable named
2 验证配置有效性
# 检查服务状态 systemctl status named # 使用dig命令测试解析 dig @localhost example.com dig @localhost x 192.168.1.100 # 测试反向解析
3 日志分析(/var/log/messages)
典型错误提示:
file not found
:区域文件路径错误permission denied
:目录权限不正确(需chown named:named /var/named)signature verification failed
:TSIG配置错误
辅助DNS服务器配置(从服务器)
1 主服务器配置调整
在主服务器的named.conf中添加:
zone "example.com" { ... notify yes; # 启用通知机制 alsonotify { 192.168.1.101; ); # 从服务器地址 };
2 从服务器配置步骤
# 创建空区域文件框架 sudo vi /var/named/example.com.zone # 添加如下内容: $TTL 86400 @ IN SOA ns1.example.com. admin.example.com. ( 2023100101 ; Serial号需小于主服务器初始值+2以上 ) ; Minimum TTL)