<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    服務部署 - DNS域名解析服務配置

    VSole2022-03-29 06:53:23

    目錄

    一、DNS

    1.1 DNS 服務介紹

    DNS(Domain Name System,域名系統),因特網上作為域名和 IP 地址相互映射的一個分布式數據庫,能夠使用戶更方便的訪問互聯網,而不用去記住能夠被機器直接讀取的IP數串。通過主機名,最終得到該主機名對應的IP地址的過程叫做域名解析(或主機名解析)。

    • DNS 協議運行在UDPTCP之上,使用53號端口
    • 其中在DNS解析查詢時用到UDP協議,而在主從傳遞區域數據庫文件時,用到TCP協議

    1.2 互聯網域名結構

    一般結構

    • 主機名.二級域名.頂級域名.根
    • www.wsescape.com.

    管理方式

    • Internet 的頂級域名由 Internet 網絡協會域名注冊查詢負責網絡地址分配的委員會進行登記和管理
    • 它還為 Internet 的每一臺主機分配唯一的 IP 地址

    1.3 DNS 的功能

    每個 IP 地址都可以有一個主機名,主機名由一個或多個字符串組成,字符串之間用小數點隔開。有了主機名,就不要死記硬背每臺 IP 設備的 IP 地址,只要記住相對直觀有意義的主機名就行了。

    主機名到 IP 地址映射的兩種方式

    • 靜態映射

    /etc/hosts文件

    在每臺設備上都有主機到IP的映射關系,只供此設備使用

    • 動態映射

    /etc/resolv.conf文件

    指通過DNS服務器配置主機到IP的映射關系

    # cat /etc/hosts
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    # cat /etc/resolv.conf
    nameserver 172.16.242.2
    

    解析方式 - FQDN(Full Qualified Domain Name)

    • 正向 ==> FQDN --> IP
    • 反向 ==> IP --> FQDN
    • 權威
    • 非權威

    解析順序

    • 在解析域名時,首先采用靜態域名解析的方法,如果靜態域名解析不成功,再采用動態域名解析的方法

    一次完整的查詢請求經過的流程

    1.4 技術實現

    DNS通過允許一個名稱服務器把他的一部分名稱服務,眾所周知的zone,委托給子服務器而實現了一種層次結構的名稱空間,成為子域授權機制。

    • DNS還提供了一些額外的信息,例如系統別名、聯系信息以及哪一個主機正在充當系統組或域的郵件樞紐
    • 任何一個使用IP的計算機網絡可以使用DNS來實現他自己的私有名稱系統

    實現 DNS 的軟件

    • BIND
    • DJBDNS
    • MaraDNS
    • Name Server Daemon
    • PowerDNS
    • Dnsmasq

    DNS 查詢類型

    • 迭代查詢
    • 遞歸查詢

    1.5 DNS 的類型

    • (1)Primary DNS Server(Master)

    一個域的主服務器保存著該域的zone配置文件,該域所有的配置、更改都是在該服務器上進行,本篇隨筆要講解的也是如何配置一個域的主DNS服務器。

    • (2)Secondary DNS Server(Slave)

    域從服務器一般都是作為冗余負載使用,一個域的從服務器是從該域的主服務器上抓取zone配置文件,從服務器不會進行任何信息的更改,zone配置文件的修改只能在主DNS服務器上進行,所有的修改都有主服務器同步。

    • (3)Caching only Server(Cache)

    DNS緩存服務器不存在任何的zone配置文件,僅僅依靠緩存來為客戶端提供服務,通常用于負載均衡及加速訪問操作。

    • (4)轉發服務器

    只負責轉發功能

    注解說明:

    主 DNS 服務器

    • 維護所負責解析的區域內解析庫服務器
    • 解析庫由管理維護,可以是手工也可以是自動的
    • 通知機制
    • 一旦主 DNS 服務器解析庫發生改變會立即通知從服務器

    從 DNS 服務器

    • 從主DNS服務器或其他的從DNS服務器那里復制(區域傳送)一份解析庫
    • 序列號
    • 來表示解析庫的版本號
    • 前提是,主服務器解析庫內容發生改變,其序列遞增
    • 刷新時間
    • 從服務器從主服務器請求同步解析庫的時間間隔
    • 重試時間
    • 從服務器從服務器請求同步解析庫失敗的時候,再次嘗試的時間間隔
    • 過期時長
    • 從服務器始終聯系不到主服務器時,多久后放棄從服務器角度,停止提供服務

    區域傳送

    全量傳送

    • 傳送整個解析庫

    增量傳送

    • 傳送解析庫變化的那部分內容

    1.6 資源記錄類型

    DNS 系統中,常見的資源記錄類型:

    • 主機記錄(A記錄)
    • FQDN --> IP
    • A記錄是用于名稱解析的重要記錄,它將特定的主機名映射到對應主機的IP地址上
    • 指針記錄(PTR記錄)
    • IP --> FQDN
    • 引導至一個規范名稱(Canonical Name),最常用來運行反向DNS查找
    • 權威記錄的起始(SOA記錄)
    • 一個區域解析庫有且僅能有一個SOA記錄,而必須為解析庫的第一條記錄
    • 名稱服務器記錄(NS記錄)

    專用于標明當前區域的DNS服務器

    • 別名記錄(CNAME記錄)

    CNAME記錄用于將某個別名指向到某個A記錄上,這樣就不需要再為某個新名字另外創建一條新的A記錄

    • MX 記錄(MX記錄)

    引導域名到該域名的郵件傳輸代理(Message Transfer Agents)列表

    • IPv6 主機記錄(AAAA記錄)
    • FQDN --> IP
    • 與 A 記錄對應,用于將特定的主機名映射到一個主機的IPv6地址。
    • 服務位置記錄(SRV記錄)

    用于定義提供特定服務的服務器的位置,如主機hostname,端口port

    • NAPTR 記錄

    它提供了正則表達式方式去映射一個域名。NAPTR記錄非常著名的一個應用是用于ENUM查詢。

    1.7 資源記錄格式

    語法

    name [TTL] IN rr_type value
    
    • (1) TTL如果從全局繼承可以省略,為緩存時長
    • (2)IN表示Internet
    • (3)rr_type表示資源記錄類型
    • (4) @可用于引用當前區域的名字
    • (5) 同一個名字可以通過多條記錄定義多個不同的值,此時DNS服務器會以輪詢方式響應
    • (6) 同一個值也可能有多個不同的定義名字,通過多個不同的名字指向同一個值進行定義,此僅表示通過多個不同的名字可以找到同一個主機而已

    SOA

    • name: 當前區域的名字,例如wsescape.com.
    • value: 有多部分組成:
    • (1) 當前區域的主DNS服務器的FQDN,也可以使用當前區域的名字
    • (2) 當前區域管理員的郵箱地址,但地址中不能使用@符號,一般用.替換,例如linuxmail.wsescape.com
    • (3) 主從服務協調屬性的定義以及否定的答案的統一的TTL
    # 86400為TTL值,單位為秒鐘
    # 主DNS服務器地址為ns.wsescape.com.
    # 郵箱地址為nsadmin.wsescape.com.
    # 第一版為2016052201,標識版本號
    wsescape.com.86400INSOAns.nsadmin.wsescape.com.(
    2016052201  ;序列號
    2H          ;刷新時間,2小時
    10M;重試時間,10分鐘
    1W;過期時間,一周
    1D;否定答案的TTL值,一天
    )
    

    NS

    • name: 當前區域的名字
    • value: 當前區域的某DNS服務器的名字,例如ns.wsescape.com.
    • 注意:
    • (1) 相鄰的兩個資源記錄的name相同時,后續的可省略
    • (2) 對NS記錄而言,任何一個NS記錄后面的服務器名字,都應該在后續有一個A記錄
    # 一個區域可以有多個NS記錄
    # ns1.wsescape.com.和ns2.wsescape.com.都應該在后續有一個A記錄
    wsescape.com.INNS  ns1.wsescape.com.
    wsescape.com.INNS  ns2.wsescape.com.
    

    MX

    • name: 當前區域的名字
    • value: 當前區域的某郵件服務器(smtp服務器)的主機名
    • (1)一個區域內,MX記錄可以有多個
    • (2)但每個記錄的value之前應該有一個數字(0-99),表示此服務器的優先級
    • (3)數字越小優先級越高
    • 注意
    • (1) 相鄰的兩個資源記錄的name相同時,后續的可省略
    • (2) 對MX記錄而言,任何一個MX記錄后面的服務器名字,都應該在后續有一個A記錄
    # mx1.wsescape.com.和mx2.wsescape.com.都應該在后續有一個A記錄
    wsescape.com.IN  MX  10  mx1.wsescape.com.
    INMX  20  mx2.wsescape.com.
    

    A

    • name: 某主機的FQDN,例如www.wsescape.com.
    • value: 主機名對應主機的 IP 地址;
    • 注意
    • 避免用戶寫錯名稱時給錯誤答案,可通過泛域名解析進行解析至某特定地址
    # 輪詢
    www.wsescape.com.IN  A1.1.1.1
    www.wsescape.com.IN  A  1.1.1.2
    # 一個主機有多個名稱而已
    mx1.wsescape.com.IN    A   1.1.1.3
    mx2.wsescape.com.  IN  A   1.1.1.3
    # 避免用戶寫錯名稱時給錯誤答案,可通過泛域名解析進行解析至某特定地址
    *.wsescape.com.IN  A  1.1.1.4
    wsescape.com.IN  A   1.1.1.4
    

    AAAA

    與 `A` 記錄類似,這是只是表示IPv6地址而已
    # 輪詢
    www.wsescape.com.IN  AAAA1.1.1.1
    www.wsescape.com.IN  AAAA  1.1.1.2
    # 一個主機有多個名稱而已
    mx1.wsescape.com.IN    AAAA   1.1.1.3
    mx2.wsescape.com.  IN  AAAA   1.1.1.3
    # 避免用戶寫錯名稱時給錯誤答案,可通過泛域名解析進行解析至某特定地址
    *.wsescape.com.IN  AAAA  1.1.1.4
    wsescape.com.IN  AAAA   1.1.1.4
    

    PTR

    • name: 這里的name表示的是IP地址
    • IP地址有特定格式,把IP地址反過來寫,如果是1.2.3.4需要寫作4.3.2.1
    • 還有特定后綴in-addr.arpa.,完整寫法為4.3.2.1.in-addra.arpa.
    • value: 這里的value值為FQDN
    • 注意
    • 網絡地址及后綴可省略,主機地址依然需要反著寫
    # 實例
    4.3.2.1.in-addr.arpa.INPTRwww.wsescape.com.
    # 如果3.2.1是網絡地址簡寫成為
    4   IN  PTRwww.wsescape.com.
    # 如果2.1是網絡地址簡寫成為
    4.3  IN  PTRwww.wsescape.com.
    

    CNAME

    • name: 別名的FQDN
    • value: 正工名字的FQDN
    web.escapelife.com.IN  CNAME  www.escapelife.com.
    

    1.8 個人使用

    子域授權就是每個域的名稱服務器,都是通過其上級名稱服務器在解析庫進行授權

    類似根域授權tld

    .com.INNS     ns1.com.
    .com.   IN    NSns2.com.
    ns1.com.INA   2.2.2.1
    ns2.com.      INA2.2.2.2
    

    這里以wsescape.com為例

    # wsescape.com. 在.com的名稱服務器上,解析庫中添加資源記錄
    wsescape.com.INNSns1.wsescape.com.
    wsescape.com.INNSns2.wsescape.com.
    wsescape.com.INNSns3.wsescape.com.
    ns1.wsescape.com.INA  3.3.3.1
    ns2.wsescape.com.INA  3.3.3.2
    ns3.wsescape.com.INA  3.3.3.3
    

    域名注冊

    • 代理商
    • 萬網
    • 新網
    • godaddy

    綁定服務器

    • 注冊完成以后,想自己用專用服務來解析?
    • 管理后臺,把 NS 記錄指向的服務器名稱和 A 記錄指向的服務器地址

    二、常用命令

    2.1 dig命令

    dig用于測試dns系統,因此不會查詢hosts文件進行解析

    • 用于詢問 DNS 域名服務器的靈活的工具
    • 除非被告知請求特定域名服務器,dig將嘗試 /etc/resolv.conf中列舉的任何服務器
    • 當未指定任何命令行參數或選項時,dig將對.(根)執行NS查詢

    格式

    dig [-t type] name [@SERVER] [query options]
    

    語法

    • 類型查詢
    dig -t NS wsescape.com @172.16.242.178
    dig -t MX wsescape.com @172.16.242.178
    dig -t A www.baidu.com
    
    • 查詢選項
    +[no]trace:跟蹤解析過程
    +[no]recurse:進行遞歸解析
    測試反向解析:
    dig -x IP @SERVER
    dig -x 172.16.100.11 @172.16.242.178
    
    • 模擬區域傳送:
    dig -t axfr ZONE_NAME @SERVER
    dig -t axfr wsescape.com @172.16.242.178
    

    2.2 host命令

    host命令用于查詢DNS的工具

    • 它通過常轉換指定主機名稱的主機名稱為 IP 地址
    • 當不指定參數時,它顯示host命令的幫助信息

    格式

    host [-t type] name [SERVER]
    

    語法

    • -a

    等同于-v -t

    • -C

    在需要認證的域名服務器上查找 SOA 記錄

    • -l

    列出一個域內所有的主機

    • -i

    反向查找

    • -r

    不使用遞歸處理

    • -v

    運行時顯示詳細的處理信息

    • -4

    用于 IPv4 的查詢

    • -6

    用于 IPv6 的查詢

    • -t <類型>

    指定類型,包括a、all、mx、ns等

    實例展示

    [root@localhost ~]# host -t A www.wsescape.com 172.16.242.178
    Using domain server:
    Name: 172.16.242.178
    Address: 172.16.242.178#53
    Aliases:
    www.wsescape.com has address 172.16.100.11
    www.wsescape.com has address 172.16.100.12
    [root@localhost ~]# host -t A www.wsescape.com 172.16.242.178
    Using domain server:
    Name: 172.16.242.178
    Address: 172.16.242.178#53
    Aliases:
    www.wsescape.com has address 172.16.100.12
    www.wsescape.com has address 172.16.100.11
    [root@localhost ~]# host --help
    host: illegal option -- -
    Usage: host [-aCdlriTwv] [-c class] [-N ndots] [-t type] [-W time]
                [-R number] [-m flag] hostname [server]
           -a is equivalent to -v -t ANY
           -c specifies query class for non-IN data
           -C compares SOA records on authoritative nameservers
           -d is equivalent to -v
           -l lists all hosts in a domain, using AXFR
           -i IP6.INT reverse lookups
           -N changes the number of dots allowed before root lookup is done
           -r disables recursive processing
           -R specifies number of retries for UDP packets
           -s a SERVFAIL response should stop query
           -t specifies the query type
           -T enables TCP/IP mode
           -v enables verbose output
           -w specifies to wait forever for a reply
           -W specifies how long to wait for a reply
           -4 use IPv4 query transport only
           -6 use IPv6 query transport only
           -m set memory debugging flag (trace|record|usage)
    

    2.3 nslookup命令

    nslookup 命令用于查找域名服務器的程序,有兩種模式為互交和非互交

    格式

    nslookup [-option] [name | -] [server]
    

    語法

    • 非交互模式
    • 直接查詢即可
    • 交互式模式
    nslookup>
    server IP: 指明使用哪個DNS server進行查詢;
    set q=RR_TYPE: 指明查詢的資源記錄類型;
    NAME: 要查詢的名稱;
    

    實例展示

    [root@localhost ~]# nslookup
    > server 172.16.242.178
    Default server: 172.16.242.178
    Address: 172.16.242.178#53
    > set q=A
    > www.wsescape.com
    Server:172.16.242.178
    Address:172.16.242.178#53
    Name:www.wsescape.com
    Address: 172.16.100.11
    Name:www.wsescape.com
    Address: 172.16.100.12
    > set q=NS
    > wsescape.com
    Server:172.16.242.178
    Address:172.16.242.178#53
    wsescape.comnameserver = ns2.wsescape.com.
    wsescape.comnameserver = ns1.wsescape.com.
    # 非交互模式查詢
    [root@rudder ~]# nslookup baidu.com
    Server:         8.8.8.8
    Address:        8.8.8.8#53
    Non-authoritative answer:
    Name:   baidu.com
    Address: 123.125.114.144
    Name:   baidu.com
    Address: 220.181.111.85
    Name:   baidu.com
    Address: 220.181.111.86
    # 非交互模式查詢
    [root@rudder ~]# nslookup
    > www.baidu.com
    Server:172.17.0.254
    Address:172.17.0.254#53
    Non-authoritative answer:     #非權威答案,表明是在緩存中讀取的
    www.baidu.comcanonical name = www.a.shifen.com.
    Name:www.a.shifen.com
    Address: 61.135.169.105       #返回第一個IP地址
    Name:www.a.shifen.com
    Address: 61.135.169.125       #返回第二個IP地址
    > server 8.8.8.8              #設置域名服務器為 8.8.8.8
    Default server: 8.8.8.8
    Address: 8.8.8.8#53
    > www.baidu.com               #再次請求百度的IP地址
    Server:8.8.8.8
    Address:8.8.8.8#53
    Non-authoritative answer:
    www.baidu.comcanonical name = www.a.shifen.com.
    Name:www.a.shifen.com
    Address: 220.181.111.147      #不同的DNS獲取的IP地址是不同的。
    

    2.4 rndc命令

    rndc客戶端是通過建立套接字連接服務端,監聽在TCP的953端口,來對服務端的named進行修改操作,但由于安全考慮,所以rndc的客戶端和服務端安裝在同一臺主機之上。

    語法 1

    • -b

    source-address 使用 source-address 作為連接服務器的源地址允許多個實例設置 IPv4 和 IPv6 源地址

    • -c config-file

    使用config-file 作為缺省的配置文件/etc/rndc.conf 的替代

    • -k key-file

    使用 key-file 作為缺省的密鑰文件/etc/rndc.key 的替代 如果config-file 不存在,/etc/rndc.key 中的密鑰將用于認證發向服務器的命令

    • -s server server

    是與rndc的配置文件中server語句匹配的服務器的名字或地址 如果命令行沒有提供服務器,會使用rndc配置文件中options語句中的default-server子句所命名的主機

    • -p port

    發送命令到TCP端口port,以取代BIND 9的缺省控制通道端口 953

    • -V

    打開冗余日志

    • -y key_id

    使用配置文件中的密鑰key_id

    語法 2

    • reload

    重載主配置文件和區域解析庫文件

    • reload zone

    重載區域解析庫文件

    • refresh zone

    安排區域的立即維護

    • retransfer zone

    手動啟動區域傳送過程,而不管序列號是否增加

    • notify zone

    重新對區域傳送發通知

    • reconfig

    重載主配置文件

    • status

    將服務器統計信息寫入統計文件中

    • querylog

    開啟或關閉查詢日志

    建議調試的時候開啟,否則日志消耗太多性能

    • dumpdb

    將高速緩存轉儲到轉儲文件 (named_dump.db)

    • stop

    將暫掛更新保存到主文件并停止服務器

    • halt

    停止服務器,但不保存暫掛更新

    • trace

    將調試級別增加一級

    建議調試的時候開啟,否則日志消耗太多性能

    • trace level

    更改調試級別

    • notrace

    將調試級別設置為0

    • flush

    刷新服務器的所有高速緩存

    • status

    顯示服務器的狀態

    • restart

    重新啟動服務器

    實例展示

    # rndc工具能夠幫助我們輸出系統信息
    [root@localhost ~]# rndc status
    version: 9.8.2rc1-RedHat-9.8.2-0.47.rc1.el6
    CPUs found: 1
    worker threads: 1
    number of zones: 20
    debug level: 0
    xfers running: 0
    xfers deferred: 0
    soa queries in progress: 0
    query logging is OFF
    recursive clients: 0/0/1000
    tcp clients: 0/100
    server is up and running
    # rndc不重啟加載區域文件
    [root@localhost ~]# rndc reload
    

    三、BIND的安裝配置

    DNS服務,程序包名bind,程序名named。

    3.1 程序包

    只需要安裝bindbind-libsbind-utils即可

    • bind

    主包

    • bind-libs

    依賴的庫文件,包括 32 位和 64 位

    • bind-utils

    提供客戶端工具,例如dig、host、nslookup和nsupdate

    • bind-chroot

    建立不要安裝,很容易被入侵

    bind-chroot 包的作用是提高安全性,將 DNS 服務的配置文件/etc/named.conf 等,創建一個硬鏈接轉到/var/named/chroot/etc/ 文件夾下面,而且使用服務帳號登錄,不使用root用戶登錄

    注意,修改配置文件要修改/etc/下面的,這樣會自動同步到chroot下面的鏈接文件中

    bind-sdb

    bind-dyndb-ldap

    以上這兩種方式,是將解析庫文件放在不同的數據庫中進行存儲

    3.2 BIND配置文件

    配置文件

    • 服務啟動腳本

    在CentOS6下

    /etc/rc.d/init.d/named

    • 主配置文件

    /etc/named.conf

    /etc/rndc.key

    為rndc的秘鑰共享文件,提供認證用的

    • rndc是什么?

    遠程名稱控制器

    默認與bind安裝在同一主機,且只能通過本地回環地址127.0.0.1來連接named進程

    提供輔助性的管理功能,如查看解析狀態等

    默認工作在 953/tcp 端口上

    /etc/named.rfc1912.zones

    請求注解文檔

    • 解析庫文件

    /var/named/ZONE_NAME.ZONE

    /var/named/目錄下存在多個解析庫文件

    /var/named/named.ca

    指向根DNS該文件不需要管理員更改,而是系統自帶

    /var/named/named.local

    本地子域解析,將localhost反向解析為127.0.0.1

    • 注意

    (1) 一臺物理服務器可同時為多個區域提供解析

    (2) 必須要有根區域文件,在named.ca中包含13根節點地址,由dig命令生成而來的

    (3) 應該有兩個(如果包括ipv6的,應該更多)實現localhost本地回環地址的解析庫

    #  在CentOS6下
    [root@localhost ~]# rpm -ql bind | less
    /etc/NetworkManager/dispatcher.d/13-named
    /etc/logrotate.d/named
    /etc/named
    /etc/named.conf
    /etc/named.iscdlv.key
    /etc/named.rfc1912.zones
    /etc/named.root.key
    /etc/portreserve/named
    /etc/rc.d/init.d/named
    /etc/rndc.conf
    /etc/rndc.key
    /etc/sysconfig/named
    /usr/lib64/bind
    /usr/sbin/arpaname
    ......
    # @表示當前區域的區域名稱,在主配置文件/etc/named.conf中定義的
    # TTL的值沒寫,因為定義了宏$TTL 1D,直接繼承
    # rname.invalid.表示管理員的郵箱地址
    # 后面的如NS、A等缺省,因為繼承前者的
    [root@localhost named]# cat /var/named/named.localhost
    $TTL 1D
    @IN SOA@ rname.invalid. (
    0; serial
    1D; refresh
    1H; retry
    1W; expire
    3H ); minimum
    NS@
    A127.0.0.1
    AAAA::1
    [root@localhost named]# cat /var/named/named.loopback
    $TTL 1D
    @IN SOA@ rname.invalid. (
    0; serial
    1D; refresh
    1H; retry
    1W; expire
    3H ); minimum
    NS@
    A127.0.0.1
    AAAA::1
    PTRlocalhost.
    

    主配置文件

    • 全局配置

    options {}

    • 日志子系統配置

    logging {}

    • 區域定義

    本機能夠為哪些zone進行解析,就要定義哪些zone

    zone "ZONE_NAME" IN {}

    • 注意

    任何服務程序如果期望其能夠通過網絡被其它主機訪問,至少應該監聽在一個能與外部主機通信的IP地址上

    [root@localhost ~]# cat /etc/named.conf
    options {
    listen-on port 53 { 127.0.0.1; };
    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     { localhost; };
    recursion yes;
    dnssec-enable yes;
    dnssec-validation yes;
    dnssec-lookaside auto;
    /* Path to ISC DLV key */
    bindkeys-file "/etc/named.iscdlv.key";
    managed-keys-directory "/var/named/dynamic";
    };
    logging {
            channel default_debug {
                    file "data/named.run";
                    severity dynamic;
            };
    };
    zone "." IN {
    type hint;
    file "named.ca";
    };
    include "/etc/named.rfc1912.zones";
    include "/etc/named.root.key";
    # localhost.localdomain就是區域名稱,也就是@
    [root@localhost ~]# cat /etc/named.rfc1912.zones
    zone "localhost.localdomain" IN {
    type master;
    file "named.localhost";
    allow-update { none; };
    };
    zone "localhost" IN {
    type master;
    file "named.localhost";
    allow-update { none; };
    };
    zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
    type master;
    file "named.loopback";
    allow-update { none; };
    };
    zone "1.0.0.127.in-addr.arpa" IN {
    type master;
    file "named.loopback";
    allow-update { none; };
    };
    zone "0.in-addr.arpa" IN {
    type master;
    file "named.empty";
    allow-update { none; };
    };
    

    3.3 緩存名稱服務器配置

    安裝上bind之后,其實就算的上是一個緩存名稱服務器,只需要進行少許的配置即可完成

    • 修改listen-on port 53
    • 修改allow-query
    • 修改recursion

    (1)安裝

    [root@localhost ~]#yum install bind
    

    (2)啟動

    [root@localhost ~]# service named start
    Generating /etc/rndc.key:                                  [  OK  ]
    Starting named:                                            [  OK  ]
    

    (3)查看

    # 為了安全,安裝上bind之后,默認只會監聽本地,不對外提供服務
    # 任何服務程序如果期望其能夠通過網絡被其它主機訪問,至少應該監聽在一個能與外部主機通信的`IP`地址上
    # 編輯主配置文件即可
    [root@localhost ~]# ss -tunlp | grep :53
    udp    UNCONN     0      0              127.0.0.1:53                    *:*      users:(("named",39822,512))
    udp    UNCONN     0      0                    ::1:53                   :::*      users:(("named",39822,513))
    tcp    LISTEN     0      3                    ::1:53                   :::*      users:(("named",39822,21))
    tcp    LISTEN     0      3              127.0.0.1:53                    *:*      users:(("named",39822,20))
    

    (4)修改

    # 修改之前先備份一下
    # 逗號之前沒有內容,默認為前一個的名稱,后面為復制的內容
    [root@localhost ~]# cp /etc/named.conf{,.bak}
    [root@localhost ~]# ll /etc/named*
    -rw-r-----. 1 root named  984 11月 20 2015 /etc/named.conf
    -rw-r-----. 1 root root   984 6月  20 21:53 /etc/named.conf.bak
    # //表示單行注釋,注釋ipv6
    # /**/表示多行注釋
    # 修改的時候必須以;結尾且{}的兩端必須有空格,否則為語法錯誤
    # directory用來定義區域解析庫文件存放位置
    # 建議關閉dnssec功能
    # 將dnssec-enable和dnssec-validation改為no,并注釋key文件即可
    # 把能夠以外網進行通信的地址寫在listen-on port 53之后,如果有多個可以多個添加,不能省略
    # 如果將listen-on port 53進行注釋或者刪除,默認是監聽在所有
    # 將allow-query注釋或改為allow-query { any; };
    # 是否允許遞歸recursion,必須為yes
    [root@localhost ~]# vim /etc/named.conf
    options {
            listen-on port 53 { 172.16.242.178; 127.0.0.1; };
            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     { localhost; };
            recursion yes;
            dnssec-enable no;
            dnssec-validation no;
            /* Path to ISC DLV key */
    //      bindkeys-file "/etc/named.iscdlv.key";
    //      managed-keys-directory "/var/named/dynamic";
    };
    

    (5)重啟生效

    # 重啟之后才能生效配置
    [root@localhost ~]# service named restart
    Stopping named: .                                          [  OK  ]
    Starting named:                                            [  OK  ]
    [root@localhost ~]# ss -tunlp | grep :53
    udp    UNCONN     0      0         172.16.242.178:53                    *:*      users:(("named",40086,513))
    udp    UNCONN     0      0              127.0.0.1:53                    *:*      users:(("named",40086,512))
    udp    UNCONN     0      0                    ::1:53                   :::*      users:(("named",40086,514))
    tcp    LISTEN     0      3                    ::1:53                   :::*      users:(("named",40086,22))
    tcp    LISTEN     0      3         172.16.242.178:53                    *:*      users:(("named",40086,21))
    tcp    LISTEN     0      3              127.0.0.1:53                    *:*      users:(("named",40086,20))
    

    3.4 主 DNS 名稱服務器配置

    主 DNS 名稱服務器配置就是在緩存DNS服務器的基礎之上增加zone配置文件就可以了

    • 在/etc/named.rfc1912.zones添加zone記錄
    • 在/var/named/增加zone文件

    (1) 在主配置文件中定義區域

    格式
    # master表示主DNS
    # slave表示從DNS
    # hint表示根
    # forward做轉發
    # file使用的是主配置文件directory定義的路徑
    zone "ZONE_NAME" IN {
    type {master|slave|hint|forward};
    file "ZONE_NAME.zone";
    };
    
    修改配置
    # 在/etc/named.rfc1912.zones文件內定義域名
    # named-checkconf用來檢查語法錯誤
    [root@localhost ~]# vim /etc/named.rfc1912.zones
    zone "wsescape.com" IN {
            type master;
            file "wsescape.com.zone";
    };
    [root@localhost ~]# named-checkconf
    

    (2) 定義區域解析庫文件

    格式
    出現的內容:
    宏定義;
    資源記錄;
    
    修改配置
    # 這里$TTL用于定義TTL的值,86400為秒,可以使用1D來代替
    # $ORIGIN用于指定域名詞尾,如ns以及mx都為缺省了
    # named-checkzone
    # 兩個www,在訪問的時候會進行輪詢操作的
    # 泛域名解析這里的*,表示無論用戶輸入什么都不報錯
    # 或者寫成*  IN  A  172.16.100.11,因為CNAME不能輸入ip地址
    [root@localhost ~]# cd /var/named/
    [root@localhost named]# vim wsescape.com.zone
    $TTL 86400
    $ORIGIN wsescape.com.
    @    IN    SOA    ns1.wsescape.com.    admin.wsescape.com (
    2016042201
    1H
    5M
    7D
    1D )
     IN    NS        ns1
     IN    NS        ns2
     IN    MX 10     mx1
     IN    MX 20     mx2
    ns1  IN    A172.16.100.11
    ns2 IN    A172.16.100.12
    mx1 IN    A172.16.100.13
    mx2 IN    A172.16.100.14
    www IN    A172.16.100.11
    www IN    A172.16.100.12
    ftp INCNAMEwww
    *    IN CNAME   www
    [root@localhost named]# named-checkzone "wsescape.com" /var/named/wsescape.com.zone
    zone wsescape.com/IN: loaded serial 2016042201
    OK
    
    更改權限
    # 可以查出進程是以named運行的
    # 其中/etc/named.conf文件的屬主為root,屬組為named
    # 為了安全起見,對自己創建的文件進行權限修改
    [root@localhost named]# ps -aux | grep named
    named     40086  0.0  1.1 160072 11736 ?        Ssl  22:07   0:00 /usr/sbin/named -u named
    root      40785  0.0  0.0 103324   864 pts/0    S+   23:19   0:00 grep named
    [root@localhost named]# ll /etc/named.conf
    -rw-r-----. 1 root named 1004 6月  20 22:23 /etc/named.conf
    [root@localhost named]# id named
    uid=25(named) gid=25(named) 組=25(named)
    [root@localhost named]# ll
    總用量 32
    drwxrwx---. 2 named named 4096 6月  20 21:45 data
    drwxrwx---. 2 named named 4096 6月  20 21:45 dynamic
    -rw-r-----. 1 root  named 3171 1月  11 22:12 named.ca
    -rw-r-----. 1 root  named  152 12月 15 2009 named.empty
    -rw-r-----. 1 root  named  152 6月  21 2007 named.localhost
    -rw-r-----. 1 root  named  168 12月 15 2009 named.loopback
    drwxrwx---. 2 named named 4096 5月  11 07:07 slaves
    -rw-r--r--. 1 root  root   408 6月  20 22:53 wsescape.com.zone
    [root@localhost named]# chmod 640 wsescape.com.zone
    [root@localhost named]# chown :named wsescape.com.zone
    [root@localhost named]# ll
    總用量 32
    drwxrwx---. 2 named named 4096 6月  20 21:45 data
    drwxrwx---. 2 named named 4096 6月  20 21:45 dynamic
    -rw-r-----. 1 root  named 3171 1月  11 22:12 named.ca
    -rw-r-----. 1 root  named  152 12月 15 2009 named.empty
    -rw-r-----. 1 root  named  152 6月  21 2007 named.localhost
    -rw-r-----. 1 root  named  168 12月 15 2009 named.loopback
    drwxrwx---. 2 named named 4096 5月  11 07:07 slaves
    -rw-r-----. 1 root  named  408 6月  20 22:53 wsescape.com.zone
    
    重啟生效
    [root@localhost ~]# service named restart
    Stopping named: .                                          [  OK  ]
    Starting named:                                            [  OK  ]
    # 使用dig命令來幫助我們驗證信息
    # 因為之前的配置,這里會進行輪詢操作
    [root@localhost ~]# dig -t A wsescape.com @172.16.242.178
    

    3.5 反向區域

    反向解析和正向解析各為獨立的系統,所以可以部署在不同的或者是相同的機器之上,都是可以

    • 一個區域只能有一個主服務器,無論是正向還是反向
    • 一個主服務器可以有多個從服務器

    根據配置文件中定義的主機地址,來確定網絡地址

    • 如果都為172.16.100內的主機,那么網絡地址就是172.16.100.
    • 存在多種地址,如172.16.100.12、172.16.200.121等,那么網絡地址就是172.16.
    • 以此類推

    什么是反向區域

    不變的部分用來當做區域名稱,變化的部分用來當做實現解析時候的name

    格式

    • 區域名稱:網絡地址反寫.in-addr.arpa.
    • 如172.16.100. ==> 100.16.172.in-addr.arpa.

    如何定義反向區域

    (1) 定義區域

    # file同樣是一個相對路徑,/var/named/
    # 如果有多個正向域對應同一個網絡的話,多個區域就重名了,所以這里的網絡地址其實自己可以隨意定義,如"網絡地址1.zone"、"網絡地址2.zone"等
    # 如果只有一個反向區域的話,就只需要書寫一個反向解析庫,就可以"網絡地址.zone"這樣命名了
    zone "ZONE_NAME" IN {
    type {master|slave|forward};
    file "網絡地址.zone";
    };
    # 因為172.16.242.178和我們的其他服務器(172.16.100.12/172.16.100.11),所以只能寫成"16.172.in-addr.arpa"和"172.16.zone"
    # 最后添加如下內容
    [root@localhost ~]# vim /etc/named.rfc1912.zones
    zone "16.172.in-addr.arpa" IN {
    type master;
    file "172.16.zone";
    };
    

    (2) 區域解析庫文件

    • 以PTR記錄為主
    • 不需要MX和A以及AAAA記錄
    # $TTL表示宏定義的TTL值
    # $ORIGIN這里表示反向區域的名稱
    # 反向的主機名稱不能省略
    # 這里的11和12會自動補充上16.172.in-addr.arpa.
    # 別名記錄不用反解,所以ftp沒有書寫反向解析
    # 這里可以使用vim -o wsescape.com.zone 16.172.zone來同時編輯兩個文件的
    [root@localhost ~]# cd /var/named/
    [root@localhost named]# vim 100.16.zone
    $TTL 86400
    $ORIGIN 16.172.in-addr.arpa.
    @IN  SOAns1.wsescape.com. admin.wsescape.com. (
      2016042201
      1H
      5M
      7D
      1D )
    IN  NSns1.wsescape.com.
    IN    NSns2.wsescape.com.
    11.100IN  PTRns1.wsescape.com.
    11.100IN  PTRwww.wsescape.com.
    12.100IN  PTRmx1.wsescape.com.
    12.100IN  PTRwww.wsescape.com.
    13.100IN  PTRmx2.wsescape.com.
    # 反向解析如果沒有$ORIGIN的情況下,也可以這樣寫
    [root@localhost named]# vim 100.16.zone
    $TTL 86400
    @IN  SOAns1.wsescape.com. admin.wsescape.com. (
      2016042201
      1H
      5M
      7D
      1D )
    16.172.in-addr.arpa.IN  NSns1.wsescape.com.
    IN    NSns2.wsescape.com.
    11.100IN  PTRns1.wsescape.com.
    11.100IN  PTRwww.wsescape.com.
    12.100IN  PTRmx1.wsescape.com.
    12.100IN  PTRwww.wsescape.com.
    13.100IN  PTRmx2.wsescape.com.
    

    (3) 修改權限并重啟

    [root@localhost named]# chmod 640 16.172.zone
    [root@localhost named]# chmod :named 16.172.zone
    # 語法
    [root@localhost named]# named-checkconf
    [root@localhost named]# named-checkzone "16.172.inaddr-addr" 16.172.zone
    ok
    [root@localhost named]# service named reload
    # 檢測
    [root@localhost named]# host -t PRT 172.16.100.12 172.16.242.178
    [root@localhost named]# dig -x 172.16.100.12 @172.16.242.178
    

    3.6 從 DNS 名稱服務器配置

    定義從 DNS 服務器就是在緩存服務器的基礎上,進行修改配置

    • 在/etc/named.rfc1912.zones添加zone記錄

    主從復制

    (1)應該為一臺獨立的名稱服務器

    (2)主服務器的區域解析庫文件中必須有一條 NS 記錄是指向從服務器

    (3)從服務器只需要定義區域,而無須提供解析庫文件;解析庫文件應該放置于/var/named/slaves/目錄中

    (4)主服務器得允許從服務器作區域傳送

    (5)主從服務器時間應該同步,可通過ntp進行

    (6)bind程序的版本應該保持一致;否則,應該從高逐低

    定義從區域的方法

    • 正向從服務器格式
    # 從服務器同步主服務器的解析文件會放在/var/named/slaves/中
    zone "ZONE_NAME" IN {
    type slave;
    masters { MASTER_IP; };
    file "slaves/ZONE_NAME.zone";
    };
    
    • 反向從服務器格式
    # 從服務器同步主服務器的解析文件會放在/var/named/slaves/中
    zone "Reverse_Net_Addr.in-addr.arpa" IN {
    type master;
    file "SOMEFILE.zone";
    };
    
    • (1)正向從服務器的實例
    # 注意這里的從DNS服務器,需要在主DNS服務器中定義上NS記錄
    # 這樣才能在主DNS的解析庫發生改變的時候通知從DNS服務器進行同步,否則不會同步的
    [root@localhost ~]# vim /etc/named.rfc1912.zones
    zone "wsescape.com" IN {
    type slave;
    masters { 172.16.242.178; };
    file "slaves/wsescape.com.zone";
    };
    # 重起服務即可成效
    [root@localhost ~]# rndc reload
    # 可以通過log進行查看
    [root@localhost ~]# tail /var/log/messages
    
    • (2)反向從服務器的實例
    # 注意這里的從DNS服務器,需要在主DNS服務器中定義上NS記錄
    # 這樣才能在主DNS的解析庫發生改變的時候通知從DNS服務器進行同步,否則不會同步的
    [root@localhost ~]# vim /etc/named.rfc1912.zones
    zone "16.172.in-addr.arpa" IN {
    type slave;
    masters { 172.16.242.178; };
    file "slaves/172.16.zone";
    };
    # 重起服務即可成效
    [root@localhost ~]# rndc reload
    # 可以通過log進行查看
    [root@localhost ~]# tail /var/log/messages
    

    四、高級功能之子域授權

    4.1 子域授權的特點

    子域授權其實就是在你有域名的情況下,進行細分的狀況。比如說,你注冊了wsescap.com這個域名,由于業務關系等,你需要分開為ops部門和fin部門,分別使用自己的DNS服務器,這個時候你就需要進行子域授權了。

    特點

    • 分布式數據庫
    • 正向解析區域的子域授權比較常見,而反向的相對來說比較難做

    4.2 子域授權的方法

    正向解析區域子域方法
    # 定義一個子區域
    # 在/var/named/下的指定文件中進行配置,如這里的/var/named/wsescape.com.zone
    # 在我們授權了wsescape.com的前提下,定義兩個子域,分別為ops和fin兩個
    ops.wsescape.com.INNSns1.ops.wsescape.com.
    ops.wsescape.com.INNSns2.ops.wsescape.com.
    ns1.ops.wsescape.com.INA1.1.1.1
    ns2.ops.wsescape.com.INA1.1.1.2
    fin.wsescape.com.INNSns1.fin.wsescape.com.
    fin.wsescape.com.INNSns2.fin.wsescape.com.
    ns1.fin.wsescape.com.INA3.1.1.1
    ns2.fin.wsescape.com.INA3.1.1.2
    

    4.3 解析方式

    前提:如果在wsescape.com下,定義了一個子域為ops,并在ops下創建了一個www的服務。

    外部解析

    (1)當www.test.org中的一臺主機需要訪問ops下的www主機時,就需要進過以下幾個階段:

    • 先找根(.),根說你去找com
    • 再找com,com說你去找wsescape
    • 再找wsescape,wsescape說你去找ops
    • 最后ops返回需要的信息

    內部解析

    (1)當wsescape.com下的一臺主機需要訪問ops下的www主機時,雖然wsescape.com的DNS主機不給于解析,但是它知道子域的位置,所以會立即指向ops的DNS服務器。

    (2)當ops下的一臺主機需要訪問wsescape.com下的www主機時,就需要進過以下幾個階段:

    • 先找ops,ops說你找根
    • 再找根(.),根說你去找com
    • 再找com,com說你去找wsescape
    • 最后wsescape返回需要的信息

    我們會發現這個饒了一大圈,為了避免這樣的問題,就需要定義轉發服務器。

    4.4 定義轉發服務器

    注意

    (1)關閉dnssec功能

    dnssec-enable no
    dnssec-validation no
    

    (2)被轉發的服務器需要能夠為請求者做遞歸,否則轉發請求不予進行

    (3)即定義了全局轉發又定義了區域轉發,優先級為能夠精確匹配到的先通過區域轉發,不能再通過全局轉發

    轉發模式

    (1) 全局轉發

    凡是對非本機所有負責解析的區域的請求,統統轉發給指定的服務器

    # forward定義轉發模式
    # first表示先轉發給指定解析服務器,如無響應的話再找根服務器,即先遞歸在迭代
    # only表示轉發給指定解析服務器,僅僅遞歸
    # fowwarders定義轉發給誰
    Options {
    forward { first|only };
    forwarders;
    }
    
    (2) 區域轉發

    僅轉發對特定的區域的請求至某服務器

    需要自己定義區域和區域類型等信息

    # forward定義轉發模式
    # first表示先轉發給指定解析服務器,如無響應的話再找根服務器,即先遞歸在迭代
    # only表示轉發給指定解析服務器,僅僅遞歸
    # fowwarders定義轉發給誰
    zone "ZONE_NAME" IN {
    type forward;
    forward { first|only };
    forwarders;
    }
    

    4.5 子域父域配置

    前提:

    • 父域IP地址 ==> 172.16.100.11
    • 子域IP地址 ==> 172.16.100.12
    • 能訪問互聯網的IP地址 ==> 172.16.0.1

    (1)父域服務器配置

    # 一臺獨立的主機,這里配置父域就是在主服務器配置的基礎上,添加子域而已
    # 注釋的話,默認監聽所有
    # 如果發現測試無法成功,查看/etc/named.conf中的dnssec改為no而非注釋掉,否則導致本地客戶端不接受
    [root@localhost ~]# yum installl -y bind
    [root@localhost ~]# vim /etc/named.conf
    options {
    //      listen-on port 53 { 172.16.242.178; 127.0.0.1; };
    //      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     { localhost; };
            recursion yes;
            dnssec-enable no;
            dnssec-validation no;
            /* Path to ISC DLV key */
    //      bindkeys-file "/etc/named.iscdlv.key";
    //      managed-keys-directory "/var/named/dynamic";
    };
    [root@localhost ~]# service named start
    [root@localhost ~]# ss -tunl | grep :53
    udp    UNCONN     0      0              127.0.0.1:53                    *:*
    udp    UNCONN     0      0                    ::1:53                   :::*
    tcp    LISTEN     0      3                    ::1:53                   :::*
    tcp    LISTEN     0      3              127.0.0.1:53                    *:*
    [root@localhost ~]# vim /etc/named.rfc1912.zones
    zone "wsescape.com" IN {
    type master;
    file "wsescape.com.zone";
    };
    # ops、ns2.ops和ns1.ops都會自動補全wsescape.com.
    # 這里沒有定義ns2.ops的A記錄,是因為ns2.ops我們沒有配置主機
    # 如果父域需要查找子域的時候,可能會跑到我們這個沒有配置的機器上,導致服務解析,所以這就是沒有定義的原因
    [root@localhost ~]# vim /var/named/wsescape.com.zone
    $TTL 1D
    $ORIGIN wsescape.com.
    @    IN    SOA    ns1.wsescape.com.    admin.wsescape.com (
      2016042201
      1H
      5M
      7D
      1D )
       IN    NS   ns1
       IN    NS   ns2
    ns1    IN    A    172.16.100.11
    ns2    IN    A    172.16.100.18
    www    IN A    172.16.100.11
    *      IN    A    172.16.100.11
    ops    IN    NS   ns1.ops
    ops    IN    NS   ns2.ops
    ns1.ops    IN    A    172.16.100.12
    [root@localhost ~]# cd /var/named/
    [root@localhost named]# chown :named wsescape.com.zone
    [root@localhost named]# chmod 640 wsescape.com.zone
    [root@localhost ~]# rndc reload
    server reload successful
    [root@localhost ~]# tail /var/log/messages
    

    (2)子域服務器配置

    # 配置子域服務器,即一臺獨立的主機,和父域配置沒什么大的差別
    # 注釋的話,默認監聽所有
    # 如果發現測試無法成功,查看/etc/named.conf中的dnssec改為no而非注釋掉,否則導致本地客戶端不接受
    [root@localhost ~]# yum installl -y bind
    [root@localhost ~]# vim /etc/named.conf
    options {
    //      listen-on port 53 { 172.16.242.178; 127.0.0.1; };
    //      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     { localhost; };
            recursion yes;
            dnssec-enable no;
            dnssec-validation no;
            /* Path to ISC DLV key */
    //      bindkeys-file "/etc/named.iscdlv.key";
    //      managed-keys-directory "/var/named/dynamic";
    };
    [root@localhost ~]# service named start
    [root@localhost ~]# ss -tunl | grep :53
    udp    UNCONN     0      0              127.0.0.1:53                    *:*
    udp    UNCONN     0      0                    ::1:53                   :::*
    tcp    LISTEN     0      3                    ::1:53                   :::*
    tcp    LISTEN     0      3              127.0.0.1:53                    *:*
    [root@localhost ~]# vim /etc/named.rfc1912.zones
    zone "ops.wsescape.com"  IN {
    type master;
    file "ops.wsescape.com.zone";
    };
    # ns1和ns2都會自動補全ops.wsescape.com.
    # 這里也省略了ns2的定義,因為沒有這里機器,如果父域需要查找子域的時候
    # 可能會跑到我們這個沒有配置的機器上,導致服務解析,所以這就是沒有定義的原因
    [root@localhost ~]# vim /var/named/ops.wsescape.com.zone
    $TTL 1D
    $ORIGIN ops.wsescape.com.
    @    IN    SOA    ns1.ops.wsescape.com.    admin.ops.wsescape.com (
      2016042201
      1H
      5M
      7D
      1D )
       IN    NS   ns1
       IN    NS   ns2
    ns1    IN    A    172.16.100.12
    www    IN A    172.16.100.20
    *      IN    A    172.16.100.20
    [root@localhost ~]# cd /var/named/
    [root@localhost named]# chown :named wsescape.com.zone
    [root@localhost named]# chmod 640 wsescape.com.zone
    [root@localhost ~]# rndc reload
    server reload successful
    [root@localhost ~]# tail /var/log/messages
    

    (3)測試配置

    # 當這里,我們會發現如下問題
    # 在子域服務器中,執行命令后可以查看ops的信息
    # 172.16.100.12為子域服務器
    [root@localhost ~]# dig -t A www.ops.wsescape.com @172.16.100.12
    # 在子域服務器中,執行命令后在無網絡的情況下不能查看父域的信息,在有網的情況下會根據根返回的信息來定位父域信息
    [root@localhost ~]# dig -t A www.wsescape.com @172.16.100.12
    # 在父域服務器中,執行命令后可以查看子域ops的信息
    # 這里dig命令默認執行一個遞歸操作,所以這里需要加上+norecurse非遞歸即可
    # 172.16.100.11為父域服務器
    [root@localhost ~]# dig -t A ops.wsescape.com @172.16.100.11 +norecurse
    [root@localhost ~]# dig -t A www.ops.wsescape.com @172.16.100.11 +norecurse
    

    4.6 定義轉發域

    注意

    • 如果發現測試無法成功,查看/etc/named.conf中的dnssec改為no而非注釋掉,否則導致本地客戶端不接受
    • 如果測試應該為不能解析但是還是解析了,可能需要清空緩存rndc flush

    服務配置

    (1)全局轉發
    # 在父域中配置
    # 全局轉發,就是通通轉發給172.16.0.1來查詢
    # 在父域服務器上編輯/etc/named.conf,在options添加如下信息
    # 由于上述的機器沒有連接互聯網,所以可以通過172.16.0.1進行解析
    [root@localhost ~]# vim /etc/named.conf
    Options {
    forward first;
    forwarders { 172.16.0.1; };
    }
    [root@localhost ~]# rndc reload
    server reload successful
    [root@localhost ~]# tail /val/log/messages
    # 父域中測試可以
    [root@localhost ~]# dig -t A www.baidu.com @172.16.100.11
    
    (2)區域轉發
    # 在子域中配置
    # 區域轉發,就是將wsescape.com這個域內的查詢轉發給172.16.100.11來查詢
    # 在子域服務器上編輯/etc/named.rfc1912.zones最后添加一個zone
    [root@localhost ~]# vim /etc/named.rfc1912.zones
    zone "wsescape.com"  IN  {
    type forword;
    forward only;
    forwarders { 172.16.100.11; };
    };
    [root@localhost ~]# rndc reload
    server reload successful
    [root@localhost ~]# tail /val/log/messages
    # 子域中測試可以,成功
    [root@localhost ~]# dig -t A www.wsescape.com @172.16.100.12
    
    (3)測試配置
    # 父域中測試,成功
    [root@localhost ~]# dig -t A www.ops.wsescape.com @172.16.100.11
    [root@localhost ~]# dig -t A www.baidu.com @172.16.100.11
    # 子域中測試,子域知道父域在哪里,成功
    # 在子域中還是無法解析,因為指定要了定義區域wsescape.com可以解析
    # 如果在子域中,即定義了全局轉發有定義了區域轉發,優先級為能夠精確匹配到的先通過區域轉發,不能再通過全局轉發
    [root@localhost ~]# dig -t A www.wsescape.com @172.16.100.12
    # 子域解析失敗
    [root@localhost ~]# dig -t A www.baidu.com @172.16.100.12
    

    五、高級功能之view視圖

    5.1 BIND中基礎的安全相關的配置

    (1)acl機制

    • 把一個或多個地址歸并為一個集合,并通過一個統一的名稱調用
    • 只能先定義后使用,其一般定義在配置文件中options的前面

    (2)acl格式

    # acl表示關鍵字,acl_name表示自定義名稱
    # ip表示單個的IP地址,net表示網絡,意思就是單個IP和網絡都可以定義
    acl acl_name {
    ip;
    ip;
    net/prelen;
    };
    

    (3)四個內置的acl

    因為這四個是內置的acl,所以在我們自己定義的時候不能使用這幾個名稱,否則會導致誤用發生。

    • none ==> 沒有一個主機
    • any ==> 任意主機
    • local ==> 本機
    • localnet ==> 本機的IP同掩碼運算后得到的網絡地址

    (4)訪問控制的指令

    以下的這幾個指令,可以用在/etc/named.conf中表示全局生效,也可以用在/etc/named.rfc1912.zones中,定義在單獨的zone中表示局部生效。同時,{}內可以包含定義的acl或者主機IP地址,包括內置的和我們自己定義的。

    • allow-query {} ==> 允許查詢的主機,即白名單
    • allow-transfer {} ==> 允許區域傳送的主機,即白名單
    • allow-recursion {} ==> 允許遞歸的主機
    • allow-update {} ==> 允許更新區域數據庫中的內容,建議設置為none

    (5)演示示例

    # 這里我們定義的acl,可以在主配置文件/etc/named.conf中的option中使用,可以在`/etc/named.rfc1912.zones`中使用
    # 定義自己的acl
    acl mynet {
    172.16.1.100;
    172.16.0.0/16;
    }
    # 在/etc/named.conf中的option中使用
    [root@localhost ~]# vim /etc/named.conf
    acl mynet {
    172.16.1.100;
    172.16.0.0/16;
    }
    options {
    //      listen-on port 53 { 172.16.242.178; 127.0.0.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     { mynet; };
            recursion yes;
            dnssec-enable no;
            dnssec-validation no;
    };
    ...
    # 在`/etc/named.rfc1912.zones`中使用
    [root@localhost ~]# vim /etc/named.rfc1912.zones
    zone "wsescape.com"  IN {
    type master;
    file "wsescape.com.zone";
    allow-query { mynet; };
    };
    ...
    

    5.2 BIND view

    用途:

    主要適用于對于用戶的分類,提高網站訪問效率。

    • 如按照內、外網指定不同訪問方式來訪問網站
    • 如按照運營商類型制定不同用戶訪問指定的服務器來訪問網站
    • 其實 BIND view就是實現分布式緩存,類似于CDN的一致方式

    解析過程

    • 當一個用戶請求接收之后,首先判斷用戶的來源,然后自上而下逐個與各個view自己的用戶節系列表進行匹配,最終來確定view系統解析功能,返回指定的區域解析庫文件
    • 一般用view1匹配第一個網絡, 用view2匹配第二個網絡, 用view3匹配其余網絡,保證不會有缺漏

    (1)視圖

    • 一個bind服務器可定義多個view,每個view中可定義一個或多個zone區域
    • 每個view用來匹配一組請求的客戶端
    • 多個view內可能需要對同一個區域進行解析,但使用不同的區域解析庫文件

    (2)格式

    • view是自上而下,逐一匹配
    • 大多數用在option中的指令,都可以用在view中
    view VIEW_NAME {
    match-clients {  };
    }
    

    (3)注意

    (1)一旦啟用了view,所有的zone都只能定義在view中,一個都不允許例外

    (2) 僅有必要在匹配到允許遞歸請求的客戶所在view中定義根區域

    (3)客戶端請求到達時是自上而下檢查每個view所服務的客戶端列表

    (4)實驗演示

    • 將來自172.16網絡并訪問www.wsescape.com的用戶,使用172.16.100.11這個DNS服務器來指定www服務器的地址
    • 將非來自172.16網絡并訪問www.wsescape.com的用戶,使用公網2.2.2.1這個DNS服務器來指定www服務器的地址
    # 在172.16.100.11的主機中
    # 定義acl并將/etc/named.conf中定義的根zone刪除
    [root@localhost ~]# vim /etc/named.conf
    # 刪除如下根zone
    zone  "."  IN  {
    type hint;
    file "named.ca";
    };
    # 添加acl
    acl mynet  {
    172.16.0.0/16;
    127.0.0.0/8;
    };
    # 在172.16.100.11的主機中
    # 將根移到/etc/named.rfc1912.zones中,并將所有的zone包含在view中
    # 并添加內部訪問配置internal
    [root@localhost ~]# vim /etc/named.rfc1912.zones
    # 添加view,限制mynet用戶可以訪問并允許遞歸
    view  internal  {
    match-chlients { mynet; };
    allow-recursion { mynet; };
    # 添加根
    zone  "."  IN  {
    type hint;
    file "named.ca";
    };
    # 由于之前的設置,這里是有wsescape.com,并配置了wsescape.com.zone文件
    zone  "wsescape.com"  IN  {
    type master;
    file "wsescape.com.zone";
    }
    ...
    };
    # 在172.16.100.11的主機中
    # 如果我們在/etc/named.conf中增加192.168.0.0/24網絡,就可以在192.168.0.13中可以解析,這里沒有添加進去
    [root@localhost ~]# named-checkconf
    [root@localhost ~]# service named restart
    # 在172.16.100.11主機上,成功
    [root@localhost ~]# dig -t A www.wsescape.com @172.16.100.11
    # 如果配置了,在192.168.0.13主機上,成功
    [root@localhost ~]# dig -t A www.wsescape.com @172.16.100.11
    # 在172.16.100.11的主機中
    # 在/etc/named.rfc1912.zones中,添加外部訪問配置
    # 這里對沒有匹配到的主機,不進行遞歸,所以在external就沒有添加根域
    [root@localhost ~]# vim /etc/named.rfc1912.zones
    view external {
    match-clents { any; };
    zone "wsescape.com"  IN  {
    type master;
    file "wsescape.com.external";
    allow-update { none; };
    };
    };
    [root@localhost ~]# cd /var/named/
    # 歸檔復制
    [root@localhost named]# cp -a wsescape.com.zone wsescape.com.external
    # 這里的2.2.2.1表示的是wsescape.com網站的公網DNS服務器
    [root@localhost named]# vim wsescape.com.external
    $TTL 1D
    $ORIGIN wsescape.com.
    @    IN    SOA    ns1.wsescape.com.    admin.wsescape.com (
      2016042201
      1H
      5M
      7D
      1D )
       IN    NS   ns1
       IN    NS   ns2
    ns1    IN    A    172.16.100.11
    ns2    IN    A    172.16.100.18
    www    IN A    2.2.2.1
    *      IN    A    2.2.2.1
    [root@localhost ~]# service named restart
    # 在172.16.100.11主機上,成功來自172.16.100.11
    [root@localhost ~]# dig -t A www.wsescape.com @172.16.100.11
    # 在192.168.0.13主機上,成功來自2.2.2.1
    [root@localhost ~]# dig -t A www.wsescape.com @172.16.100.1
    

    六、高級功能之編譯安裝BIND

    # 最小化安裝機器
    [root@localhost ~]# yum  groupinstall "Development Tools" "Server Platform Development"
    # 去官網isc.org下載安裝包,bind-9.10.1-P1.tar.gz
    # bind9和bind10的區別很大,而且bind10還在測試階段
    # 創建named用戶和組
    # 安裝在同一目錄下/usr/local/bind9,系統文件放在/etc/named/
    # 禁用IPv6功能,禁用chroot功能,啟動線程多核工作
    # 自己手動編譯安裝bind可能會出現的問題
    # (1)在/etc/named/沒有配置文件或者為空,需要自己創建
    # (2)沒有任何區域解析庫文件,即/var/named,所以也沒有13個根節點,需要自己創建
    # (3)沒有rndc的配置文件,需要自己創建
    # (4)沒有啟動腳本,沒有/etc/init.d/named文件
    # 這里由于自定義安裝到了/usr/local/bind9中,所以像dig、host等工具不能直接調用,需要完整路徑
    [root@localhost ~]# tar xf bind-9.10.1-P1.tar.gz
    [root@localhost ~]# cd bind-9.10.1-P1
    [root@localhost ~]# groupadd -r -g 53 named
    [root@localhost ~]# useradd -r -u 53 -g 53 named
    [root@localhost ~]# ./configure --prefix=/usr/local/bind9 --sysconfdir=/etc/named/ --disable-ipv6 --disable-chroot --enable-threads
    [root@localhost ~]# make
    [root@localhost ~]# make install
    # 添加環境變量,就可以調用相關命令
    [root@localhost ~]# vim /etc/profile.d/named.sh
    export PATH=/usr/local/bind9/bin:/usr/local/bind9/sbin:$PATH
    [root@localhost ~]# . /etc/profile.d/named.sh
    # 導出庫文件
    [root@localhost ~]# vim /etc/ld.so.conf.d/named.conf
    /usr/loacl/bind9/lib
    # 重新載入庫文件
    [root@localhost ~]# ldconfig -v
    # 如果有頭文件,導出頭文件
    [root@localhost ~]# ln -sv /usr/local/bind9/include /usr/include/named
    # 之后就可以使用/usr/include/named來訪問/usr/local/bind9/中的頭文件了
    [root@localhost ~]# ls /usr/include/named
    # 在/usr/local/bind9/下有share的幫助文件,添加MANPATH將其放入man中
    [root@localhost ~]# vim /etc/man.conf
    MANPATH /usr/local/bind9/share/man
    # 添加主配置文件,這里只添加directory就可以了
    [root@localhost ~]# vim /etc/named/named.conf
    option  {
    directory "/var/named"
    };
    zone  "."  IN  {
    type hint;
    file "named.ca";
    };
    zone  "localhost"  IN  {
    type master;
    file "localhost.zone";
    allow-update { none; };
    };
    zone  "0.0.127.in-addr.arpa"  IN  {
    type master;
    file "named.local";
    allow-update { none; };
    };
    [root@localhost ~]# mkdir /var/named/{named.ca, localhost.zone, named.local}
    # 使用dig命令來生成13個根節點,172.16.0.1為網關地址,可以幫助我們連接外網的地址,獲取13個根節點
    [root@localhost ~]# dig -t NS . @172.16.0.1 > /var/named/named.ca
    [root@localhost ~]# vim /var/named/localhost.zone
    $TTL 1D
    @    IN    SOA    localhost.    admin.localhost. (
      2016042201
      1H
      5M
      7D
      1D )
       IN    NS   localhost.
    localhost.    IN    A    172.0.0.1
    [root@localhost ~]# vim /var/named/named.local
    $TTL 1D
    @    IN    SOA    localhost.    admin.localhost. (
      2016042201
      1H
      5M
      7D
      1D )
       IN    NS   localhost.
    1    IN    PRT    localhost.
    [root@localhost ~]# cd /var/named/
    [root@localhost named]# chmod 640 ./*
    [root@localhost named]# chown :named *
    [root@localhost named]# chmod 640 /etc/named/named.conf
    # 查看幫助文檔
    [root@localhost ~]# man named
    # 啟動named服務,調試
    [root@localhost ~]# named -u named -f -g -d 3
    # 啟動named服務,不調試
    [root@localhost ~]# named -u named
    # 查看是否啟動
    [root@localhost ~]# ss -tunl named | grep :53
    # 關閉named服務
    [root@localhost ~]# killall named
    # 添加解析區域
    [root@localhost ~]# vim /etc/named/named.conf
    zone  "wsescape.com"  IN  {
    type master;
    file "wsescape.com.zone";
    allow-update { none; };
    };
    [root@localhost ~]# vim /var/named/wsescape.com.zone
    $TTL 1D
    $ORIGIN wsescape.com.
    @    IN    SOA    ns.wsescape.com.    admin.wsescape.com. (
      2016042201
      1H
      5M
      7D
      1D )
       IN    NS   ns
    ns     IN    A    172.16.100.11
    www    IN    A    172.16.100.11
    [root@localhost named]# chmod 640 wsescape.com.zone
    [root@localhost named]# chown :named wsescape.com.zone
    # 啟動
    [root@localhost named]# named -u named
    # 解析正常
    [root@localhost named]# dig -t A www.wsescape.com @172.16.100.11
    # 當我們使用rndc reload等的時候,會提示我們沒有配置文件
    # 想讓rndc可用,使用rndc-confgen來生成配置文件
    # 如果使用rndc-confgen發生堵塞,可以使用rndc-confgen -r /dev/urandom來生成隨機數
    # 用rndc-confgen生成的文件,將#Start和#End之間的配置文件放到/etc/named/rndc.conf中,之后根據提示將后續的內容放到/etc/named/named.conf中
    [root@localhost ~]# rndc-confgen
    # Start of rndc.conf
    key "rndc-key" {
    algorithm hmac-md5;
    secret "ZeE7NXZTprjARrGN/KRANQ==";
    };
    options {
    default-key "rndc-key";
    default-server 127.0.0.1;
    default-port 953;
    };
    # End of rndc.conf
    # Use with the following in named.conf, adjusting the allow list as needed:
    # key "rndc-key" {
    #algorithm hmac-md5;
    #secret "ZeE7NXZTprjARrGN/KRANQ==";
    # };
    #
    # controls {
    #inet 127.0.0.1 port 953
    #allow { 127.0.0.1; } keys { "rndc-key"; };
    # };
    # End of named.conf
    # 現在rndc reload可以使用了
    [root@localhost ~]# rndc reload
    # 之后就只需要給提供一個腳本來像service一樣,啟動和關閉服務,不難的
    # 編譯安裝,在bind-9.10.1-P1源碼目錄下,有一個contrib目錄
    # 其中包含的是第三方貢獻的補充增強bind的功能
    # 其中有一個目錄為scripts包含一些腳本,我們可以參考
    # 還有一個目錄為queryperf來評估查詢性能的,做壓測的,需要編譯安裝才能使用
    # 編譯安裝queryperf,只需要在其目錄下執行./configure和make即可完成
    # 就會生成一個queryperf的可執行文件,執行下列操作就可以直接使用了
    [root@localhost queryperf]# cp queryperf /usr/local/bind9/bin/
    # 在測試的時候,需要指定一個測試的文件,如test
    [root@localhost ~]# vim test
    www.wsescape.com A
    wsescape.com NS
    [root@localhost ~]# queryperf -d test -s 172.16.100.11
    

    EN

    dnsdns協議
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    時光飛逝,轉眼間2021年已過大半,我們的“防火墻ALG技術”系列文章也已經更新到了第四期,之前推送的《防火墻ALG技術之安全策略》 《防火墻ALG技術之FTP協議穿墻術》 《防火墻ALG技術之TFTP協議穿墻術》 可點擊鏈接進行閱讀。本期介紹DNS協議穿越防火墻NAT,淺談個人理解與認知。
    一. 應用層隧道技術1. ssh隧道建立雙向安全隧道將其他TCP端口的通信通過SSH連接轉發用SSH作為傳輸層協議,對流量自動加解密突破防火墻訪問規則的限制SSH本地端口轉發本機偵聽端口
    由于單一端點上的終端安全防護軟件缺乏對威脅態勢的背景理解、對最新威脅缺乏感知。在遇到未知威脅時,很多終端安全防護軟件會將掃描文件的相關信息回傳給遠端服務,基于全球海量威脅的深度理解做出判斷,響應終端安全防護軟件進行相應的操作,如隔離或者清除惡意軟件。
    近年來,加密流量在攻防對抗中的使用頻率越來越高,針對攻防演練場景下的加密流量威脅,特別是資產失陷后的加密C&C通信的檢測,可以說是守護企業網絡的最后一道防線。這些Webshell既能在失陷的Web服務器與攻擊者之間維持命令執行通道,又能用來上傳具有更強大功能的平臺級木馬。
    TLS/SSL木馬回連出入企業網絡邊界最常見的加密協議是TLS/SSL,其廣泛應用于Web服務、郵件服務、文件傳輸、移動APP等應用領域,可以保護用戶通信數據的機密性和完整性。在2022年的攻防演練中,觀成瞰云-加密威脅智能檢測系統首次參與即有亮眼發揮,多次獨家檢出攻擊失陷階段的加密C&C通信行為,做到及時發現,及時預警,為客戶最大程度減少損失做出貢獻。
    DNS 層次結構中的域遍布全球,由世界各地的 DNS 名稱服務器托管。整個DNS協議長度一般不超過512字符。通過wireshark抓包,看到請求stage下發是通過txt記錄 在beacon上線之后,執行checkin,使beacon強制回連CS,beacon就會發送心跳到CS上。beacon收到應答之后,向CS 請求的TXT記錄,CS則以命令應答。beacon收到txt應答,解析出命令并執行,將結果以A請求的方式回傳CS。Refresh Number 從DNS服務器隔一定時間會查詢主DNS服務器中的序列號是否增加,即域文件是否有變化。
    OOB技術通常需要易受攻擊的實體生成出站TCP/UDP/ICMP請求,然后允許攻擊者泄露數據。OOB攻擊的成功基于出口防火墻規則,即是否允許來自易受攻擊的系統和外圍防火墻的出站請求。而從域名服務器中提取數據,則被認為是最隱蔽有效的方法。
    通過主機名,最終得到該主機名對應的IP地址的過程叫做域名解析。地址1.3 DNS 的功能每個 IP 地址都可以有一個主機名,主機名由一個或多個字符串組成,字符串之間用小數點隔開。主機名到 IP 地址映射的兩種方式靜態映射/etc/hosts文件在每臺設備上都有主機到IP的映射關系,只供此設備使用動態映射/etc/resolv.conf文件指通過DNS服務器配置主機到IP的映射關系#?
    嚴格來說,生成式人工智能已經存在了近十年,但最近這項技術的蓬勃發展激發了人們應用它來尋找潛在信息安全挑戰的新興趣。要想找到這些挑戰,就必須進行“大海撈針式”的搜索,而這其中包括每天都會涌入網絡的全新二進制文件、文檔、域名和其他工件,任務的艱巨性可想而知。
    CoreDNS 社區官方提供了 50 多種插件,開發者亦可根據需求開發個性化的外部插件。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类