在搭建我們自己DNS服務器之前,先必須了解下DNS服務器的作用和原理。
DNS是在互聯網上進行域名解析到對應IP地址的服務器,保存互聯網上所有的IP與域名的對應信息,然后將我們對網址的訪問,解析成IP地址並返回,然后電腦再去通過IP地址去訪問服務器,獲得數據。
首先就要講一下域名,這里我拿百度的地址來進行講解:
www.baidu.com.
完整的域名,后面都是有一個“.”的,但是一般使用中都是默認省略點了,這是一個完整的域名。通過 "." 來進行分割成三個部分:
www: www是 主機名
baidu: baidu是 域名
com: com是 類型
但是平時,我們習慣將整 域名+類型合起來成為域名,主機名,稱之為子域名。 而實際上並不是這樣的。嚴格來說就是 主機名,域名,類型。
然后,當我們訪問 www.baidu.com 時,電腦會先去dns服務器上查找與這個網址對應的 ip並返回。這個過程就是DNS解析。而DNS服務器又分為下面幾種:
"." :完整網址中最后的那個“.” 就代表DNS的根服務器,根服務器是DNS服務器中最上層的服務器,分布在全球各地。其中保存着該區域的所有 的類型DNS服務器的IP地址
com : com是一個DNS類型,像常見的com,net,org,edu,gov是政府的規定的正式類型,還有常見的商用類型等。里面保存着的都是類型為 com 的域名服務器的IP地址。
baidu.com : baidu為域名,是com的下級dns服務器,里面保存着域名為 baidu.com 的所有主機對應的IP地址
當我們訪問 www.baidu.com 時,會先去 根服務器中 查找所有的 com類型服務器的地址,然后再去com類型的服務器上查找所有 baidu.com 域名的服務器地址,最后再去 所有baidu.com的域名服務器上找到 www.baidu.com 這個網址對應的IP地址,然后返回給訪問www.baidu.com的電腦主機。 然后主機就用這個IP與服務器建立連接。
另外,所有這些不同層級DNS服務器都一般是由多台服務器同時提供服務,做一個冗余好可用,負載均衡。 在這上面分為:
主服務器: 又名master服務器,所有其他從服務器和緩存服務器的域名解析信息都是由master服務器上抓取下來的,所有的修改都直接在master上修改就行了,別的自動同步
從服務器: 又名salve服務器,是作為master服務器的冗余備份,讓master故障后,salve還能繼續提供服務。
緩存服務器: 主要作用就是緩存DNS信息,提供服務給用戶查詢,並不能自定義域名配置進行解析。
然后再DNS服務器上進行查詢的時候,分為兩種查詢模式,遞歸查詢和循環查詢:
遞歸查詢 :就時去去到一個dns服務器查詢到結果后,就將結果返回給查詢者,查詢者再去查詢別的DNS服務器,這樣一次一次的進行查詢返回,直到找到數據。
循環查詢: 循環查詢就是查詢者像一個DNS服務器發起查詢后,由這個DNS服務器去查詢別的服務器A,A又去查詢別的服務器B,直到找到結果,然后返回B,B返回給A,A 再返回給查詢者。
一般情況下,是我們個人主機,向我們網絡配置中配置的DNS服務器進行查詢,使用循環查詢,由指定的DNS服務器代替我們用遞歸查詢去網絡上查詢得到結果。然后返回給個人用戶主機。 這就是DNS服務器的工作原理。
而現在我們就是要搭建自己DNS服務器,讓公司內所有員工的DNS服務器地址都指向到這台服務器上。通過這個本地的DNS服務器來進行解析,代替常用的DNS服務器,如果各大運行商的,114的,阿里雲的等等。
這樣做就可以自定義自己內部的域名,通過域名來訪問內網的服務器,像公司內網的論壇,內網的網站等等,都可以直接輸入網址進行訪問。
下面進行安裝: 環境:centos7.2
首先:
yum install bind bind-utils bind-chroot -y<span> </span>(bind-utils和bind-chroot dns的常用工具,不下也可以,不影響服務)
配置文件:
/etc/named.conf主配置文件
/etc/named/zone文件
如過你安裝了bind-chroot,則bind-chroot會將bind服務放置於一個偽根目錄下,這樣如何黑客攻破了你的服務器,進到來的就是在偽根目錄下,不會危害到你真正的根目錄,是一個安全的措施。
偽根目錄:
/var/named/chroot/etc/named.conf 紅色就是偽根目錄。
這個就是bind-chroot生成的偽根目錄。在這個目錄下,會生產完整的bind服務的結構,進到這個目錄下,會發現里面基本沒有文件,只有目錄文件夾,這就需要你將真實的根目錄下的bind的配置文件和一些需要的文件都復制一份到這個偽根下,或創建一些基礎文件,給與權限啊等操作:
$ cp -R /usr/share/doc/bind-9.9.4/sample/var/named/* /var/named/chroot/var/named/
$ touch /var/named/chroot/var/named/data/cache_dump.db
$ touch /var/named/chroot/var/named/data/named_stats.txt
$ touch /var/named/chroot/var/named/data/named_mem_stats.txt
$ touch /var/named/chroot/var/named/data/named.run
$ mkdir /var/named/chroot/var/named/dynamic
$ touch /var/named/chroot/var/named/dynamic/managed-keys.bind
$ chmod -R 777 /var/named/chroot/var/named/data
$ chmod -R 777 /var/named/chroot/var/named/dynamic
$ cp -R /etc/named* /var/named/chroot/etc/
$ chown -R root.named /var/named/chroot/<span> </span>##直接將偽根目錄下的所有文件都給named用戶,讓其能夠修改。避免權限問題報錯。
如果不不使用 bind-chroot 的話,就不需要上面的操作。直接進行下面的配置文件修改,修改的目錄也不是偽根目錄了,直接修改真實的目錄就行
好的,剩下的就是編輯配置文件,自定義DNS服務了。
vim /var/named/chroot/etc/named.conf
options {
listen-on port 53 { any; };<span> </span>## 修改成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";
allow-query { any; };<span> </span>## 修改成any
/*
- If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
- If you are building a RECURSIVE (caching) DNS server, you need to enable
recursion.
- If your recursive DNS server has a public IP address, you MUST enable access
control to limit queries to your legitimate users. Failing to do so will
cause your server to become part of large scale DNS amplification
attacks. Implementing BCP38 within your network would greatly
reduce such attack surface
*/
recursion yes;<span> </span>## 不用修改,啟動遞歸服務
dnssec-enable yes;<span> </span>## 不用修改
dnssec-validation yes;<span> </span>## 不用修改,下面的沒貼出來的也不用修改,保持默認就行
然后修改域空間配置文件
vim /var/named/chroot/etc/named.rfc1912.zones
zone "amos.com" IN {<span> </span>## amos為我設置的域名。可自定義修改為自己的域名
type master;<span> </span>## DNS服務類型,默認為master,這里我們是搭建的第一個DNS服務器,則就定為主服務器,即默認的master
file "creatson.com.zone";<span> </span>## 域名配置文件名 ,這個文件名會在 /var/named/chroot/var/named/ 這個目錄下去尋找
};
配置了域的配置文件路徑后,就需要創建這個域的配置文件:
cp /var/named/chroot/var/named/named.localhost /var/named/chroot/var/named/amos.com.zone<span> </span>## 已named.localhost為基礎模板,復制一份並改為上一步配置的名稱
vim /var/named/chroot/var/named/amos.com.zone<span> </span>## 編輯
-------------------------------------------以下為內容-------------------------------------------------
$TTL 1D<span> </span>## TTL 就是修改配置的生效時間,本質上就是這個域的DNS信息在別的DNS服務器的緩存中存在多久,默認為一天
@ IN SOA @ rname.invalid. (
0 ; serial<span> </span>## 這個是配置的編號,每次修改完配置后這個編號變化一下,通常是直接+1,這樣從服務器就能知道有修改並更新配置
1D ; refresh<span> </span>## 從服務器刷新時間,默認一天刷新一次<span> </span>
1H ; retry<span> </span>## 如果刷新失敗,默認1小時重試一次
1W ; expire<span> </span>## 緩存過期時間,一周<span> </span>
3H ) ; minimum<span> </span>## 這個不知道干嘛的,默認就行
NS @
A 127.0.0.1
AAAA ::1
eip IN A 192.168.9.89<span> </span>## 配置子域名,也就是主機名,對應的IP地址,A記錄就是對應 IPV4 地址。 IN 表示 internel 網絡
jenkins IN A 192.168.9.90<span> </span>
gitlab IN A 192.168.9.55
這里要說一下,TTL這個東西。不管是你自己搭建DNS服務器還是,你買的域名,比如萬網上,在配置域名解析的時候,后面都有一個TTL值,在萬網上默認是10分鍾。這個TTL值就表示你的域名與IP的對應關系這個信息,在別的DNS服務器緩存中的過期時間,因為別的DNS服務器,比如電信服務商,比如114,阿里巴巴的DNS等,用戶的DNS配置指向這些服務器,這些服務器去查詢出結果並緩存在本地,下次再有人查詢就直接返回,不會去查詢。 所以,當這些域名與IP的對應信息有修改,但是DNS緩存的信息還是以前的,用戶就會訪問到舊的服務器IP地址,必須得等這個信息的緩存時間到期了,然后再次去查詢得到新的數據並緩存,這樣才能正常訪問新的IP。 而決定域名信息在DNS服務器上緩存多久的就是 TTL值與 DNS服務器默認的緩存時間 兩個值的最小方。 DNS默認的緩存時間,像Bind,默認是一周。 而TTL一般不會 這么長,所以,基本緩存更新的時間,就由 TTL值來決定。 這個值越大,則保存的越久,速度更快,不會平凡的去查詢更新域名信息。 但是如果有修改,那么久需要 更長的時間才能在全國甚至全球生效。 TTL值越短,那么生效時間就越短。相對的就會平凡查詢域名信息。影響速度。
那么這個值要設置多少合適呢,就看自己的實際情況和需求。沒有統一的,對靈活性要求高,則低一點。 靈活性不高,幾年不變一次,就可以設置高一點。
OK,修改完成后,就可以啟動DNS服務:
systemctl statr named-chroot<span> </span>## 啟動服務,如何使用了bind-chroot 則啟動 named-chroot 否則啟動 named
systemctl enable named-chroot<span> </span>## 設為開機啟動
然后將服務,在防火牆上放行:
firewall-cmd --add-service=dns --permanent
firewall-cmd --reload
好的。到此,DNS服務器就搭建完成。將內網的電腦的DNS指向DNS服務器試試,就能正常的使用域名訪問內網,也能正常的訪問外網。
上面只是搭建了一個主DNS服務器,master服務器。如果在大的公司,公司內網很大,人很多。一台主DNS服務器不夠用,或者害怕其掛掉會影響公司網絡。那么就可以部署一台或多台從服務器來進行冗余備份。下面講解以下 從服務器 的搭建與配置:
從服務器的搭建,前面與主服務器的相同,在世配置文件不同,因為從服務器不能自己修改域配置,所有的域配置信息都是從主服務器上拉取過來的。
/var/named/chroot/etc/named.conf ##主配置文件 與 主服務器的相同
vim /var/named/chroot/etc/named.rfc1912.zones
zone "amos.com" IN {
type slave;<span> </span>## 類型改為 salve 從
masters { 192.168.9.57; };<span> </span>## 配置 master服務器 地址
file "salve/amos.com";<span> </span>## 配置拉取后的存放路徑 同樣是在 /var/named/chroot/var/named/ 下的路徑 ,這個slave文件夾是需要自己創建並賦予權限的
};
OK,就這樣就可以了,將域名寫上,設為從服務器,配置master地址就可以了,然后其他的與 主服務器相同,正常啟動服務就可以了,然后可以去 salve/目錄下查看是否正常拉取了主服務器的配置文件
OK,除了從服務器,還有緩存服務器,就更簡單了,同樣是所有的安裝步驟都和主服務器相同。只在配置文件上不一樣。緩存服務器只要不自己設置任何的域配置文件,則可以正常作為一個遞歸的DNS服務器,緩存網絡上的DNS信息給內網用戶提供,加快響應速度。
vim /var/named/chroot/etc/named.conf<span> </span>## 修改主配置文件
forwarders { 114.114.114.114; };<span> </span>## 添加DNS代理查詢的地址,就是本地找不到緩存就去這個地址找
OK,就這樣就是可以作為一個DNS緩存服務器,給內網用戶提供DNS解析服務。減少去訪問外網DNS服務器的流量和時間。
---------------------
作者:Amos_x
來源:CSDN
原文:https://blog.csdn.net/weixin_41004350/article/details/79107732
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。