知识扩展
hosts文件
早期网站较少时,使用配置文件hosts来进行域名与IP地址的相互解析,现在网站数量已经非常多了,若将所有域名与IP地址写入hosts文件,hosts文件容量将大到系统无法打开的程度。现在hosts文件在操作系统内依然生效,只是默认该文件为空,且该文件的优先级高于DNS。
Windows系统中:C:\windows\system32\drivers\etc\hosts
Linux系统中:/etc/hosts
域名分级
- 根域 .
全球共有13组根域服务器集群。(分布式) - 一级域名
由域名分配组织指定的,不允许个人或组织自由申请。
分为: 组织一级域名 如:.org .com
国家(地区)一级域名 如:.cn .jp .us .hk - 二级域名
由个人或组织申请,二级域名+一级域名必须全球唯一。
如:baidu.com sina.com.cn - 三级域名
由个人或组织自定义。
如:www.baidu.com
FQDN:完全合格域名(标准域名+根域) 如:www.baidu.com.
DNS原理
DNS(Domain Name System),域名系统服务协议。主要用于域名与 IP 地址的相互转换,以及控制因特网的电子邮件的发送。可以理解为DNS就是翻译官。
DNS服务的作用就是域名和IP互相解析。
正向解析:域名 --> IP地址
反向解析:IP地址 --> 域名
DNS查询类型分为递归查询和迭代查询:
递归查询: 一般是客户机和服务器之间的查询,即只发送一起请求,其他的工作交由上层服务器去解决,然后最后一层一层的反馈结果到客户端。(负责到底)
迭代查询: 一般是DNS服务器与DNS服务器之间的方式,最起初的DNS服务器负责发起请求,而其他涉及到的DNS服务器只负责响应即可,然后一直查找到目标DNS服务器,并将结果返回给客户端(不负责到底,给一个推荐的结果)。
- 客户机首先查看查找本地hosts文件,如果有则返回,否则进行下一步
- 客户机查看本地缓存,是否存在本条目的缓存,如果有则直接返回,否则进行下一步。
- 将请求转发给指向的DNS服务器。
- 查看域名是否本地解析,是则本地解析返回,否则进行下一步。
- 本地DNS服务器首先在缓存中查找,有则返回,无则进行下一步。
- 向全球13个根域服务器发起DNS请求,根域返回org域的地址列表。
- 使用某一个org域的IP地址,发起DNS请求,org域返回kernel域服务器地址列表。
- 使用某一个kernel域IP地址,发起DNS请求,kernel域返回www.kernel.org主机的IP地址,本地DNS服务收到后,返回给客户机,并在本地DNS服务器保存一份。
资源记录类型
名称 | 意义 |
---|---|
A | 地址记录,用来指定域名的IPv4地址的记录 |
CNAME | 将域名指向另一个域名,再由另一个域名提供ip地址,就需要添加CNAME记录 |
TXT | 可填写任何东西,长度限制255。绝大多数的TXT记录是用来做SPF的(反垃圾邮件) |
NS | 域名服务器记录,如果需要把子域名交给其他DNS服务商解析,就需要添加NS记录。 |
AAAA | 地址记录,用来指定域名的IPv6地址的记录 |
MX | 邮件交换记录,如果需要设置邮箱,让邮箱能收到邮件,就需要添加MX记录。 |
搭建手册
- 前提
关闭防火墙及增强安全组件:
# 查询防火墙状态
[root@loaclhost ~]# iptables -L
# 关闭防火墙
[root@loaclhost ~]# service stop iptables
# 禁止防火墙开机自启
[root@loaclhost ~]# chkconfig iptables off
# 查询SE Linux状态
[root@loaclhost ~]# getenforce
# 关闭SE Linux
[root@loaclhost ~]# setinforce 0
-
DNS服务相关信息
- DNS服务的rpm软件包:bind
- DNS服务的服务名:named
-
端口
- UDP 53 # 数据通信(域名解析)
- TCP 53 #数据同步(主从同步)
-
配置文件
DNS服务的配置文件如下:
配置文件 | 详解 |
---|---|
/etc/named.conf | 主配置文件,定义区域配置文件位置及监听的端口号、网卡信息 |
/etc/named.rfc1912.zones | 区域配置文件,定义解析数据配置文件位置及文件名 |
/var/named/named.localhost | 正向解析数据配置文件,主要写入正向解析的A记录信息 |
/var/named/named.loopback | 反向解析数据配置文件,主要记录反向解析的PTR指针信息 |
实战
基础DNS服务器搭建
- 服务器端
# 安装DNS服务
yum -y install bind
# 修改主配置文件/etc/named.conf(将指定位置信息修改为any(两处))(仅显示部分)
vim /etc/named.conf
options {
listen-on port 53 { any; }; #任何人都可访问端口53。
listen-on-v6 port 53 { ::1; };
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; }; #允许任何客户机可以访问dns服务。
# 备份配置文件(预防修改错误能恢复)
cp -a /etc/named.rfc1912.zones /etc/named.rfc1912.zones.back
# 修改区域配置文件/etc/named.rfc1912.zones
(只留下一个正向和一个反向,反向修改时,网络位的反写格式,如192.168.100.2-->100.168.192.)
vim /etc/named.rfc1912.zones
zone "二级域名.一级域名" IN {
type master;
file "named.localhost";
allow-update { none; };
};
zone "1.168.192.in-addr.arpa" IN {
type master;
file "named.loopback";
allow-update { none; };
};
# 修改数据配置文件(/var/named/目录下)
(正向解析记录和反向解析记录文件名必须和/etc/named.rfc1912.zones文件中一致,模板文件为named.localhost和named.loopback)
编辑正、反向解析文件(注意域名结尾的 “.”)
# 正向解析记录文件/var/named/named.localhost
vim /var/named/named.localhost
$TTL 1D
@ IN SOA baidu.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.baidu.com.
www A 192.168.1.12
dns A 192.168.1.11
# 反向解析记录文件/var/named/named.loopback
vim /var/named/named.loopback
$TTL 1D
@ IN SOA baidu.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.baidu.com.
12 PTR www.baidu.com.
11 PTR dns.baidu.com.
# 启动服务
systemctl start named
- 客户端
在网卡配置文件中添加DNS服务器的地址,重启网卡,然后用nslookup测试。
# 安装测试工具nslookup
yum -y install bind-utils
# 修改网卡配置文件中DNS地址为DNS服务器IP地址
# 测试DNS服务器是否正常使用
nslookup IP|域名
主从DNS服务搭建
功能: 从DNS服务器减轻主DNS服务器的压力。客户端可指定主DNS和从DNS作为DNS解析服务器,当主DNS服务器宕机后,客户端还能从从服务器上进行解析,但是当主服务器宕机时间过长,从服务器无法同步数据时,从服务器上的DNS解析结果就不再权威了。
- 主服务器
主服务器端搭建与基础服务搭建一致。只需将区域配置文件中的选项需做修改如下(生效部分全文):
vim /etc/named.rfc1912.zones
zone "二级域名.一级域名" IN {
type master;
file "named.localhost";
allow-transfer { 从服务器IP; };
notify yes;
};
zone "1.168.192.in-addr.arpa" IN {
type master;
file "named.loopback";
allow-transfer { 从服务器IP; };
notify yes;
};
- 从服务器
# 安装DNS服务
yum -y install bind
# 修改主配置文件/etc/named.conf(与基础服务搭建一致)
# 修改区域配置文件/etc/named.rfc1912.zones
vim /etc/named.rfc1912.zones
zone "二级域名.一级域名" IN {
type slave; #声明服务器类型为slave
masters { 主服务器IP; }; #指定主服务器地址
file "slaves/named.localhost"; #将同步的文件保存在指定目录内的指定文件
allow-update { none; };
masterfile-format text; #同步的文件保存为text文本文件
};
zone "1.168.192.in-addr.arpa" IN {
type slave;
masters { 主服务器IP; };
file "slaves/named.loopback";
allow-update { none; };
masterfile-format text;
};
# 启动服务
systemctl start named
- 客户端
在网卡配置文件中添加DNS服务器的地址,重启网卡,然后用nslookup测试。
# 安装测试工具nslookup
yum -y install bind-utils
# 修改网卡配置文件中DNS地址为DNS服务器IP地址
# 测试DNS服务器是否正常使用
nslookup IP|域名
缓存DNS服务搭建
功能: 加快解析速度,提高解析效率。所有用户请求都是向缓存服务器发送,由缓存服务器从内存中查询DNS数据,若有数据则直接反馈给用户;若缓存服务器内存中无用户需要的数据,缓存服务器就向主服务器请求数据,接收后,缓存服务器将数据反馈给用户,同时将数据保存在自己的内存里。
- 主服务器
主服务器配置与主从架构中的主服务器配置完全一致。将从服务器IP替换为缓存服务器IP即可。 - 缓存服务器
# 安装dnsmasq
yum -y install dnsmasq
# 修改配置文件/etc/dnsmasq.conf(追加如下信息即可)
vim /etc/dnsmasq.conf
domain=二级域名.一级域名
server=主服务器IP
cache-size=缓存条数
- 客户端
在网卡配置文件中添加DNS服务器的地址,重启网卡,然后用nslookup测试。
# 安装测试工具nslookup
yum -y install bind-utils
# 修改网卡配置文件中DNS地址为DNS服务器IP地址
# 测试DNS服务器是否正常使用
nslookup IP|域名
DNS分离解析(智能DNS)
功能原理: DNS分离解析即将相同域名解析为不同的IP地址。现实网络中一些网站为了让用户有更好的体验效果解析速度更快,就把来自不同运营商的用户解析到相对应的服务器这样就大大提升了访问速度。
说明: 当不同网段的客户端向DNS服务器请求域名解析的时候,DNS服务器会根据客户机所在的网段返回不同的解析结果。(在此只做正向解析,不做反向解析)
- web服务器
# 配置网络信息并重启网卡
# 安装httpd
yum -y install httpd
# 创建网页文件index.html
echo "This is apache server!" >> /var/www/html/index.html
# 启动httpd服务
systemctl start httpd
- DNS服务器+路由器
# 配置网络信息并重启网卡
# 开启路由转发(centos 6中直接修改配置文件即可,centos 7中执行追加下述信息即可)
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
# 重新加载内核参数
sysctl -p
# 安装DNS服务
yum -y install bind
# 修改主配置文件/etc/named.conf(详情见附录)
(用下述信息替换zone区域后注释include "/etc/named.rfc1912.zones"; 行)
vim /etc/named.conf
view lan {
match-clients { 网段1/子网掩码; };
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/lan.zones";
};
view wan {
match-clients { any; };
zone "." IN {
type hint;
file "named.ca";
};
include "/etc/wan.zones";
};
#include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
# 创建区域配置文件及修改(创建时需与主配置文件中申明的文件名一致)
cp -a /etc/named.rfc1912.zones /etc/lan.zones
cp -a /etc/named.rfc1912.zones /etc/wan.zones
# 修改lan的区域配置文件
vim /etc/lan.zones
zone "二级域名.一级域名" IN {
type master;
file "named.lan";
allow-update { none; };
};
# 修改wan的区域配置文件
vim /etc/wan.zones
zone "二级域名.一级域名" IN {
type master;
file "named.wan";
allow-update { none; };
};
# 创建解析配置文件并修改
cp -a /var/named/named.localhost /var/named/named.lan
cp -a /var/named/named.localhost /var/named/named.wan
# 修改lan的解析配置文件
vim /var/named/named.lan
$TTL 1D
@ IN SOA baidu.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.baidu.com.
www A 192.168.1.100
dns A 192.168.1.11
# 修改wan的解析配置文件
vim /var/named/named.lan
$TTL 1D
@ IN SOA baidu.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.baidu.com.
www A 192.168.2.100
dns A 192.168.2.11
# 启动DNS服务
systemctl start named
- 客户端
在网卡配置文件中添加DNS服务器的地址,重启网卡,然后用nslookup测试。
# 安装测试工具nslookup
yum -y install bind-utils
# 修改网卡配置文件中DNS地址为DNS服务器IP地址
# 测试DNS服务器是否正常使用
nslookup IP|域名