目录
一、Ubuntu系统
1.安装 BIND 软件包
sudo apt update
sudo apt install bind9 bind9utils bind9-doc -y
2.配置主配置文件
编辑/etc/bind/named.conf.options,添加上游 DNS 服务器
options {
directory "/var/cache/bind";
// 添加百度和阿里 DNS作为上游服务器
forwarders {
223.5.5.5;
180.76.76.76;
};
// 允许查询的客户端
allow-query { any; };
recursion yes;
};
3.创建正向区域文件
编辑/etc/bind/named.conf.local,添加区域配置:
zone "yang.com" {
type master;
file "/etc/bind/zones/yang.com";
};
4.创建区域数据文件
sudo mkdir -p /etc/bind/zones
sudo cp /etc/bind/db.local /etc/bind/zones/yang.com
编辑yang.com文件
$TTL 604800
@ IN SOA ns1.yang.com. admin.yang.com. (
3 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns1.yang.com.
@ IN A 192.168.10.161
ns1 IN A 192.168.10.161
esxi1 IN A 192.168.10.220
esxi2 IN A 192.168.10.200
区域文件基本结构
1.$TTL 指令 - 设置默认的 TTL 值 (Time-To-Live)$TTL定义了区域中所有资源记录的默认 TTL 值(以秒为单位)
604800秒等于 7 天,表示缓存服务器可以保留此记录的最长时间
2.SOA 记录 - 起始授权机构记录,定义区域的基本信息@是区域名yang.com的简写
IN表示 Internet 类记录
SOA表示起始授权机构记录
ns1.yang.com.是主 DNS 服务器的 FQDN(注意结尾的点)
admin.yang.com.是区域管理员的邮箱地址(点表示 @符号)
序列号 (Serial):区域数据版本号,更新区域时需递增
刷新时间 (Refresh):从属 DNS 服务器多久查询一次主服务器更新
重试时间 (Retry):刷新失败后多久重试
过期时间 (Expire):如果主服务器不可达,从属服务器保留数据的时间
负缓存 TTL (Negative Cache TTL):未找到记录的缓存时间
3.NS 记录 - 名称服务器记录,指定负责该区域的 DNS 服务器指定负责该区域的权威 DNS 服务器
ns1.yang.com.必须在区域内有对应的 A 记录
4.A/AAAA 记录 - 将域名映射到 IPv4/IPv6 地址@表示区域根域名yang.com
ns1扩展为ns1.yang.com
esxi1扩展为esxi1.yang.com
esxi2扩展为esxi2.yang.com
每个 A 记录将域名映射到对应的 IPv4 地址
其他常用记录类型
CNAME 记录(别名记录)
ftp IN CNAME www.example.com.
将ftp.yang.com指向www.yang.com的同一 IP 地址MX 记录(邮件交换记录)
@ IN MX 10 mail.example.com.
指定接收example.com邮件的服务器
数字10表示优先级,值越小优先级越高泛域名解析记录
* IN A 192.168.1.200 ; 让所有未单独配置的子域名都指向此IP
区域文件编辑注意事项
(1)FQDN 结尾的点:所有完全限定域名必须以点 (.) 结尾
(2)序列号管理:每次修改区域文件后,必须递增 SOA 记录中的序列号
(3)注释使用:分号 (;) 后的内容为注释,可以用来解释配置
(4)语法检查:修改后使用named-checkzone命令检查语法
(5)TTL 调整:生产环境中建议从较短的 TTL 开始,确认无误后再增加
5.检查配置语法并重启服务
sudo named-checkconf
sudo named-checkzone yang.com /etc/bind/zones/yang.com
sudo systemctl restart bind9
sudo systemctl enable bind9
二、Centos系统
#!/bin/bash
#域名
DOMAIN=yang.org
#第一条A记录,后续如果需要再继续添加,编辑区域数据文件/var/named/$DOMAIN.zone
HOST=www
HOST_IP=10.0.0.100
CPUS=`lscpu |awk '/^CPU\(s\)/{print $2}'`
. /etc/os-release
color () {
RES_COL=60
MOVE_TO_COL="echo -en \\033[${RES_COL}G"
SETCOLOR_SUCCESS="echo -en \\033[1;32m"
SETCOLOR_FAILURE="echo -en \\033[1;31m"
SETCOLOR_WARNING="echo -en \\033[1;33m"
SETCOLOR_NORMAL="echo -en \E[0m"
echo -n "$1" && $MOVE_TO_COL
echo -n "["
if [ $2 = "success" -o $2 = "0" ] ;then
${SETCOLOR_SUCCESS}
echo -n $" OK "
elif [ $2 = "failure" -o $2 = "1" ] ;then
${SETCOLOR_FAILURE}
echo -n $"FAILED"
else
${SETCOLOR_WARNING}
echo -n $"WARNING"
fi
${SETCOLOR_NORMAL}
echo -n "]"
echo
}
install_dns () {
if [ $ID = 'centos' -o $ID = 'rocky' ];then
yum install -y bind bind-utils
elif [ $ID = 'ubuntu' ];then
color "不支持Ubuntu操作系统,退出!" 1
exit
#apt update
#apt install -y bind9 bind9-utils
else
color "不支持此操作系统,退出!" 1
exit
fi
}
config_dns () {
sed -i -e '/listen-on/s/127.0.0.1/any/' -e '/allow-query/s/localhost/any/' /etc/named.conf
cat >> /etc/named.rfc1912.zones <<EOF
zone "$DOMAIN" IN {
type master;
file "$DOMAIN.zone";
};
EOF
cat > /var/named/$DOMAIN.zone <<EOF
\$TTL 1D
@ IN SOA master admin (
1 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A `hostname -I`
$HOST A $HOST_IP
EOF
chmod 640 /var/named/$DOMAIN.zone
chgrp named /var/named/$DOMAIN.zone
}
start_service () {
systemctl enable --now named
systemctl is-active named.service
if [ $? -eq 0 ] ;then
color "DNS 服务安装成功!" 0
else
color "DNS 服务安装失败!" 1
exit 1
fi
}
install_dns
config_dns
start_service