Linux环境搭建DNS
DNS服务器的安装及相关配置:
DNS服务器的安装:
BIND 简介:全称为Berkeley Internet Name Domain(伯克利因特网名称域系统).BIND 主要有三个版本:BIND4、BIND8、BIND9.
BIND8 融合了许多提高效率、稳定性和安全性的技术,而BIND9 增加了一些超前的理念:IPv6支持、密钥加密、多处理器支持、线程安全操作、增量区传送等等.
yum -y install bind bind-chroot bind-utils
bind —> #该包为DNS服务的主程序包
bind-chroot —> #该包提高安全性
bind-chroot是bind的一个功能包,使bind可以在一个chroot的模式下运行.
也就是说,bind运行时的/(根)目录,并不是系统真正的/(根)目录,
只是系统中的一个子目录.这样做的目的是为了提高安全性.
因为在chroot模式下,bind只可以方位这个子目录的范围.
而不能进入这个子目录外其他的地方.
bind-utils —> #该包为客户端工具,默认安装,用于搜索余名指令
DNS服务器的使用:
/etc/init.d/named
或
service named
#
chkconfig add named #添加named开机启动项
chkconfig named on #设置named开机自启动
chkconfig --list named #查看named开机启动状态
DNS服务器监听端口:
vim /etc/services
PORT: udp/tcp 53 —> 客户端查询
PORT: udp/tcp 953 —> 主从服务器同步
DNS服务器配置文件:
rpm -ql bind
/etc/named.conf —> 核心配置文件
没有安装bind-chroot情况下,可以备份配置文件后,直接修改/etc/name.conf.
(推荐)安装了bind-chroot情况下,直接运行
/etc/init.d/named start
后,执行mount命令,在对/var/named/chroot/etc/named.conf 进行修改
----------------- start and mount log -------------------
[root@xiaogan120 ~]# /etc/init.d/named start
Generating /etc/rndc.key: [ OK ]
Starting named: [ OK ]
[root@xiaogan120 ~]# mount
/dev/sda2 on / type ext4 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
/dev/sda1 on /boot type ext4 (rw)
/dev/sda5 on /var type ext4 (rw)
/dev/sr0 on /mnt type iso9660 (ro)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
/etc/named on /var/named/chroot/etc/named type none (rw,bind)
/var/named on /var/named/chroot/var/named type none (rw,bind)
/etc/named.conf on /var/named/chroot/etc/named.conf type none (rw,bind)
/etc/named.rfc1912.zones on /var/named/chroot/etc/named.rfc1912.zones type none (rw,bind)
/etc/rndc.key on /var/named/chroot/etc/rndc.key type none (rw,bind)
/usr/lib64/bind on /var/named/chroot/usr/lib64/bind type none (rw,bind)
/etc/named.iscdlv.key on /var/named/chroot/etc/named.iscdlv.key type none (rw,bind)
/etc/named.root.key on /var/named/chroot/etc/named.root.key type none (rw,bind)
[root@xiaogan120 ~]#
---------------------- END ------------------------
配置文件详解:
vim /var/named/chroot/etc/named.conf #启动服务后,尽量使用这个路径.
options :对全局生效,定义了监听地址和端口,目录,临时目录,状态目录等配置信息
logging : 日志信息
zone : 针对某个区域生效
重点说一下type参数:
type 字段指定区域的类型,对于区域的管理至关重要,一共分为六种:
- Master:
主DNS 服务器:拥有区域数据文件,并对此区域提供管理数据
- Slave:
辅助DNS 服务器:拥有主DNS 服务器的区域数据文件的副本,辅助DNS 服务器会从主DNS服务器同步所有区域数据.
- Stub:
stub 区域和slave 类似,但其只复制主DNS 服务器上的NS 记录而不像辅助DNS 服务器会复制所有区域数据.
- Forward:
一个forward zone 是每个域的配置转发的主要部分.一个zone 语句中的type forward可以包括一个forward 和/或forwarders 子句,它会在区域名称给定的域中查询.如果没有forwarders 语句或者forwarders 是空表,那么这个域就不会有转发,消除了options 语句中有关转发的配置.
- Hint:根域名服务器的初始化组指定使用线索区域hint zone,当服务器启动时,它使用根线索来查找根域名服务器,并找到最近的根域名服务器列表.
----------------- /var/named/chroot/etc/named.conf -------------------
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
// 在/usr/share/doc/bind*/sample/ 文件夹中可查卡named配置案例
options {
listen-on port 53 { any; }; #监听地址,和端口 IPV4
listen-on-v6 port 53 { any; }; #监听地址,和端口 IPV6
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; }; #允许解析的IP地址
recursion yes; # 开启递归查询
dnssec-enable yes; #开启加密
dnssec-validation yes; #在递归查询服务器上开启DNSSEC验证
/* Path to ISC DLV key */
bindkeys-file “/etc/named.iscdlv.key”; #isc dlv key 的地址
managed-keys-directory “/var/named/dynamic”; #key的保存目录
};
logging { #日志
channel default_debug {file "data/named.run";severity dynamic;};
};
zone “.” IN {
type hint;
file “named.ca”;
};
include “/etc/named.rfc1912.zones”;
include “/etc/named.root.key”;
----------------- END -------------------
实验手册:
实验环境:
Server: xiaogan64 ( CentOS6.8 ) IP: 192.168.31.64 ( eth0 )
Client: xiaogan63 ( CentOS6.8 ) IP: 192.168.31.63 ( eth0 )
Client端:
配置网卡选择vmnet6模式,ip地址 192.168.64.63
网关 192.168.64.1(server eth1 IPAddr)
Server端:
配置eth0 选择桥接模式,IP 192.168.31.64
配置eth1 选择vmnet6模式,IP 192.168.64.1
安装DNS服务
yum -y install bind bind-chroot bind-utils
启动bind服务
/etc/init.d/named start
service named start
挂载文件系统
mount
wps9362.tmp
添加开机启动项及相关设置
chkconfig --list named
chkconfig add named
chkconfig named on
chkconfig named off
- 实战:配置DNS服务器解析
修改配置文件:
vim /var/named/chroot/etc/named.conf
修改options如下:
10 options {
11 listen-on port 53 { any; }; # 监听任意IPV4地址53号端口
12 listen-on-v6 port 53 { any; }; #IPV6 同上
13 directory “/var/named”;
14 dump-file “/var/named/data/cache_dump.db”;
15 statistics-file “/var/named/data/named_stats.txt”;
16 memstatistics-file “/var/named/data/named_mem_stats.txt”;
17 allow-query { any; }; # 允许任何地址通过
18 recursion yes; # 默认,支持递归查询
19
20 dnssec-enable yes;
21 dnssec-validation yes;
22 dnssec-lookaside auto; # 添加这一行
23 /* Path to ISC DLV key */
24 bindkeys-file “/etc/named.iscdlv.key”;
25
26 managed-keys-directory “/var/named/dynamic”;
27 };
添加zone如下:
41 zone “xiaogan.cn” IN { # 指定区域名为 xiaogan.cn
42 type master; # 指定工作模式 为主dns服务器
43 file “xiaogan.cn.zone”; # 指定配置文件为 xiaogan.cn.zone
44 };
:wq保存退出!
建立zone配置文件 xiaogan.cn.zone
cd /var/named/chroot/var/named
cp -a named.localhost xiaogan.cn.zone
在拷贝配置文件的时候,尽量使用-a选项 (拷贝所有属性)
不然,有时候,你都不知道怎么回事,什么都对了,就是实验不成功!!!我就是因为这个问题纠结了好几天!!!
ls -l xiaogan.cn.zone
-rw-r----- 1 root named 289 Oct 12 20:56 /var/named/chroot/var/named/xiaogan.cn.zone
vim xiaogan.cn.zone
修改如下: 配置信息 ; # 注释信息
1 $TTL 1D
设置有效地址解析记录的默认缓存时间,默认为1天也就是1D。
2 xiaogan.cn. IN SOA dns.xiaogan.cn. root.xiaogan.cn. (
起始授权记录SOA 定义了域的全局参数,进行整个域管理设置,一个区域文件只允许存在唯一的SOA记录
原来的@表示当前的域xiaogan.cn.,为方便大家记忆,我们这里,直接写成xiaogan.cn.
设置SOA记录为:dns.xuegod.cn.
在此配置文件中写域名时,都把根. 也要写上。
域管理邮箱root.xuegod.cn.0由于@有其他含义,所以用“.”代替@。
3 0 ; serial
更新序列号,用于标示数据库的变换,可以在10位以内,如果存在辅助DNS区域,建议每次更新完数据库,手动加1.
4 1D ; refresh
刷新时间,从域名服务器更新该地址数据库文件的间隔时间,默认为1天
5 1H ; retry
重试延时,从域名服务器更新地址数据库失败以后,等待多长时间,默认为为1小时
6 1W ; expire
到期,失效时间,超过该时间仍无法更新地址数据库,则不再尝试,默认为一周
7 3H ) ; minimum
设置无效地址解析记录(该数据库中不存在的地址)默认缓存时间。设置无效记录,最少缓存时间为3小时
8 xiaogan.cn. NS dns.xiaogan.cn.
域名服务器记录,指定该域名xiaogan.cn由dns.xiaogan.cn进行分析,每个区在区根处至少包含一个NS记录.
9 dns.xiaogan.cn. A 192.168.31.1
把FQDN(完全合格域名标识)映射到IP地址
即 把 dns.xiaogan.cn 映射到 192.168.64.1 位置
10 www.xiaogan.cn. A 192.168.31.1
同上
11 www2.xiaogan.cn. CNAME www.xiaogan.cn.
定义别名 www.xiaogan.cn 的别名为 www2.xiaogan.cn
wps9373.tmp
NS @ ;域名服务器记录,用于设置当前域的DNS服务器的域名地址,
A 127.0.0.1 ; 设置域名服务器的A记录,地址为ipv4的地址127.0.0.1,可以设置成192.168.100.102
AAAA ::1 ; 设置域名服务器的A记录,地址为ipv6的地址。
保存退出,并重启named服务
/etc/init.d/named restart
客户端:修改DNS
vim /etc/resolv.conf
nameserver 192.168.31.64
为了避免不必要的误解,我们同时也修改了网卡配置文件(因为计算机的DNS可以在这两个文件中定义
/etc/reslove.conf
/etc/sysconfig/network-scripts/ifcfg-eth0)
ping www.xiaogan.cn
ping www2.xiaogan.cn
wps9374.tmp
- 实战:使用DNS支持递归查询.
vim /var/named/chroot/etc/named.conf
20 # dnssec-enable yes;
21 # dnssec-validation yes;
22 # dnssec-lookaside auto;
但是要把这三条内容注释了,其它内容不用改,这样客户端才能通过这个DNS进行递归查询。把dns加密通讯功能关闭,才可以和根服务器时行迭代查询。
测试:
ping www.baidu.com
时好,时坏,我也不知道怎么回事,更新一下时间就又好了,好神奇!!!
三、搭建DNS转发服务器
家庭路由器就是一个典型的转发服务器
注意,开启转发,需要保证时间一致!!!
ntpdate time.windows.com
1、vim /var/named/chroot/etc/named.conf
改:
把上面添加的
zone "xuegod.cn"IN{
type master;file "xuegod.cn.zone";
};
这三行内容注释或者删除,再添加两行内容:
forward only ; //仅执行转发操作 ,only:仅转发;first:先查找本地zone,再转发
forwarders { 8.8.8.8; }; //指定转发查询请求的DNS服务器列表
即:
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;#dnssec-lookaside auto;forward only ; //仅执行转发操作 ,only:仅转发;first:先查找本地zone,再转发forwarders { 8.8.8.8; }; //指定转发查询请求的DNS服务器列表bindkeys-file "/etc/named.iscdlv.key";
};
四、搭建DNS主从服务器
1、搭建一个主DNS服务器A。配置内容如下:
[root@localhost etc]# vim named.conf
#dnssec-enable yes;#dnssec-validation yes;
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
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;#dnssec-lookaside auto;/* Path to ISC DLV key */bindkeys-file "/etc/named.iscdlv.key";
};
logging {
channel default_debug {file "data/named.run";severity dynamic;};
}
zone “.” IN {
type hint;file "named.ca";
};
zone “xuegod.cn” IN {
type master;file "xuegod.cn.zone";allow-transfer { 192.168.31.0/24; };
#指定允许哪个网段的从DNS服务器,可以同步主DNS服务器zone文件,不写默认为所有。
};
include “/etc/named.rfc1912.zones”;
2、从DNS服务器的配置
##主从时间一定要保持一致
安装程序:
yum install bind bind-chroot bind-utils -y
[root@xuegod64 Packages]# service named restart
Stopping named: [ OK ]
Starting named: [ OK ]
[root@localhost etc]# vim 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;bindkeys-file "/etc/named.iscdlv.key";
};
logging {
channel default_debug {file "data/named.run";severity dynamic;};
};
zone “.” IN {
type hint;file "named.ca";
};
zone “xuegod.cn” IN {
type slave;file "slaves/xuegod.cn.zone.file";masters { 192.168.31.64; };
};
include “/etc/named.rfc1912.zones”;
注:这样从DNS服务器就可以从主DNS服务器上获取DNS解析记录信息了。写时注意slave slaves master 单词的书写,有的加s有的不加
重启从DNS服务器会在:/var/named/chroot/var/named/slaves文件夹下自动创建一个文件xuegod.cn.zone.file 这个文件是从DNS服务器从主DNS服务器上获取的数据这样随便一个DNS就可以获取主DNS服务器的解析记录,不安全,文章的后面会讲如何进行主从认证。
注:主DNS记录中应该有两NS记录,一条是主DNS的NS记录,一条是从DNS服务器的域名记录。
测试:
service named restart
ls /var/named/chroot/var/named/slaves/ #看到这个文件,说明成功了
xuegod.cn.zone.file
五、zone文件中的其它记录信息。 通过DNS做负载均衡
编辑主DNS服务器上的配置文件:
cd /var/named/chroot/var/named
[root@localhost named]# vim xuegod.cn.zone
cat /var/named/chroot/var/named/xuegod.cn.zone
$TTL 1D
xuegod.cn. IN SOA dns.xuegod.cn. root.xuegod.cn. (
1 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
xuegod.cn. NS dns.xuegod.cn.
dns.xuegod.cn. A 192.168.31.64
www.xuegod.cn. 1 A 192.168.31.64 #DNS做简单的负载均衡,1表示此记录在客户端保存1秒
www.xuegod.cn. 1 A 192.168.31.64
www.xuegod.cn. 1 A 192.168.31.1
www1.xeugod.cn. CNAME www.xuegod.cn.
xuegod.cn. MX 10 mail.xuegod.cn. #添加邮件记录
mail.xuegod.cn. A 192.168.31.64
bbs.xuegod.cn. CNAME www.xuegod.cn.
六、DNS主从密钥认证
主服务器重启时,会主动给从服务器发送信息,让从服务器更新自己的记录,通讯端口采用TCP 的53端口。
注:TSIG (主从DNS的时间必须一样)
1、同步时间:
vim /etc/ntp.conf //查看ntp服务器
ntpdate 0.rhel.pool.ntp.org #同步时间
2、生成密钥,进行主从认证。
在主DNS服务器上操作。
rpm -qf which dnssec-keygen
bind-9.7.3-8.P3.el6.x86_64
(1)、dnssec-keygen -a hmac-md5 -b 128 -n HOST 名字
cd /var/named/chroot/
dnssec-keygen -a hmac-md5 -b 128 -n HOST abc #生成一对 对称钥匙
-a hmac-md5:采用hmac-md5加密算法。
-b 128:生成的密钥长度为128位。
-n 密钥类型。我们选择主机类型:HOST 。
-n : ZONE | HOST | ENTITY | USER | OTHER
(DNSKEY generation defaults to ZONE)
abc #为生成密钥的名字
生成时速度有点慢,因为生成密钥需要一些随机事件,因此我们可以通过移动鼠标或执行
[root@xuegod63 etc]# find /
来产生一些随机事件。
等待大约2分钟,查看生成的密钥对:
[root@xuegod63 chroot]# ls
dev etc Kabc.+157+36589.key Kabc.+157+36589.private usr var
[root@xuegod63 chroot]# cat Kabc.+157+54214.private
Private-key-format: v1.2
Algorithm: 157 (HMAC_MD5)
Key: nVk1s0B6XVB4BFfkr+vdfQ== #这是密钥
[root@xuegod63 chroot]# cat Kabc.+157+54214.key
abc. IN KEY 512 3 157 nVk1s0B6XVB4BFfkr+vdfQ==
(2)、修改主DNS配置:
[root@xuegod63 chroot]# vim /var/named/chroot/etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
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; #取原来注释
dnssec-lookaside auto; #取原来注释
/* Path to ISC DLV key */
bindkeys-file “/etc/named.iscdlv.key”;
};
logging {
channel default_debug {file "data/named.run";severity dynamic;};
};
zone “.” IN {
type hint;
file “named.ca”;
};
key abckey { #先定义密钥的名字
algorithm hmac-md5;secret "nVk1s0B6XVB4BFfkr+vdfQ==";
};
zone “xuegod.cn.” IN {
type master;
file “xuegod.cn.zone”;
allow-transfer { key abckey; }; #采用密钥进行同步
};
include “/etc/named.rfc1912.zones”;
重启服务
(3)、从DNS 服务器:192.168.1.64:
#先定义密钥
#采用密钥进行同步
vim /var/named/chroot/etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
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;
dnssec-lookaside auto;
/* Path to ISC DLV key */
bindkeys-file “/etc/named.iscdlv.key”;
};
logging {
channel default_debug {file "data/named.run";severity dynamic;};
};
zone “.” IN {
type hint;
file “named.ca”;
};
key abckey { #先定义密钥名
algorithm hmac-md5;secret "nVk1s0B6XVB4BFfkr+vdfQ==";
};
zone “xuegod.cn.” IN {
type slave;
file “slaves/xuegod.cn.zone.file”;
masters { 192.168.31.64 key abckey; }; #采用密钥进行同步
};
include “/etc/named.rfc1912.zones”;
重启服务进行测试:
[root@xuegod63 chroot]# cd
[root@xuegod63 ~]# service named restart
Stopping named: . [ OK ]
Starting named: [ OK ]
[root@xuegod63 ~]#
从DNS服务器:
rm -rf /var/named/chroot/var/named/slaves/xuegod.cn.zone.file
ls /var/named/chroot/var/named/slaves/
测试工具:
nslookup 测试域名解析
(1)非交互式模式
语法: nslookup 域名或IP 地址
例:
root@xuegod63 chroot]# nslookup www.xuegod.cn
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: www.xuegod.cn
Address: 112.124.185.97
(2)交互模式
[root@xuegod63 ~]# nslookup
www.g.cn
Server: 192.168.31.64
Address: 192.168.31.64#53
Non-authoritative answer:
Name: www.g.cn
Address: 203.208.49.178
Name: www.g.cn
Address: 203.208.49.179
Name: www.g.cn
Address: 203.208.49.180
Name: www.g.cn
Address: 203.208.49.176
Name: www.g.cn
Address: 203.208.49.177
dig命令:
linux下使用dig命令来查询域名信息,当然也可以使用nslookup,但dig比nslookup更方便更强大一些。
安装:
[root@xuegod63 ~]# rpm -qf which dig
bind-utils-9.7.3-8.P3.el6.x86_64
例:
使用114.114.114.114
DNS服务器解析www.xuegod.cn
[root@xuegod63 ~]# dig @114.114.114.114 www.xuegod.cn
; <<>> DiG 9.7.3-P3-RedHat-9.7.3-8.P3.el6 <<>> @114.114.114.114 www.xuegod.cn
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 23192
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;www.xuegod.cn. IN A
;; ANSWER SECTION:
www.xuegod.cn. 30 IN A 112.124.185.97
;; Query time: 19 msec
;; SERVER: 114.114.114.114#53(114.114.114.114)
;; WHEN: Wed Mar 11 21:02:29 2015
;; MSG SIZE rcvd: 47
补充:双线智能DNS:
智能DNS(Bind-view):
智能DNS的原理很简单:在用户解析一个域名的时候,判断一下用户 的IP,然后跟DNS服务器内部的IP表匹配一下,看看用户是电信还是网通用户,然后给用户返回对应的IP地址。目前的域名服务运营商不提供智能DNS服务,所以必须自行架设DNS服务或者使用网上免费的智能DNS服务,如DNSPOD.
https://www.dnspod.cn/
那我们为什么要使用智能DNS服务器:1、因为不同ISP厂商有竞争,使得我们成为受害者,细心的网友一定会发现,南方的网友访问北方的网站一般都比较慢,北方的网友访问南方的网站也很慢。这些都是厂商之间的竞争导致的。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
