前言服務器
有一臺Linux機器做爲DNS服務器,查看這臺機器上的DNS文件,發現指向互聯網上的DNS服務器。網絡
[root@ziqiang named]# cat /etc/resolv.conf # Generated by NetworkManager nameserver 8.8.8.8 nameserver 222.222.222.222
那麼問題來了,能夠把這些互聯網上的DNS服務器刪掉,換成Linux服務器自己的IP嗎? 換句話說就是讓DNS服務器指向本身。ide
回答前言的問題spa
徹底能夠。debug
DNS服務安裝完畢後,他就有根提示,天生就知道互聯網上13個根DNS服務器。只要安裝DNS服務的那臺機器能夠訪問Internet,就徹底能夠解析全球域名。3d
所以DNS服務器的/etc/resolv.conf徹底能夠指向本身,對於未知域名,DNS服務器上的DNS服務會本身找根DNS服務器進行域名解析,並把解析結果保存在本地DNS服務器上。固然,/etc/resolv.conf指向Internet上的DNS服務器更是沒毛病。rest
域名解析轉發code
回顧下DNS域名解析的過程server
當內網計算機使用域名上網的時候,會先找該局域網內的DNS服務器,即本地DNS服務器。因爲本地DNS服務器上配置了zone,他知道本身掌管了哪些域名。因此,若是客戶機剛好請求的這些域名就是本地DNS管理的,本地DNS直接回復客戶機。若是本地DNS服務器,不知道你請求的域名,他會直接向根DNS請求,而後通過DNS遞歸查詢,最終將域名解析結果返回給客戶機。blog
域名解析轉發(foward)
上面DNS域名解析是正常的流程,也是不少大學教材裏面講解DNS域名解析過程用到的。下面介紹域名解析轉發
考慮以下場景,母公司內部配置有本地DNS服務器,負責解析母公司內部服務器域名以及互聯網上的域名。子公司與母公司物理距離較遠,兩地使用專線連接,專線帶寬不高。子公司內部計算機不直接鏈接互聯網。
假如不在子公司內部設置DNS服務器,子公司內部計算機對母公司內部域名解析請求以及互聯網上域名解析請求都會交由母公司的DNS服務器(爲啥子公司電腦不直接填互聯網上的DNS?1.解析不到母公司私網的服務器 2.公司也不可能容許你這麼作)。這部分域名解析流量會嚴重佔用專用鏈路的帶寬,致使網絡阻塞。
在子公司內部設置一個DNS服務器,可是這個DNS服務器又有點不一樣。對於本身不知道域名,他並無請求互聯網上的根DNS服務器,而是把域名解析的流量轉發給了母公司DNS服務器,這樣有效下降了專用鏈路上域名解析的帶寬佔用。這種場景就是DNS轉發。
DNS轉發還有2種場景(或者說2個參數)
①foward only 子公司DNS服務器指向母公司DNS服務器請求DNS解析。若是母公司DNS服務器掛了 或 子公司到母公司鏈路故障 或 母公司DNS上不了網(子公司DNS服務器能夠解析母公司內網服務器域名),子公司DNS服務器沒法解析Internet域名
②foward first 子公司DNS服務器優先指向母公司DNS服務器,若是母公司DNS服務器連不上(好比子公司到母公司的鏈路故障)會使用子DNS服務器保存的根DNS服務器來解析域名(這時候沒法解析母公司內網域名,能夠解析Internet域名)。
若是子公司到母公司之間鏈路是好的,單純母公司DNS服務器上不了網。子公司能夠解析母公司內網服務器域名,可是沒法解析Internet域名。
配置域名解析轉發
在子公司DNS服務器上修改配置文件named.conf
[root@ziqiang named]# cat /etc/named.conf // // named.conf // // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS // server as a caching only nameserver (as a localhost DNS resolver only). // // See /usr/share/doc/bind*/sample/ for example named configuration files. // 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"; allow-query { 192.168.80.0/24;192.168.90.0/24;}; recursion yes; forward only; forwarders {192.168.60.111;}; dnssec-enable no; dnssec-validation no; dnssec-lookaside no; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; }; 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";
針對這個文件主要注意以下兩個字段
forward only; forwarders {192.168.60.111;};
forward only; 代表DNS轉發模式
forwarders {192.168.60.111;}; 轉發給母公司哪一個DNS服務器,能夠設置多個
重啓nemed服務 service named restart
域名解析條件轉發
forward only;
forwarders {192.168.60.111;};
上面講域名解析轉發的時候添加的2個字段是針對全部域名的,還能夠設置條件轉發。
考慮如圖場景,有2個DNS服務器,分別負責abc.com和xyz.com域名。對於左邊DNS服務器下面的客戶機,解析xyz.com域名時,經過條件轉發能夠直接找右邊DNS服務器,而不是直接找根DNS服務器。
在左邊DNS服務器上編輯文件/etc/named.conf加上下面一段話
[root@WebServer ~]# vi /etc/named.conf zone "xyz.com." { type forward; forwarders { 192.168.80.111;}; };