DHCP服务原理

DHCP:动态主机设置协议,是一个局域网协议,使用UDP协议工作

主要有两个用途

  • 用于局域网或网络服务供应商自动分配IP地址
  • 给用户用于内部网管理员作为所有计算机的中央管理的手段

DHCP优点

  • 减少管理员的工作量
  • 避免IP地址冲突
  • 提高IP地址的利用率
  • 移动计算机之后不用重新配置网络信息,能够方便更改错误的可能性

DHCP相关概念

  • DHCP客户端:获取网络配置信息
  • DHCP服务端:提供网络配置参数(IP地址、DNS、Gateway等)
  • DHCP中继代理:服务端和客户端之间转发DHCP的设备
  • 作用域:一个网络中所有可分配的IP地址的连续范围,主要用来定义物理子网的单一IP地址范围
  • 超级作用域:一组作用域的集合,实现一个物理子网中多个逻辑IP地址
  • 排除范围:移除作用域中有限的IP地址序列(不使用DHCP服务)
  • 地址池:定义作用域-排除范围之后,剩余的所有地址形成可用地址池
  • 保留:DHCP服务器提供永久地址租约,确保客户端始终使用相同的IP地址
  • 租用:客户从服务器上获得并临时占用某个IP地址的过程
  • 租约:
    • 获得的IP地址使用时间
    • 获得IP地址时租约会被激活并更新其地址租约,当租约到期或者被删除时租约会停止

DHCP租约更新

  • 自动更新租约:
    • 当租约 >= 50% 自动尝试更新租约
    • 当租约 >= 87.5% 发出广播再次更新租约
    • 当租约 >= 100% 客户端停止使用当前的IP地址,只能够重新进行DHCP租约过程

DHCP运行过程

通过对DHCP获取信息的过程抓包,可以得到如下4个数据包

image-20210122082235819

1、客户机发送请求IP (DHCP Discover 广播包)

当一个DHCP客户机启动时,客户机还没有IP地址,所以客户机需要通过DHCP获取一个合法的地址,此时DHCP客户机以广播方式发送DHCP Discover发现信息来寻找DHCP服务器,广播信息中包含DHCP客户机的MAC地址和计算机名,以便DHCP服务器确定是那个客户机发送的请求

2、服务器响应 (服务器发DHCP Offer 广播包)提供服务

当DHCP服务器接收到来自客户机的请求IP地址信息时,他就在自己的IP地址池中查找是否有合法的IP地址提供给客户机,如果有,DHCP服务器就会将此IP地址做上标记,加入到DHCP Offer的消息中,然后DHCP服务器就广播一则包含下列信息的DHCP Offer消息:DHCP客户机的MAC地址,DHCP服务器提供的合法IP地址、子网掩码、默认网关、租约的期限、DHCP服务器的IP地址

3、客户机选择IP (客户机发DHCP Request 广播包)

DHCP客户机从接收到的第一个DHCP Offer消息中提取IP地址,发出IP地址的 DHCP服务器将该地址保留,这样该地址就不能在分配给另一个DHCP客户机。当客户机从第一个DHCP服务器接收到DHPC Offer消息并提取了IP地址后,客户机将DHCP Request消息广播到所有的DHPC服务器,表明它接收提供的内容。DHPC Request消息包括为客户机提供IP配置的服务器的服务标识符(服务器的IP地址)。DHCP服务器查看服务器标识符字段,以确定提供的IP是否被接受,如果DHCP Offer被拒绝,则DHCP服务器取消并保留其IP地址以提供给下一个IP租约的请求

4、服务器确定租约 (服务器发 DHCP ACK广播包)

DHCP服务器接收到DHCP Request消息后,以DHCP ACK消息形式向客户机广播成功确认,该消息包括含有IP地址的有效租约和其他的可配置的信息。当客户机收到DHCP ACK消息时,他就配置了IP地址,完成了TCP/IP的初始化。

注意:如果局域网中DHCP服务器没有响应请求,则主机会默认配置169.254.xxx.xxx来实现局域网的通信。

日志:

1
2
3
4
5
6
/var/log/message 
Feb 22 20:28:25 test dhclient[1779]: DHCPDISCOVER on ens34 to 255.255.255.255 port 67 interval 11 (xid=0x65b7cc35)
Feb 22 20:28:26 test dhclient[1779]: DHCPREQUEST on ens34 to 255.255.255.255 port 67 (xid=0x65b7cc35)
Feb 22 20:28:26 test dhclient[1779]: DHCPOFFER from 192.168.10.254
Feb 22 20:28:26 test dhclient[1779]: DHCPACK from 192.168.10.254 (xid=0x65b7cc35)
bound to 192.168.10.131 -- renewal in 772 seconds.

手动更新租约

  • Windows:ipconfig /renew | /release
  • Linux:dhclient -r

DHCP实验

DHCP配置

拓扑

路由器配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
================R1 配置dhcp服务端==============
R1#conf t
R1(config)#int e0/0
R1(config-if)#ip add 192.168.1.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#ip dhcp pool cisco # 创建一个地址池
R1(dhcp-config)#network 192.168.1.0 /24 # 在地址池中放一个网段
R1(dhcp-config)#default-router 192.168.1.1 # 设置默认网关
R1(dhcp-config)#dns-server 114.114.114.114 114.114.115.115 # 设置主备DNS
R1(dhcp-config)#lease 1 # 租约时间改为1天
R1(dhcp-config)#exit
R1(config)#ip dhcp excluded-address 192.168.1.1 # 设置排除地址
================R2 R3 配置dhcp客户端==============
R3#conf t检查IP地址分配情况
Enter configuration commands, one per line. End with CNTL/Z.
R3(config)#int e0/0
R3(config-if)#ip add dhcp
R3(config-if)#no sh
R2#conf t
Enter configuration commands, one per line. End with CNTL/Z.
R2(config)#int e0/0
R2(config-if)#ip add dhcp
R2(config-if)#no sh

检查IP地址分配情况

在路由器上查看地址池分配的情况

1
2
3
4
5
6
7
R1#show ip dhcp binding
Bindings from all pools not associated with VRF:
IP address Client-ID/ Lease expiration Type
Hardware address/
User name
192.168.1.2 010c.18a5.e949.00 Jun 17 2020 09:04 AM Automatic
192.168.1.3 010c.18a5.fca9.00 Jun 17 2020 09:05 AM Automatic

DHCP地址绑定

拓扑

image-20210122080620499

路由器配置

1
2
3
4
5
6
7
8
9
10
R1#conf t
R1(config)#int e0/0
R1(config-if)#ip add 192.168.1.1 255.255.255.0
R1(config-if)#no sh
R1(config-if)#ip dhcp pool cisco
R1(dhcp-config)#netw 192.168.1.0 /24
R1(dhcp-config)#def 192.168.1.1
R1(dhcp-config)#dns 114.114.114.114 114.114.115.115
R1(dhcp-config)#exit
R1(config)#ip dhcp ex 192.168.1.1

windows绑定DHCP

查看windows获取到的IP地址

image-20210122080834275

去路由器上查看分配这个地址的对应身份信息

1
2
3
4
5
6
R1#sh ip dhcp binding
Bindings from all pools not associated with VRF:
IP address Client-ID/ Lease expiration Type
Hardware address/
User name
192.168.1.3 010c.18a5.af90.00 Jun 18 2020 01:23 AM Automatic

可以看到windows使用的是 010c.18a5.af90.00 这个信息获得的这个IP地址,而这个信息并不是MAC
地址,这台windows的mac地址我们可以通过 ipconfig /all 查看

image-20210122081008430

所以windows会在mac地址前加上 01 组成 Client-ID 向DHCP服务端发起请求,我们下面绑定这个
Client-ID 到一个地址池,这个地址池中只放一个IP地址,这样windows的地址就被绑定了

1
2
3
4
R1(config)#ip dhcp pool windows
R1(dhcp-config)#host 192.168.1.100
R1(dhcp-config)#client-identifier 010c.18a5.af90.00
% A binding for this client already exists.

如果绑定的时候出现 % A binding for this client already exists. ,说明你要绑定的这个身份
信息在dhcp地址池中已经被占用,先去清理一下

1
R1#clear ip dhcp binding *

DNS服务

DNS介绍

  • DNS:域名解析服务,一个分布式数据系统,作用是将域名解析成IP地址;它能让用户使用名字来代替IP地址进行记忆,来访问Internet上的服务主机
  • DNS是基于c/s模型设计的

DNS域名

  • 根域
  • 一级域名:Top Level Domain: tld
    com, edu, mil, gov, net, org, int,arpa
    三类:组织域、国家域(.cn, .ca, .hk, .tw)、反向域
  • 二级域名
  • 三级域名
  • 最多127级域名
  • ICANN(The Internet Corporation for Assigned Names and Numbers)互联网名称与数字地址分配机构,负责在全球范围内对互联网通用顶级域名(gTLD)以及国家和地区顶级域名(ccTLD)系统的管理、以及根服务器系统的管理

DNS域名结构

image-20200724201208660

DNS系统组成

  • 域名空间:表示一组数据并提供它们的有关信息的树结构的详细说明
  • 域名服务器:保持和维护域名空间中的数据
  • Stub解析器:简单的程序,它从服务器中获取信息来响应对域名空间中主机的查询,用于DNS客户端

DNS解析

  • DNS查询类型:
    • 递归查询:DNS服务代理请求客户端联系其他DNS服务器,以完全解析,返回给客户端(帮助你一级一级查找)
    • 迭代查询:客户机自己不断请求DNS服务来解析名称,典型的DNS服务器之间的交互(告诉你服务器IP,让你自己找)
  • 名称服务器:域内负责解析本域内的名称的主机
    • 根服务器:13组服务器
  • 解析类型:
    • FQDN –> IP
    • IP –> FQDN
  • 注意:正反向解析是两个不同的名称空间,是两棵不同的解析树

  • 一次完整的查询请求经过的流程:
    Client –>hosts文件 –>DNS Service Local Cache –> DNS Server
    (recursion) –> Server Cache –> iteration(迭代) –> 根–> 顶级域名DNS–>
    二级域名DNS…
  • 解析答案:
    • 肯定答案
    • 否定答案:请求的条目不存在等原因导致无法返回结果
    • 权威答案
    • 非权威答案

DNS解析过程

image-20200724201426926

  1. 浏览器缓存
  2. 系统缓存
  3. 路由器缓存 —–> 客户端的使用
  4. ISP DNS缓存
  5. 根域名服务器
  6. 顶级域名服务器
  7. 主机名服务器
  8. 保存结果(缓存)

DNS服务器类型

  • 权威性服务器

    • 主域名服务器
    • 辅助域名服务器:作为主域名服务器的冗余服务
      • 主域名服务器和辅助域名服务器之间的数据同步使用的是TCP协议;其他情况下
        一般都是使用UDP协议
      • 残根域名服务器
      • 秘密域名服务器
  • 非权威服务器

    • 高速缓存服务器
    • 转发服务器
  • 主DNS服务器:管理和维护所负责解析的域内解析库的服务器

  • 从DNS服务器:从主服务器或从服务器“复制”(区域传输)解析库副本

    • 序列号:解析库版本号,主服务器解析库变化时,其序列递增
    • 刷新时间间隔:从服务器从主服务器请求同步解析的时间间隔
    • 重试时间间隔:从服务器请求同步失败时,再次尝试时间间隔
    • 过期时长:从服务器联系不到主服务器时,多久后停止服务
  • “通知”机制:主服务器解析库发生变化时,会主动通知从服务器

  • 说明:

    1. 所有的服务器均设置了缓存服务器来提供域名解析(提高解析效率)
    2. 一些域的主域名服务器可以是另一些域名服务器
    3. 一个域只能创建一个主机域名服务器,另外至少去创建两个辅助域名服务器(冗余和负载)
    4. 转发服务器一般用于不希望用户直接访问域名服务器的情况下

DNS区域

  • 方便根据实际情况来分散域名管理工作的负载,将DNS域名空间划分为多个区域进行管理
    • 区域是DNS服务器管理的范围
    • DNS服务器以区域为单位来管理域名空间的
  • 一台DNS服务器可以管理一个或多个区域,而一个区域也可以由多台DNS服务进行管理
    • 将DNS域名空间划分为几个zone,它存储着有关一个或多个DNS域的名称信息
    • 在DNS服务器中必须先建立区域,再在区域中建立子域,然后去添加主机信息

域的委托管理

  • 管理是分布式,DNS将子域授权给其他组织进行管理
  • 优点:
    1. 工作负载减轻
    2. 提高域名服务器的响应速率
    3. 提高网络带宽的利用率

区域传输

  • 区域传输:
    • 完全传输:传送整个解析库
    • 增量传输:传递解析库变化的那部分内容
  • Domain: Fully Qualified Domain Name
    • 正向:FQDN –> IP
    • 反向: IP –> FQDN
  • 负责本地域名的正向和反向解析库
    • 正向区域
    • 反向区域

资源记录

  • 区域解析库:由众多RR组成

    • 资源记录:Resource Record, RR
    • 记录类型:A, AAAA, PTR, SOA, NS, CNAME, MX
  • SOA:Start Of Authority,起始授权记录;一个区域解析库有且仅能有一个 SOA记录,必须位于解析库的第一条记录

  • A:internet Address,作用,FQDN –> IPv4

  • AAAA:FQDN –> IPv6

  • PTR:PoinTeR,IP –> FQDN

  • NS:Name Server,专用于标明当前区域的DNS服务器

  • CNAME : Canonical Name,别名记录

  • MX:Mail eXchanger,邮件交换器

  • TXT:对域名进行标识和说明的一种方式,一般做验证记录时会使用此项,如: SPF(反垃圾邮件)记录,https验证等

    示例:_dnsauth TXT 2012011200000051qgs69bwoh4h6nht4n1h0lr038x

资源记录定义的格式

语法:name [TTL] IN rr_type value
注意:

  1. TTL可从全局继承
  2. @可用于引用当前区域的名字
  3. 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应
  4. 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机

SOA记录

  • name: 当前区域的名字,例如“kinmfer.com.”

  • value: 有多部分组成

    1. 当前区域的主DNS服务器的FQDN,也可以使用当前区域的名字;
    2. 当前区域管理员的邮箱地址;但地址中不能使用@符号,一般用.替换
      例如:admin.kinmfer.com
    3. 主从服务区域传输相关定义以及否定的答案的统一的TTL
  • 例如:

    1
    2
    3
    4
    5
    6
    7
    kinmfer.com. 86400 IN SOA ns.kinmfer.com.nsadmin.kinmfer.com. (
    2015042201 ;序列号
    2H ;刷新时间
    10M ;重试时间
    1W ;过期时间
    1D ;否定答案的TTL值
    )

    NS记录

  • name: 当前区域的名字

  • value: 当前区域的某DNS服务器的名字,例如ns.kinmfer.com.

  • 注意:

    1. 一个区域可以有多个NS记录
      例如:

      1
      2
      kinmfer.com. IN NS ns1.kinmfer.com.
      kinmfer.com. IN NS ns2.kinmfer.com.
    2. 相邻的两个资源记录的name相同时,后续的可省略

    3. 对NS记录而言,任何一个ns记录后面的服务器名字,都应该在后续有
      一个A记录

MX记录

  • name: 当前区域的名字

  • value: 当前区域的某邮件服务器(smtp服务器)的主机名

  • 一个区域内,MX记录可有多个;但每个记录的value之前应该有一个数字(0-99),表示此服务器的优先级;数字越小优先级越高
    例如:

    1
    2
    kinmfer.com.	IN 	MX 10 mx1.kinmfer.com.
    IN MX 20 mx2.kinmfer.com.
  • 注意:对MX记录而言,任何一个MX记录后面的服务器名字,都应该在后续有一个A记录

A记录

  • name: 某主机的FQDN,例如:www.kinmfer.com.

  • value: 主机名对应主机的IP地址
    例如:

    1
    2
    3
    4
    5
    6
    7
    www.kinmfer.com. IN A 1.1.1.1
    www.kinmfer.com. IN A 2.2.2.2
    mx1.kinmfer.com. IN A 3.3.3.3
    mx2.kinmfer.com. IN A 4.4.4.4
    $GENERATE 1-254 HOST$ IN A 1.2.3.$
    *.kinmfer.com. IN A 5.5.5.5
    kinmfer.com. IN A 6.6.6.6
  • 避免用户写错名称时给错误答案,可通过泛域名解析进行解析至某特定地址

别名记录

CNAME:

  • name: 别名的FQDN
  • value: 真正名字的FQDN

例如:

1
www.kinmfer.com. IN CNAME websrv.kinmfer.com.

其他记录

  • AAAA:

    • name: FQDN
    • value: IPv6
  • PTR:

    • name: IP,有特定格式,把IP地址反过来写,1.2.3.4,要写作4.3.2.1;而有特定后缀:in-addr.arpa.,所以完整写法为:4.3.2.1.in-addr.arpa.
    • value: FQDN

    例如:

    1
    4.3.2.1.in-addr.arpa. IN PTR www.kinmfer.com.

    如1.2.3为网络地址,可简写成:

    1
    4 IN PTR www.kinmfer.com.

    注意:网络地址及后缀可省略;主机地址依然需要反着写

子域

  • 子域授权:每个域的名称服务器,都是通过其上级名称服务器在解析库进行授权

  • 类似根域授权tld:

    1
    2
    3
    4
    .com. 		IN NS ns1.com.
    .com. IN NS ns2.com.
    ns1.com. IN A 2.2.2.1
    ns2.com. IN A 2.2.2.2
  • kinmfer.com. 在.com的名称服务器上,解析库中添加资源记录

    1
    2
    3
    4
    5
    6
    kinmfer.com. 		IN 	NS ns1.kinmfer.com.
    kinmfer.com. IN NS ns2.kinmfer.com.
    kinmfer.com. IN NS ns3.kinmfer.com.
    ns1.kinmfer.com. IN A 3.3.3.1
    ns2.kinmfer.com. IN A 3.3.3.2
    ns3.kinmfer.com. IN A 3.3.3.3
  • glue record:粘合记录,父域授权子域的记录

系统DNS配置文件

  • 读取的配置文件:
    • 控制文件: /etc/host.conf /etc/hosts
    • 配置文件: /etc/resolv.conf
  • /etc/host.conf配置文件:
    • Order:指定使用不同的名称解析机制的顺序
      • hosts:/etc/hosts文件
      • bind:使用DNS服务器
      • nis:使用NIS服务
    • Alert:以off和on为参数。若为on,则任何试图骗取IP地址的行为都通过syslog工具进行记录
    • Nospoof :若在反向解析找出与指定的地址匹配的主机名,则对返回的地址进行解析以确认它确实与您的查询地址相匹配。为了防止“骗取”IP地址,通过指定nospoof on来允许此功能
    • multi on :表示是否运行/etc/hosts文件允许主机指定多个地址 ,on表示运行
      rccorder :如果被设置为on,那么所有查询将被重新排序。
  • /etc/resolv.conf配置文件:
    • search localdomain # 允许查询本地域名空间
    • nameserver 172.16.0.2 # 指定域名服务器
    • domain: 定义默认的域名(主机的本地域名)
    • options:
      • rotate: 打开客户端,进行轮询查询,多个nameserver的时候
      • nochecnames: 当需要使用到“_”的域名时,需要设置该选项

智能DNS

image-20200725204455016

GSLB和CDN

image-20200725204543047

GSLB

  • GSLB:Global Server Load Balance全局负载均衡
  • GSLB是对服务器和链路进行综合判断来决定由哪个地点的服务器来提供服务,实现异地服务器群服务质量的保证
  • GSLB主要的目的是在整个网络范围内将用户的请求定向到最近的节点(或者区域)
  • GSLB分为基于DNS实现、基于重定向实现、基于路由协议实现,其中最通用的是基于DNS解析方式

CDN

内容分发网络:Content Delivery Network

服务商:蓝汛,网宿,帝联等

image-20200725204729205

工作原理

1.用户向浏览器输入www.a.com这个域名,浏览器第一次发现本地没有dns缓存,则向网站的DNS服务器请求

2.网站的DNS域名解析器设置了CNAME,指向了www.a.tbcdn.com,请求指向了CDN网络中的智能DNS负载均衡系统

3.智能DNS负载均衡系统解析域名,把对用户响应速度最快的IP节点返回给用户;

4.用户向该IP节点(CDN服务器)发出请求

5.由于是第一次访问,CDN服务器会通过Cache内部专用DNS解析得到此域名的原web站点IP,向原站点服务器发起请求,并在CDN服务器上缓存内容

6.请求结果发给用户

image-20200725204827830

相关命令

dig

  • dig [-t type] name [@SERVER] [query options]
    dig只用于测试dns系统,不会查询hosts文件进行解析
    • -t 指定要查询的DNS数据类型(默认为A)
    • -x 执行逆向域名查询
    • -b 使用指定的本机ip地址向域名服务器发送域名查询请求
  • 查询选项:
    • +[no]trace:跟踪解析过程 : dig +trace magedu.com
    • +[no]recurse:进行递归解析
    • +[no]short:提供简要答复。缺省值是以冗长格式显示答复信息。
    • 测试反向解析:
      dig -x IP = dig –t ptr reverseip.in-addr.arpa
    • 模拟区域传送:
      dig -t axfr ZONE_NAME @SERVER
      dig -t axfr xxx.com @10.10.10.11
      dig –t axfr 100.1.10.in-addr.arpa @172.16.1.1
      dig -t NS . @114.114.114.114
      dig -t NS . @a.root-servers.net

host

nslookup

BIND

安装

  • DNS服务器软件:bind,powerdns,unbound
  • BIND相关程序包:yum list all bind*
    • bind:服务器
    • bind-libs:相关库
    • bind-utils:客户端
    • bind-chroot: /var/named/chroot/
  • BIND程序名:named

yum安装

1
dnf install bind -y

编译安装

  • 下载bind:

    1
    2
    3
    4
    isc.org:
    bind-9.10
    bind-9.11
    bind-10
  • 编译安装bind

    1
    2
    3
    4
    5
    6
    7
    8
    tar xvf bind-9.11.0a3.tar.gz
    cd bind-9.11.0a3/
    groupadd -r -g 53 named
    useradd -r -u 53 -g 53 named
    ./configure --prefix=/usr/local/bind9 --sysconfdir=/etc/named/ --withoutopenssl
    --disable-ipv6 --disable-chroot --enable-threads
    make
    make install
  • 环境变量:

    1
    2
    vim /etc/profile.d/named.sh
    export PATH=/usr/local/bind9/bin:/usr/local/bind9/sbin/:$PATH
  • 库和头文件

    1
    2
    3
    4
    5
    6
    vim /etc/ld.so.conf.d/named.conf
    /usr/local/bind9/lib

    ldconfig –v

    ls -sv /usr/local/bind9/include /usr/include/named
  • man帮助

    1
    2
    3
    vim /etc/man.config | /etc/man_db.conf
    MANPATH /usr/local/bind9/share/man
    man named.conf
  • ```sh
    vim /etc/named/named.conf

    options {
        directory “/var/named/”;
    };
    zone "." IN {
        type hint;
        file "named.ca";
    };
    zone "localhost" IN {
        type master;
        file “named.localhost";
        allow-update {none;};
    };

    zone “1.0.0.127.in-addr.arpa” IN {

        type master;
        file "named.loopback";
        allow-update {none;};
    };
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17

    - 区域数据库

    ```sh
    mkdir /var/named
    named-checkconf
    dig +norec @a.root-servers.net > /var/named/named.ca
    vim /var/named/named.localhost
    $TTL 1d
    @ IN SOA localhost. admin.localhost. (
    2016061801
    1h
    5m
    7d
    1d)
    IN NS localhost.
    localhost. IN A 127.0.0.1
  • ```sh
    vim /var/named/named.loopback
    $TTL 1d
    @ IN SOA localhost. admin.localhost. (

                        2016061801
                        1h
                        5m
                        7d
                        1d)

    NS @
    A 127.0.0.1
    PTR localhost.

    1
    2
    3
    4
    5
    6
    7
    8

    - 设置权限

    ```sh
    chmod 640 /var/named/*
    chmod 640 /etc/named/named.conf
    chgrp -R named /var/named/
    chgrp named /etc/named/named.conf
  • 启动服务和测试

    1
    2
    3
    4
    5
    6
    7
    man named
    named -u named -f -g -d 3 前端级别3方式运行
    named -u named 后台运行
    killall named
    ss -tuln
    tail /var/log/message
    named -u named
  • 支持rndc

    1
    2
    3
    4
    5
    rndc reload 观察错误提示
    rndc-confgen -r /dev/urandom > /etc/named/rndc.conf 生成key
    tail /etc/named/rndc.conf >> /etc/named/named.conf
    killall -SIGHUP named
    rndc status

    配置文件

  • 服务脚本和名称:/etc/rc.d/init.d/named /usr/lib/systemd/system/named.service

  • 主配置文件:/etc/named.conf, /etc/named.rfc1912.zones, /etc/rndc.key

  • 解析库文件:/var/named/ZONE_NAME.ZONE
    注意:

    1. 一台物理服务器可同时为多个区域提供解析
    2. 必须要有根区域文件;named.ca
    3. 应该有两个(如果包括ipv6的,应该更多)实现localhost和本地回环地址的解析库
  • rndc:remote name domain controller,
    默认与bind安装在同一主机,且只能通过127.0.0.1连接named进程
    提供辅助性的管理功能;953/tcp


主配置文件:

  • 全局配置:options {};
  • 日志子系统配置:logging {};
  • 区域定义:本机能够为哪些zone进行解析,就要定义哪些zone
    zone “ZONE_NAME” IN {};

注意:任何服务程序如果期望其能够通过网络被其它主机访问,至少应该监听在一个能与外部主机通信的IP地址上
缓存名称服务器的配置:

  • 监听外部地址即可
  • dnssec: 建议关闭dnssec,设为no

rndc命令

rndc COMMAND
COMMAND:

  • reload: 重载主配置文件和区域解析库文件
  • reload zonename: 重载区域解析库文件
  • retransfer zonename: 手动启动区域传送,而不管序列号是否增加
  • notify zonename: 重新对区域传送发通知
  • reconfig: 重载主配置文件
  • querylog: 开启或关闭查询日志文件/var/log/message
  • trace: 递增debug一个级别
  • trace LEVEL: 指定使用的级别
  • notrace:将调试级别设置为 0
  • flush:清空DNS服务器的所有缓存记录

实现主服务器

  • 主DNS名称服务器

    1. 在主配置文件中定义区域

      1
      2
      3
      4
      zone "ZONE_NAME" IN {
      type {master|slave|hint|forward};
      file "ZONE_NAME.zone";
      };
    2. 定义区域解析库文件
      出现的内容
      宏定义
      资源记录

  • 主配置文件语法检查:
    named-checkconf

  • 解析库文件语法检查:
    named-checkzone "kinmfer.com" /var/named/magedu.com.zone

  • 配置生效:
    rndc reloadsystemctl reload named

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$TTL 86400
$ORIGIN kinmfer.com.
@ IN SOA ns1.kinmfer.com. admin.kinmfer.com (
2015042201
1H
5M
7D
1D )
IN NS ns1
IN NS ns2
IN MX 10 mx1
IN MX 20 mx2
ns1 IN A 172.16.100.11
ns2 IN A 172.16.100.12
mx1 IN A 172.16.100.13
mx2 IN A 172.16.100.14
websrv IN A 172.16.100.11
websrv IN A 172.16.100.12
www IN CNAME websrv

实现从服务器

  • 应该为一台独立的名称服务器

  • 主服务器的区域解析库文件中必须有一条NS记录指向从服务器

  • 从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中

  • 主服务器得允许从服务器作区域传送

  • 主从服务器时间应该同步,可通过ntp进行;

  • bind程序的版本应该保持一致;否则,应该从高,主低
    定义从区域的方法:

    1
    2
    3
    4
    5
    zone "ZONE_NAME" IN {
    type slave;
    masters { MASTER_IP; };
    file "slaves/ZONE_NAME.zone";
    };

    实现子域

  • 子域授权:分布式数据库

  • 正向解析区域子域方法

  • 定义一个子区域:

    1
    2
    3
    4
    5
    6
    7
    8
    ops.kinmfer.com. 		IN 	NS 	ns1.ops.kinmfer.com.
    ops.kinmfer.com. IN NS ns2.ops.kinmfer.com.
    ns1.ops.kinmfer.com. IN A 1.1.1.1
    ns2.ops.kinmfer.com. IN A 1.1.1.2
    fin.kinmfer.com. IN NS ns1.fin.kinmfer.com.
    fin.kinmfer.com. IN NS ns2.fin.kinmfer.com.
    ns1.fin.kinmfer.com. IN A 3.1.1.1
    ns2.fin.kinmfer.com. IN A 3.1.1.2

    反向区域

  • 反向区域:
    区域名称:网络地址反写.in-addr.arpa.
    172.16.100. –> 100.16.172.in-addr.arpa.

  • 定义区域

    1
    2
    3
    4
    zone "ZONE_NAME" IN {
    type {master|slave|forward};
    file "网络地址.zone"
    };
  • 定义区域解析库文件
    注意:不需要MX,以PTR记录为主

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$TTL 86400
$ORIGIN 100.16.172.in-addr.arpa.
@ IN SOA ns1.kinmfer.com. admin.kinmfer.com. (
2015042201
1H
5M
7D
1D )
IN NS ns1.kinmfer.com.
IN NS ns2.kinmfer.com.
11 IN PTR ns1.kinmfer.com.
11 IN PTR www.kinmfer.com.
12 IN PTR mx1.kinmfer.com.
12 IN PTR www.kinmfer.com.
13 IN PTR mx2.kinmfer.com.

允许动态更新

  • 指定的zone语句块中:Allow-update {any;};

  • chmod 770 /var/named

  • setsebool -P named_write_master_zones on

    1
    2
    3
    4
    5
    6
    7
    nsupdate
    >server 127.0.0.1
    >zone kinmfer.com
    >update add ftp.kinmfer.com 88888 IN A 8.8.8.8
    >send
    >update delete www.kinmfer.com A
    >send
  • 测试:

    dig ftp.kinmfer.com @127.0.0.1
    ll /var/named/kinmfer.com.zone.jnl
    cat /var/named/kinmfer.com.zone

转发服务器

  • 注意:被转发的服务器需要能够为请求者做递归,否则转发请求不予进行

  • 全局转发: 对非本机所负责解析区域的请求,全转发给指定的服务器

    1
    2
    3
    4
    Options {
    forward first|only;
    forwarders { ip;};
    };
  • 特定区域转发:仅转发对特定的区域的请求,比全局转发优先级高

    1
    2
    3
    4
    5
    zone "ZONE_NAME" IN {
    type forward;
    forward first|only;
    forwarders { ip;};
    };
  • 注意:关闭dnssec功能

    1
    2
    dnssec-enable no;
    dnssec-validation no;

    访问控制

  • bind中基础的安全相关的配置:
    acl: 把一个或多个地址归并为一个集合,并通过一个统一的名称调用

  • 格式:

    1
    2
    3
    4
    5
    acl acl_name {
    ip;
    net/prelen;
    ……
    };
  • 示例:

    1
    2
    3
    4
    acl mynet {
    172.16.0.0/16;
    10.10.10.10;
    };
  • bind有四个内置的acl:

    • none 没有一个主机
    • any 任意主机
    • localhost 本机
    • localnet 本机的IP同掩码运算后得到的网络地址
  • 注意:只能先定义后使用;因此一般定义在配置文件中,处于options的前面

  • 访问控制的指令:

    • allow-query {}: 允许查询的主机;白名单
    • allow-transfer {}:允许区域传送的主机;白名单
    • allow-recursion {}: 允许递归的主机,建议全局使用
    • allow-update {}: 允许更新区域数据库中的内容

View

  • View:视图,实现智能DNS

    • 一个bind服务器可定义多个view,每个view中可定义一个或多个zone
    • 每个view用来匹配一组客户端
    • 多个view内可能需要对同一个区域进行解析,但使用不同的区域解析库文件
  • 注意:

    1. 一旦启用了view,所有的zone都只能定义在view中
    2. 仅在允许递归请求的客户端所在view中定义根区域
    3. 客户端请求到达时,是自上而下检查每个view所服务的客户端列表
  • 格式:

    1
    2
    3
    4
    5
    6
    7
    8
    view VIEW_NAME {
    match-clients { testacl; };
    zone “magedu.com” {
    type master;
    file “magedu.com.zone”;
    };
    include “/etc/named.rfc1912.zones”;
    };

    压力测试

  • /root/bind-xxx/contrib/scripts

  • 编译压力测试工具

    1
    2
    3
    4
    5
    cd /root/bind-xxx/contrib/queryperf
    ./configure
    make
    cp queryperf /usr/local/bind9/bin
    queryperf -h
  • 压力测试

    • ```sh
      vim test.txt
      www.kinmfer.com A
      kinmfer.com NS
      kinmfer.com MX
      pop3.kinmfer.com A
      web.kinmfer.com A
      1
      2
      3

      - ```
      queryperf -d test.txt -s 127.0.0.1
  • 打开日志功能

    1
    2
    3
    4
    rndc querylog
    rndc status
    queryperf -d test.txt -s 127.0.0.1
    wc -l /var/log/message

    DNS排错

  • #dig A example.com
    ; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> A example.com
    ;; global options: +cmd
    ;; Got answer:
    ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 30523
    ...
    SERVFAIL:The nameserver encountered a problem while processing the query.
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20

    可使用dig +trace排错,可能是网络和防火墙导致

    - NXDOMAIN:The queried name does not exist in the zone.
    可能是CNAME对应的A记录不存在导致

    - REFUSED:The nameserver refused the client's DNS request due to policy restrictions.
    可能是DNS策略导致

    - NOERROR不代表没有问题,也可以是过时的记录

    - 查看是否为权威记录,flags:aa标记判断

    - 被删除的记录仍能返回结果,可能是因为*记录存在
    如:` *.example.com. IN A 172.25.254.254`

    - 注意“.”的使用

    - 避免CNAME指向CNAME记录,可能产生回环

    test.example.com. IN CNAME lab.example.com. lab.example.com. IN CNAME test.example.com.
  • 正确配置PTR记录,许多服务依赖PTR,如sshd,MTA

  • 正确配置轮询round-robin记录

NAT

  • 当今的互联网是由一个个小的自治系统组成,一个家庭,一个企业就是一个小的自治系统
  • 自治系统内部有着众多的设备需要IP地址联网,每个地址都需要去IANA申请明显做不到,所以就会使用私有IP地址进行分配
  • 私有IP地址无法做到互联网通信,在内网之中就需要一个默认网关来代替大家请求互联网数据
  • NAT网络地址转换技术能够将数据包中的IP地址进行转换

NAT优缺点

优点 缺点
节省IP地址空间 增加转发延迟
解决IP地址重叠问题 丧失端到端的寻址能力
增加网络的连入Internet的弹性 某些应用不支持NAT
网络变更的时候减少IP重编址带来的麻烦 需要一定的内存空间支持动态存储NAT表项
对外隐藏内部地址,增加网络安全性 需要耗费一定CPU内存资源进行NAT操作

NAT术语

术语 英文 解释
内部本地 inside local 转换之前源地址
外部本地 outside local 转换之前目的地址
内部全局 inside global 转换之后源地址
内部全局 outside global 转换之后目的地址
  • inside 表示源地址, outside 表示目的地址
  • local 表示转换之前, global 表示转换之后