使用bind搭建內網dns服務

dns服務端方案簡介

dns服務有什麼用呢,尤其是內網的dns服務,其實用處還蠻大的,我見過的典型使用,是數據庫跨機房多活。

如某mysql主機搭建在深圳機房,爲了保證高可用,那我們可以給這臺主庫,維護多個深圳同城的跨機房半同步備機,在異地如上海還可以維護一個異步備機。當主機出問題時候,我們可以切換到備機去,而切換了之後,ip肯定就變了,此時就不得不要求客戶端修改ip,非常麻煩。

一個可選的方案就是,給客戶端服務提供一個域名,客戶端服務通過域名獲取對應的ip,然後再去和該ip建立連接。當數據庫發生主備切換時,只需要修改dns服務端,把域名對應的ip進行修改,同時通知客戶端服務進行重連(重連時就可以取到最新的ip),這樣的話,不就可以做到數據庫容災切換,且不需要業務方修改配置了嗎?

在這其中呢,有個關鍵的組件,就是搭建私有的內網dns服務器。

dns服務的開源實現,有兩個,一個是bind,一個是dnsmasq,前者比較重,專注於dns這塊,後者則是相對輕量一些,所以呢,如果需要極高穩定性,建議還是使用重量級的bind。

今天呢,其實就是簡單介紹下bind的安裝、內網域名配置等等,細節還是比較多,因此記錄一下。

安裝&配置

安裝其實有兩種方法,一種是通過源碼包編譯安裝,一種是使用yum包管理器,我這邊之前實踐是用的源碼包方式,確實相對繁瑣一點,不過也還行;以後可以再稍微說下yum包的方式。

源碼包下載及安裝

https://downloads.isc.org/isc/bind9/cur/

https://downloads.isc.org/isc/bind9/cur/9.18/

我這邊是9.18版本,下載bind-9.18.4.tar.xz後,rz上傳到了我的服務器上。(wget也ok)

tar -xvf bind-9.18.4.tar.xz
cd bind-9.18.4/
// 建議一定要加上prefix哈,不然相關文件會散落各處
./configure --prefix=/usr/local/bind9  --disable-doh
// 接下來,可能會提示一些依賴包不存在,此時需要yum 安裝
yum search libuv
yum install libuv
yum install libuv-devel

yum search libnghttp2
yum install libnghttp2

yum search libpcap
yum install libpcap
yum install libcap-devel

由於大家的機器環境各不相同,可能有些依賴已經有了,不需要裝;或者是還缺更多依賴,這種時候就拿着錯誤去百度吧;另外,我個人習慣yum安裝前,先查一下,看看是個什麼包。

configure完成後,就執行

make && make install

此時,可以去看看prefix目錄下,是什麼情況:

[root@VM-0-6-centos bind9]# pwd
/usr/local/bind9
[root@VM-0-6-centos bind9]# ll
total 28
drwxr-xr-x  2 named named 4096 Jul  3 11:50 bin
drwxr-xr-x  2 named named 4096 Jul  3 14:42 etc
drwxr-xr-x 10 named named 4096 Jul  3 11:50 include
drwxr-xr-x  3 named named 4096 Jul  3 11:50 lib
drwxr-xr-x  2 named named 4096 Jul  3 15:45 sbin
drwxr-xr-x  3 named named 4096 Jul  3 11:50 share
drwxr-xr-x  3 named named 4096 Jul  3 12:12 var

創建專屬用戶(可選步驟)

建了個專門的named用戶

groupadd -g 53 -r named
useradd -u 53 -s /sbin/nolgin -r named -g named

如果使用了named用戶,所以要保證prefix目錄下的文件、目錄的權限匹配,我習慣了root用戶,操作完了後

chown -R named:named /usr/local/bind9

全局選項配置文件修改

我們現在需要先創建一個主要的配置文件,這個配置文件裏會有很多選項。

/usr/local/bind9/sbin/rndc-confgen > /usr/local/bind9/etc/rndc.conf

cd /usr/local/bind9/etc/
// 下面這條命令的意思是,取最後的10行,然後取這10行中的前9行,再去掉每一行前面的\#符號,大家可以分步執行看看結果
tail -10 rndc.conf | head -9 | sed s/#\ //g > named.conf

此時,named.conf這個配置文件的最最基本配置就有了,大致如下:

在這個之外,我們還可以再配置一些option選項,比如我這邊最終的配置文件如下:

key "rndc-key" {
        algorithm hmac-sha256;
        secret "RCTpzylRQeSrU5dPwypdzOJ0eeWNUYGt0csRFbISaU0=";
};

controls {
        inet 127.0.0.1 port 953
                allow { 127.0.0.1; } keys { "rndc-key"; };
};

options {
    # 運行時數據的目錄
    directory "/usr/local/bind9/var/run";
    # pid文件
    pid-file "named.pid";
    recursion yes;
    allow-query { any; };
    # 監聽53端口
    listen-on port 53 { any; };
    # 除了本地配置的域名,其他都轉發dns查詢到如下dns服務器
    forwarders {
       114.114.114.114;
       8.8.8.8;
    };
    forward only;
    
    # 禁用安全檢查,否則dns查詢會失敗
    dnssec-validation no;
};

# 自定義的域名的所在文件
include "/usr/local/bind9/etc/named.user.zones";

自定義內網域名的配置文件

我們打開named.user.zones文件看看:

zone "nx.com" IN {
        type master;
        # 文件名爲nx.com,那麼全路徑在哪裏呢,就是上面文件中的options.directory那個路徑
        file "nx.com";
        allow-update { none; };
};

zone "dump.com" IN {
        type master;
        file "dump.com";
        allow-update { none; };
};

這裏配置了兩個隨便寫的域名。那麼,有人會繼續問,怎麼沒看到域名相關的A記錄之類的dns記錄呢?

大家看下上面註釋哈,真正的dns記錄那些,在file那個屬性中配置,全路徑在哪裏呢,就是上面文件中的options.directory那個路徑。

[root@VM-0-6-centos run]# pwd
/usr/local/bind9/var/run
[root@VM-0-6-centos run]# ll
total 24
-rw-r--r-- 1 root  root   534 Jul  3 16:08 dump.com
-rw-r--r-- 1 named named  221 Jul  3 14:26 managed-keys.bind
-rw-r--r-- 1 named named 1818 Jul  3 14:26 managed-keys.bind.jnl
drwxr-xr-x 2 named named 4096 Jul  3 16:08 named
-rw-r--r-- 1 named named    6 Jul  3 16:25 named.pid
-rw-r--r-- 1 root  root   463 Jul  3 12:55 nx.com

這邊給大家看看dump.com文件的內容:

$TTL 1D
@               IN SOA  @ rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
                      NS      @
                      A       127.0.0.2
## 前面幾行呢,我也沒做深入研究,建議生產部署的時候,再研究該選項,我們部署着玩,可以先只看下面幾行                      
nameserver.dump.com.      IN      A       127.0.0.3
test1.dump.com.    IN      A       127.0.0.5
test2      IN A   127.0.0.8

可以看到,上文的最後三行,格式比較亂,但大致是三條A記錄;格式亂不影響,因爲它應該是按照空格來分開的。

前臺方式運行bind

/usr/local/bind9/sbin/named -u named -g

運行後,記得觀測是否報錯。

有報錯的話,基本對應的域名就解析不了了。

此時,我們ps看一下進程:

[root@VM-0-6-centos work-file.git]# ps -ef|grep named
named    28891  2019  0 16:15 pts/1    00:00:00 sbin/named -u named -g

ok,已經運行起來了,此時可以用dig命令來進行測試:

# @符號後面跟該dns服務的ip或域名,端口默認爲udp 53,如果dns服務部署在雲端服務器,然後測試如果在pc,可能要注意雲服務器放行相關防火牆端口
dig nameserver.dump.com @localhost

後臺運行

/usr/local/bind9/sbin/named -u named -c /usr/local/bind9/etc/named.conf

在windows pc上安裝dig命令,測試效果

https://downloads.isc.org/isc/bind9/cur/9.16/

下載BIND9.16.30.x64.zip

本地解壓後,cmd裏執行:

注意啊,如果不通,多半是udp 53端口被防火牆攔截了。

重要文檔

如果希望瞭解更多配置文件選項:https://downloads.isc.org/isc/bind9/9.18.4/doc/arm/html/chapter3.html#introduction

yum安裝bind:https://copr.fedorainfracloud.org/coprs/isc/bind/

bind相關文檔:https://www.isc.org/bind/

參考文檔

https://blog.csdn.net/weixin_45756094/article/details/122011509

https://blog.csdn.net/u011288801/article/details/106736607/

本文由mdnice多平臺發佈

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章