一.DNS和BIND是什么?
DNS即Domain Name Service的缩写,即为域名服务。在网络出现以后,计算机的通信就是通过IP地址加端口号等形式来进行,人对于数字的记忆往往却有限,随着连入网络的用户的不断增多,用户需要记住的IP地址越来越多,早期为了方便使用,把每一个IP地址对应为一个主机名,如:www.domainname.com对应1.1.1.1形式,并把此种对应关系统一记录于/etc/hosts(GNU/Linux下,windows则有所差异)文件中。但是后来连入网络的用户越来越多,管理hosts文件显得十分繁琐,随后伯克利便研发出了专门实现将域名自动转换为IP地址的服务,名为BIND,所以BIND是DNS的一种实现,但是由于现在DNS服务基本都是基于BIND或者使用BIND进行二次开发的软件来实现,所以BIND几乎成了DNS的代名词。
二.域以及BIND的工作方式
由于联网的用户越来越多,为了方便管理和实现,把域名又划分为多个层级,以’.’隔开,类似乎www.abcd.com这样的域名,且从左往右依次层级更高,即com>abcd>www,按照这样的等级,最右边的域一般为顶级域。然后负责管理其下一级的域名,在此约定把com称作bdcd域的父域,bdcd称为com的子域,com是一个顶级域,现在各种常见顶级域如下所示:
名称 |
含义 |
com |
公司、企业、营利机构 |
org |
组织、非营利机构 |
edu |
教育机构 |
cn |
国家或地区类(中国) |
gov |
政府单位 |
net |
网络、通信类 |
mil |
军事单位 |
BIND的工作方式:
BIND在进行域名解析时,会根据用户主机上设置的DNS服务器地址,首先找该地址,当设置的那台DNS服务器上没有用户所需要的相关记录时,如果该服务器设置可对当前主机进行递归查询,那么该服务器就会去找根服务器,在此所谓的根服务器就是放置在世界各地的十三台特殊域名服务器,他们负责管理所有的域名相关事务。然后根服务器会根据用户查询的内容反馈信息,比如要解析的是一个com域,那么根服务器就会告诉当前服务器去找负责com域的相关DNS服务器,然后当前DNS就会根据根反馈的com域的信息区找com,而如果com服务器上所负责的子域下有当前DNS要找的相关记录,则也会反馈下一级域名服务器的信息,以此类推,知道找到真正负责解析用户所给域名的服务器为止。
三.搭建自己的DNS服务器
由于要想搭建一个能在网络中用的DNS服务器需要向上级注册并得到上级的许可才行,所以在此仅搭建一个能在局域网环境中用的DNS服务器。
1.实现解析自己的域名
实验部署如下
域名 |
IP地址 |
www.linuxedu.com |
192.168.2.101 |
dns.linuxedu.com |
192.168.2.102 |
mail.linuxedu.com |
192.168.2.103 |
ftp.linuxedu.com |
192.168.2.101 |
如上所示,在当前局域网内使用域名linuxedu.com,域名内有三台主机,www、dns、mail,其中www主机有个别名,名为ftp。
步骤:
I 安装BIND编辑其主配置文件,bind所需要的安装包为bind-libs (bind库文件)bind-utils(bind其他组件)和bind.x86_64 (bind主程序包),一般来说lib和util已经默认安装,所以直接安装bind主程序即可。
[[email protected] named]# yum remove bind -y Loaded plugins: fastestmirror, refresh-packagekit, security Setting up Remove Process Resolving Dependencies --> Running transaction check ---> Package bind.x86_64 32:9.8.2-0.30.rc1.el6 will be erased --> Finished Dependency Resolution Dependencies Resolved Installed: bind.x86_64 32:9.8.2-0.30.rc1.el6 ......#中间信息已省略 Complete!
II 配置bind的主配置文件/etc/named.conf如下
options { directory "/var/named/"; }; zone "." IN { type hint; file "named.ca"; }; zone "localhost" IN { type master; file "localhost.zone"; }; zone "1.0.0.127.in-addr.arpa" IN { type master; file "1.0.0.127.in-addr.arpa.zone"; }; zone "linuxedu.com" IN { type master; file "linuxedu.com.zone"; }; zone "2.168.192.in-addr.arpa" IN { type master; file "2.168.192.in-addr.arpa.zone"; };
III 为DNS服务器提供区域文件
在主配置文件中已经把BIND的工作目录定位到了/vae/named下,现在切换目录到/var/named/为DNS提供区域文件
首先生成根域文件
[[email protected] named]# dig -t NS . >named.ca
新建本地回环地址正向区域文件(localhost.zone)如下
$TTL 600 @ IN SOA loacalhost. localhost. ( 2015042501 2M 3M 1D 1D ); IN NS localhost. localhost. A 127.0.0.1 ~
为本地回环地址提供反向解析区域(1.0.0.127.in-addr.arpa.zone)文件如下
$TTL 600 @ IN SOA 0.0.127.in-addr.arpa. 0.0.127.in-addr.arpa. ( 2015042501 1M 5M 1D 1D ); IN NS localhost. 1 IN PTR localhost.
提供linuxedu.com域的正向解析区域文件(linuxedu.com.zone),文件内容如下
$TTL 600 $ORIGIN linuxedu.com. @ IN SOA ns.linuxedu.com. mail.linuxedu.com. ( 2015042501 1M 5M 1D 1D ); IN NS ns.linuxedu.com. IN MX 10 mail.linuxedu.com. ns IN A 192.168.2.102 www IN A 192.168.2.101 ftp IN CNAME www.linuxedu.com. mail IN A 192.168.2.103
为linuxedu.com域提供反向解析区域文件(2.168.192.in-addr.arpa.zone)。其内容如下
$TTL 600 $ORIGIN 2.168.192.in-addr.arpa. @ IN SOA ns.linuxedu.com. mail.linuxedu.com. ( 2015042501 1M 5M 1D 1D ); IN NS ns.linuxedu.com. IN MX 10 mail.linuxedu.com. 2 IN PTR ns.linuxedu.com. 1 IN PTR www.linuxedu.com. ftp IN CNAME www.linuxedu.com. 3
修改主配置文件和区域文件的属组为named组并修改其权限为640
[[email protected] named]# chown :named /etc/named.conf /var/named/*;chmod 640 /etc/named.conf /var/named/*
检查主配置文件和区域文件是否有语法错误
[[email protected] named]# named-checkconf [[email protected] named]# named-checkzone "linuxedu.com" /var/named/linuxedu.com.zone zone linuxedu.com/IN: loaded serial 2015042501 OK [[email protected] named]# named-checkzone "2.168.192.in-addr.arpa" /var/named/2.168.192.in-addr.arpa.zone zone 2.168.192.in-addr.arpa/IN: loaded serial 2015042501 OK
重启服务器并测试
[[email protected] named]# dig -t A www.linuxedu.com @127.0.0.1 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -t A www.linuxedu.com @127.0.0.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10358 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;www.linuxedu.com.INA ;; ANSWER SECTION: www.linuxedu.com.600INA192.168.2.101 ;; AUTHORITY SECTION: linuxedu.com.600INNSns.linuxedu.com. ;; ADDITIONAL SECTION: ns.linuxedu.com.600INA192.168.2.102 ;; Query time: 1 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Sun Apr 26 05:54:02 2015 ;; MSG SIZE rcvd: 83
测试反向解析
[[email protected] named]# dig -x 192.168.2.101 @127.0.0.1 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -x 192.168.2.101 @127.0.0.1 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36267 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;101.2.168.192.in-addr.arpa.INPTR ;; ANSWER SECTION: 101.2.168.192.in-addr.arpa. 600INPTRwww.linuxedu.com. ;; AUTHORITY SECTION: 2.168.192.in-addr.arpa.600INNSns.linuxedu.com. ;; ADDITIONAL SECTION: ns.linuxedu.com.600INA192.168.2.102 ;; Query time: 0 msec ;; SERVER: 127.0.0.1#53(127.0.0.1) ;; WHEN: Sun Apr 26 05:58:50 2015 ;; MSG SIZE rcvd: 107
到此本实验成功
2.使用DNS实现主从同步
在现实生产环境中,一台DNS往往是不够的,因为要考虑其宕机的情景,所以至少得有一台为备用,在此在局域网环境内实现两台DNS服务器,并实现主从同步。
以实验1的域名为例,并且新增一台DNS,其ip地址为192.168.1.121,设置其为从服务器。
按照上实验步骤安装好bind程序后,修改其主配置文件(/etc/named.conf),改其内容如下所示
options { directory "/var/named"; }; zone "." IN { type hint; file "named.ca"; }; zone "linuxedu.com" IN { type slave; masters { 192.168.2.120; }; file "slaves/linuxedu.com.zone"; }; zone "2.168.192.in-addr.arpa" IN { type slave; masters { 192.168.2.120; }; file "slaves/2.168.192.in-addr.arpa.zone"; };
由于其为从服务器,其区域文件从主服务器上传输过来,所以不需要为其提供区域配置文件。接下来修改主服务器配置
Zone内部添加如下一条
allow-transfer { 192.168.2.121; };#:此意味允许从服务器进行区域传输注,根zone不能进行区域传输
重启服务器并测试
[[email protected] slaves]# ll total 0 [[email protected] slaves]# service named restart Stopping named: . [ OK ] Starting named: [ OK ] [[email protected] slaves]# ll total 8 -rw-r--r--. 1 named named 463 Apr 26 06:23 2.168.192.in-addr.arpa.zone -rw-r--r--. 1 named named 412 Apr 26 06:23 linuxedu.com.zone
由上可以看到,两个区域文件已经传送过来了。
解析测试
正向解析
ns.linuxedu.com.600INA192.168.2.102 ;; Query time: 1 msec ;; SERVER: 192.168.2.121#53(192.168.2.121) ;; WHEN: Sun Apr 26 06:24:33 2015 ;; MSG SIZE rcvd: 83
反向解析
[[email protected] slaves]# dig -x 192.168.2.103 @192.168.2.121 ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6 <<>> -x 192.168.2.103 @192.168.2.121 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12803 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; QUESTION SECTION: ;103.2.168.192.in-addr.arpa.INPTR ;; ANSWER SECTION: 103.2.168.192.in-addr.arpa. 600INPTRmail.linuxedu.com. ;; AUTHORITY SECTION: 2.168.192.in-addr.arpa.600INNSns.linuxedu.com. ;; ADDITIONAL SECTION: ns.linuxedu.com.600INA192.168.2.102 ;; Query time: 2 msec ;; SERVER: 192.168.2.121#53(192.168.2.121) ;; WHEN: Sun Apr 26 06:24:52 2015 ;; MSG SIZE rcvd: 108
3.正向区域授权
域名是有等级的,因为域名是按一层层实现查找,所以下级域名要想起作用就得上级域名服务器对其授权。
在此以上个实验做slave的服务器来做子域,其域名为net.linuxedu.com,然后使用上个实验的master做父域,对其授权。子域IP地址规划如下:
主机 |
IP地址 |
www |
172.16.35.1 |
|
172.16.35.3 |
ns |
172.16.35.2 |
ftp |
172.16.35.1 |
首先编辑父域dns的linuxedu.com域,添加如下新条目,
net IN NS ns.net.linuxedu.com.
ns.net IN A 192.168.2.121
在父域dns的主配置文件的全局配置段options内添加两天选项
dnssec-enable no;
dnssec-validation yes;
然后编辑子域服务,首先编辑其主配置文件
options {
directory "/var/named";
};
zone "." IN {
type hint;
file "named.ca";
};
zone "net.linuxedu.com" IN {
type master;
file "net.linuxedu.com.zone";
};
编辑子域区域文件内容(net.linuxedu.com.zone ),内容如下
$ORIGIN .
$TTL 600 ; 10 minutes
net.linuxedu.com IN SOA ns.linuxedu.com. mail.linuxedu.com. (
2015042501 ; serial
60 ; refresh (1 minute)
300 ; retry (5 minutes)
86400 ; expire (1 day)
86400 ; minimum (1 day)
)
NS ns.linuxedu.com.
MX 10 mail.linuxedu.com.
$ORIGIN net.linuxedu.com.
ftp CNAME www
mail A 172.16.35.3
ns A 172.16.35.2
www A 172.16.35.1
~检查语法错误确定无误后重启服务解析测试
解析测试
4.使用ACL及view实现针对客户端的智能DNS解析
在生产环境中,有时需要把来自不同客户端的解析请求解析为不同的IP地址,此时就可以使用ACL加view实现对来自客户端的请求加以控制。
首先来说ACL,ACL即Access Countrol List的缩写,在bind中可以将不同的网络地址归到一个ACL列表里,然后直接对该表实现设置访问控制权限即可,BIND中的访问控制列表默认有四个分别为:
any;:任何人
none;:任何人都不能
localhost;:本机
localnets;:本机所在网络
例1:定义个访问控制列表,控制只响应来自192.168.2.121的主机对linuxedu.com域的解析请求
修改配置文件,在主机192.168.2.120中添加访问控制列表,内容如下
acl bxy { 192.168.2.121; };
然后在zone内添加如下图所示内容
重启服务器测试
例2:使用视图实现将来自不同主机的同一个解析请求解析为不同的地址
以上述搭建好的环境为例,以192.168.2.120做服务器,然后让来自192.168.2.120解析linuxedu.com解析为192.168.2网段,让来自192.168.2.107的主机解析linuxedu.com解析为192.168.1网段。
修改服务器主配置文件,主配置文件内容如下
options { directory "/var/named/"; }; acl liebiao1 { 192.168.2.121;# }; acl liebiao2 { 192.168.2.107; }; view jiexi1 { #视图1 用来定义acl liebiao1中主机解析的请求去向 match-clients { liebiao1; }; zone "." IN { type hint; file "named.ca"; }; zone "localhost" IN { type master; file "localhost.zone"; }; zone "1.0.0.127.in-addr.arpa" IN { type master; file "1.0.0.127.in-addr.arpa.zone"; }; zone "linuxedu.com" IN { type master; file "linuxedu.com.zone"; }; zone "2.168.192.in-addr.arpa" IN { type master; file "2.168.192.in-addr.arpa.zone"; }; };
view jiexi2 { #视图2 用来控acl liebiao2中的主机的解析去向
match-clients { liebiao2; }; zone "." IN { type hint; file "named.ca"; }; zone "localhost" IN { type master; file "localhost.zone"; }; zone "1.0.0.127.in-addr.arpa" IN { type master; file "1.0.0.127.in-addr.arpa.zone"; }; zone "linuxedu.com" IN { type master; file "linuxedu.com.zone.1"; }; zone "1.168.192.in-addr.arpa" IN { type master; file "1.168.192.in-addr.arpa.zone"; }; };
测试:
使用192.168.2.107解析
使用192.168.2.121解析
总算写完了,虽然还要编译啥的没写 不过来不及了,明天还得上课。。