DNS(Domain Name System)是将域名转换为IP地址的服务,是互联网基础设施的重要组成部分。在Linux上,最常用的DNS服务器软件是BIND(Berkeley Internet Name Domain)。
sudo apt update
sudo apt install bind9 bind9utils bind9-doc
sudo yum install bind bind-utils
sudo systemctl start named # CentOS/RHEL
sudo systemctl start bind9 # Ubuntu/Debian
sudo systemctl enable named # 设置开机自启
sudo systemctl enable bind9
BIND的主要配置文件位于:
- /etc/named.conf
- 主配置文件
- /etc/bind/named.conf
- Ubuntu/Debian上的主配置文件
- /var/named/
- 区域文件目录(CentOS/RHEL)
- /etc/bind/
- 区域文件目录(Ubuntu/Debian)
sudo nano /etc/named.conf
添加或修改以下内容:
options {
listen-on port 53 { any; };
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;
dnssec-validation yes;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.iscdlv.key";
managed-keys-directory "/var/named/dynamic";
};
在named.conf
中添加:
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.zone";
allow-update { none; };
};
创建正向解析文件/var/named/example.com.zone
:
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2021071001 ;Serial
3600 ;Refresh
1800 ;Retry
604800 ;Expire
86400 ;Minimum TTL
)
@ IN NS ns1.example.com.
@ IN A 192.168.1.10
ns1 IN A 192.168.1.10
www IN A 192.168.1.10
mail IN A 192.168.1.20
创建反向解析文件/var/named/192.168.1.zone
:
$TTL 86400
@ IN SOA ns1.example.com. admin.example.com. (
2021071001 ;Serial
3600 ;Refresh
1800 ;Retry
604800 ;Expire
86400 ;Minimum TTL
)
@ IN NS ns1.example.com.
10 IN PTR ns1.example.com.
10 IN PTR www.example.com.
20 IN PTR mail.example.com.
sudo named-checkconf
sudo named-checkzone example.com /var/named/example.com.zone
sudo named-checkzone 1.168.192.in-addr.arpa /var/named/192.168.1.zone
sudo systemctl restart named
在主DNS服务器的named.conf
中添加:
zone "example.com" IN {
type master;
file "example.com.zone";
allow-transfer { 192.168.1.20; }; # 从服务器IP
};
在从服务器上配置:
zone "example.com" IN {
type slave;
file "slaves/example.com.zone";
masters { 192.168.1.10; }; # 主服务器IP
};
nslookup example.com
dig example.com
host example.com
sudo systemctl status named
sudo rndc status
sudo rndc reload
sudo rndc flush
options
中设置allow-query
和allow-recursion
allow-transfer
为noneBIND日志默认记录在系统日志中(/var/log/messages
或/var/log/syslog
),可以通过配置named.conf
中的logging部分来定制日志:
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
channel query_log {
file "/var/log/named/query.log";
severity info;
};
category queries { query_log; };
};
systemctl status named
named-checkconf
named-checkzone
journalctl -u named
或检查/var/log/messages
dig
、nslookup
或host
命令通过以上配置和管理方法,您可以在Linux系统上建立和维护一个功能完善的DNS服务器。