DNS和DHCP


配置DNS和DHCP服务器

DNS

DNS:域名系统(英文:Domain Name System)是一个域名系统,是万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。类似于生活中的114服务,可以通过人名找到电话号码,也可以通过电话号码找到人名(生活中没有那么准确的原因是人名有重名,而域名是全世界唯一的)。

DNS协议运行在UDP协议之上,使用端口号53

域名:
域名是一个网站的逻辑地址,比如www.zuolaoshi.cn,相比IP地址更加方便人类记忆,所以被广泛使用。

鉴于互联网中的域名和IP地址对应关系数据库太过庞大,DNS域名解析服务采用了类似目录树的层次结构来记录域名与IP地址之间的对应关系,从而形成了一个分布式的数据库系统

DNS域名解析服务采用的目录树层次结构

DNS结构模型

域名后缀一般分为国际域名和国内域名。原则上来讲,域名后缀都有严格的定义,但在实际使用时可以不必严格遵守。

目前最常见的域名后缀有.com(商业组织)、.org(非营利组织)、.gov(政府部门)、.net(网络服务商)、.edu(教研机构)、.pub(公共大众)、.cn(中国国家顶级域名)等。

DNS技术作为互联网基础设施中重要的一环,为了为网民提供不间断、稳定且快速的域名查询服务,保证互联网的正常运转,提供了下面三种类型的服务器。

主服务器:在特定区域内具有唯一性,负责维护该区域内的域名与IP地址之间的对应关系。

从服务器:从主服务器中获得域名与IP地址的对应关系并进行维护,以防主服务器宕机等情况。

缓存服务器:通过向其他域名解析服务器查询获得域名与IP地址的对应关系,并将经常查询的域名信息保存到服务器本地,以此来提高重复查询时的效率。

简单来说,主服务器是用于管理域名和IP地址对应关系的真正服务器,从服务器帮助主服务器“打下手”,分散部署在各个国家、省市或地区,以便让用户就近查询域名,从而减轻主服务器的负载压力。缓存服务器不太常用,一般部署在企业内网的网关位置,用于加速用户的域名查询请求。

当用户向就近的一台DNS服务器发起对某个域名的查询请求之后其查询流程大致如图所示。

DNS查询流程图

事实上,一个 DNS 的查询过程非常复杂,它分成很多个步骤:

第一步:客户机提出域名解析请求,并将该请求发送给本地的域名服务器。

第二步:当本地的域名服务器收到请求后,就先查询本地的缓存,如果有该纪录项,则本地的域名服务器就直接把查询的结果(域名对应的IP地址)返回。

第三步:如果本地的缓存中没有该纪录,则本地域名服务器就直接把请求发给根域名服务器,然后根域名服务器再返回给本地域名服务器一个所查询域(根的子域) 的主域名服务器的地址。

第四步:本地服务器再向上一步返回的域名服务器发送请求,然后接受请求的服务器查询自己的缓存,如果没有该纪录,则返回相关的下级的域名服务器的地址。

第五步:重复第四步,直到找到正确的纪录。

第六步:本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时还将结果返回给客户机。

DNS服务器通过分级查询逐级获取到对应域名的 IP 地址,大致过程如下:

  • 从"根域名服务器"查到"顶级域名服务器"的NS记录和A记录;
  • 从"顶级域名服务器"查到"次级域名服务器"的NS记录和A记录;
  • 从"次级域名服务器"查出"主机名"的IP地址。

这里提到了一些概念,例如 NS A 记录,这些是 DNS 的记录类型,常见的记录类型有:

  • A 地址记录(Address),返回域名指向的IP地址。
  • NS 域名服务器记录(Name Server),返回保存下一级域名信息的服务器地址。该记录只能设置为域名,不能设置为IP地址。
  • MX 邮件记录(Mail eXchange),返回接收电子邮件的服务器地址。
  • CNAME 规范名称记录(Canonical Name),返回另一个域名,即当前查询的域名是另一个域名的跳转。
  • PTR 逆向查询记录(Pointer Record),只用于从IP地址查询域名
  • CAA CAA(Certification Authority Authorization,证书颁发机构授权)是一项防止HTTPS证书错误颁发的安全措施,遵从IETF RFC6844。从2017年9月8日起,要求CA(Certification Authority,证书颁发)机构执行CAA强制性检查。

通常来说,为了服务的安全可靠,至少应该有两条NS 记录,而A记录和MX记录也可以有多条,这样就提供了服务的冗余性,防止出现单点失败。

13台根DNS服务器的具体信息

根域名服务器(root name server)是互联网域名解析系统(DNS)中最高级别的域名服务器,负责返回顶级域名的权威域名服务器的地址。我们在网址中键入的域名,其背后都需要通过 DNS 系统去解析返回 IP,从而让用户访问指定的服务器资源。而 DNS 查询解析记录并不是直接去根服务器去查询,而是逐级递归往上一层一层的去查。

目前世界上共计有 13 台根服务器,由12 个不同的独立组织运营,其中美国控制的有10台,欧洲2台,位于英国和瑞典,亚洲1台位于日本。具体的根服务器信息,可也在 https://root-servers.org/ 查看。

名称 管理单位 地理位置 IP地址
A INTERNIC.NET 美国-弗吉尼亚州 198.41.0.4
B 美国信息科学研究所 美国-加利弗尼亚州 128.9.0.107
C PSINet公司 美国-弗吉尼亚州 192.33.4.12
D 马里兰大学 美国-马里兰州 128.8.10.90
E 美国航空航天管理局 美国加利弗尼亚州 192.203.230.10
F 因特网软件联盟 美国加利弗尼亚州 192.5.5.241
G 美国国防部网络信息中心 美国弗吉尼亚州 192.112.36.4
H 美国陆军研究所 美国-马里兰州 128.63.2.53
I Autonomica公司 瑞典-斯德哥尔摩 192.36.148.17
J VeriSign公司 美国-弗吉尼亚州 192.58.128.30
K RIPE NCC 英国-伦敦 193.0.14.129
L IANA 美国-弗吉尼亚州 199.7.83.42
M WIDE Project 日本-东京 202.12.27.33

我们可以使用 dig 命令去查看即可,如下所示:

# CentOS7需要安装bind-utils
yum install bind-utils

# dig 命令查看 dns设置
dig

; <<>> DiG 9.10.6 <<>> @114.114.114.114
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26189
;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;.                IN  NS

;; ANSWER SECTION:
.            658 IN  NS  a.root-servers.net.
.            658 IN  NS  b.root-servers.net.
.            658 IN  NS  c.root-servers.net.
.            658 IN  NS  d.root-servers.net.
.            658 IN  NS  e.root-servers.net.
.            658 IN  NS  f.root-servers.net.
.            658 IN  NS  g.root-servers.net.
.            658 IN  NS  h.root-servers.net.
.            658 IN  NS  i.root-servers.net.
.            658 IN  NS  j.root-servers.net.
.            658 IN  NS  k.root-servers.net.
.            658 IN  NS  l.root-servers.net.
.            658 IN  NS  m.root-servers.net.

;; Query time: 39 msec
;; SERVER: 114.114.114.114#53(114.114.114.114)
;; WHEN: Wed Jun 26 17:30:51 CST 2019
;; MSG SIZE  rcvd: 239

配置DNS服务

# 关防火墙关SELinux
systemctl stop firewalld
systemctl disable firewalld

setenforce 0

sed  -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config

需要安装软件包: bind

服务名称: named

## CentOS7安装启动
yum -y install bind*
systemctl restart named
systemctl enable named

## 配置文件位于/etc/bind/目录下,主要包括named.conf.options和named.conf.local两个文件。

# 查看named的主配置文件
vim /etc/named.conf
###############################################
listen-on port 53 { any; };  # 绑定的地址需要修改
allow-query     { any; };    # 允许查询的服务地址
##############################################
# 配置如下域名
www.test.com 192.168.8.22
mail.test.com 192.168.8.33
dns.test.com 192.168.8.133
ftp.test.com 192.168.8.122
new.test.com 192.168.8.101
# 确定“域”名 --> test.com
#  /etc/named.conf 或 /etc/named.rfc1912.zones
vim /etc/named.rfc1912.zones  # 辅助域配置文件
#######################################################
# 定义正向解析域
zone "test.com" IN {
    type master;
    file "test.com.zone";
    # 正向解析是设定好域名,通过域名从正向解析文件中找响应的IP地址。
    allow-update { none; };  # 默认不允许slave从服务器同步
};   # 别忘记加;

# 定义反向解析域
zone "8.168.192.in-addr.arpa" IN {
        type master;
        file "8.168.192.zone";  # 设定好ip的网络段,通过ip找域名
        allow-update { none; }; # 默认不允许slave从服务器同步
};     # 别忘记加;
#######################################################

# 到/var/named 下创建并修改zone文件
cd /var/named/

touch test.com.zone  8.168.192.zone
vim test.com.zone
:r ./named.localhost
##################################################################
$TTL 1D
@       IN SOA  test.com. root.test.com. (
            133     ; serial  版本号
            1D      ; refresh 更新时间
            1H      ; retry   重试时间
            1W      ; expire  终止时间
            3H )     ; minimum 默认DNS缓存时间

        IN NS   dns.test.com.
        IN MX   10 mail.test.com.
www      IN  A   192.168.8.22
mail     IN  A   192.168.8.33
dns      IN  A   192.168.8.133
ftp      IN  A   192.168.8.122
new      IN  A   192.168.8.101
##################################################################

vim 8.168.192.zone
:r ./named.loopback
##################################################################
$TTL 1D
@       IN SOA  test.com. root.test.com. (
           133     ; serial
           1D      ; refresh
           1H      ; retry
           1W      ; expire
           3H )    ; minimum
        NS      dns.test.com.
22      PTR     www.test.com.
33      PTR     mail.test.com.
133     PTR     dns.test.com.
122     PTR     ftp.test.com.
101     PTR     new.test.com.
##################################################################
# 重启服务,检查dns是否生效
systemctl restart named

# 修改网卡的dns设置为dns服务器:192.168.8.133
vim /etc/sysconfig/network-scripts/ifcfg-ens33

DNS1=192.168.8.133

# 重启网卡
systemctl restart network

nslookup

> www.test.com
Server:        192.168.8.133
Address:    192.168.8.133#53

Name:    www.test.com
Address: 192.168.8.22

------------------dns配置成功------------------

DNS从服务器设置

yum -y install bind*

systemctl restart named
systemctl enable named 

# 查看named的主配置文件
vim /etc/named.conf
###############################################
listen-on port 53 { any; };  # 绑定的地址需要修改
allow-query     { any; };  # 允许查询的服务地址
##############################################
vim /etc/named.rfc1912.zones
##################################################################
zone  "test.com" IN {
        type slave;                      #服务类型为从服务器
        masterfile-format text;          #主服务器同步过来的数据配置文件的格式为文本,不然会乱码
        masters { 192.168.8.133; };      #主服务器的IP地址是192.168.8.133
        file "slaves/test.com.zone";     #同步过来的数据配置文件放在/var/named/slaves文件夹下,并调用
};        # 别忘记加 ;


# 定义反向解析域
zone "8.168.192.in-addr.arpa" IN {
        type slave;
        masterfile-format text;           #主服务器同步过来的数据配置文件的格式为文本,不然会乱码
        masters { 192.168.8.133; };       #主服务器的IP地址是192.168.8.133
        file "slaves/8.168.192.zone";     #同步过来的数据配置文件放在/var/named/slaves文件夹下,并调用
};
##################################################################

# 主服务器需要更改的地方
vim /etc/named.rfc1912.zones

# 定义正向解析域
zone "test.com" IN {
    type master;
    file "test.com.zone";
    allow-update { 192.168.8.140; };    # 允许的同步的从服务IP
    also-notify { 192.168.8.140; };     # 动态通知从DNS更新
    notify yes;                         # 有更新会告知从服务器
};

# 定义反向解析域
zone "8.168.192.in-addr.arpa" IN {
        type master;
        file "8.168.192.zone";             # 设定好ip的网络段,通过ip找域名
        allow-update { 192.168.8.140; };   # 允许的同步的从服务IP
        also-notify { 192.168.8.140; };    # 动态通知从DNS更新
        notify yes;                        # 有更新会告知从服务器
};

# 分别重启主从的DNS服务器
systemctl restart named

# 同步成功时从服务器的/var/named/slaves/目录下会同步生成zone文件。
cd /var/named/slaves/
ls

# 修改网卡的dns设置为dns服务器:192.168.8.140
vim /etc/sysconfig/network-scripts/ifcfg-ens33

DNS1=192.168.8.140

# 重启网卡
systemctl restart network

# 从服务器测试,然后停掉主服务器再测试。
nslookup

> www.test.com
Server:        192.168.8.140
Address:    192.168.8.140#53

Name:    www.test.com
Address: 192.168.8.22

DHCP

动态主机配置协议DHCP )服务器为网络上的每个设备动态分配IP地址和其他网络配置参数。

DHCP协议采用客户端/服务器模型(C/S模型),服务端可以为客户端提供IP、掩码、网关、主机名、DNS等信息。客户端只需将IP获得方式设置为自动获取即可。

目前可以提供DHCP服务的设备有很多,比如:

  • DHCP服务器(windows server、linux)
  • 硬件路由器
  • 家用宽带路由

DHCP服务搭建

1、安装dhcp服务

[root@dhcp ~]# yum -y install dhcp

2、设置dhcp配置文件(设置的dhcp网段需要和自己网卡在一个网段)

[root@dhcp /]# cp  /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example  /etc/dhcp/dhcpd.conf
cp:是否覆盖"/etc/dhcp/dhcpd.conf" y
[root@dhcp ~]# vim /etc/dhcp/dhcpd.conf
    #第47行
    #设置dhcp网段和子网掩码,注意必须和本机IP的网段保持一致
    subnet 192.168.8.0 netmask 255.255.255.0 {
    #设置dhcp地址池范围
    range 192.168.8.100 192.168.8.200;
    #dns服务器IP地址
    option domain-name-servers 114.114.114.114;
    #设置网关
    option routers 192.168.8.30;
    #广播地址
    option broadcast-address 192.168.8.255;
    #设置默认租约时间:4小时
    default-lease-time 14400;
    #设置最大租约时间:8小时
    max-lease-time 28800;
}

3、启动dhcp服务

[root@dhcp ~]# systemctl start dhcpd

4、查看启动进程

[root@dhcp ~]# netstat -anptu|grep dhcpd

增加保留地址

host prtsvr {
hardware Ethernet 客户机的mac地址;
fixed-address  保留IP地址;
}

注释:放在subnet 大括号里面的对局部有效,放在外面的对全局有效