Linux DNS配置Bind9
BIND9简介
(一)什么是BIND
BIND是Berkeley Internet Name Domain Service的简写,它是一款实现DNS服务器的开放源码软件,BIND已经成为世界上使用最为广泛的DNS服务器软件,目前Internet上半数以上的DNS服务器都是用BIND来架设的,已经成为DNS中事实上的标准。
(二)BIND版本发展历程
- BIND4版本:最初在1980年代初在加州大学伯克利分校作为研究生项目在美国国防高级研究项目管理局(DARPA)的资助下编写,到4.8.3版本由加州大学伯克利分校的计算机系统研究小组(CSRG)维护。
- BIND8版本:1994年由Rick Adams、Paul Vixie和Carl Malamud创立的Internet Software Consortium, Inc.(ISC)专门为其开发和维护提供场所。
- BIND9版本:于2000年9月发布,几乎对底层BIND架构的所有方面进行了重大改写。
- BIND10版本:2009 2014年期间进行开发,ISC开始尝试使用BIND10从头开始重写BIND,旨在替代和改进BIND9,2014年ISC结束了其开发,转而重新专注于投资BIND9。
(三)BIND的主要版本类型
BIND有四种主要的版本:稳定版、开发版、扩展支持(ESV)和订阅版,如果更喜欢GUI管理界面,可以考虑基于BIND的商业产品。
安装BIND9
(一)在不同Linux发行版下的安装命令
- Debian/Ubuntu系列:
aptget install bind9 bind9utils
- CentOS/RHEL系列:
dnf install y bind bindutils
- Fedora系列:
dnf install bind bindutils y
(二)安装后的目录结构及文件说明
文件或目录 | 说明 |
---|---|
/etc/bind/named.conf | 主配置文件,用于定义全局选项、区域等基本配置信息 |
/etc/bind/named.conf.options | 包含BIND服务器的全局选项配置,如服务器的全局参数设置、DNS转发配置、安全选项、日志设置等 |
/etc/bind/named.conf.local | 用于配置本地域名的区域文件和相关的域名解析设置,可指定本地区域的域名、对应的区域文件路径、域名服务器信息等 |
/var/named/ | 默认的区域文件存放目录,存储各个域的正向和反向解析区域文件 |
配置BIND9
(一)修改全局选项配置文件(named.conf.options)
常用配置选项
- listenon:指定BIND监听的IP地址,
listenon port 53 { any; };
表示监听所有网络接口上的53端口;也可以指定具体的IP地址,如listenon port 53 { 192.168.1.1; };
只监听该IP地址上的DNS请求。 - allowquery:定义允许进行查询的客户端地址范围,例如
allowquery { localhost; 192.168.1.0/24; };
表示只允许本地主机和192.168.1.0/24网段的主机进行查询。 - forwarders:当本地DNS服务器无法解析域名时,将查询转发给指定的DNS服务器,例如
forwarders { 8.8.8.8; 114.114.114.114; };
将非本域且缓存中无法找到的域名查询转发到谷歌和国内常用的DNS服务器上。 - recursion:是否允许递归查询,
recursion yes;
表示允许递归查询,即当本地服务器无法解析域名时,会向其他DNS服务器进行递归查询以获取结果。
示例配置
options { directory "/var/named"; dumpfile "/var/dump/named_dump.db"; statisticsfile "/var/named/named_stats.txt"; recursion yes; allowquery { any; }; forwarders { 8.8.8.8; 114.114.114.114; }; dnssecvalidation auto; authnxdomain no; # conform to RFC1035 listenon { any; }; listenonv6 { any; }; };
(二)配置本地域名解析(named.conf.local)
添加正向解析区域
zone "example.com" { type master; file "/var/named/db.example.com"; };
上述配置定义了一个名为example.com
的正向解析区域,类型为master
表示这是主DNS服务器,区域文件为/var/named/db.example.com
。
添加反向解析区域(可选)
zone "1.168.192.inaddr.arpa" { type master; file "/var/named/db.1.168.192"; };
此配置定义了一个反向解析区域,用于将IP地址转换为域名。
(三)创建区域文件
正向区域文件(如db.example.com)
$TTL 604800 @ IN SOA example.com. root.example.com. ( 2024062901 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS ns1.example.com. @ IN NS ns2.example.com. ns1 IN A 192.168.1.1 ns2 IN A 192.168.1.2 www IN A 192.168.1.100 mail IN MX 10 mailserver.example.com.
- $TTL:定义了默认的生存时间(Time to Live),单位为秒,这里设置为604800秒(7天)。
- SOA记录:起始授权记录,宣告了namespace使用哪个nameserver的权威信息,包括主名称服务器(
ns1.example.com
)、管理员邮箱(root.example.com
)、序列号(每次修改区域文件后需要递增)、刷新时间、重试时间、过期时间和负缓存TTL。 - NS记录:名称服务器记录,指定了权威名称服务器,如
ns1.example.com
和ns2.example.com
。 - A记录:将域名解析为IP地址,如
ns1
对应的IP地址为168.1.1
。 - MX记录:邮件交换记录,用于指定邮件服务器的优先级和地址,如
mail
的MX记录指向mailserver.example.com
,优先级为10。
反向区域文件(如db.1.168.192)
$TTL 604800 @ IN SOA ns1.example.com. root.example.com. ( 2024062901 ; Serial 604800 ; Refresh 86400 ; Retry 2419200 ; Expire 604800 ) ; Negative Cache TTL ; @ IN NS ns1.example.com. @ IN NS ns2.example.com. 1 IN PTR ns1.example.com. 2 IN PTR ns2.example.com. 100 IN PTR www.example.com.
- PTR记录:用于反向查询,将IP地址指向域名,如IP地址
168.1.100
对应的域名为www.example.com
。
启动与管理BIND9服务
(一)启动与停止服务
- 启动服务:
systemctl start named
- 停止服务:
systemctl stop named
- 重启服务:
systemctl restart named
- 查看服务状态:
systemctl status named
(二)防火墙设置
如果系统启用了防火墙,需要允许DNS服务通过防火墙,以firewalld为例:
firewallcmd permanent addservice=dns firewallcmd reload
(三)检查配置文件语法
在重启服务之前,务必检查配置文件的语法是否正确,可以使用以下命令:
namedcheckconf namedcheckzone example.com /var/named/db.example.com
如果配置文件存在语法错误,需要及时修正,否则服务可能无法正常启动。
测试DNS配置
(一)使用dig命令进行测试
dig
命令是一个强大的DNS查询工具,可以用于测试DNS服务器的配置是否正确,查询www.example.com
的A记录:
dig www.example.com +short
如果配置正确,将返回www.example.com
对应的IP地址。
(二)使用nslookup命令进行测试
nslookup
命令也可用于测试DNS解析,进入交互模式后,输入要查询的域名:
nslookup www.example.com
它将显示域名解析的结果,包括IP地址和所使用的DNS服务器等信息。
相关问题与解答
问题1:为什么修改了区域文件后,DNS解析结果没有立即生效?
答:这是因为DNS服务器在启动时会将区域文件的内容加载到内存中,并在运行时使用内存中的缓存数据进行解析,当修改了区域文件后,需要重启或重新加载DNS服务,才能使新的配置生效,即使重新加载了服务,由于DNS的缓存机制,客户端可能会继续使用旧的缓存数据进行解析,直到缓存过期,可以通过在客户端清除DNS缓存或等待一段时间让缓存自动过期来解决,在Windows系统中,可以使用ipconfig /flushdns
命令清除DNS缓存;在Linux系统中,可以重启网络服务或使用sudo systemdresolve flushcaches
命令(具体命令可能因发行版而异),确保在修改区域文件时,正确增加了SOA记录中的序列号,以便DNS服务器能够识别到区域文件的更新并重新加载。
问题2:如何提高BIND9的安全性?
答:可以从以下几个方面提高BIND9的安全性:
- 限制访问:通过
allowquery
指令限制只有特定的IP地址或网段可以查询DNS服务器,减少被恶意攻击的风险,只允许内网的特定服务器进行查询,可以将allowquery
设置为内网的IP地址范围。 - 禁用不必要的功能:如果不需要进行递归查询,可以将
recursion
设置为no
,避免DNS服务器成为递归查询的中转站,降低被利用进行DDoS攻击的风险,谨慎使用forwarders
配置,确保只将查询转发给可信赖的DNS服务器。 - 配置访问控制列表(ACL):使用ACL可以更灵活地定义允许或拒绝访问的IP地址范围,可以创建一个ACL来允许特定的客户端进行区域传输(
allowtransfer
),防止未经授权的客户端获取区域文件的信息。 - 保护区域文件:确保区域文件的权限设置正确,只有root用户或特定的用户组可以读取和写入区域文件,可以使用
chown
和chgrp
命令设置文件的所有者和所属组,使用chmod
命令设置文件的权限,将区域文件的所有者设置为named
用户,所属组设置为named
组,权限设置为644
(所有者可读写,所属组可读,其他用户可读)。 - 启用DNSSEC:DNSSEC(DNS Security Extensions)是一种用于验证DNS数据真实性和完整性的技术,通过配置DNSSEC,可以防止DNS数据被篡改和伪造,提高DNS的安全性,可以在BIND9的配置中启用DNSSEC功能,并配置相关的密钥和签名策略,配置DNSSEC相对复杂,需要仔细按照
来源互联网整合,作者:小编,如若转载,请注明出处:https://www.aiboce.com/ask/218525.html