• ​0x00 前言简述

    • 基础概念

    • 基础术语

    • 记录类型

  • 0x01 DNS服务介绍

    • 原理流程

    • 实验目标

  • 0x02 DNS服务之Bind9

    • Ubuntu 安装

    • CentOS 安装

    • Docker 容器

    • 1) 源码编译安装

    • 2) APT仓库安装

    • Bind9 基础介绍

    • Bind9 安装方式


WeiyiGeek Blog - 为了能到远方,脚下的每一步都不能少。

Tips : 本文章来源 Blog 站点或者 WeiyiGeek 公众账号 (技术交流、友链交换请邮我哟), 原文地址:运维之DNS域名解析服务基础概念与Bind9安装

  • 微信公众号-WeiyiGeek # 精华文章发布地址(及时发布)
  • https://weiyigeek.top # 采用cloudflare CDN 国内有时访问较慢
  • https://weiyigeek.gitee.io # 国内访问快但可能会有更新不及时的情况


0x00 前言简述

基础概念

Q: 什么是DNS(Domain Name System)?

A: DNS即域名名称系统(也称域名解析服务器), 它使用层次结构的命名系统将域名和IP地址相互映射形成一个分布式数据库系统, 能够使人更方便的访问互联网
DNS 是互联网的基础设施类的服务、这是一种协议、协议最后是要实现的、协议实现的软件很多( 例如 Bind、CoreDNS)

Tips: DNS 命名用于 Internet 等 TCP/IP 网络中,通过用户友好的名称查找计算机和服务。当用户在应用程序中输入 DNS 名称时,该服务可以将此名称解析为与之相关的其他信息,如 IP 地址。

Tips: DNS 采用C/S架构服务器端主要工作在UDP协议端口53,当然也可以在TCP协议端口53之上。
Tips: 应用程序通常将 DNS 解析委派给操作系统的 DNS Resolver 来执行,程序员对它几乎无感知。

Q:什么是域名(Domain Name)?

A:是一串用点分割的字符,是互联网某台或者某组计算机的名称,使用者更好方便访问网页,而不需去记住一长串的IP地址字符,例如 http://www.weiyigeek.top/ --> IP地址

使用域名好处总结:

  • 1.方便人类记忆

  • 2.更换机器IP地址后不需要改变硬编码在应用的域名,只需要更改解析即可。

  • 2.便于实现负载均衡,例如一个域名可以对应多个IP。

  • 3.便于实现虚拟主机名进行访问同一个地址的多个应用,例如Nginx的代理。

Tips: 域名的购买与使用流程(此处忽略了我大天朝的特殊国情-备案):

  • 1.你在某域名提供商处购买了一个域名 weiyigeek.top

  • 2.域名提供商向 .top 对应的顶级域名服务器中插入一条以上的 NS 记录,指向它自己的次级 DNS 服务器,如 dns25.hichina.com.

  • 3.阿里云会向 TLD 中插入几条 NS 记录,指向阿里云的次级 DNS 服务器(如 alidns.com - 223.6.6.6)。

  • 4.你在该域名提供商的 DNS 管理界面中添加 A 记录,值为你的服务器 IP。

  • 5.OK 现在 ping 一下 weiyigeek.top,就会发现它已经解析到你自己的服务器了。

Tips: 当前每一级域名长度的限制是63个字符,域名总长度则不能超过253个字符。

Q: 什么是FQDN?

A: FQDN( Fully Qualified Domain Name) 完全限定域名,它是使用DNS的树状层级结构的完全路径域名来表示一个准确位置对应的主机。

例如域名大致分类:

组织域:.com、.org、.mil、.gov、.edu、.net、
国家域:.cn、.hk、.tw、.us、.jp、.ir、.uk
反向域:.in-addr.arpa

Tips : DNS提供正向解析(FQDN-->IP)反向解析(IP-->FQDN)的功能。

Q: 什么是名称解析?

A: 所谓名称解析的过程就是某个应用程序基于某个搜索引擎在指定的数据库中查询、而后查询到某些对应的键以后与之对应的键导出来的过程
简单的说: 它可以将一个域名(URL)解析到对应的IP地址上,从而能访问该IP地址下机器提供的相关应用, 所以几乎每个Internet连接都以DNS查找开始。
例如,多数用户喜欢使用友好的名称(如 debian.linuxsir.org)来查找计算机,如网络上的邮件服务器或 Web 服务器。友好名称更容易了解和记住。但是计算机使用数字地址在网络上进行通讯。为更容易地使用网络资源,DNS 等命名系统提供了一种方法,将计算机或服务的用户友好名称映射为数字地址。

# 域名对应IP查看
C:\Users\WeiyiGeek>ping www.weiyigeek.top
正在 Ping www.weiyigeek.top [104.31.80.144] 具有 32 字节的数据:
来自 104.31.80.144 的回复: 字节=32 时间=229ms TTL=50

基础术语

  • 主DNS服务器(master):就是一台存储着原始资料的DNS服务器。

  • 从DNS服务器(slave):使用自动更新方式从主DNS服务器同步数据的DNS服务器也叫(辅助DNS服务器)。

  • 缓存服务器(cache):不负责本地解析,采用递归方式转发客户机查询请求,并返回结果给客户机的DNS服务器。同时缓存查询回来的结果,也叫递归服务器。

  • 转发器(forward):这台DNS发现非本机负责的查询请求时,不再向根域发起请求,而是直接转发给指定的一台或者多台服务器。自身并不缓存查询结果。

  • hint : 根DNS internet服务器集。

  • 递归查询: 以上客户机和本地DNS服务器直接的查询方式

  • 迭代查询: 本地DNS服务器多次请求重复查询的方式

  • WHOIS: 即域名数据库查询, 一个域名的所有者可以通过查询WHOIS数据库而被找到;对于大多数根域名服务器基本的WHOIS由ICANN维护,而WHOIS的细节则由控制那个域的域注册机构维护。对于240多个国家代码顶级域名(ccTLDs),通常由该域名权威注册机构负责维护WHOIS, 例如:

    • 中国互联网络信息中心(China Internet Network Information Center)负责 .CN 域名的WHOIS维护

    • 香港互联网注册管理有限公司(Hong Kong Internet Registration Corporation Limited) 负责 .HK 域名的WHOIS维护

    • 台湾网络信息中心 (Taiwan Network Information Center) 负责 .TW 域名的WHOIS维护。

  • 域名分层结构(四层):

    • 1.根域(Root Zone):所有域名的根。根域名服务器负责解析顶级域名,给出顶级域名的 DNS 服务器地址。它的域名是 "" 空字符串。而它的全限定域名(FQDN)是 . ,因为 FQDN 总是以 . 结尾。
      Tips : 全球有13组DNS根服务器、11台在美国、一组在挪威、一组在日本、DNS服务重兵把守、他的安全性有多重要、一旦被攻击全球都互联网中断、可想而知。

# (1) 查看全球13个根节点的服务
$ dig -t NS .
# ;; OPT PSEUDOSECTION:
# ; EDNS: version: 0, flags:; udp: 65494
# ;; QUESTION SECTION:
# ;.                              IN      NS
# ;; ANSWER SECTION:
# .                       2483    IN      NS      d.root-servers.net.
# .                       2483    IN      NS      h.root-servers.net.
# .                       2483    IN      NS      c.root-servers.net.
# .                       2483    IN      NS      k.root-servers.net.
# .                       2483    IN      NS      g.root-servers.net.
# .                       2483    IN      NS      l.root-servers.net.
# .                       2483    IN      NS      m.root-servers.net.
# .                       2483    IN      NS      j.root-servers.net.
# .                       2483    IN      NS      f.root-servers.net.
# .                       2483    IN      NS      e.root-servers.net.
# .                       2483    IN      NS      a.root-servers.net.
# .                       2483    IN      NS      b.root-servers.net.
# .                       2483    IN      NS      i.root-servers.net.
# ;; Query time: 4 msec
  • 2.顶级域(Top Level Domains, TLD):.com .cn 等国际、国家级的域名, 顶级域名服务器负责解析次级域名,给出次级域名的 DNS 服务器地址, 每个顶级域名都对应各自的服务器,它们之间是完全独立的。例如 .cn 的域名解析仅由 .cn 顶级域名服务器提供。

  • 3.次级域(Second Level Domains): 个人/企业能够买到的域名,比如 baidu.com, 每个次级域名都有一到多个权威 DNS 服务器,这些 DNS 服务器会以 NS 记录的形式保存在对应的顶级域名(TLD)服务器中。权威域名服务器则负责给出最终的解析结果:ip 地址(A 记录 ),另一个域名(CNAME 记录)、另一个 DNS 服务器(NS 记录)等。

  • 4.子域(Sub Domians): *.baidu.com 统统都是 baidu.com 的子域。每一个子域都可以有自己独立的权威 DNS 服务器,这通过在子域中添加 NS 记录实现。

Tips: 目前国际 DNS 系统中已有上千个 TLD,包括中文「.我爱你」甚至藏文域名,详细列表参见 IANA TLD 数据库(http://www.iana.org/domains/root/db) , 除了国际可用的 TLD 还有一类类似「内网 IP 地址」的“私有 TLD”,最常见的比如 xxx.local xxx.lan,被广泛用在集群通信中。

  • 公共 DNS 服务器:缓存了大量的 DNS 记录,有效地降低了上游 DNS 服务器的压力,也加快了网络上的 DNS 查询速度。例如Google 的 8.8.8.8,腾讯 的 114.114.114.114, 阿里 的 233.6.6.6。

  • DNS 泛解析通配符 * : DNS 记录允许使用通配符 *,并且该通配符可匹配任意级数的子域!!!比如 *.example.com 就可以匹配所有的一二三四级域名等等,但是无法匹配 example.com 本身!

  • TTL (Time To Live): 上面讲了公共 DNS 服务器通过缓存技术,降低了上游 DNS 服务器的压力,也加快了网络上的 DNS 查询速度。可缓存总得有个过期时间吧!为了精确地控制 DNS 记录的过期时间,每条 DNS 记录都要求自定义设置一个时间属性——TTL,单位为秒。任何一条 DNS 缓存,在超过过期时间后都必须丢弃!另外在没超时的时候,DNS 缓存也可以被主动或者被动地刷新。

  • 本地 DNS 服务器:它只在当前局域网内有效,企业常用一般通过 DHCP 或者手动配置的方式,使内网的服务器都默认使用局域网 DNS 服务器进行解析,该服务器可以只解析自己的私有 DNS 域,而将其他 DNS 域的解析 forward 到公网 DNS 解析器去。

  • 私有 DNS 域:它会覆盖掉公网的同名域(如果公网上有这个域的话),它也可以使用公网不存在的 TLD,比如 xxx.local xxx.lan 等,例如 vmware vcenter 就默认使用 vsphere.local 作为它的 sso (单点登录)系统的域名。kubernetes 默认使用 svc.cluster.local作为集群内部域名。

记录类型

Q: 什么是RR(Resource Record)资源记录?

答: DNS层级结构中不管是节点还是叶子节点都是资源,对这些资源中的某一个的标识使用一定格式的多字段的一条记录来表示,该条记录就是资源记录RR。RR的标准记录在RFC 1034中

(1) RR(Resource Record)的组成说明:

  • owner name : 所属名称

  • TTL :缓存RR的秒数(Time-to-live)到达此数后强制刷新

  • CLASS : 表示一个协议或者一族协议(常用IN表示Internet)

  • TYPE : RR 类型

  • RDATA : 记录数据

(2) RR中IN类(CLASS)常见解析记录类型(type):

  • SOA :区域授权起始记录,区域文件第一条记录,而且一个区域文件只能有一条;

  • NS :名称服务器解析记录,就是一个Bind Server,这个Server不能提供这个域名的解析服务,直接返回NS记录,用户用这条记录请求权威的解析Bind Server,返回解析地址

  • MX :邮件服务器解析记录, 配合A记录进行

  • A :由域名解析出对应的IPv4地址就叫A记录,属于最基本的记录

  • AAAA : IPV6(A记录)可以理解成新一代的 A 记录。以后会用的越来越多的。

  • PTR :逆向解析记录(解析IP为域名)基本上只在设置邮件服务器时才会用到,例如18.12.168.192.in-addr.arpa name = www.weiyigeek.top.

  • CNAME :别名记录(Canonical name) 记录域名与另一个域名的对应关系由别的域名提供A记录的解析,主要用于给域名起别名

  • TXT : 文本记录主要用于验证域名所属权以及证书申请校验时使用。

  • SRV : SRV 记录用于提供服务发现,看名字也能知道它和 SERVICE 有关。主要用于企业域控(AD)、微服务发现(Kubernetes)等

例如 SOA 记录格式解析

$TTL 生存周期(单位s)
@ 记录TLL IN SOA MNAME RNAME (SERIAL;REFRESH;RETRY;EXPIRE;MINIMUM;
)# SOA的RDATA格式说明* MNAME : 授权主机DQDN或者当前区域的名称* RNAME : 邮箱地址采用@用.替代* SERIAL : 区域传送使用的版本号格式是yyyymmddnn* REFRESH : 从服务器去同步主服务器时间建个* RETRY : 刷新失败重试时间间隔* EXPIRE : 从服务器过期时长* TTL : 消极的缓存TTL即否宕答案过期时常# SOA 记录 @ 取代在/etc/named.conf中指定的域名其中中的数字分别为:序列号、刷新、重试、过期、生存期* 序列号:序列号用于DNS数据库文件的版本控制,每当数据被改变,这个序列号就应该被增加* 刷新:从服务器向主服务器查询最新数据的间隔周期。每一次检查时从服务器的数据是否需要更改,则根据序列号来判别* 重试:一旦从服务器尝试连接主服务器失败,下一次查询主服务器的延迟时间* 过期:如果从服务器无法连通主服务器,则在经过此时间后,宣告其数据过期* 生存期:服务器回答 '无此域名' 的间隔时间* 数字的默认单位为秒,否则:D= 日、H= 小时、W= 周、M= 分钟

示例1: 百度的SOA解析

$TTL 7200    ;# 生存周期(单位s)
@ 579  IN  SOA  dns.baidu.com. sa.baidu.com.  (    1408010001 ; serial number    5          ; refresh 5s    5          ; retry 5s    86400      ; expire 1d    3600       ; min TTL 1h
)

常用指令说明:

# (1) $TTL 可以在SOA之前使用该指令,给出TTL秒数的32位整数值。
# (2) $ORIGIN 设定域名它必须出现在任何一行省略书写的RR记录前。当一个区域文件第一次被读取时隐含这个命令的值为 <zone_name>.(必须是跟着一个半角句号),如果不设置它就必须在区域文件中书写FQDN。
* 例如: $ORIGIN kernel.org.
* www CNAME web-server  <等同于> www.kernel.org. CNAME web-server.kernel.org.
# (3) @符号等价于$ORIGIN。

示例2: NS/MX/CNAME/A/PTR各个RDATA格式

# 1.7 NS的RDATA格式
# NSDName:DNS的FQDN
baidu.com. 64899 IN NS ns2.baidu.com.
baidu.com. 64899 IN NS ns4.baidu.com.
baidu.com. 64899 IN NS dns.baidu.com.
baidu.com. 64899 IN NS ns7.baidu.com.
baidu.com. 64899 IN NS ns3.baidu.com.# 1.8 MX的RDATA格式
# PREFERENCE:优先级,越小越高
# EXCHANGE:邮件服务器FQDN
baidu.com. 7200 IN MX 20 jpmx.baidu.com.
baidu.com. 7200 IN MX 20 mx50.baidu.com.
baidu.com. 7200 IN MX 10 mx.n.shifen.com.
baidu.com. 7200 IN MX 20 mx1.baidu.com.# 1.9 CNAME的RDATA格式
# CNAME:权威名称,FQDN
www.baidu.com. 1154 IN CNAME www.a.shifen.com.
www.a.shifen.com 是正式名称,而 www.baidu.com 是别名# 2.0 A的RDATA格式
# ADDRESS:IPV4地址
www.baidu.com. 1154 IN CNAME www.a.shifen.com.
www.a.shifen.com. 36 IN A 111.13.100.92
www.a.shifen.com. 36 IN A 111.13.100.91# 2.1 PTR的RDATA格式(注意地址是反着来的此处为域名对应的地址192.168.100.7)
7.100.in-addr.arpa. IN PTR www.example.com.# 2.2 SRV的固定格式: 优先级 权重 端口 目标地址
0 5 5060 sipserver.example.com

0x01 DNS服务介绍

原理流程

描述: DNS服务器采用分布式数据结构保存着海量的名称,那么用户如何快速的在互联网上访问哪台服务器或者哪些服务器就能找到待解析的数据呢?

DNS常规解析请求流程:

描述: 客户机发起对www.kernel.org的解析请求流程如下:

    1. 客户机首先查看查找本地hosts文件,如果有则返回,否则进行下一步

    1. 客户机查看本地缓存,是否存在本条目的缓存,如果有则直接返回,不再向外发出请求,否则进行下一步,转发。

    1. 将请求转发本地DNS服务器。

    1. 查看域名是否本地解析,是则本地解析返回,否则进行下一步。

    1. 本地DNS服务器首先在缓存中查找,有则返回,无则进行下一步。

    1. 向全球某一个根域服务器发起DNS请求,根域返回org域的地址列表。

    1. 使用某一个org域的IP地址,发起DNS请求,org域返回kernel域服务器地址列表。

    1. 使用某一个kernel域IP地址,发起DNS请求,kernel域返回www.kernel.org主机的IP地址,本地DNS服务收到后,返回给客户机。

DNS域名解析查询方式分类

  • 1.递归查询: 以上客户机和本地DNS服务器直接查询的方式(直接返回查询到的地址给客户机),称为递归查询。

  • 2.迭代查询: 本地DNS服务器多次请求重复查询的方式,称为迭代查询。

Tips: 总之 DNS 查询进程分两部分进行:

  • 1.名称查询从客户端计算机开始,并传输至解析程序即 DNS 客户端服务程序进行解析。

  • 2.不能在本地解析查询时,可根据需要查询 DNS 服务器来解析名称。

实验目标

描述: 企业内部Linux系统下智能DNS服务搭建系列分为四部:

    1. Bind9服务篇: Bind服务基础安装与DNS解析记录及其简单使用;

    1. Bind9负载均衡篇 : DNS的递归迭代查询和子域授权, DNS转发的实现过程和配置以及DNS主从域传输

    1. Bind9智能DNS篇 : 介绍了DNS的区域传输数据加密及相关配置;

    1. Bind9企业内部DNS搭建实践篇


0x02 DNS服务之Bind9

Bind9 基础介绍

Bind9 项目官网: https://www.isc.org/bind/

Q: 什么是Bind9?

答: 1984年,加州大学伯克利分校的几个学生完成了Unix名称服务的实现,起名叫做Berkeley Internet Name Domain(BIND),目前,它是互联网上使用最为广泛的DNS服务软件。
BIND9 是开源的、多功能、经典的、完整的名称服务器软件;BIND9 已发展成为一个非常灵活,功能齐全的DNS系统。其根据MPL 2.0许可获得许可, 用户可以自由地向BIND 9添加功能;

Q: 为什么要使用BIND 9?

答:无论您的应用程序是什么,BIND 9可能都具有必需的功能。作为第一个最古老最常用的解决方案,与其他任何系统相比,已经有更多熟悉BIND 9的网络工程师。
从发布(由DNSSEC签名)的DNS根区域和许多顶级域到发布具有许多小区域的非常大的区域文件的主机提供商,以及具有内部(私有)和外部区域的企业的所有应用程序,BIND均可成功用于所有应用程序中到具有大型解析器场的服务提供商。

Q: Bind9 软件包包括以下三个部分?

1.DNS服务器: 它是一个叫做named的程序代表name daemon的简写, 它根据DNS协议标准的规定响应收到的查询, 默认Bind的配置文件为/etc/named.conf,在每一次named启动与挂起时都会被读取。。  
2.DNS解析库(resolver library) : 一个解析器等于一个程序,通过发送请求到合适的服务器并且对服务器的响应做出合适的回应, 来解析对一个域名的查询。一个解析库是程序组件的集合可以在开发其它程序时使用,为这些程序提供域名解析的功能。
3.软件测试工具 : 例如 dig、host 等DNS测试软件;

Q: Bind9 版本说明?

BIND 的当前代码库为 BIND9 ,当前Current-Stable为9.16.9;
BIND 稳定版,开发版,扩展支持(ESV)和订阅(支持的预览版标记为-S)。

Tips: bind服务需要开放的端口和说明(安装配置时注意防火墙放行):

  • UDP 53 port 用于常规解析;

  • TCP 53 port 用于bind同步数据等作用;

  • TCP 953 port 用于IPv6解析;

Bind9 安装方式

描述: 安装Bind服务软件的几种方式说明

# (1) 包管理工具
- Redhat 家族yum install -y bind bind-chrootrpm -qa | grep bind   # 查看被安装的Rpm包rpm -ql bind | more   # 本地的文件路径-  Ubuntu 家族apt-get install bind9 bind9utils bind9-doc -ydpkg --list | grep "bind9"# ii  bind9-dnsutils                       1:9.16.1-0ubuntu2.4               amd64        Clients provided with BIND 9# ii  bind9-host                           1:9.16.1-0ubuntu2.4               amd64        DNS Lookup Utility# ii  bind9-libs:amd64                     1:9.16.1-0ubuntu2.4               amd64        Shared Libraries used by BIND 9# 采用光盘安装
vim  /etc/yum.repos.d/base.repo
[RHEL6]
name= base
baseurl=file:///mnt/cdrom
enabled=1
gpgcheck=0# (2) 编译安装
https://downloads.isc.org/isc/bind9/9.16.9/bind-9.16.9.tar.xz# (3) 容器安装
官方镜像: https://hub.docker.com/r/internetsystemsconsortium/bind9

Tips : 但是在生产环境中您很可能会有其他限制,包括:

  • 已经安装并正在运行BIND版本-在准备好之前,您不希望覆盖它。

  • 在升级后出现意外情况时,通常希望保留选择切换回以前版本的选项。

  • 您可能需要在另一台计算机上构建BIND,因为您的生产环境未安装编译器。

  • 您可能正在集中构建BIND,以将其分发到许多分散的生产机器。

Tips : 编译安装 bind9 有一个麻烦之处(一般情况下及其不推荐), 所有的配置文件都得自己去建立比如/var/named/这个目录、编译安装时连这个目录都不会存在、得自己去创建这个目录、里面的各种配置文件、区域文件、像根的、甚至连
service启动脚本都没、所以不到万不得以最好别去编译它,所以建议采用操作系统中软件管理包进行自动安装;

Ubuntu 安装

安装环境:

Description: Ubuntu 20.04.1 LTS
Linux ubuntu 5.4.0-26-generic 30-Ubuntu SMP Mon Apr 20 16:58:30 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

安装帮助: https://kb.isc.org/docs/aa-00768

1) 源码编译安装

  • Step 1.默认绑定构建和安装

# (1)默认情况下,BIND将安装在/usr/local中,并将文件放置在它的子目录中:
# sbin -已命名以及与BIND相关的所有系统管理工具,例如rndc,dnssec-keygen,named-checkconf等。
# bin - 非管理员用户的工具-您将在此处找到dig,host和nsupdate
# lib - 目标代码库
# Share -(以及各种子目录)BIND的手册页
# Include - C头文件# (2)在不更改默认目录的情况下编译的BIND将期望使用以下目录(相对于/)
/etc - 配置文件(例如`named.conf,rndc.conf`)
/var/run - 由named创建和使用的运行时文件
  • Step 2.bind源码下载和编译

# (1) 下载与解压:http://www.isc.org/downloads/bind/
wget https://downloads.isc.org/isc/bind9/9.16.9/bind-9.16.9.tar.xz
sudo tar -xvf bind-9.16.9.tar.xz -C /usr/local/
sudo mkdir /etc/bind# (2)源码编译两个附加选项(--enable-threads和--with-openssl)以启用多线程并启用OpenSSL。(如果要使用DNSSEC,则需要OpenSSL)
apt install -y gcc make pkg-config python3-pip libuv1 libuv1-dev libssl-dev libcap-dev libxml2-dev
mkdir -vp /usr/local/bind && cd /usr/local/bind-9.16.9
./configure --prefix=/usr/local/bind --sysconfdir=/etc/bind --localstatedir=/var --with-openssl --with-libxml2 # --enable-threads 实际版本中它是默认即configure没有该选项
# Configured paths:
#     prefix: /usr/local/bind
#     sysconfdir: /etc/bind
#     localstatedir: /var# (3) make 执行构建
/usr/local/bind-9.16.9# make && make install# (4) 版本验证
/usr/local/bind# ls & ls bin/
# bin  include  lib  sbin  share
# arpaname  delv  dig  host  mdig  named-rrchecker  nslookup  nsupdate
/usr/local/bind# named -v# BIND 9.16.9 (Stable Release) <id:b3f41b7># (5 )dns 解析软件相关软连接
for i in /usr/local/bind/sbin/*; do ln -f -s $i /usr/local/sbin; done
for i in /usr/local/bind/bin/*; do ln -f -s $i /usr/local/bin; done
  • Step 3.运行Bind用户以及组创建

# 选项 -r 系统不会创建家目录
sudo groupadd -g 53 -r named && sudo useradd -g named -r named
  • Step 3.Bind软件相关的目录以及文件的配置

# (1) 创建named的工作目录、然后创建named.ca这个文件
mkdir -vp /var/named/private/
dig -t NS . @223.6.6.6 > /var/named/named.ca    # 13台根服务器# (2) 编译安装默认配置文件与--sysconfdir参数有关, 为了便于管理我们统一设置在/etc/bind/目录下
sudo mkdir -vp /etc/bind/# (3) 我们以weiyigeek.top和一个网段为例编写配置文件
vim /etc/bind/named.conf
cat > /etc/bind/named.conf <<'EOF'
# - 全局配置
options {# 监听地址设置,默认是any表示允许所有网段的主机(可以改成自己所在的内网网段)listen-on port 53 { any; };        listen-on-v6 port 53 { ::1; };# 定义named的固定工作路径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";# 开启递归recursion yes;  # 下面这两行配置很重要,该配置后当客户端采用我们自己配置的内网DNS的NS服务器后,当访问别的网站内网NS解析不了的就转发给8.8.8.8的DS服务器解析,保证能正常上网。forward first;                  forwarders {223.5.5.5;223.6.6.6;};# 表示接收所有网段请求allow-query { any; };
};# - 日志记录
logging {                           channel default_debug {file "data/named.run";severity dynamic;};
};# - 根域设置
zone "."  {type hint;      file "named.ca";
};# - 正向解析的区域: 定义一个统一的域名后缀(IN 可被忽略)
zone "weiyigeek.top"  {     # 类型属于master、属于自己的                  type master;# 指定正向解析的文件  file "private/weiyigeek.top.zone";# 允许192.168.12.1/24网段(从DNS服务器)传送 allow-transfer {192.168.12/24;};
};# - 反向解析的区域
zone "12.168.192.in-addr.arpa" { type master; file "private/192.168.12.zone"; allow-transfer {192.168.12/24;};  # 指定正向解析的文件
};
EOF- PS : 如果上述是多个网段的反向解析这里就需要定义多个反向解析区域。
  • Step 4.将您的二进制文件作为递归服务器进行测试以及运行后台守护程序

# 1) 创建默认的rndc.key文件(它将由named和rndc用来代替named.conf或rndc.conf中的任何特定控件配置)
sudo rndc-confgen -a
# wrote key file "/etc/bind/rndc.key"# 2) 启动命名的守护程序
sudo named -u named -c /etc/named/named.conf  # PS 如果以非root用户运行请指定-u选项# 3) 检查named是否按预期运行;检查日志文件,如果没有,请纠正任何问题:
sudo ps -ef|grep named
# /named      113839       1  0 21:35 ?        00:00:00 named# 4) 查看状态
sudo rndc status# version: BIND 9.16.9 (Stable Release) <id:b3f41b7># running on ubuntu: Linux x86_64 5.4.0-26-generic #30-Ubuntu SMP Mon Apr 20 16:58:30 UTC 2020# boot time: Sat, 28 Nov 2020 13:35:13 GMT# last configured: Sat, 28 Nov 2020 13:35:14 GMT# configuration file: /etc/named.conf# CPUs found: 4# worker threads: 4# UDP listeners per interface: 4# number of zones: 100 (99 automatic)# debug level: 0# xfers running: 0# xfers deferred: 0# soa queries in progress: 0# query logging is OFF# recursive clients: 0/900/1000# tcp clients: 0/150# TCP high-water: 0# server is up and running
  • Step 5.权威解析配置

touch /var/named/private/{192.168.12.zone, weiyigeek.top.zone}cat > /var/named/private/weiyigeek.top.zone <<'EOF'
$TTL 1D
@ IN SOA ns.weiyigeek.top. root.weiyigeek.top. (              20200711           7200                         6000                          604800                          86400)
@ IN NS lns.weiyigeek.top.
@ IN NS ens.weiyigeek.top.
lns IN A 192.168.12.253
ens IN A 223.6.6.6
self IN A 192.168.12.215
blog IN A 192.168.12.216
EOF
# 1 // 定义宏,通用变量,单位为秒(S)、小时(H),天数(D)
# 2 //  此处一般是写NS域名,邮件域名,或root.weiyigeek.top.
# 2 // 序列号 当主DNS修改解析文件时,必须要修改这个序列号,然后重启named服务后,从DNS才能正常同步过去!(这个参数很重要,要特别注意!!)
# 2 // 刷新时间
# 2 // 失败重试时间
# 2 // 过期时间
# 2 // 否定答案时间
cat > /var/named/private/192.168.12.zone  <<'EOF'
$TTL 1D
@ IN SOA ns.weiyigeek.top. root.weiyigeek.top. (              20200712           2H                         6000                          604800                          86400)
@ IN NS lns.weiyigeek.top.
253 IN PTR lns.weiyigeek.top.
215 IN PTR self.weiyigeek.top.
216 IN PTR blog.weiyigeek.top.
EOF

PS : 对于主DNS的正反向解析文件中的序列号,每当做一次修改后,必须要同时修改这个序列号,这样才能触发主从同步机制!然后重启named服务,从DNS服务器那边才能同步过去,否则不能完成主从同步!

  • Step 6.修改DNS相关配置文件的属主属组和权限

chown -R named.named /usr/local/bind/ /etc/bind/ /var/named/ /var/run/named/
chown named.named /etc/bind/rndc.key
chmod -R 755 /var/named/
chmod 640 /etc/bind/named.conf /etc/bind/rndc.key
  • Step 7.检查主配置文件和区域数据文件有没有语法错误

# (1) 主配置文件验证
root@ubuntu-253:~$ /usr/local/bind/sbin/named-checkconf# (2) 区域数据文件验证
root@ubuntu-253:/var/named/private# /usr/local/bind/sbin/named-checkzone weiyigeek.top weiyigeek.top.zone# zone weiyigeek.top/IN: loaded serial 20200711# OK
root@ubuntu-253:/var/named/private# /usr/local/bind/sbin/named-checkzone 12.168.192.in-addr.arpa 192.168.12.zone# zone 12.168.192.in-addr.arpa/IN: loaded serial 20200711# OK# (3) 使用默认选项测试您的二进制文件 named 启动错误信息查看(Debug)
named -u named -g# 28-Nov-2020 21:30:44.008 found 4 CPUs, using 4 worker threads# 28-Nov-2020 21:30:44.008 using 4 UDP listeners per interface# 28-Nov-2020 21:30:44.012 using up to 21000 sockets# 28-Nov-2020 21:30:44.012 loading configuration from '/etc/named.conf'# 28-Nov-2020 21:30:44.012 reading built-in trust anchors from file '/etc/bind.keys'# 28-Nov-2020 21:30:44.012 using default UDP/IPv4 port range: [32768, 60999]# 28-Nov-2020 21:30:44.012 using default UDP/IPv6 port range: [32768, 60999]# 28-Nov-2020 21:30:44.016 listening on IPv4 interface lo, 127.0.0.1#53# 28-Nov-2020 21:30:44.016 listening on IPv4 interface ens160, 192.168.1.254#53# 28-Nov-2020 21:30:44.016 listening on IPv4 interface docker0, 172.17.0.1#53# 28-Nov-2020 21:30:44.016 IPv6 socket API is incomplete; explicitly binding to each IPv6 address separately# 28-Nov-2020 21:30:44.016 listening on IPv6 interface ens160, fe80::250:56ff:fe8a:cf24%2#53# 28-Nov-2020 21:30:44.020 generating session key for dynamic DNS# 28-Nov-2020 21:30:44.020 sizing zone task pool based on 0 zones# 28-Nov-2020 21:30:44.020 none:98: 'max-cache-size 90%' - setting to 7165MB (out of 7961MB)# 28-Nov-2020 21:30:44.040 obtaining root key for view _default from '/etc/bind.keys'# 28-Nov-2020 21:30:44.040 set up managed keys zone for view _default, file 'managed-keys.bind'.....# 30-Nov-2020 21:48:53.576 none:98: 'max-cache-size 90%' - setting to 7165MB (out of 7961MB)# 30-Nov-2020 21:48:53.592 configuring command channel from '/etc/bind/rndc.key'# 30-Nov-2020 21:48:53.592 command channel listening on 127.0.0.1#953# 30-Nov-2020 21:48:53.592 configuring command channel from '/etc/bind/rndc.key'# 30-Nov-2020 21:48:53.592 couldn't add command channel ::1#953: address not available# 30-Nov-2020 21:48:53.592 not using config file logging statement for logging due to -g option# 30-Nov-2020 21:48:53.604 managed-keys-zone: loaded serial 9# 30-Nov-2020 21:48:53.612 zone 12.168.192.in-addr.arpa/IN: loaded serial 20200711# 30-Nov-2020 21:48:53.612 zone weiyigeek.top/IN: loaded serial 20200711# 30-Nov-2020 21:48:53.612 all zones loaded# 30-Nov-2020 21:48:53.612 running# 30-Nov-2020 21:48:53.612 zone weiyigeek.top/IN: sending notifies (serial 20200711)# 30-Nov-2020 21:48:53.612 zone 12.168.192.in-addr.arpa/IN: sending notifies (serial 20200711)# 30-Nov-2020 21:48:53.668 managed-keys-zone: No DNSKEY RRSIGs found for '.': success
  • Step 8.最后检查守护程序是否正在响应:

# (1) 打开一个新的Shell终端进行验证
dig @127.0.0.1 . NS
# 您的名称服务器发送查询,要求它查询具有权威性的NS记录(根名称服务器)列表
# ;; flags: qr rd ra ad; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 27
# ;; ANSWER SECTION:
# .                       518252  IN      NS      g.root-servers.net.
# .                       518252  IN      NS      h.root-servers.net.
# .                       518252  IN      NS      l.root-servers.net.
# .                       518252  IN      NS      j.root-servers.net.
# .                       518252  IN      NS      k.root-servers.net.
# .                       518252  IN      NS      b.root-servers.net.
# .                       518252  IN      NS      m.root-servers.net.
# .                       518252  IN      NS      f.root-servers.net.
# .                       518252  IN      NS      d.root-servers.net.
# .                       518252  IN      NS      c.root-servers.net.
# .                       518252  IN      NS      e.root-servers.net.
# .                       518252  IN      NS      i.root-servers.net.
# .                       518252  IN      NS      a.root-servers.net.# (2) 解析验证
$ sudo vim /etc/resolv.conf # 首先设置本机DNS服务器指向# nameserver 192.168.12.253# options edns0 trust-ad$ dig -t A www.weiyigeek.top @192.168.12.253# ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1 # 由于没添加解析则回答为0# ;; OPT PSEUDOSECTION:# ; EDNS: version: 0, flags:; udp: 1232# ; COOKIE: caef08a6d576a202010000005fc4fc7251641b78e122c9b0 (good)# ;; QUESTION SECTION:# ;www.weiyigeek.top.             IN      A# ;; AUTHORITY SECTION:# weiyigeek.top.          86400   IN      SOA     ns.weiyigeek.top. root.weiyigeek.top. 20200711 7200 6000 604800 86400# ;; Query time: 0 msec# ;; SERVER: 192.168.12.253#53(192.168.12.253)# - 正向解析
$ dig -t A blog.weiyigeek.top @192.168.12.253# ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 4139# ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 # 存在对应的解析目录# ;; QUESTION SECTION:# ;blog.weiyigeek.top.            IN      A# ;; ANSWER SECTION:# blog.weiyigeek.top.     86400   IN      A       192.168.12.216# - 反向解析
root@ubuntu-253:~$ nslookup# > 192.168.12.253# 253.12.168.192.in-addr.arpa     name = lns.weiyigeek.top.# > 192.168.12.215# 215.12.168.192.in-addr.arpa     name = self.weiyigeek.top.

2) APT仓库安装

# (1) 卸载多余软件例如 snap 服务
sudo systemctl stop snapd snapd.socket #停止snapd相关的进程服务
sudo apt autoremove --purge -y snapd
sudo systemctl daemon-reload
sudo rm -rf ~/snap /snap /var/snap /var/lib/snapd  /var/cache/snapd# (2) 软件源设置与系统更新
sudo cp /etc/apt/sources.list{,.bak}
sudo tee /etc/apt/sources.list <<'EOF'
#阿里云Mirrors - Ubuntu
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiversedeb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
EOF
sudo apt autoclean && sudo apt update# (3) 判断时间与时区
~$ date
Sat 20 Mar 2021 11:35:19 PM CST
~$ timedatectl statusLocal time: Sat 2021-03-20 23:35:00 CSTUniversal time: Sat 2021-03-20 15:35:00 UTCRTC time: Sat 2021-03-20 15:35:00Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yesNTP service: n/aRTC in local TZ: no# (4) 在DNS服务器上安装 bind9
apt install bind9# (5) 安装成功后目录结构查看主要是配置文件存放目录以及内部域名解析为对应IP的文件
~$ tree /etc/bind/
/etc/bind/
├── bind.keys
├── db.0
├── db.127
├── db.255
├── db.empty
├── db.local
├── named.conf                 # named 主配置文件入口
├── named.conf.default-zones   # - named 本地默认域
├── named.conf.local           # - named 自定义域名(我们内网创建的域名解析相应的配置在此处)
├── named.conf.options         # - named 全局配置段
├── rndc.key
└── zones.rfc1918$ tree /var/cache/bind/        # 自定义的正向解析域名以及反向解析的内容文件(你可以将其类比于存储了IP与域名对应的数据库表)
/var/cache/bind/
├── db.12.168.192
├── db.168.192
├── db.weiyigeek.cn
├── db.weiyigeek.top
├── managed-keys.bind
└── managed-keys.bind.jnl# (6) 启动服务查看状态
$ sudo systemctl start named
$ sudo systemctl status named# ● named.service - BIND Domain Name Server#     Loaded: loaded (/lib/systemd/system/named.service; enabled; vendor preset: enabled)#     Active: active (running) since Sat 2021-03-20 20:41:03 CST; 3h 4min ago#       Docs: man:named(8)#   Main PID: 838 (named)#       Tasks: 26 (limit: 9448)#     Memory: 82.1M#     CGroup: /system.slice/named.service#             └─838 /usr/sbin/named -f -u bind

Tips : 至此安装告一段落后面企业内部DNS服务搭建时再进行详细讲解;

(3) 脚本附录
systemd 服务:

# 与此 unit 的解释、执行服务相依性有关
cat > /etc/systemd/system/named.service <<'EOF'
[Unit]
Description=bind9 DNS monitor maneger
Documentation=https://www.isc.org/bind/
After=network.target[Service]
Type=simple
StandardError=journal
WorkingDirectory=/etc/bind/
ExecStart=/usr/local/bind/sbin/named -u named -c /etc/bind/named.conf
ExecStop=/bin/kill -INT $MAINPID
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=always
RestartSec=3s[Install]
WantedBy=multi-user.target
Alias=named.service
EOF

描述:因为是一个服务、所以我们要为他提供一个服务脚本、以后可以利用脚本启动、编辑/etc/init.d/bindnamed

#!/bin/bash
# Ubuntu 20.04 TLS
# description: named daemon
# chkconfig: - 25 88  namedFile="/usr/local/bind/sbin/named"
pidFile="/var/run/named/named.pid"
lockFile="/var/lock/subsys/named"
confFile="/etc/bind/named.conf"
pid=$(pidof ${namedFile})# - 启动
start() {if [ -e $lockFile ]; thenecho "named is already running..."exit 0fiecho -n "Starting named:"${namedFile} -u named -c "${confFile}"RETVAL=$?echo " Pid = $(pidof named)"if [ $RETVAL -eq 0 ]; thentouch $lockFile $lockFilereturn $RETVALelserm -f $lockFile $pidFilereturn 1fi
}# - 停止
stop() {if [ ! -e $lockFile ]; thenecho "named is stopped."fiecho -n "Stopping named:"# 使用脚本实现killproc的功能# ps - | grep named | {# while read pid tty time cmd;#   do#     echo -n "Killing $cmd with PID = $pid"#     kill -INT $pid#   done# }if [ -n "$pid" ];thenkill -INT $pidRETVAL=$?fiechoif [ $RETVAL -eq 0 ];thenrm -f $lockFile $pidFilereturn 0elseecho "Cannot stop named."return 1fi
}# - 重启
restart() {stopsleep 2start
}# - 重载
reload() {echo -n "Reloading named: "if [ -n "$pid" ];thenkill -HUP $pidfiRETVAL=$?echoreturn $RETVAL
}status() {if [ -n "$pid" ];thenecho -n "named is running...($pid) "echoelseecho -n "named is stopped..."echofi
}usage() {echo "Usage: named {start|stop|restart|status|reload}"
}case $1 instart)start ;;stop)stop ;;restart)restart ;;status)status ;;reload)reload ;;*)usageexit 4 ;;
esac

操作流程:

chmod 755 /etc/init.d/named
chkconfig named on && chkconfig --list named

(3) 入坑解决

  • 问题1.error: Python >= 2.7 or >= 3.2 and the PLY package are required for dnssec-keymgr and other Python-based tools.
    错误信息:

configure: error: Python >= 2.7 or >= 3.2 and the PLY package are required for dnssec-keymgr and other Python-based tools. PLY may be available from your OS package manager as python-ply or python3-ply; it can also be installed via pip. To build without Python/PLY, use --without-python.
配置:错误:Python >= 2.7或>= 3.2和PLY包是需要的dnssec-keymgr和其他基于Python的工具。PLY可以从你的OS包管理器作为pythonply或python3 PLY可用;也可以通过pip进行安装。如果不使用Python/PLY进行构建,请使用——不使用Python。

解决办法:

apt install python3-pip
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple ply

问题2.error: OpenSSL/LibreSSL not found

checking whether compiling and linking against OpenSSL works... no
configure: error: in '/usr/local/bind-9.16.9':
configure: error: OpenSSL/LibreSSL not found

解决办法:

#是OpenSSL 加密库(lib), 这个库需要openssl-devel包 ,在ubuntu中就是 libssl-dev
#RedHat Fedora 平台
yum -y install openssl-devel # Debian ,ubunu 平台
apt-get install libssl-dev

问题3.启动DNS由于权限问题导致监听错误isc_file_isplainfile 'data/named.run' failed: permission denied

  • 错误信息:

30-Nov-2020 21:41:25.073 checking logging configuration failed: permission denied
30-Nov-2020 21:41:25.089 loading configuration: permission denied
30-Nov-2020 21:41:25.089 exiting (due to fatal error)
  • 解决办法:

chown named.named /etc/bind/rndc.key
chown -R named.named /var/named/data

CentOS 安装

环境安装说明:

bind版本: bind-9.10.5-P3.tar.gz # http://www.isc.org/downloads/bind/

安装流程:

# (1) 时间同步以及检查一下安装环境所需要的开发包组、确保所依赖的开发包组
ntpdate ntp1.aliyun.com
yum -y groupinstall "Development Tools" &&  yum -y groupinstall "Server Platform Development"
yum grouplist  # 查看一下、最主要两项:Development tools和Server Platform Development# (2) 解压并编译
tar -zvxf bind-9.10.5-P3.tar.gz && cd bind-9.10.5-P3
./configure --prefix=/data/bind9 --sysconfdir=/etc/named --enable-threads --enable-epoll --with-openssl --disable-chroot
make && make install
# --prefix=/data/bind9:指定编译存放的路径
# --with-openssl :openssl的支持
# --sysconfdir=/etc/named:指定配置文件存放路径
# --enable-threads:启用了多线程的功能# (3) 相关用户及其组的创建(-r选项系统用户不会给他创建家目录的)
groupadd -g 53 -r named
useradd -g named -r named# (4) 创建对应的配置目录以及文件
mkdir -vp /etc/named/ && touch /etc/bind.conf
mkdir -vp /var/named
# 关键一定要保证能解析,否则无法forward转发那些NS(223.5.5.5或者8.8.8.8等)的解析,比如最后无法ping通www.baidu.com
dig -t NS . @8.8.8.8 > /var/named/named.ca# (5) 配置文件编辑
vim /etc/named/named.conf

基于系统软件管理包进行安装使用

# (1) 安装完BIND后系统会多一个用户named
yum -y install bind*# (2) 启动DNS服务
systemctl start named.service && systemctl enable named.service# (3) 验证服务是否正常
systemctl status named.service
netstat -an|grep :53# (4) 防火墙开放TCP和UDP的53号端口:
iptables -I INPUT -p tcp --dport 53 -j ACCEPT
iptables -I INPUT -p udp --dport 53 -j ACCEPT# (5) 配置全局文件或者区域文件
/etc/named.rfc1912.zones
cp -p /var/named/named.localhost /var/named/cise.weiyigeek.top.zone
/var/named/198.168.192.in-addr.arpa.zone# (6) 在Linux下的DNS客户端的设置及测试配置/etc/resolv.conf文件。
domain cise.weiyigeek.top
search cise.weiyigeek.top
nameserver 192.168.10.154

Docker 容器

基础环境准备:

# 1.更新系统
sudo apt update && sudo apt upgrade -y# 2.安装docker
curl -sSL https://get.daocloud.io/docker | sh# 3.配置Docker使用国内镜像
sudo vim /etc/docker/daemon.json
{"registry-mirrors": ["https://hub-mirror.c.163.com","https://mirror.baidubce.com"]
}# 4.重启一下docker服务并检查是否配置成功
sudo systemctl restart docker
sudo docker info# 5.容器安装DNS时建议系统的systemd-resolved服务(我没有关闭所以可能不会有影响)
# Ubuntu 20.04中默认启用的systemd-resolved服务会占用udp53端口, 如果导致bind服务无法正常启动所以要先禁用掉这个服务
sudo systemctl disable systemd-resolved
sudo systemctl stop systemd-resolved# 6.禁用服务后还需要手动修改/etc/resolv.conf指定互联网DNS服务地址
sudo vim /etc/resolv.conf
# 修改下面行
nameserver 114.114.114.114
  • 方式1:internetsystemsconsortium/bind9:9.16

# (1) 权威DNS服务器在这里,您实际上需要在/etc/bind/name.conf和区域等中提供所需的配置(例如,这不是魔法,您必须配置它)。
docker run \--name=bind9 \--restart=always \--publish 53:53/udp \--publish 53:53/tcp \--publish 127.0.0.1:953:953/tcp \--volume /etc/bind \--volume /var/cache/bind \--volume /var/lib/bind \--volume /var/log \internetsystemsconsortium/bind9:9.16# (2) 配置说明
Recursive DNS server     # 递归DNS服务器不需要任何配置。
Authoritative DNS server # 权威DNS服务器配置
options {directory "/var/cache/bind";listen-on { 127.0.0.1; };listen-on-v6 { ::1; };allow-recursion {none;};allow-transfer {none;};allow-update {none;};
};
zone "example.com." {type primary;file "/var/lib/bind/db.example.com";notify explicit;
};
  • 方式2: UI DNS 管理界面

# (1) 镜像拉取
sudo docker pull sameersbn/bind:latest
# ----内网环境导入----
# 导出镜像为本地压缩包
sudo docker save -o bind.tar sameersbn/bind:latest
# 内网服务器可以导入上面的压缩包
sudo docker load -i bind.tar# (2) 查看镜像信息
docker images --all# REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE# sameersbn/bind      latest              55516ab380dc        6 months ago        343MB# (3) 数据持久化目录创建
mkdir -vp /app/bind/# mkdir: created directory '/app'# mkdir: created directory '/app/bind/'# (4) 服务启动
sudo docker run --name='bind' -d -p 53:53/udp -p 10000:10000/tcp -e WEBMIN_ENABLED=true -v ~/bind:/app/bind/ sameersbn/bind:latest
8348e2e7af96c2cbfcd9cab36c8651407cd91f94caf9195251269654e4eae045# (5) 分别检查bind服务的udp53端口和webmin管理服务的tcp10000端口是否正常启用
~$ ss -lnutp | grep -E ":53|:10000"
# udp   UNCONN 0      0                          127.0.0.53%lo:53         0.0.0.0:*     #       systemd-resolved服务
udp   UNCONN 0      0                             172.17.0.1:53         0.0.0.0:*
udp   UNCONN 0      0                         192.168.12.253:53         0.0.0.0:*
udp   UNCONN 0      0                              127.0.0.1:53         0.0.0.0:*
udp   UNCONN 0      0                             172.17.0.1:53         0.0.0.0:*
udp   UNCONN 0      0                             172.17.0.1:53         0.0.0.0:*
udp   UNCONN 0      0                             172.17.0.1:53         0.0.0.0:*
udp   UNCONN 0      0                         192.168.12.253:53         0.0.0.0:*
udp   UNCONN 0      0                         192.168.12.253:53         0.0.0.0:*
udp   UNCONN 0      0                         192.168.12.253:53         0.0.0.0:*
udp   UNCONN 0      0                              127.0.0.1:53         0.0.0.0:*
udp   UNCONN 0      0                              127.0.0.1:53         0.0.0.0:*
udp   UNCONN 0      0                              127.0.0.1:53         0.0.0.0:*
udp   UNCONN 0      0                                      *:53               *:*
udp   UNCONN 0      0      [fe80::250:56ff:fe8a:cf24]%ens160:53            [::]:*
udp   UNCONN 0      0      [fe80::250:56ff:fe8a:cf24]%ens160:53            [::]:*
udp   UNCONN 0      0      [fe80::250:56ff:fe8a:cf24]%ens160:53            [::]:*
udp   UNCONN 0      0      [fe80::250:56ff:fe8a:cf24]%ens160:53            [::]:*
# tcp   LISTEN 0      4096                       127.0.0.53%lo:53         0.0.0.0:*     #       systemd-resolved服务
tcp   LISTEN 0      10                            172.17.0.1:53         0.0.0.0:*
tcp   LISTEN 0      10                        192.168.12.253:53         0.0.0.0:*
tcp   LISTEN 0      10                             127.0.0.1:53         0.0.0.0:*
tcp   LISTEN 0      4096                                   *:10000            *:*
tcp   LISTEN 0      10     [fe80::250:56ff:fe8a:cf24]%ens160:53            [::]:*  # 此种方式已不能正常使用(已弃用)
# docker network create -d macvlan --subnet=10.0.10.0/24 --gateway=10.0.10.1 -o parent=ens160 appnet
# 其中enp0s3 就是目前宿主机IP对应的网络,接下来我们创建一个macvlan网络:
# -d 驱动, 这里使用macvlan
# --subnet,指定子网
# --gateway,指定网关
# parent,这里指定宿主机网卡名称
# appnet,这是新创建的docker网络名称
# docker network inspect appnet
# docker run -dit --hostname bind --net=appnet --ip=10.0.10.1 --name bind --restart=always --volume /app/bind:/data sameersbn/bind:latest

WEB管理使用浏览器访问下面地址进行远程管理:https://服务器IP:10000, 默认登陆账号root,密码password

Tips: 小型企业中此种方式管理方便十分推荐。


WeiyiGeek Blog - 为了能到远方,脚下的每一步都不能少。

Tips : 本文章来源 Blog 站点(友链交换请邮我哟):

  • https://weiyigeek.top # 国内访问有时较慢

  • https://blog.weiyigeek.top # 备份使用

  • https://weiyigeek.gitee.io # 国内访问快可能会有更新不及时得情况

Tips: 更多学习笔记文章请关注 WeiyiGeek 公众账号
【点击我关注】

运维之DNS域名解析服务基础概念与Bind9安装相关推荐

  1. CenOS7 运维 - DNS域名解析服务 | 正向解析 | 反向解析 | 主从服务器实时同步 | 分离解析 | 排错思路及方案 | 超详细

    CenOS7 运维 - DNS域名解析服务 一.DNS系统的作用 二.域名的结构 根域 顶级域 二级域 子域 主机 三.DNS服务器类型 ►主域名服务器 ►从域名服务器 ►缓存域名服务器 ►转发域名服 ...

  2. 运维之DNS服务器Bind9配置解析和基础示例及附带命令

    0x03 Bind 配置解析 实例1.DNS主从区域传输介绍与配置 实例2.DNS区域传输限制 实例3.DNS部分二级域名解析 示例1.采用Bind建立一个A记录DNS服务器 示例2.采用Bind建立 ...

  3. puppet自动化运维之puppet的资源基础知识

    2019独角兽企业重金招聘Python工程师标准>>> puppet自动化运维之puppet的资源基础知识 此篇文章,主要是让读者提前了解puppet资源的一些知识. 变量和数组会经 ...

  4. DNS域名解析服务(正向解析)

    DNS域名解析服务 文章目录 DNS域名解析服务 BIND域名服务基础 DNS系统的作用 DNS的定义: 域名的结构 DNS服务器类型: DNS解析查询方式 BIND软件安装 构建DNS域名解析服务器 ...

  5. Linux网络 DNS域名解析服务

    目录 1. DNS域名解析服务 (1)DNS系统的作用及类型 (2)缓存域名服务器 (3)DNS系统类型 (4)BIND的安装和配置文件 (1)BIND软件安装 (2)DNS的分布式互联网解析库 (5 ...

  6. 从运维角度看微服务 k8s部署微服务【偏理论】【AL】

    从运维角度看微服务 & 部署微服务[偏理论] 1.微服务的特点 服务组件化: 每个服务独立开发.部署,有效避免一个服务的修改引起整个系统重新部署. 技术栈灵活: 约定通信方式,使得服务本身功能 ...

  7. 网络服务之----DNS域名解析服务篇

    前言:上一章和拐友们讲了DHCP,这章我们来了解一下DNS,DNS可以使用户更加方便的访问互联网,而不用再去记住能够被机器直接读取的IP数串,简单来说就是将域名转换为IP地址(或者将IP地址转换为相应 ...

  8. Linux系统安装DNS域名解析服务

    在linux系统下安装DNS域名解析服务 步骤如下: 1>查看挂在镜像位置 2>查看光盘是否挂载 3>查看需要挂在的位置 4>进行挂载 [root@localhost mnt] ...

  9. DNS域名解析服务(正向解析、反向解析、主从服务器)

    介 绍 Internet发展至今,在网的服务器和个人主机数量庞大,每个用户通过记忆IP地址访问网络资源并不现实了. 目前大家访问互联网进行上网浏览信息时,正常是通过域名进行访问(例如:www.baid ...

最新文章

  1. 电脑间用网线传输文件的方法Win10-Win10(Win7)
  2. html字体渐变颜色的设置颜色代码,使用CSS3实现字体颜色渐变的实现
  3. python networkx包,使用Python中NetworkX包绘制深度神经网络结构图
  4. kettle插入更新流程
  5. 京东抢购助手_[Windows] 京东极速抢购助手V2.0,支持京东健康+扫货抢购
  6. Mysql 零距离-入门(一)
  7. LINUX下C语言用access()检查文件可读、可写权限
  8. 模组管理器功能模块热插拔流程
  9. python实现猜数字游戏
  10. 2021年电工(技师)考试内容及电工(技师)复审考试
  11. 如何快速比对两个文件夹中的文件
  12. 中控消费机一直显示连接服务器,中控消费机培训及常见问题的解决办法课件.ppt...
  13. 从零开始学习Java设计模式 | 设计模式入门篇:设计模式概述
  14. 如何在中国电子专利申请网缴纳专利年费
  15. 基于Python的工人员工工资管理系统
  16. 招沿实业学生怎样才能做好投资理财工作
  17. web 折线图大数据量拉取展示方案_【第2010期】QQ音乐Android客户端Web页面通用性能优化实践...
  18. STC15W408AS单片机使用CH340下载工具下载程序一直停留在检测单片机型号
  19. 移动端 -- 点击输入框默认弹出数字键盘
  20. OpenGauss线程管理-主线程-Postmaster(1)

热门文章

  1. 寒假的一点笔记《123速通》
  2. PaddleNLP新增AutoPrompt自动化提示功能,登顶FewCLUE小样本学习榜单
  3. C# 操作MongoDB时间 时差问题
  4. 普渡机器人服务北京大学
  5. Centos7下areaDetector IOC的编译后记
  6. php 生成模糊图片
  7. 草履虫纳米机器人_草履虫大小的微型机器人:由激光驱动,未来可用于显微外科手术!...
  8. 刘强东牛津大学经典演讲:我人生的4个关键抉择,都是怎么做的?
  9. 海康威视错误代码说明
  10. 【东哥视觉】做人做事禁忌