BIND View 加速南北方網(wǎng)絡互訪
原創(chuàng)【51CTO.com獨家特稿】有一定上網(wǎng)經(jīng)歷的人都知道“南電信”、“北網(wǎng)通”的說法, 這些年隨著網(wǎng)通的逐漸壯大, 網(wǎng)通用戶規(guī)模還在越來越大,北方很多省市(北京、河北、山東等)的用戶主要是通過網(wǎng)通接入上網(wǎng);而南方大部分用戶是通過電信接入,而兩大網(wǎng)絡運營商之間的連接帶寬比較有限,跟不上互聯(lián)網(wǎng)業(yè)務發(fā)展的速度,因此也就形成了南北兩地用戶由于電信和網(wǎng)通的互聯(lián)互通瓶頸問題,如何才能以一種更具普遍性的方式來解決該互訪問題呢?本文將通過BIND View功能來實現(xiàn)互訪。筆者采用的方案是利用 BIND 9的新增功能-View,為公司建立一個DNS服務系統(tǒng)。這是一個全新的方法,在實施的過程中,由于以前沒有類似項目可供借鑒,也沒有更多詳細說明View 功能的資料,因此頗費了一番周折。
一、選用BIND解決方案
首先,來分析一個網(wǎng)絡現(xiàn)狀和系統(tǒng)需求。系統(tǒng)要解決的是電信和網(wǎng)通互訪問題,具體表現(xiàn)包括速度減慢等。其次,由于現(xiàn)在的網(wǎng)絡存在很多私有IP地址即內(nèi)網(wǎng)IP,在他們訪問互聯(lián)網(wǎng)時必須通過一些轉(zhuǎn)換及映射工具來實現(xiàn)互訪,因此還需要解決一個內(nèi)網(wǎng)IP和外網(wǎng)IP的區(qū)別問題。另外,出于對公司和網(wǎng)站安全性考慮,需要限制某些IP地址訪問網(wǎng)站,或者將這些來訪IP段指向其他地方。
通過以上分析,擬定了如下幾種解決方案:
■利用Linux防火墻設置工具iptables 來配置動態(tài)DNS。核心思想是在DNS服務器上運行多個BIND,每個BIND為來自不同區(qū)域的用戶提供解析,這樣每個BIND都應有不同的配置文件和域文件。在接收到客戶訪問時,根據(jù)客戶不同的IP地址將請求重定向到不同BIND。這一方法的缺點是過于復雜,并且不能解決MX記錄問題。
■利用BIND 9的Cache 記錄。該方法實際上是解決了內(nèi)外DNS的解析問題。
■同樣是設置內(nèi)外DNS, 并用ACL做進一步限制。這一方法的缺點是機器使用較多。
■利用 BIND 9 的View功能。這是上述幾種方法中最易理解和實現(xiàn)的。
■ 當然還可以利用一些硬件工具來解決。
基于上面提出的幾種解決方法,經(jīng)過綜合考慮,決定利用BIND 9的View 功能來實現(xiàn)互訪。簡單地說,BIND View 功能可以實現(xiàn)DNS對不同網(wǎng)段返回不同地址,即對不同IP地址段發(fā)來的查詢響應不同的DNS解析。該方案從實施復雜度和投入資金等方面都有較大優(yōu)勢。不足之處是在安全性方面有待提高,以及存在一些漏洞等。#p#
二、BIND View方案簡述
1.所用系統(tǒng)及配置文件
這里使用的服務器版本是 Red Hat Enterprise Linux 5.0。為了確保公司域名服務器能夠不間斷運行,我們同時架設兩臺DNS服務器(Master和Slave)。這里將著重介紹建立在Linux 系統(tǒng)上的 Master主DNS 服務器系統(tǒng)。
Berkeley Internert Name Domain (BIND)是一個熟知的域名軟件。它具有廣泛的使用基礎,互聯(lián)網(wǎng)上的絕大多數(shù)DNS服務器都是基于該軟件。BIND 目前由ISC (Internet Software Consortium)負責維護,具體開發(fā)由 Nominum 公司完成。
從BIND 官方網(wǎng)站http://www.isc.org/bind可以下載它的最新版本。安裝完成后,在/etc 目錄中會有 hosts 、hosts.conf、resolv.conf、named.boot和named.conf等配置文件。
■hosts 文件定義了主機名與IP地址的對應,其中包括將要運行DNS 的這臺服務器的IP 地址和主機名。
◆resolv.conf 文件內(nèi)容如下:
- search linux.com
- nameserver IP
“nameserver IP”指定DNS服務器的地址。注意,該文件對普通非Windows 系統(tǒng)的DNS服務器(Windows系統(tǒng)在“網(wǎng)絡屬性”中設置該項)來說必不可少。如果沒有設置本機為DNS服務器,又要求能夠解析域名,就必須指定一個DNS服務器地址。最多可以寫入三個地址,作為前一個失敗時的候選DNS服務器。
■named.boot文件是早期版本BIND 4所用的配置文件,新版本中已經(jīng)讓位于named.conf.
■named.conf是DNS服務器配置的核心文件。
以上只是簡單說明設置DNS服務器時涉及的配置文件,后文將主要介紹named.conf 中的具體設置選項。DNS的具體配置過程及BIND的詳細安裝步驟可以參閱其他資料。
2.View語法介紹
View功能很容易理解,就是將不同IP地址段發(fā)來的查詢響應到不同的DNS解析。例如需要對三個不同IP地址段進行配置,就需要明確這些IP地址段,這樣View功能才會有效。對于初學者,簡單了解它的語法非常必要。如果要有一個更清楚的認識,則可以到BIND官方網(wǎng)站查閱文檔。
3.View的簡單實例
下面給出View的一個簡單實例,參照上面的解釋可以進一步地了解View 的用法。
- acl “example”{
- 192.168.1.123;
- 192.168.1.124;
- ……};//定義一個IP訪問控制列表
- View “internal”{
- //表示這是一個內(nèi)部網(wǎng)絡
- Match-clients{IP地址段};
- //由于前面已經(jīng)定義acl,所以這里可以用實際IP地址段,也可以改用acl名字“example”
- Clients only;
- Recursion yes;
- //表示查詢方式允許遞歸查詢Zone
- //表示包含的區(qū)文件
- Zone “linux.com”{
- Type master;
- File “linux.com”;
- };
- };
- View “external”}
- Match-clients{any;};
- //表示除了上面acl列表所定義的IP地址以外的所有地址
- Recursion no;
- //表示子網(wǎng)以外的網(wǎng)張不應該請求該DNS服務器的遞歸查詢
- Zone
- //建立“external”相對應的區(qū)文件
- Zone “linux.com”{
- Type master;
- File “linux.com.db”
- };
- };
#p#
三、方案實施步聚
1.基本設置
下面結(jié)合實際搭建過程和namd.conf的具體設置,詳細說明應該注意的方面。在本例中,選用linux.com做為本地域名,nsl為本地主機名,IP地址為61.56.123.5(這是一個虛擬的電信IP地址)。為了讓網(wǎng)通和電信的用戶都能快速訪問本網(wǎng)站,網(wǎng)站另外還有一個網(wǎng)通IP地址。
本例把網(wǎng)通命名為cnc,電信命名為tel,定義了兩個域名來同時使用一臺DNS服務器,并且在/var/named/下建立相應的目錄結(jié)構(gòu)和域名文件。
◆對應區(qū)文件的建立
在/var/named下分別建立相應的cnc和tel目錄,在目錄下分別建立相應的區(qū)文件 linux.com、db.linux.com和idg.linux.com等。例如,網(wǎng)通即cnc目錄中建立的linux.com
文件的內(nèi)容如下:
- $TTL 900
- @ IN SOA
- nsl.linux.com.
- root.linux.com.(
- 20050615;Serial
- 28800; Refresh
- 14400; Retry
- 3600000;Expire
- 86400);Minimum
- linxu.com. INnsl.linux.com
- nsl IN A 61.56.123.5
- aaa IN A 221.12.160.93 bbb IN A 221.12.160.93
- linux.com. IN 221.12.160.92
- mail2 IN A 61.157.39.100
上述內(nèi)容只是一個列子,各公司或企業(yè)可以根據(jù)不同要求具體給出區(qū)文件的內(nèi)容。Tel 目錄中的文件內(nèi)容與些類似,修改相應IP地址即可。
◆主配置文件的設定
這里將根據(jù)網(wǎng)通和電信的IP地址,讓DNS對不同網(wǎng)段返回不同的地址解析。
- options{
- directory“/var/named”;
- //配置文件所在目錄
- Pid-file “/var/run/named.pid”;
- //進程守護文件
- Statistics-file “/var/run/named.stats”;
- //狀態(tài)輸出文件,在rndc中用到
- //query-source address *port 53;
- allow-recursion {ournets;};
- };
- //a caching only nameserver config
- Controls {
- inet 127.0.0.1 allow { localhost ;}keys {rndckey } ;
- };
- //acl 定義網(wǎng)通IP地址池,即如下IP地址訪問網(wǎng)站時將指引到網(wǎng)通相應的區(qū)文件中。
- acl “subnet” {
- 61.207.0.0/16;
- 168.160.224.0/19;
- ……
- };
- view “baoku” {
- match-clients {“subnet”;
- //注意,在使用View功能 時,一定要把整個named.conf的設置語句都包括在view里面,否則最后會出現(xiàn)錯誤。
如上設置完成后,當網(wǎng)通用戶和電信用戶訪問該網(wǎng)站時,DNS的View功能會根據(jù)他們不同的地址段指向分別相對應的區(qū)文件。
2.問題分析
在系統(tǒng)設置的過程中“named-g”起到很大作用,發(fā)現(xiàn)了很多DNS的問題,包括named權(quán)限問題,以及區(qū)文件里的語法錯誤等。通過具體實踐,讀者會有更深切的體會。如上設置完成后是否就可以順利地看到結(jié)果了呢?不然。這還需要根據(jù)DNS服務提供的具體情況。由于筆者公司是由DNS服務提供商來提供網(wǎng)站解析服務,所以需要面對一個如何讓所配置DNS服務合法起作用的問題,即如何使用戶在訪問該網(wǎng)站自己的DNS服務器解析。通過與服務提供商協(xié)調(diào),一家DNS服務提供商允許我們修改其區(qū)文件,在其中添加一條A記錄指向網(wǎng)站自己的DNS服務器,從而解決了這一問題。當建立了Slave輔助服務器后,最好不要采取這一方式,以避免引起混淆。這種情況下可以直接注冊一個自己的DNS服務。
3.加強安全
本文只是介紹了使用BIND View功能架設DNS簡單過程,其中還有很多東西值得深究,比如網(wǎng)絡加強安全問題等。本例中,筆者通過關(guān)閉該DNS服務器上的所有無關(guān)端口,并建立相應iptables防火墻規(guī)則來保證網(wǎng)絡安全。還可以使用最新BIND 9版本來設置一個在chroot環(huán)境下運行的BIND的安全性。將BIND chroot到/chnamed目錄運行,則named在運行時將認為/chnamed是實際的根目錄,即使named有某種安全漏洞被人攻破,也只能存取到該目錄為止。BIND 9還新增了很多關(guān)于安全性的設定項,讀者可以根據(jù)需要自行具體設定。限于篇幅下次再給大家介紹BIND 9安全設置。
【51CTO.com獨家特稿,非經(jīng)授權(quán)請勿轉(zhuǎn)載,合作站點轉(zhuǎn)載須注明原文出處及作者!】