使用Dnsmasq搭建DNS服務器

使用Dnsmasq搭建DNS服務器

1、背景

使用公共的114dns進行域名解析所使用的時間太長,所以採用本地搭建dns服務器進行域名解析,公司內部機器訪問只需要輸入IP即可訪問,省去了公共dns解析域名的時間。

使用Dnsmasq搭建DNS服務器

圖 1 使用本地DNS解析所用的時間幾乎為0秒

Dnsmasq

2.1、dnsmasq的原理圖

使用Dnsmasq搭建DNS服務器

圖 2 dnsmasq的原理圖

客戶機訪問service時需要DNS進行域名解析,於是先訪問dnsmasq,dnsmasq的機制是先檢索本地的hosts如果沒有解析記錄的話就會去訪問dnsmasq.d/*.conf文件,若還是沒有那麼就會去訪問resolv-file的上游DNS解析服務器,也就是其他的dns服務器。

例如,我去訪問www.zhang.com,那麼dnsmasq首先會檢索hosts裡面有沒有這個記錄,若沒有那麼就開始檢索dnsmasq.d/*.conf文件,若還是沒有,那麼會去訪問resolv-file的上游DNS解析服務器,其他的dns服務器裡面有這條記錄,那麼dnsmasq就會解析出www.zhang.com的ip地址。

2.2、dnsmasq的搭建方法

(1)環境採用centos7.4。

(2)使用yum install -y dnsmasq。

(3)然後修改配置文件vim /etc/dnsmasq.conf 。

(4)在文件的最下面添加:

port=53 #dnsmasq使用53號端口。

cache-size=1000 #緩存解析記錄1000條。

log-queries #日誌顯示每一條的解析記錄。

log-facility=/var/log/dnsmasq.log #log日誌的所在位置。

conf-dir=/etc/dnsmasq.d #dnsmasq.d/*.conf文件的絕對路徑

addn-hosts=/etc/hosts #添加額外讀取的hosts文件。

resolv-file=/etc/dnsmasq-resolv.conf #定義dnsmasq從哪裡獲取上游DNS服務器的地址。

(5)複製系統的DNS服務配置為dnsmasq的上游DNS服務器地址,

cp /etc/resolv.conf /etc/dnsmasq-resolv.conf。

編寫pan_jncsy_net.conf配置文件:

address=/xxx.xxx.com/192.168.10.109 #正向解析,xxx.xxx.com解析為192.168.10.109。

ptr-record=192.168.10.109.in-addr.arpa,xxx.xxx.com #ptr反向解析,將192.168.10.109解析為pan.jncsy.net。

(7)編輯系統的hosts文件,添加解析記錄,vim /etc/hosts,在最下面添加一條192.168.10.109 xxx.xxx.com。

(8)關閉firewalld,systemctl stop firewalld。

(9)啟動dnsmasq,systemctl start dnsmasq,並設置開機自啟,systemctl enable dnsmasq。

以上,搭建完畢,開始測試。

2.3、dnsmasq的測試

Win+r後輸入cmd打開windows的cmd命令行模擬客戶機,並輸入nslookup進入解析模式。

輸入server 192.168.119.128切換dns解析服務器,然後輸入xxx.xxx.com域名並點擊回車。

使用Dnsmasq搭建DNS服務器

圖 3 使用windows的powershell測試結果

如上圖所知,域名xxx.xxx.com經過dns服務器192.168.119.128的解析返回了與域名對應的IP,dns服務器搭建成功。

Dnsmasq的後期維護

3.1、添加解析記錄

首先,在hosts裡面添加記錄,格式為IP空格域名。

其次,編寫dnsmasq.d/*.conf的配置文件,格式為

address=/域名/IP

ptr-record=IP.in-addr.arpa,域名

最後,重啟dnsmasq,systemctl restart dnsmasq。

3.2、配置dnsmasq的日誌輪轉

由於打開了dnsmasq的日誌功能,而且每一條解析都會產生一條記錄,經觀察,log文件一天能寫8M左右,所以配置日誌輪轉防止系統因存儲不足而崩潰,logrotate.d下面的dnsmasq配置如下:

/var/log/dnsmasq.log {

daily #指定轉儲週期為每天。

copytruncate #用於還在打開中的日誌文件,把當前日誌備份並截斷。

missingok #日誌輪轉期間,任何錯誤都將被忽略。

rotate 30 #保留30天。

compress #通過gzio壓縮轉儲舊的日誌。

notifempty #如果是空文件的話,不轉儲。

dateext #日誌輪轉時會在文件後面添加時間。

size 200M #日誌到達200M時才輪轉。

}


分享到:


相關文章: