目录
DNS简介
-
DNS的功能
DNS 域名系统(Domain Name System) 的缩写,它的功能是将域名解析成ip。我们日常上网浏览网页时,在浏览器(如:IE)的地址栏中常输入的是网站的网址,其实网址这个概念在专业的角度称为域名。即:网址=域名。
而域名主要是给我们人去使用的。我们知道,在网络上,计算机与计算机之间的寻址方式是靠的ip地址。IP地址是四段数字组成的,而我们人去记忆不同网站的ip地址,这种数字化的地址很容易记错或记混,我们人的思维模式更习惯于记忆名称,如:百度、163、QQ等网站,我们可以很轻松的写出它们的网址。所以,为了方便人与主机之间的沟通,在internet上,就需要有一台服务器,记录着网站域名(即网址)与服务器ip的对应关系。类似于表格,当我们上网时,在浏览器地址栏中输入网址,客户端则会向DNS服务器发出询问请求,DNS服务器通过查表得到对应服务器的IP,返回给客户端,客户端再以这个ip地址寻址到达服务器,申请访问web页面。所以,一次上网的过程中,客户端其实会向外发送两次请求,第一次是询问DNS,查表得到web服务器的ip,第二次是按照所获得的ip,寻址找到web服务器请求访问页面。DNS上查表的过程,我们用更专业的术语表示就叫做解析。所以DNS服务器又称为域名解析服务器,其功能就是将域名解析成ip的。
以上过程我们可以想象成生活中的手机电话簿功能:我们可以记住每个朋友的姓名,但我们是记不住每个朋友的手机号的,这就需要用电话簿记录各个朋友的手机号,当我们需要给某个朋友打电话时,一定会先查电话簿,查到电话后,即可拨号打电话了。这里的电话簿的功能就相当于DNS的功能。
-
DNS命名空间
DNS可以负责全球网络的域名解析工作,那么全球的网络必然或有一套严谨的命名规范,那就是DNS命名空间的功能
我们假设将全球的网络资源都放到一个总的虚拟的域之下,这个总域我们称为根域即.域(点域)。在根域之下,划分为多个二级域,这些域被称为顶级域,顶级域是不允许企业或个人直接申请的,顶级域是由全球的网络维护商按照国家、地区、行业等分配的,如:.cn.表示中国地区,.hk.表示香港,.org.表示国际组织,.com.表示工商企业的,.net.表示网络提供商等等。因为所有域都在根域(即.域)之下,所以,一般书写时我们可以把最后的.省略,如:.com .cn等 作为企业或个人,只可以在顶级域下申请子域,申请到子域后即可在子域下指定自己的网络层次了。如下图:
-
命名相关概念
先来分析一下域名的格式,我们知道上网时在浏览器输入域名后,浏览器会自动在域名前写上http://字样,即指定了通信协议,这种协议+地址的格式我们称为url。
url 统一资源定位符,即协议+完整网络路径,如:http://www.baidu.com。
其实我们日常中常说的链接,专业称谓就是url。如:我们会给朋友要的某网店链接,某电影的下载链接等,这些都是url。
全称域名(FQDN) 其实我们日常中说的域名(如www.baidu.com),严格来讲并不是标准的叫法。在专业的称谓中,一个完整的网址应该称为全称域名,简写FQDN(英文单词为全质量的域名)。而FQDN规定最多由255个字符组成。
域名 标准定义中,域名的概念只是指所在域部分,如:baidu.com。
主机名(又称NetBios名) FQDN中的www部分称为主机名部分。规定主机名最多16个字符,但最后一个字符固定为.(点),所以只有前15个字符可自定义。
小结,可见FQDN是由主机名+域名组成。
-
DNS解析原理
-
客户端解析顺序
-
Windows/Linux:本地hosts文件------DNS服务器
-
-
DNS支持的解析模式
-
正向解析: 客户端拿着域名,请求DNS解析,获取到ip
-
反向解析: 客户端拿着ip,请求DNS解析,获取到域名
-
-
DNS的解析过程
-
客户机首先查看查找本地hosts文件,如果有则返回,否则进行下一步
-
客户机查看本地缓存,是否存在本地的缓存中,如果有则直接返回,否则进行下一步。
-
将请求转发给指向的DNS服务器。
-
查看域名是否本地解析,是则本地解析返回,否则进行下一步。
-
本地DNS服务器首先在缓存中查找,有则返回,无则进行下一步。
-
向全球13个根域服务器发起DNS请求,根域返回org域的地址列表。
-
使用某一个org域的IP地址,发起DNS请求,org域返回kernel域服务器地址列表。
-
使用某一个kernel域IP地址,发起DNS请求,kernel域返回www.kernel.org主机的IP地址,本地DNS服务收到后,返回给客户机,并在本地DNS服务器保存一份。
-
递归:
-
发生在客户机与指定的DNS服务器之间
-
返回的确定值
-
-
迭代:
-
发生在指定DNS服务器与后续DNS服务器之间
-
返回近似的值
-
DNS的相关配置
-
软件包:bind
-
服务名:named
-
扩展命令:nslookup
-
扩展命令的软件包:bind-utils
-
默认端口:
-
UDP:53端口,数据通信(域名解析)
-
TCP:53端口,数据同步(主从同步)
-
-
配置文件:
-
主配置文件:/etc/named.conf (服务运行的参数)
-
区域配置文件:/etc/named.rfc1912.zones (正反向区域定义信息)
-
数据配置文件:/var/named/ (主机名和IP的对应解析关系)
-
记录类型:
A: | 地址记录,用来指定域名的IPv4地址的记录 |
CNAME: | 将域名指向另一个域名,再由另一个域名提供ip地址,就需要添加CNAME记录 |
TXT: | 可填写任何东西,长度限制255。绝大多数的TXT记录是用来做SPF的(反垃圾邮件) |
NS: | 域名服务器记录,如果需要把子域名交给其他DNS服务商解析,就需要添加NS记录。 |
AAAA: | 地址记录,用来指定域名的IPv6地址的记录 |
MX 3: | 邮件交换记录,如果需要设置邮箱,让邮箱能收到邮件,就需要添加MX记录。 |
DNS基本功能搭建(关防护、服务器+测试机)
服务器配置
# 安装软件bind
$ yum -y install bind
$ yum -y install bind-utils #安装nslookup
$ vim /etc/named.conf
#监听的连接服务器网卡:
listen-on port 53 {any;}
#监听的客户端的请求地址,如指定网段:20.20.20.x/24;
allow-query {any;}
#配置区域配置文件(注:备份文件、只留一个正向和反向配置块)
$ vim /etc/named.rfc1912.zones
#正向记录:
zone "要解析成的域名,如hongfu.com" IN {
type master;
file "正向的数据配置文件名";
allow-update {none;};
}
#反向记录:
zone "解析网段的倒序(如:30.168.192).in-addr.arpa" IN {
type master;
file "反向的数据配置文件名";
allow-update {none;};
}
#配置数据文件
$ cd /var/named/
$ cp -a named.localhost 正向的数据配置文件名
$ cp -a named.loopback 反向的数据配置文件名
$ vim 正向的数据配置文件名 #注:写域名最后加上根域
$TTL 1D
@ IN SOA 要解析成的域名.(如hongfu.com.) rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.要解析成的域名. #配置dns服务器的域名
dns A 192.168.66.74
www A 192.168.66.74#配置正向解析记录 DNS主服务器的IP
$ vim 反向的数据配置文件名 #注:写域名最后加上根域
$TTL 1D
@ IN SOA 要解析成的域名. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.要解析成的域名. #配置dns服务器的域名
74 PTR dns.要解析成的域名. #配置反向解析记录,只输入ip最后一位
#启动dns服务
$ systemctl start named
测试机配置
# 测试机(服务器本机或其他机器)在网卡配置中添加DNS1
$ vim /etc/sysconfig/network-scripts/ifcfg-ens33
DNS1 = dns服务器ip
$ systemctl restart network
$ yum -y install bind-utils #安装nslookup
$ nslookup 要解析的域名
# 确认物理机的DNS
$ cat /etc/resolv.conf
DNS主从服务
DNS主从服务搭建(关防护、主服务器+从服务器+测试机)
主服务器配置
$ yum -y install bind
$ vim /etc/named.conf
#监听的连接服务器网卡:
listen-on port 53 {any;}
#监听的客户端的请求地址,如指定网段:20.20.20.x/24;
allow-query {any;}
#配置区域配置文件(注:备份文件、只留一个正向和反向配置块)
$ vim /etc/named.rfc1912.zones
#正向记录:
zone "要解析成的域名,如hongfu.com" IN {
type master;
file "正向的数据配置文件名";
allow-transfer {从服务器IP;};
}
#反向记录:
zone "解析网段的倒序(如:30.168.192).in-addr.arpa" IN {
type master;
file "反向的数据配置文件名";
allow-transfer {从服务器IP;};
}
$ cd /var/named
#配置数据文件
$ cd /var/named/
$ cp -a named.localhost 正向的数据配置文件名
$ cp -a named.loopback 反向的数据配置文件名
$ vim 正向的数据配置文件名 #注:写域名最后加上根域
$TTL 1D
@ IN SOA 要解析成的域名.(如hongfu.com.) rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.要解析成的域名. #配置dns服务器的域名
dns A 192.168.66.74
www A 192.168.66.74#配置正向解析记录 DNS主服务器的IP
$ vim 反向的数据配置文件名 #注:写域名最后加上根域
$TTL 1D
@ IN SOA 要解析成的域名. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.要解析成的域名. #配置dns服务器的域名
67 PTR dns.要解析成的域名. #配置反向解析记录,只输入ip最后一位
#启动dns服务
$ systemctl start named
从服务器配置
$ yum -y install bind
$ vim /etc/named.conf
listen-on port 53 {any;}
allow-query {any;}
$ vim /etc/named.rfc1912.zones
#正向记录:
zone "要解析成的域名" IN {
type slave;
masters { 主服务器ip; };
file "slaves/正向的数据配置文件名";
masterfile-format text;
}
#反向记录:
zone "解析网段的倒序.in-addr.arpa" IN {
type slave;
masters { 主服务器ip; };
file "slaves/反向的数据配置文件名";
masterfile-format text;
}
#无需配置数据文件,启动服务自动同步到/var/named/slaves文件中,slaves文件中存在两个数据文件就说明从服务器搭建好了
测试机
# 安装解析工具nslookup
$ yum -y install bind-utils
# 修改网卡配置,添加DNS1=从服务器IP
$ vim /etc/sysconfig/network-scripts/ifcfg-ens33
DNS1 = 从dns服务器ip
$ nslookup 要解析的域名
设置主从服务器的实时同步
# 主DNS服务上的主配置文件(/etc/named.conf)不需要更改
# 在主DNS服务上添加实时同步的设置
$ vim /etc/named.rfc1912.zones
# 正向记录:
zone "要解析成的域名" IN {
type master;
file "正向的数据配置文件名";
allow-transfer {从服务器IP};
# 添加实时同步配置
allow-update {从服务器IP};
also-notify {从服务器IP};
}
# 反向记录:
zone "解析网段的倒序.in-addr.arpa" IN {
type master;
file "反向的数据配置文件名";
allow-transfer {从服务器IP};
# 添加实时同步配置
allow-update {从服务器IP};
also-notify {从服务器IP};
}
# 在主DNS服务上更改数据
$ vim 正向的数据配置文件名
$TTL 1D
@ IN SOA 要解析成的域名.(如hongfu.com.) rname.invalid(
1 ; serial
#序列号每次数据修改都需要增加
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.要解析的域名.
dns A 192.168.30.67
www A 192.168.30.68 # 添加或修改一条数据
# 重启named服务
$ systemctl restart named
# 从服务器上不需要做任何修改,查看数据文件数据就被同步过来了
# 客户机上配置从服务器IP为DNS1,能正常解析出更改的域名
DNS缓存服务
DNS缓存服务搭建(关防护、主服务器+从服务器+测试机)
主服务器
# 同主从实验中的主服务器配置
缓存服务器
# 安装缓存软件
$ yum -y install dnsmasq
# 配置缓存
$ vim /etc/dnsmasq.conf
domain=要解析的域名
server=主dns服务器IP
cache-size=15000
# 启动服务
$ systemctl start dnsmasq
测试机
# 修改网卡配置,添加DNS1=缓存服务器IP
$ vim /etc/sysconfig/network-scripts/ifcfg-ens33
DNS1 = 缓存dns服务器ip
# 安装解析工具nslookup
$ yum -y install bind-utils
# 关闭主服务器,仍能解析主服务器解析过的域名、但主配置了但没解析过的缓存也不能解析
$ nslookup 要解析的域名
DNS智能解析(分离解析)
-
解析原理:智能DNS就是将对用户发起的查询进行判断出是哪个运行商的用户查询,然后将请求转发给相应的运营商IP处理,减少跨运营访问的时间,提高访问速度。
-
应用场景:一些网站为了让用户有更好的体验、更快的解析速度,会把来自不同运营商的用户解析成对应地域的服务器上,大大提升了访问速度。
智能DNS搭建(关防护、双网卡且DNS服务+内网测试机+外网测试机)
实验环境
DNS服务器:
ens33(vmnet1):192.168.30.67
ens34(vmnet2):192.168.88.75
开启路由转发
网站服务器:
ens33(vmnet1):192.168.30.68
ens34(vmnet2):192.168.88.76
开启路由转发
内网测试机:
ens33(vmnet1):192.168.30.xx
网关和DNS1都设置为DNS服务器的内网IP(192.168.30.67)
外网测试机:
ens34(vmnet2):192.168.88.xx
网关和DNS1都设置为DNS服务器的外网IP(192.168.88.75)
服务器配置
# 按上面的实验环境,配置相应的物理网卡和网卡信息
# 安装DNS软件包
$ yum -y install bind
# 修改主配置文件
$ vim /etc/named.conf
view lan{
match-clients{192.168.30.0/24;};
zone "." IN {
type hint;
file "named.ca";
}
include "/etc/lan.zones";
}
view wan{
match-clinets{any;};
zone "." IN {
type hint;
file "named.ca";
}
include "/etc/wan.zones";
}
#include "/etc/named.rfc1912.zones"; # 注释掉默认的区域配置文件
# 配置区域文件、配置同上
$ cp -a /etc/named.rfc1912.zones /etc/lan.zones
$ cp -a /etc/named.rfc1912.zones /etc/wan.zones
$ vim /etc/lan.zones
zone "hongfu.com" IN {
type master;
file "hongfu.zheng.lan";
allow-update { any; };
};
zone "30.168.192.in-addr.arpa" IN {
type master;
file "hongfu.fan.lan";
allow-update { any; };
};
$ vim /etc/wan.zones
zone "hongfu.com" IN {
type master;
file "hongfu.zheng.wan";
allow-update { any; };
};
zone "88.168.192.in-addr.arpa" IN {
type master;
file "hongfu.fan.wan";
allow-update { any; };
};
# 配置数据文件
$ cd /var/named
$ cp -a named.localhost hongfu.zheng.lan
$ cp -a named.loopback hongfu.fan.lan
$ cp -a named.localhost hongfu.zheng.wan
$ cp -a named.loopback hongfu.fan.wan
$ vim hongfu.zheng.lan
$TTL 1D
@ IN SOA hongfu.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.hongfu.com.
www A 192.168.30.68
dns A 192.168.30.67
$ vim hongfu.fan.lan
$TTL 1D
@ IN SOA hongfu.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.hongfu.com.
67 PTR dns.hongfu.com.
68 PTR www.hongfu.com.
$ vim hongfu.zheng.wan
$TTL 1D
@ IN SOA hongfu.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.hongfu.com.
www A 192.168.88.76
dns A 192.168.88.75
$ vim hongfu.fan.wan
$TTL 1D
@ IN SOA hongfu.com. rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS dns.hongfu.com.
75 PTR dns.hongfu.com.
76 PTR www.hongfu.com.
# 重启服务
$ systemctl restart named
# 开启路由转发
# CentOS7:
$ vim /usr/lib/sysctl.d/50-default.conf
net.ipv4.ip_forward=1
# 验证开启成功
$ grep ip_forward /usr/lib/sysctl.d/50-default.conf
$ reboot
# CentOS6:
$ vim /etc/sysctl.conf
net.ipv4.ip_forward=1
# 验证开启成功
$ sysctl -p
网站服务器
# 按上面的实验环境,配置相应的物理网卡和网卡信息
#:
$ yum -y install httpd
$ systemctl start httpd
$ ss -antp | grep :80
$ cd /var/www/html # 写测试界面
echo "test pages~" > index.html
$ curl localhost # 模拟浏览器访问网站
# 开启路由转发
# CentOS7:
$ vim /usr/lib/sysctl.d/50-default.conf
net.ipv4.ip_forward=1
# 验证开启成功
$ grep ip_forward /usr/lib/sysctl.d/50-default.conf
$ reboot
或:
# CentOS6:
$ vim /etc/sysctl.conf
net.ipv4.ip_forward=1
# 验证开启成功
$ sysctl -p
内网测试机
# 按上面的实验环境,配置相应的物理网卡(vmnet1)和网卡信息
# 配置网卡信息
$ vim /etc/sysconfig/network-scripts/ifcfg-eth0
IPADDR=192.168.30.xx
GATEWAY=192.168.30.67
DNS1=192.168.30.67
$ service network restart
# 安装解析工具
$ yum -y install bind-utils
# 测试DNS解析功能
$ nslookup 配置的域名
# 测试网页功能:
$ curl 网站服务器域名
外网测试机
# 按上面的实验环境,配置相应的物理网卡(vmnet2)和网卡信息
# 配置网卡信息
$ vim /etc/sysconfig/network-scripts/ifcfg-eth0
IPADDR=192.168.88.xx
GATEWAY=192.168.88.75
DNS1=192.168.88.75
$ service network restart
# 安装解析工具
$ yum -y install bind-utils
# 测试DNS解析功能
$ nslookup 配置的域名
# 测试网页功能
$ curl 网站服务器域名