前段时间忙于红帽考试和家里的一些事情,一直没能及时更新公众号文章,在这段时间里,公众号的关注量没有下降,在此特别感谢支持我的童鞋和朋友!
今天我们来学习下Linux网络环境中的DNS服务器的搭建,开篇前,先来了解下DNS的一些概念
DNS简介:
DNS(英文domain name system),域名系统,是互联网的一种服务,它用来将域名和IP地址相互映射的一个分布式数据库,能够使人方便的访问互联网。
DNS中涉及到一个名词,域名解析。域名解析是把域名指向到了网站的空间IP,让人们通过注册的域名可以方便的访问到网站提供的一种服务,其实就是域名到IP地址的转换过程,域名解析工作依赖DNS服务器来完成,分为正向解析和反向解析,正向解析即域名到IP地址的的转换,反向解析即IP地址到域名的转换。
DNS服务器类型:
主DNS服务器:维护所负责解析的域数据库的服务器,读写操作均可进行。
从DNS服务器:从主DNS服务器那里或其它的从DNS服务器那里“复制”一份解析库,但只能进行读操作。
DNS组织架构:
根域:位于最顶层的那个域,根域,可省略不写
顶级域:位于第二层的.net、.com,由ICANN组织指定和管理
二级域:位于第三层的ibm、kernel,可由个人或组织注册申请
三级域:如www.ibm.com等,网站服务名代表
DNS的两种查询方式
递归查询:请求(查询)者发送一次请求就能得到结果
A发起请求它去问B,而B也不知道答案,它再去问C,C把答案返回给B,B再把答案返回给A,这个过程就是递归。(在这个过程当中,A只发送了一次请求)
迭代查询:请求(查询)者发送多次请求才能得到结果
A发起请求它去问B,但B也不知道答案,但是B知道C知道答案,于是B告诉A可以去问C,于是A再去请求 C,C将结果告知给A,A从C处获取了答案,这个过程就是迭代。(在这个过程当中,A发送了多次请求)
一次完整DNS解析过程:
DNS bind安装及配置文件讲解
安装:
[root@servera ~]# yum install -y bind
[root@servera ~]# echo $?
0
注:$? 用于判断上一个命令是否执行成功,0代表执行成功,非0代表执行失败
配置文件讲解:
主配置文件:
[root@servera ~]# less /etc/named.conf | egrep -v "^#|^\//" | less
options {
listen-on port 53 { 127.0.0.1; }; //dns ipv4监听的地址
listen-on-v6 port 53 { ::1; }; //dns 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";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { localhost; }; //是否接受其他机器的dns查询
/*
- If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
- If you are building a RECURSIVE (caching) DNS server, you need to enable
recursion.
- If your recursive DNS server has a public IP address, you MUST enable access
control to limit queries to your legitimate users. Failing to do so will
cause your server to become part of large scale DNS amplification
attacks. Implementing BCP38 within your network would greatly
reduce such attack surface
*/
recursion yes; //开启递归查询
dnssec-enable yes;
dnssec-validation yes;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.root.key";
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.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";
区域配置文件:
[root@servera ~]# less /etc/named.rfc1912.zones | egrep -v "^\//" | less
zone "localhost.localdomain" IN {
type master; //用来作为主DNS服务器
file "named.localhost"; //这个zone区域配置文件
allow-update { none; }; //是否允许从服务器 同步主zone文件进行更新
};
zone "localhost" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
zone "1.0.0.127.in-addr.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
zone "0.in-addr.arpa" IN {
type master;
file "named.empty";
allow-update { none; };
};
数据配置文件:/var/named/abc.xx
实验一:DNS服务器搭建
拓扑:
配置步骤:
webserver配置:
[root@httpd ~]# yum install -y httpd
[root@httpd ~]# setenforce 0
[root@httpd ~]# systemctl stop firewalld.service
[root@httpd ~]# echo "DNS Test" > /var/www/html/index.html
[root@httpd ~]# systemctl restart httpd
[root@httpd ~]# netstat -ntlp | grep httpd
tcp6 0 0 :::80 :::* LISTEN 3851/httpd
[root@httpd ~]# curl 192.168.1.112
DNS Test
DNS Server配置:
[root@dns named]# setenforce 0
[root@dns named]# systemctl stop firewalld.service
#将/etc/named.conf如下红色标识处更改为any
#修改区域配置文件:
[root@dns named]# less /etc/named.rfc1912.zones
zone "chenli.com" IN {
type master;
file "chenli.localhost";
allow-update { none; };
};
zone "1.168.192.in-addr.arpa" IN {
type master;
file "chenli.loopback";
allow-update { none; };
};
#拷贝两个区域配置文件并重命名
[root@dns ~]# cp -a named.localhost chenli.localhost
[root@dns ~]# cp -a named.loopback chenli.loopback
#修改正向解析文件
#修改反向解析文件
#重启named服务
[root@dns ~]# systemctl restart named
注:UDP 53端口用于DNS查询,TCP 53端口用户主从DNS同步
测试:
#修改测试机器DNS为192.168.1.111,测试是可以正常解析的
#将webserver主机的DNS指向DNS服务器进行测试,是可以正常解析的
实验二:DNS主从服务器搭建:
目的:降低主服务器压力,从而搭建主从DNS服务器
拓扑:
注:由于环境有限,备份DNS服务器即作为webserver,同时作为从DNS服务器
配置步骤:
主服务器配置:
#安装bind软件,关闭防火墙和Selinux
[root@dns-master ~]# yum install -y bind
[root@dns-master ~]# systemctl stop firewalld.service
[root@dns-master ~]# setenforce 0(临时关闭)
#修改/etc/named.conf配置文件,主DNS服务器监听自己本身地址
#修改主DNS服务器区域配置文件
#修改正向解析配置文件
#修改反向解析配置文件
从服务器配置:
#安装bind软件,关闭防火墙和Selinux
[root@dns-slave ~]# yum install -y bind
[root@dns-slave ~]# systemctl stop firewalld.service
[root@dns-slave ~]# setenforce 0(临时关闭)
#修改/etc/named.conf从DNS服务器配置文件,从DNS服务器也只监听自己本机地址
#修改从DNS服务器区域配置文件
#此时的/var/named/slaves下还没有文件
[root@dns-slave slaves]# ll
total 0
#重启从DNS服务器named服务,可以看到区域配置文件已经同步过来了,并且和主区域配置文件内容均一致
[root@dns-slave slaves]# systemctl restart named
[root@dns-slave slaves]# ll
total 8
-rw-r--r--. 1 named named 239 Nov 17 05:51 chenli.localhost
-rw-r--r--. 1 named named 311 Nov 17 05:51 chenli.loopback
#同步过来的正向解析内容
#同步过来的反向解析内容
验证主从同步过程1:
#修改测试机器的DNS地址为从服务器地址,发现是可以正常解析的
验证主从同步过程2:
#在主服务器新增A记录,然后重启named服务,
[root@dns-master named]# systemctl restart named
#此时查看从DNS的A记录,发现已经同步过来了
实验三:DNS缓存服务器
目的:加快解析速度,提供解析效率
拓扑:
配置步骤:
主DNS master和上面主从DNS配置中的主是一致的
DNS缓存服务器:
#安装缓存软件
[root@dns-slave ~]# yum install -y dnsmasq
#修改配置文件:
[root@dns-slave ~]# egrep -v "^#|^$" /etc/dnsmasq.conf
server=192.168.1.111
domain=chenli.com
cache-size=15000
conf-dir=/etc/dnsmasq.d,.rpmnew,.rpmsave,.rpmorig
[root@dns-slave ~]#
#重启服务
[root@dns-slave ~]# systemctl start dnsmasq.service
验证:
#缓存服务器已经有该www,bbs记录,此时关闭主DNS服务器,可以正常解析,解析为非权威应答
[root@dns-master ~]# systemctl stop named
#由于缓存服务器无dns这台主机的缓存记录,当关闭掉主DNS服务后,无法正常解析
#开启主DNS服务后,由于缓存服务器没有该DNS记录,会找主DNS服务器,而主DNS服务器中有该记录,则可以正常解析
[root@dns-master ~]# systemctl start named
注:
1、做完主动同步,发现从服务器的区域配置文件内容为乱码,解决方法如下,在区域配置文件中新增如下命令:masterfile-format text;
如下图:
2、如上内容均为个人学习过程梳理,难免有错误之处,如有发现错误的地方,欢迎私信指正。
一码不扫,
可以扫天下?