DNS软件
LINUX DNS软件 bind
bind:服务器
bind-lib:相关库
bind-utils:客户端
bind-chroot:安全包,将DNS相关文件放置/var/named/chroot
配置文件
BIND主程序:/usr/sbin/named
服务脚本和Unit名称:/etc/rc.d/init.d/named,/usr/lib/systemd/system/named.service
主配置文件:/etc/named.conf, /etc/named.rfc1912.zones, /etc/rndc.key
管理工具:/usr/sbin/rndc:remote name domain controller,默认与bind安装在同一主机,且只能通过127.0.0.1连接named进程,提供辅助性的管理功能;953/tcp
解析库文件:/var/named/ZONE_NAME.ZONE
注意:
(1) 一台物理服务器可同时为多个区域提供解析
(2) 必须要有根区域文件;named.ca
(3) 应该有两个(如果包括ipv6的,应该更多)实现localhost和本地回环地址的解析库
主配置文件
全局配置:options {};
日志子系统配置:logging {};
区域定义:本机能够为哪些zone进行解析,就要定义哪些zone
zone "ZONE_NAME" IN {};
注意:
任何服务程序如果期望其能够通过网络被其它主机访问,至少应该监听在一个能与外部主机通信的IP地址上
缓存名称服务器的配置:监听外部地址即可
dnssec: 建议关闭dnssec,设为no
主DNS实现
主配置文件配置:
vim /etc/named.conf
#注释掉下面两行
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
zone "ZONE_NAME" IN {
type {master|slave|hint|forward};
file "ZONE_NAME.zone";
};
主配置文件检查
named-checkconf
解析库文件语法检查
named-checkzone "example.com" /var/named/example.com.zone
配置生效
rndc reload
systemctl reload named
service named reload
创建DNS区域数据库文件
cp -p /var/named/named.localhost /var/named/example.com.zone
#编辑新增区域文件
vim /var/named/example.com.zone
$TTL 1D
@ IN SOA master admin.example.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 10.0.7.200
WWW A 10.0.7.200
AAAA ::1
#检查区域文件
[14:20:24root@lgw-linux-07named]#named-checkzone example.com /var/named/example.com.zone
zone example.com/IN: loaded serial 0
OK
编辑主配置文件增加区域文件
vim /etc/named.conf
注释下方两行
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
#编辑配置zone配置文件
vim /etc/named.rfc1912.zones
zone "example.com" IN {
type master;
file "example.com.zone";
};
#检查主配置文件
[14:28:03root@lgw-linux-07named]#named-checkconf
#启动服务
[14:30:58root@lgw-linux-07named]#systemctl restart named
[14:31:06root@lgw-linux-07named]#systemctl status named
#在客户端上测试
dig www.example.com @10.0.7.200
动态更新
可以通过远程更新区域数据库的资源记录
实现动态更新,需要在指定的zone语句块中:
Allow-update {any;};
zone "example.com" {
type master;
file "/etc/bind/db.example.com";
allow-update { 192.0.2.0/24; };
};
从DNS实现
只有一台主DNS服务器,存在单点失败的问题,可以建立主DNS服务器的备份服务器,即从服务器来实现DNS服务的容错机制
1. 应该为一台独立的名称服务器
2. 主服务器的区域解析库文件中必须有一条NS记录指向从服务器
3. 从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中
4. 主服务器得允许从服务器作区域传送
5. 主从服务器时间应该同步,可通过ntp进行
6. bind程序的版本应该保持一致;否则,应该从高,主低
格式:
zone "ZONE_NAME" IN {
type slave;
masters { MASTER_IP; };
file "slaves/ZONE_NAME.zone";
};
#主DNS配置如上
#从DNS配置,更改主配置文件,参考主DNS
增加
allow-transfer { none;};不允许其他主机进行区域传输
#编辑配置文件
vim /etc/named.rfc1912.zones
zone "example.com" IN {
type slave;
masters {10.0.7.200;};
file "slaves/example.com.slave";
};
#启动从服务器的named服务
systemctl start named
风险:任何一台机器都可以从主服务器拿取域名解析数据库,以下方式设置安全?
#编辑主配置文件
vim /etc/named.conf
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
#不允许其它主机进行区域传输
allow-transfer { none;};
如果是针对特定zone
vim /etc/named.rfc1912.zones
zone "example.com" {
type master;
file "/var/named/example.com.zone";
allow-transfer { 192.0.2.10; }; // 允许192.0.2.10服务器传输该域名
};
反向解析区域
即将IP反向解析为FQDN
区域名称:网络地址反写.in-addr.arpa.
172.16.100. --> 100.16.172.in-addr.arpa.
#定义区域
zone "ZONE_NAME" IN {
type {master|slave|forward};
file "网络地址.zone"
};
#定义区域解析库文件 注意:不需要MX,以PTR记录为主
$TTL 86400
$ORIGIN 8.168.192.in-addr.arpa.
@ IN SOA ns1.example.com. admin.example.com. (
2015042201
1H
5M
7D
1D )
IN NS ns1.example.com.
11 IN PTR ns1.example.com.
子域DNS实现
将子域委派给其它主机管理,实现分布式DNS数据库
#编辑父域DNS配置文件
#注释掉下面两行
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
#只允许从服务器进行区域传输
allow-transfer { 从服务器IP;};
dnssec-enable no;
dnssec-validation no;
#编辑zone文件
vim /etc/named.rfc1912.zones
#加上这段
zone "example.com" {
type master;
file "example.com.zone";
};
cp -p /var/named/named.localhost /var/named/example.com.zone
#如果没有-p,需要改权限。chgrp named magedu.org.zone
#编辑example.com.zone配置文件
vim /var/named/example.com.zone
$TTL 1D
@ IN SOA master admin.example.com. (
1 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
shanghai NS shanghains
master A 192.168.8.8
shanghains A 192.168.8.18
# 启动named服务
systemctl start named 第一次启动
rndc reload 加载配置文件
子域DNS
#编辑配置文件
vim /etc/named.conf
#注释掉下面两行
// listen-on port 53 { 127.0.0.1; };
// allow-query { localhost; };
allow-transfer { none;};
#编辑zone配置文件
vim /etc/named.rfc1912.zones
zone "shanghai.example.com" {
type master;
file "shanghai.example.com.zone";
};
cp -p /var/named/named.localhost /var/named/shanghai.example.com.zone
#如果没有-p,需要改权限。chgrp named example.com.zone
vim /var/named/shanghai.example.com.zone
$TTL 1D
@ IN SOA master admin.example.com. (
2019042214 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 192.168.8.18
systemctl start named #第一次启动服务
rndc reload #不是第一次启动服务
DNS转发器实现
利用DNS转发,可以将用户的DNS请求,转发至指定的DNS服务,而非默认的根DNS服务器,并将指定服务器查询的返回结果进行缓存,提高效率
注意:
1. 被转发的服务器需要能够为请求者做递归,否则转发请求不予进行
2. 在全局配置块中,关闭dnssec功能
dnssec-enable no;
dnssec-validation no;
全局转发
Options {
forward first|only;
forwarders { ip;};
};
特定区域转发
zone "ZONE_NAME" IN {
type forward;
forward first|only;
forwarders { ip;};
};
first:先转发至指定DNS服务器,如果无法解析查询请求,则本服务器再去根服务器查询
only: 先转发至指定DNS服务器,如果无法解析查询请求,则本服务器将不再去根服务器查询
DNS排查命令
dig:dig只用于测试dns系统,不会查询hosts文件进行解析
dig [-t type] name [@SERVER] [query options]
query options:
+[no]trace:跟踪解析过程 : dig +trace example.com
+[no]recurse:进行递归解析
host命令
host [-t type] name [server]
nslookup
nslookup 可以支持交互和非交互式两种方式执行
nslookup [-option] [name | -] [server]
rdnc命令
利用rndc工具可以实现管理DNS功能,监听端口tcp953
rndc COMMAND标签:named,zone,DNS,Linux,68,服务器,com,example From: https://blog.51cto.com/gavenlee/6064301
COMMAND:
status: 查看状态
reload: 重载主配置文件和区域解析库文件
reload zonename: 重载区域解析库文件
retransfer zonename: 手动启动区域传送,而不管序列号是否增加
notify zonename: 重新对区域传送发通知
reconfig: 重载主配置文件
querylog: 开启或关闭查询日志文件/var/log/message
trace: 递增debug一个级别
trace LEVEL: 指定使用的级别
notrace:将调试级别设置为 0
flush:清空DNS服务器的所有缓存记录