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/
本地解壓後,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多平臺發佈