DNS:從零搭建公司內網DNS服務器


寫在前面的話

 

網上關於 DNS 的文章其實一搜索一大把,但是看別人的文檔一般都會有個問題,亂,不講究,全是 ctrl c + ctrl v,我個人是看不下去的。頭皮發麻。所以決定自己來寫寫這方面的東西,當然很多概念性的東西還是來源於網絡。至於寫這篇的目的其實算是做個總結。對於 DNS 這個東西。它可能不是你工作的必須,但是有它能夠解決你很多公司內網中復雜問題。我們后面提到的企業級,可能更多的還是說公司內網這樣的環境,至於生產環境,人有多大膽,地有多大產吧。

 

 

DNS 概念性東西

 

FQDN:完全限定域名,即每個域在全球唯一,域不是域名,google.com 是域,www.google.com 是域名。

域可以分為根域(.)和頂級域(TLD

頂級域又可以分為三類:

1. 通用頂級域(.com 商業機構,.org 非營利性組織,.net 網絡服務機構等)

2. 國家頂級域(.cn 中國,.uk 英國,.us 美國,.jp 日本)

3. 反向域(基礎建設頂級域,.arpa

 

DNS 查詢方式包含遞歸和迭代:

1. 遞歸是客戶端發起一次請求給 DNS 服務器,通過多次查找返回正確解析。

2. 迭代是發出多次請求查詢不同的 DNS 服務器。

 

解析方式包含正向解析和反向解析:正向解析指代將 FQDN 轉換成 IP,反向則相反。

一般 DNS 的服務器類型包含:主從 DNS 服務器,緩存服務器,轉發服務器。

主從好理解,就是從自動更新同步主的配置,作為 backup 存在。

緩存的服務器作用在於使用遞歸查詢,將查詢到的結果返回客戶端,並緩存查詢的結果。

轉發服務器作用在於當發現查詢不是本機的時候則將請求轉發出去。

 

DNS 監聽 TCP 和 UDP 都是 53 端口。

以下是一次完整的請求大致過程:

從客戶機到服務器之前采用得是遞歸查詢,而服務器之間則是采用迭代查詢。

 

DNS 記錄類型:DNS 域名數據庫由資源記錄和區文件指令組成。

SOA 記錄:起始授權機構記錄,SOA 備注說明了眾多 NS(name server)記錄中誰是主名稱服務器,不參與功能,但是不能缺少。

NS 記錄:域授權記錄,當請求到達根域的時候,通過 NS 記錄找到對應的域。

A 記錄:當通過 NS 記錄到達域以后,比如訪問 www.baidu.com,通過 NS 我們找到了 baidu.com,此時就需要通過 A 記錄找到 www。

MX:將該域下的所有郵件服務器地址指向郵件服務器。

AAAA 記錄:A 記錄處理 IPV4,AAAA 處理 IPV6。

PTR 記錄:反向解析,將 IP 解析成域名。

CNAME:別名記錄,允許多個名字映射到另外一個域名。比如我們 ping 百度的時候可以發現返回其實是 www.a.shifen.com 這個域名返回。所有 www.baidu.com 其實是個別名。

 

 

搭建單台 DNS

 

我們這里准備了三台虛擬機:

IP 系統 說明
 192.168.100.111  CentOS Linux release 7.5  DNS 服務器,主機名:demo-node1
 192.168.100.112  CentOS Linux release 7.5  客戶機,主機名:demo-node2
 192.168.100.113  CentOS Linux release 7.5  客戶機,主機名:demo-node3

 

1. DNS 服務器安裝 bind 服務:

yum -y install bind-utils bind bind-devel bind-libs

 

2. 配置主配置文件:/etc/named.conf

options {
    listen-on port 53 { any; };
    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";
    recursing-file  "/var/named/data/named.recursing";
    secroots-file   "/var/named/data/named.secroots";
    allow-query     { any; };
    recursion yes;
    dnssec-enable yes;
    dnssec-validation yes;
    bindkeys-file "/etc/named.iscdlv.key";
    managed-keys-directory "/var/named/dynamic";
    pid-file "/run/named/named.pid";
    session-keyfile "/run/named/session.key";
forwarders { 202.96.128.166;8.8.8.8; }; }; 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";

最終內容如下,紅色部分為我們修改的。

 

3. 追加域名解析入口配置:/etc/named.rfc1912.zones

zone "dylan.com" IN {           # 測試用的域是 dylan.com
        type master;
        file "dylan.com.zone";  # 配置文件為 dylan.com.zone,該文件目錄為 /var/named/ 下
};

 

4. 配置單獨的解析文件:

/var/named/
cp named.localhost dylan.com.zone
chown named.named dylan.com.zone

修改配置:dylan.com.zone

$TTL 1D                                         ;TTL 修改配置生效時間,默認為一天
@       IN SOA  @ rname.invalid. (
                                        0       ; serial,配置編號,每次改完配置 +1,這樣從服務器就知道更新配置
                                        1D      ; refresh,從服務器刷新時間,默認一天刷新一次
                                        1H      ; retry,如果刷新失敗,默認1小時重試一次
                                        1W      ; expire,緩存過期時間,一周
                                        3H )    ; minimum
        NS      @
        A       127.0.0.1
        AAAA    ::1
www     IN A       192.168.100.112

我們新加了個 www.dylan.com 的 A 記錄。

 

4. 啟動服務測試:

systemctl start named
systemctl enable named

查看端口:

netstat -tlunp | grep 53

結果如圖:

我們看到除了服務本身的 53 端口外,還監聽了 953,這是 dns 服務的一個插件,現在我們先不管。

本機測試解析:

dig @127.0.0.1 www.dylan.com

查看結果: 

 

另外介紹兩種檢查配置的方法:

# 檢查主配置
named-checkconf /etc/named.conf

# 檢查 zone 配置
named-checkzone dylan.com /var/named/dylan.com.zone

結果如下:

 

我們在客戶端修改 DNS 配置測試,修改網卡 DNS 配置重啟網卡:

 

 

主從 DNS 服務搭建

 

1. 主從 DNS 的搭建開始的時候其實是和單機搭建一樣的,我們修改主服務器的配置文件:/etc/named.rfc1912.zones

將我們之前的配置進行修改:

zone "dylan.com" IN {           # 測試用的域是 dylan.com
        type master;
        file "dylan.com.zone";  # 配置文件為 dylan.com.zone,該文件目錄為 /var/named/ 下
        allow-update { 192.168.100.113; }; allow-transfer { 192.168.100.113; }; # 允許同步DNS的輔助服務器IP also-notify { 192.168.100.113; }; notify yes;  # 啟用變更通告,當主文件變更,通知從進行比較同步
};

紅色部分是我們新加的,並指定了從的地址,重啟服務

systemctl restart named

 

2. 從服務器也安裝 bind 並將 /etc/named.conf 配置拷貝過來。

接着也是配置:/etc/named.rfc1912.zones,此時就能體現主從的不同:

zone "dylan.com" IN {
        type slave;
        file "slaves/dylan.com.zone";
        masters { 192.168.100.111; };   # 指定主服務器的 IP
        masterfile-format text;         # 指定區域文件的格式為text,不指定有可能會為亂碼
};

我們不需要再去配置 dylan.com.zone 文件,因為我們需要去主同步。所有直接啟動從的 dns 服務。

systemctl start named
systemctl enable named

重啟成功后我們會發現,在從服務器的 /var/named/slaves 目錄下,dylan.com.zone 已經同步成功。

 

3. 修改主配置測試同步情況:

我們修改主服務器的 dylan.com.zone,新加解析的同時,修改配置編號,讓從能夠探測到變化。

此時我們重啟主服務器,會發現從服務器就能夠同步成功。

順便值得一提的是,我這里使用 reload named 服務並沒有使配置生效。

 

 

小結

 

值得一提的是,我們在域名解析過程中,還會遇到某些特殊情況:

1. @ 可以引用當區域名字,比如直接訪問 baidu.com 就是這樣的解析

2. 同一名字通過不同的名字定義多條記錄,此時 DNS 會輪詢響應。

3. 同一值可以多個名字。

4. * 泛域名解析,比如配置 *.baidu.com 指向某個 IP,那么如果你訪問 a.baidu.com 這種沒有配置的會默認走這個配置。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM