当前位置 : 主页 > 操作系统 > centos >

68、Linux DNS实现

来源:互联网 收集:自由互联 发布时间:2023-08-21
DNS软件 LINUX DNS软件 bind bind:服务器 bind-lib:相关库 bind-utils:客户端 bind-chroot:安全包,将DNS相关文件放置/var/named/chroot 配置文件 BIND主程序:/usr/sbin/named 服务脚本和Unit名称:/etc/rc.d/i
DNS软件

LINUX DNS软件 bind

bind:服务器

bind-lib:相关库

bind-utils:客户端

bind-chroot:安全包,将DNS相关文件放置/var/named/chroot

68、Linux DNS实现_DNS

68、Linux DNS实现_DNS_02

68、Linux DNS实现_DNS_03

配置文件

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

68、Linux DNS实现_配置文件_04

68、Linux DNS实现_配置文件_05

主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";
};

68、Linux DNS实现_配置文件_06

主配置文件检查

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

68、Linux DNS实现_配置文件_07

68、Linux DNS实现_DNS_08

68、Linux DNS实现_DNS_09

68、Linux DNS实现_配置文件_10

68、Linux DNS实现_DNS_11

动态更新

可以通过远程更新区域数据库的资源记录

实现动态更新,需要在指定的zone语句块中:

Allow-update {any;};

zone "example.com" {
type master;
file "/etc/bind/db.example.com";
allow-update { 192.0.2.0/24; };
};

68、Linux DNS实现_DNS_12

从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

68、Linux DNS实现_配置文件_13

68、Linux DNS实现_配置文件_14

68、Linux DNS实现_配置文件_15

风险:任何一台机器都可以从主服务器拿取域名解析数据库,以下方式设置安全?

#编辑主配置文件
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:进行递归解析


68、Linux DNS实现_配置文件_16

68、Linux DNS实现_DNS_17

68、Linux DNS实现_配置文件_18

host命令

host [-t type] name [server]

68、Linux DNS实现_配置文件_19

nslookup

nslookup 可以支持交互和非交互式两种方式执行

nslookup [-option] [name | -] [server]

rdnc命令

利用rndc工具可以实现管理DNS功能,监听端口tcp953

rndc COMMAND
COMMAND:
status: 查看状态
reload: 重载主配置文件和区域解析库文件
reload zonename: 重载区域解析库文件
retransfer zonename: 手动启动区域传送,而不管序列号是否增加
notify zonename: 重新对区域传送发通知
reconfig: 重载主配置文件
querylog: 开启或关闭查询日志文件/var/log/message
trace: 递增debug一个级别
trace LEVEL: 指定使用的级别
notrace:将调试级别设置为 0
flush:清空DNS服务器的所有缓存记录
网友评论