Linux 搭建DNS服務

来源:https://www.cnblogs.com/heyongshen/archive/2023/10/30/17794738.html
-Advertisement-
Play Games

bind介紹 在區域網環境中,一般我們要搭建DNS服務,使用的是BIND(Berkeley Internet Name Domain)軟體來實現,BIND提供了一個名為named(也叫named daemon)的服務程式,用於處理DNS查詢。 BIND 由 Internet Systems Cons ...


bind介紹

在區域網環境中,一般我們要搭建DNS服務,使用的是BIND(Berkeley Internet Name Domain)軟體來實現,BIND提供了一個名為named(也叫named daemon)的服務程式,用於處理DNS查詢。

BIND 由 Internet Systems Consortium (ISC) 開發和維護,所以可以訪問ISC 的官方網站來獲取關於 BIND的相關信息。

除了BIND外,還有其它的軟體也可以用來搭建DNS服務,例如powerdns,dnsmasq,unbound,coredns(主要用在k8s環境中)等。

ISC官網:https://www.isc.org/

搭建正向解析DNS服務

  • 正向解析:將功能變數名稱轉換為與之關聯的IP地址的過程

  • 反向解析:一個查找與特定IP地址關聯的功能變數名稱的過程

1、安裝bind

一般通過Linux發行版提供的軟體包管理工具(例如yum、apt)進行安裝即可,如果需要進行編譯安裝,可以去官網或者github下載源碼,參考管理員手冊進行編譯安裝。

使用包管理工具進行安裝:

例如:ubuntu2004安裝bind9

# ubuntu
apt install bind9

# centos
yum install bind

2、修改配置

通過軟體包管理工具安裝了bind9服務後,配置文件一般放在 /etc/bind/ 目錄下,主配置文件一般是 named.conf

例如:在ubuntu2004中使用apt進行安裝後,預設帶的配置文件有這些

在主配置文件中,使用include 指令來引入了其它的配置文件。

有一個叫作named.conf.options的配置文件,包含了一個 options配置塊,options塊用於指定全局伺服器選項。這些選項會影響BIND伺服器的整體行為。

例如:埠指定、工作目錄指定、上層DNS、查詢許可權等。

埠配置

bind預設監聽UDP和TCP的53埠,如果要修改埠可以在這個配置文件中進行修改。(一般情況下這個埠不用改)

# any 表示any 允許所有的機器訪問本機這個dns伺服器
# ipv6埠指定
listen-on-v6 port 5353 { any; };

# ipv4埠指定
listen-on port 5353 { any; };

說明:

當使用 ss -ntl | grep 53 查看埠監聽時,有一個 127.0.0.53%lo:53 。這個是 systemd-resolved 服務預設監聽的地址和埠,在ubuntu1804及其以上的版本中預設啟用 systemd-resolved服務。

日誌配置

預設情況下,BIND把日誌消息寫到系統日誌裡面的,例如centos是/var/log/messages文件,ubuntu則是/var/log/syslog。如果我們想要自定義bind的日誌存放位置話,可以通過loging配置塊來實現。(如果沒需求可以不改)

loging配置塊定義如何記錄伺服器的活動。您可以指定記錄哪些類別的消息、它們的嚴重性以及它們應該記錄到哪裡。

(1)一般是/etc/bind目錄下單獨創建一個文件,叫作 named.conf.logging,通過在這個配置文件裡面添加日誌的相關配置。

sudo vim /etc/bind/named.conf.logging
logging {
    channel query_log {
        file "/var/log/namd/query.log";
        severity info;
        print-time yes;
    };
    channel other_log {
        file "/var/log/named/other.log";
        severity info;
        print-time yes;
    };

    category queries {
        query_log;
    };
    category default {
        other_log;
    };
};

說明:

  • 需要保證文件的所屬組是bind(chown bind:bind /etc/bind/named.conf.logging)

  • 需要保證bind對存放日誌的目錄具有讀寫許可權(chown bind:bind /var/log/named)

(2)編寫好配置文件後,將配置文件通過在主配置文件中通過include指令來引入。

include "/etc/bind/named.conf.logging";

logging的指令說明:

  • channel: 定義日誌輸出通道

  • category: 指定某個日誌類別應記錄到哪個通道

  • file: 指定日誌文件的路徑

  • severity: 設置日誌級別

(3)重啟服務後即可生效

區域配置

這是配置DNS正向解析的第一步。bind的區域配置是通過 zones 配置塊來實現的。區域配置就是配置功能變數名稱解析的規則。

例如:自帶的 named.conf.default-zones 這個文件中,就配置了一些預設的解析規則。

例如:我需要將www.yongshen.com這個FQDN解析為ipv4地址10.0.0.66,可以這樣做:

(1)先創建區域配置文件,命名方式一般是 功能變數名稱.zones。 一般單獨創建一個目錄來存放,方便後期管理

mkdir /etc/bind/yongshen
chown bind:bind /etc/bind/yongshen

然後在這個目錄下編輯區域配置文件:

sudo vim /etc/bin/yongshen/yongshen.zones
zone "yongshen.com." {
        type master;
        file "/etc/bind/yongshen/db.yongshe.com";
};
區域配置文件說明

zone配置塊,大致的格式就是:

zone "要解析的功能變數名稱" {
	type master; # master表示這個是權威區域,該伺服器為該區域內的所有功能變數名稱提供權威答案
	file xxxx;   # 指定的文件包含了這個區域的所有資源記錄
};

type指令說明

type用於指定定義區域的類型,常見的類型有以下這些:

  • master:當有請求來時,可以根據file指定的文件中的信息返回權威答案

  • slave:當有請求來時,它可以響應請求,但它是一個從屬或備份區域。它從指定的主伺服器複製區域數據,自身不能直接修改區域內容。任何修改都需要在主伺服器上進行,並隨後同步到從伺服器

  • hint:此區域用於配置根DNS伺服器的信息

file指令說明

file指令用於指定 區域文件 , 也叫 區域數據文件。這個文件包含了若幹條資源記錄,通過這個文件可以為功能變數名稱提供詳細的解析信息。
這個文件的作用就是告訴BIND:“當有人查詢某個FQDN時,請給他這個IP地址作為答案”。

(2)編輯區域數據文件
區域配置文件搞定後,需要創建zone配置塊中file指定的區域數據文件,一個區域數據文件由若幹條區域數據記錄組成。

sudo vim /etc/bind/yongshen/db.yongshe.com
$TTL    86400
@       IN      SOA     master.yongshe.com. admin.yongshe.com. (
                            2023102401  ; Serial
                            3600        ; Refresh
                            1800        ; Retry
                            604800      ; Expire
                            86400       ; Minimum TTL
                            )

@          IN      NS      master.yongshen.com.
master     IN      A    10.0.0.66

www        IN      A    10.0.0.66
區域數據文件說明

一個區域數據文件由若幹條區域數據記錄組成,每條區域記錄由 5 部分組成:

NAME   [TTL]   IN   type   value

NAME

NAME:指定當前負責解析的功能變數名稱,可以使用 @ 符號來表示當前解析的功能變數名稱就是 區域配置裡面改zone配置塊指定的功能變數名稱

例如:

www   IN      A    10.0.0.66 表示要解析的FQDN就是 www.yongshen.com

TTL

TTL:表示緩存過期的時間,當一個客戶端(或者遞歸DNS伺服器)向權威DNS伺服器查詢一個功能變數名稱並得到答案後,這個答案(DNS記錄)會被緩存在客戶端或遞歸伺服器上。TTL值就是告訴這些客戶端或伺服器應該緩存這條記錄多長時間。在這個緩存時間內,如果再次有對同一條DNS記錄的查詢,客戶端或遞歸伺服器可以直接從自己的緩存中獲取答案,超過TTL指定的時間了記錄就會從緩存中被移除,相同的查詢請求就需要重新請求。


IN

IN:指的就是這個記錄屬於Internet類,其他類基本上都沒用了


type

type用於指定區域記錄的類型,不同類型的區域記錄有不同的作用。並且不同的類型,對應的value值也不同。

  • A: 表示這條資源記錄類型是 IPv4地址記錄,用於將一個功能變數名稱映射為IPv4地址,所以value對應的值就是一個IPv4地址。

例如:

www        IN      A    10.0.0.66

  • AAAA: 表示這條資源記錄類型是 IPv4地址記錄,用於將一個功能變數名稱映射為IPv6地址,value對應的值就是一個IPv6地址

例如:

mail IN AAAA 2001:db8::1

  • NS: 這種記錄類型用於指定哪些DNS伺服器是權威伺服器,對應的value值是權威DNS伺服器的功能變數名稱(末尾的點不能省略)

例如:

@          IN      NS      master.yongshen.com. 表明權威伺服器是  master.yongshen.com.

具體過程如下:

1、當客戶端(或其他DNS伺服器)想要解析一個特定的功能變數名稱,例如 www.yongshen.com, 它首先會查詢其本地緩存或前置DNS伺服器。如果沒有找到答案,它可能會進一步查詢根伺服器或其他已知的上級伺服器來尋找關於yongshen.com域的權威伺服器信息。

2、在此情境中,權威伺服器的標識為 master.yongshen.com,這是通過NS記錄 @ IN NS master.yongshen.com. 指定的。這告訴詢問者,如果想要解析屬於yongshen.com域的任何主機名,它應該聯繫master.yongshen.com。

3、 但這還不夠,因為詢問者需要知道master.yongshen.com的實際IP地址才能與之聯繫。為了提供這一信息,還有一條A記錄:master IN A 10.0.0.66,告訴詢問者master.yongshen.com的IPv4地址是10.0.0.66。

4、當查詢請求到達IP地址10.0.0.66的伺服器時,因為該伺服器已經配置為yongshen.com域的權威伺服器並擁有該域的完整區域文件(通過zone配置塊的type和file實現的),它會查找關於www.yongshen.com的記錄。在此例中,它找到了記錄www IN A 10.0.0.66,所以它會將10.0.0.66這個地址返回給詢問者。


  • SOA:這種類型的資源記錄在每個區域數據文件中有且只有一個,且是第一條記錄。用來設置這個區域的一些屬性信息的。對應的value就是這個區域的相關屬性信息。
# 郵箱只起到說明作用,不起實質的作用

@ IN SOA <主功能變數名稱伺服器名> <負責人郵箱> (
    <序列號>   ; Serial Number
    <刷新時間> ; Refresh Interval
    <重試時間> ; Retry Interval
    <過期時間> ; Expire Time
    <最小TTL>  ; Minimum TTL
)

欄位說明:

  • 主功能變數名稱伺服器名稱:權威的名稱伺服器,負責該DNS區域(通常為完全限定的功能變數名稱),用於告訴其他伺服器或者客戶端:“如果你有關於這個區域的問題,你應該來問我。” (在SOA記錄中指定的主功能變數名稱伺服器名稱通常就是該區域的權威名稱伺服器,這與NS記錄中列出的名稱伺服器一致。)

  • 負責人郵箱:負責這個區域的管理員的電子郵件地址,一般使用“.”替代“@”。

  • 序列號:表示區域文件的版本的數字,更改區域文件時應該增加這個數字。這樣如果搭建了主從架構,從屬或備份的DNS伺服器知道主伺服器的數據已經更改,從而觸發更新。

  • 刷新時間:搭建主從架構時,告訴從屬伺服器多久檢查主伺服器的序列號一次

  • 重試時間:從屬伺服器在刷新時間結束後嘗試聯繫主伺服器但失敗,它會在這個“重試時間”結束後再次嘗試。

  • 過期時間:從屬伺服器在多長時間內無法與主伺服器通信後,將停止回答關於這個區域的查詢。例如向從伺服器請求:www.tom.com的ip地址是多少, 但是604800秒後都沒法和主伺服器通信,所以它就不會回答這個請求了。

  • 最小TTL:其他伺服器應該緩存此區域中任何記錄的最短時間。


(3)將區域文件加入主配置文件
區域文件和區域數據文件都創建和配置後,需要將區域文件加入主配置文件中。

sudo vim /etc/bind/named.conf
include "/etc/bind/yongshen/yongshen.zones";

3、重啟服務

重啟bind服務後測試是否生效,我在ubuntu2004中使用apt安裝bind後,發現有bind9和named這兩個服務。

查看named的service文件時,發現使用Alias=bind9.service指定了一個叫作bind9.service的別名。

所以在使用ssytemctl enable named後,/lib/systemd/system/named.service在 /etc/systemd/system/下創建了兩個service文件, /etc/systemd/system/bind9.service和/etc/systemd/system/multi-user.target.wants/named.service。

bind9 是在 Debian 及其衍生版本(如 Ubuntu)上的軟體包名稱和服務名稱。在這些發行版中,通常將 named 的服務文件設置為 bind9.service,以與軟體包的名稱保持一致。所以使用named或者bind9來管理bind進程都是一樣的。

sudo systemctl restart bind9.service

4、測試

(5)可以通過dig工具來測試,dig預設使用的是53埠,如果修改了bind伺服器的埠,需要使用 -p 參數來指定埠號

# dig通過 @ 來指定DNS伺服器地址
dig www.yongshen.com @10.0.0.66 -p 5353

除了使用dig來測試dns是否可用外,還可以使用以下工具進行測試:

  • host:如果需要指定DNS伺服器地址,直接在後面寫地址就行了。例如:host www.baidu.com 192.168.13.66

  • nslookup:和host使用一樣,例如:nslookup www.baidu.com 192.168.13.66

說明: 如果DNS伺服器的埠不是預設的53,只有dig提供了 -p參數來指定,host和nslookup都是不指定手動指定埠的,


註意事項

BIND中FQDN說明:

在DNS和bind中,完全限定功能變數名稱的表現形式為由一個點(.)結尾的功能變數名稱。這個點代表DNS層級結構的根,所以FQDN實際上是從某個節點一直到DNS的根的完整表示。末尾不帶點就是一個相對於名。

在zone配置塊中: 定義了一個區域,這個zone配置塊負責處理關於yongshen.com的DNS請求,在指定區功能變數名稱稱的時候,如果最後加了點(.)表示這是一個完全限定功能變數名稱(不加點BIND也通常將其視為FQDN),但是可能會出現在不帶點的情況下,把他當作一個相對域,從而給它加上尾碼。

例如:特定的網路(企業或大學網路)裡面會自動加上尾碼,不帶點可能就給加上尾碼了

在區域數據文件中

  • 資源記錄的NAME部分指定了需要處理的功能變數名稱,很多時候使用的都是相對功能變數名稱。例如:www IN A 10.0.0.66,會自動將當前zone的名稱追加在其後面。 www.yongshen.com

  • 如果使用了全限定功能變數名稱,例如:www.yongshen.com. IN A 10.0.0.66,就不會將當前zone的名稱追加在其後面

$TTL說明

$TTL 是一個全局預設TTL,用於指定那些沒有明確設置TTL的記錄的生存時間。只需要在文件的頂部定義一次TTL,它會自動應用到所有後續的記錄上,除非這些記錄自己有明確的TTL設置

@ 符號說明

@ 符號是一個簡寫,代表當前區域的主功能變數名稱,即在zone配置塊中指定的功能變數名稱。
除了@符號外,經常用的還有一個 * 號, 符號是一個通配符,和shell中的*效果一樣,用來匹配該域中的任何未明確指定的主機名。
例如:

www    IN A 10.0.0.66
*    IN A 10.0.0.67

查詢www.yongshen.com 會範圍10.0.0.66,查詢其它的,例如mail.yongshen.com就返回10.0.0.67

區域數據文件省略說明

在BIND的區域文件中,連續的資源記錄(RRs)可以省略與前一條相同的部分。例如:

# 功能變數名稱 example.com. 在後續的記錄中被省略了,因為它與前一條記錄相同。
example.com.    IN    A    192.0.2.1
                IN    NS   ns.example.com.
                IN    MX   10 mail.example.com.

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 操作系統 :CentOS 7.6_x64 FreeSWITCH版本 :1.10.9 之前寫過FreeSWITCH添加自定義endpoint的文章,今天整理下api及app開發的筆記。歷史文章可參考如下鏈接: FreeSWITCH添加自定義endpointFreeSWITCH添加自定義endpoint ...
  • 哈嘍大家好,我是鹹魚 之前鹹魚寫過幾篇關於知網爬蟲的文章,後臺反響都很不錯。雖然但是,鹹魚還是忍不住想訴苦一下 有些小伙伴文章甚至代碼看都沒看完,就問我 ”為什麼只能爬這麼多條文獻信息?“(看過代碼的會發現我代碼裡面定義了 papers_need 變數來設置爬取篇數),”為什麼爬其他文獻不行?我想爬 ...
  • 未來可期,靜水流深 畢業到現在都已經快 6 年,是從 2011 年 8 月份從江西贛州信豐火車站匆匆忙忙踏上北上的火車。 這是逃避還是幸運,從小到大都沒出過這麼遠的路程。現在回到南方,工作生 活急急忙忙,又好像無聲無息。 高中老師說高考是指揮棒,揮舞著千軍萬馬,初中老師說中考決定著前腳是否能夠踏進大 ...
  • OpenSSL 是一種開源的加密庫,提供了一組用於加密和解密數據、驗證數字證書以及實現各種安全協議的函數和工具。它可以用於創建和管理公鑰和私鑰、數字證書和其他安全憑據,還支持`SSL/TLS`、`SSH`、`S/MIME`、`PKCS`等常見的加密協議和標準。OpenSSL 的功能非常強大,可以用於... ...
  • # Unity進階開發-FSM有限狀態機 前言 我們在進行開發時,到了一定程度上,會遇到數十種狀態,繼續使用Unity的Animator控制器會出現大量的bool,float類型的變數,而這些錯綜複雜的變數與Animatator控制器如同迷宮版連線相結合會變得極其的複雜且無法良好維護擴展,出現一個B ...
  • 這是一篇入職3周.NET 實習開發的感悟 吐槽 開篇先吐槽一下吧! 首先吐槽的就是加班費的問題,公司加班費挺多,但是我是試用期(3個月)沒有加班費,但是公司帶我的組長特喜歡加班,老是問我加不加班,懂點人情的都會一起加班,雖然公司規定17.30下班,但是基本都是18.00才開始走人,然後加班一般都是8 ...
  • 在進行2D游戲開發時,跳躍是不可缺少的一個重要功能。但是我們在Unity開發時Unity本身的物理引擎並不能提供很好的的手感,下落的時候輕飄飄的,這操作起來顯然非常不舒服。所以,我們需要自己對跳躍進行優化,以此來獲得更好的手感。我們不難發現,在絕大多數2D游戲的跳躍中,下落的速度比上升的速度要快上很 ...
  • 一、背景: 微軟的.net core開發工具,目前來看,winform界面軟體還沒有打算要支持linux系統下運行的意思,要想讓c#桌面軟體在linux系統上運行,開發起來還比較麻煩。微軟只讓c#的控制台軟體支持在linux運行。 二、解決方案: 我想到的一個方案是自定義封裝軟體的System.Wi ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...