在防火牆環境下DNS的安裝與設定(轉)
在防火牆環境下DNS的安裝與設定(轉)[@more@]在防火牆環境下DNS的安裝與設定天天 hutc.zj.cn lh@Hutc.zj.cn文章可以轉載,但一定要保留我的MAIL經過幾天的研究BIND,終於解決了我們單位的DNS問題。在一般防火牆下,都是採用DMZ區內放伺服器,外部訪問DMZ區得到外部的IP,內部訪問DMZ區時得到內部的IP。如一個,內部IP地址<--->放在DMZ的web伺服器的IP<----->外部IP地址192.168.1.1<--->192.168.0.1<----->211.202.49.1從DNS上可以從以下四個方面解決:一.iptables應用1. 核心思想 配置動態DNS伺服器的核心思想是:在DNS伺服器上執行多個BIND,每個BIND為來自不同區域的使用者提供解析,因此每個BIND都應具有不同的配置檔案和域檔案,並且分別監聽在不同的埠。在接到客戶端DNS請求時,根據客戶的ip地址將請求重定向不同的BIND服務埠。BIND響應時,再改寫相應包的服務埠為標準的53埠。這樣就可以根據客戶端的ip地址將不同的解析結果返回給客戶端。整個過程對於客戶端來說都是透明的。實現的關鍵在於執行不同的BIND及運用iptables進行ip地址及埠改寫操作。2 配置過程 步驟1: 配置核心 netfilter要求核心版本不低於2.3.5,在編譯新核心時,要求選擇和netfilter相關的專案。這些專案通常都是位於"Networking options"子項下。以2.4.0核心為例,我們應該選中的專案有: [*] Kernel/User netlink socket [ ] Routing messages Netlink device emulation [*] Network packet filtering (replaces ipchains) ....... 然後,在"IP: Netfilter Configuration ---->"選中: Connection tracking (required for masq/NAT) FTP protocol support IP tables support (required for filtering/masq/NAT) limit match support MAC address match support Netfilter MARK match support Multiple port match support TOS match support Connection state match support Packet filtering REJECT target support Full NAT MASQUERADE target support REDIRECT target support Packet mangling TOS target support MARK target support LOG target support ipchains (2.2-style) support ipfwadm (2.0-style) support 其中最後兩個專案可以不選,但是如果你比較懷念ipchains或者ipfwadm,你也可以將其選中,以便在2.4核心中使用ipchians或 ipfwadm。但是需要注意的是,iptables是和ipchians/ipfwadm相對立的,在使用iptables的同時就不能同時使用 ipchains/ipfwadm。編譯成功後,這些模組檔案都位於以下目錄中/lib/modules/2.4.0/kernel/net/ipv4/netfilter 編譯2.4.0的新核心時還應該注意要在"Processor type and features"中選擇和你的CPU相對應的正確的CPU選項,否則新核心可能無法正常工作。 步驟二、 配置BIND服務 預設地,BIND服務監聽在53埠,我們可以透過配置讓BIND執行在不同的ip及埠上。實現這一點並不複雜,假設我們的DNS伺服器的 ip地址是211.163.76.1,並且我們想區分CERNET及非CERNET的客戶,這時我們必須執行兩個BIND,使用不同的配置檔案。可以在使用非標準監聽埠的BIND的配置檔案中用listen-on指定BIND監聽的埠,比如: options { listen-on port 54 {211.163.76.1;} directory "/var/named_cernet"; }; 可以用named的-c 選項指定named讀入不同的配置檔案,比如: /usr/sbin/named -u named -c /etc/named_cernet.conf 3、配置重定向規則 假設監聽在標準埠的BIND伺服器為非CERNET客戶提供DNS解析,監聽在54埠的BIND伺服器為CERNET伺服器提供DNS解析,我們可以建立如下的規則指令碼: #!/bin/bash #開啟埠轉發 echo 1 > /proc/sys/net/ipv4/ip_forward #載入相關的核心模組 /sbin/modprobe iptable_filter /sbin/modprobe ip_tables /sbin/modprobe iptables_nat #重新整理所有規則 /sbin/iptables -t nat -F #加入來自CERNET的DNS請求轉發規則,將其轉發到本地54埠,CERNET地址列表可從獲得/sbin/iptables -t nat -A PREROUTING -p udp -s 163.105.0.0/16 --dport 53 -i eth0 -j REDIRECT 54/sbin/iptables -t nat -A PREROUTING -p tcp -s 163.105.0.0/16 --dport 53 -i eth0 -j REDIRECT 54/sbin/iptables -t nat -A PREROUTING -p udp -s 166.111.0.0/16 --dport 53 -i eth0 -j REDIRECT 54/sbin/iptables -t nat -A PREROUTING -p tcp -s 166.111.0.0/16 --dport 53 -i eth0 -j REDIRECT 54/sbin/iptables -t nat -A PREROUTING -p udp -s 202.4.128.0/19 --dport 53 -i eth0 -j REDIRECT 54/sbin/iptables -t nat -A PREROUTING -p tcp -s 202.4.128.0/19 --dport 53 -i eth0 -j REDIRECT 54/sbin/iptables -t nat -A PREROUTING -p udp -s 202.112.0.0/15 --dport 53 -i eth0 -j REDIRECT 54/sbin/iptables -t nat -A PREROUTING -p tcp -s 202.112.0.0/15 --dport 53 -i eth0 -j REDIRECT 54… #將返回給CERNET DNS客戶資料包的源埠(54埠)偽裝成53埠 /sbin/iptables -t nat -A POSTROUTING -p udp --sport 54 -o eth0 -j SNAT --to 211.163.76.1:53 /sbin/iptables -t nat -A POSTROUTING -p tcp --sport 54 -o eth0 -j SNAT --to 211.163.76.1:53 教育網網的朋友可以從這裡下載該指令碼,將指令碼中的DNS_IP及CNET_PORT引數改成你自己的DNS伺服器地址及監聽埠即可。4、執行動態DNS 配置完成後我們啟動DNS伺服器,並且執行相應的規則指令碼,我們的動態DNS伺服器就可以正常工作了。二。利用bind9的cache紀錄 1)、使用者向瀏覽器提供要訪問的域名; 2)、瀏覽器呼叫域名解析庫對域名進行解析,由於CDN對域名解析過程進行了調整, 所以解析函式庫一般得到的是該域名對應的CNAME記錄,為了得到實際IP地址, 瀏覽器需要再次對獲得的CNAME域名進行解析以得到實際的IP地址;在此過程中, 使用的全域性負載均衡DNS解析,如根據地理位置資訊解析對應的IP地址,使得使用者能就近訪問。 3)、此次解析得到CDN快取伺服器的IP地址,瀏覽器在得到實際的IP地址以後, 向快取伺服器發出訪問請求; 4)、快取伺服器根據瀏覽器提供的要訪問的域名,透過Cache內部專用DNS解析 得到此域名的實際IP地址,再由快取伺服器向此實際IP地址提交訪問請求; 5)、快取伺服器從實際IP地址得得到內容以後,一方面在本地進行儲存, 以備以後使用,二方面把獲取的資料返回給客戶端,完成資料服務過程; 6)、客戶端得到由快取伺服器返回的資料以後顯示出來並完成整個瀏覽的資料請求過程。 1、要加入CDN服務的網站,需要域名(如地址202.99.11.120)解析權提供給CDN 運營商,Linuxaid的域名解析記錄只要把www主機的A記錄改為CNAME並指向cache.cdn.com即可。cache.cdn.com是 CDN網路自定義的快取伺服器的標識。在/var/named/linuxaid.com.cn域名解析記錄中,由:www IN A 202.99.11.120改為www IN CNAME cache.cdn.com. 2、CDN運營商得到域名解析權以後,得到域名的CNAME記錄,指向CDN網路屬下快取伺服器的域名,如cache.cdn.com,CDN網路的全域性負載均衡DNS,需要把CNAME記錄根據策略解析出IP地址,一般是給出就近訪問的Cache地址。 Bind 9的基本功能可以根據不同的源IP地址段解析對應的IP,實現根據地域就近訪問的負載均衡,一般可以透過Bind 9的sortlist選項實現根據使用者端IP地址返回最近的節點IP地址,具體的過程為: 1)為cache.cdn.com設定多個A記錄,/var/named/cdn.com 的內容如下:$TTL 3600@ IN SOA ns.cdn.com. root.ns.cdn.com. (2002090201 ;Serial num10800 ;Refresh after 3 hours3600 ;Retry604800 ;Expire1800 ;Time to live)IN NS nswww IN A 210.33.21.168ns IN A 202.96.128.68cache IN A 202.93.22.13 ;有多少個CACHE地址cache IN A 210.21.30.90 ;就有多少個CACHE的A記錄cache IN A 211.99.13.47 2) /etc/named.conf中的內容為:options {directory "/var/named";sortlist { #這一段表示當在本地執行查詢時 #將按照202.93.22.13,210.21.30.90,211.99.13.47的順序返回地址{ localhost;{ localnets;202.93.22.13;{ 210.21.30.90; 211.99.13.47; };};};#這一段表示當在202/8地址段進行DNS查詢時#將按照202.93.22.13,210.21.30.90,211.99.13.47的順序返回地址{ 202/8;{ 202.93.22.13;{ 210.21.30.90; 211.99.13.47; };};};#這一段表示當在211/8地址段進行DNS查詢時#將按照211.99.13.47,202.93.22.13,210.21.30.90的順序返回地址,#也就是211.99.13.47是最靠近查詢地點的節點{ 211/8;{ 211.99.13.47;{ 202.93.22.13; 210.21.30.90; };};};{ 61/8;{ 202.93.22.13;{ 210.21.30.90; 211.99.13.47; };};};};}; zone "." { type hint; file "root.cache"; }; zone "localhost" { type master; file "localhost"; }; zone "cdn.com" { type master; file "cdn.com"; };三。設內外DNS 外部DNS就是一般的設定,關鍵在於內部的DNS的設定上## named.conf - configuration for bind## Generated automatically by redhat-config-bind, alchemist et al.# Any changes not supported by redhat-config-bind should be put# in /etc/named.custom#controls {inet 127.0.0.1 allow { localhost; } keys { rndckey; };};include "/etc/named.custom";include "/etc/rndc.key";options {directory "/var/named/";forwarders { 192.168.22.9; }; //轉向到外部的DNS};zone "0.0.127.in-addr.arpa" {type master;file "0.0.127.in-addr.arpa.zone";};zone "22.168.192.in-addr.arpa" {type master;file "22.168.192.in-addr.arpa.zone";};zone "7.20.172.in-addr.arpa" {type master;file "7.20.172.in-addr.arpa.zone";};zone "localhost" {type master;file "localhost.zone";};zone "hutc.zj.cn" {type master;file "hutc.zj.cn.zone";forwarders { }; //除了內部的本域解析,其餘都放到外部的DNS上};四。利用bind9的view功能options {directory "/var/named";};acl "fx_subnet" {192.253.254/24; };view "internal" { //我們區的內部檢視match-clients { "fx-subnet"; };zone "fx.movie.edu" {type master;file 'db.fx.moive.edu";};zone "254.253.192.in-addr.arpa" {type master;file "db.192.253.254";};};view "external" { //相應於世界的其餘部分,我們區的檢視match-clients { any; }; //隱式地rescursion no; //我們的子網外面,它們不應該請求遞迴查詢 zone "fx.movie.edu" {type master;file "db.fx.movie.edu.external"; //外部區資料檔案};zone "254.254.192.in.arpa" {type master;file "db.192.253.254.external";//外部區資料檔案};};總結:方法一:過於複雜,並且不能解決MX紀錄的問題 方法二:實際上用別的思想來解決內外DNS解析的問題 方法三:實際已經運用過,還可以用ACL來做進一步的限制,就是和方法四比較起來,機器用的多了一點 方法四:感覺最好了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-945038/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux下安裝JDK及環境設定LinuxJDK
- 伺服器做好安裝和設定防火牆伺服器防火牆
- 圖解python | 安裝與環境設定圖解Python
- Ubuntu 下使用 UFW 設定防火牆Ubuntu防火牆
- HMMer在Windows環境下的安裝HMMWindows
- linux apf 防火牆安裝與配置Linux防火牆
- Qt 安裝與環境變數的設定(Windows 10)QT變數Windows
- JAVA下載安裝及設定環境變數Java變數
- 在Ubuntu環境下安裝eclipseUbuntuEclipse
- yapi 在linux環境下的安裝部署APILinux
- CentOS防火牆設定CentOS防火牆
- Linux環境下 RabbitMQ 的下載與安裝LinuxMQ
- 在Linux中,如何設定防火牆規則?Linux防火牆
- win10防火牆在哪裡設定 win10防火牆設定的方法Win10防火牆
- (轉)Windows下安裝Docker, GitBash環境配置WindowsDockerGit
- Linux設定防火牆iptablesLinux防火牆
- CentOS 7 防火牆設定CentOS防火牆
- WAMPSERVER整合環境下載與安裝Server
- 在 Ubuntu18.04 下安裝 LNMP 環境UbuntuLNMP
- Windows 環境下 Python 環境安裝WindowsPython
- Anaconda(conda)在windows安裝與環境配置Windows
- Nginx 防火牆 ModSecurity 安裝教程Nginx防火牆
- win10電腦防火牆在哪裡設定 win10設定防火牆的步驟Win10防火牆
- jdk在linux下安裝、配置環境變數JDKLinux變數
- win10 防火牆設定方法_win10怎麼設定網路防火牆Win10防火牆
- w10防火牆在哪裡設定 windows10防火牆設定操作方法防火牆Windows
- DNS隧道技術繞防火牆DNS防火牆
- 簡單安裝PHP在Linux下的執行環境PHPLinux
- 環境變數的設定方法(轉)~變數
- eNSP防火牆web介面裡的DNS配置防火牆WebDNS
- windows10防火牆設定在哪裡_win10如何設定防火牆Windows防火牆Win10
- 《生產環境下Hadoop大叢集安裝與配置+DNS+NFS》HadoopDNSNFS
- Linux & Windows 環境下 RabbitMQ 安裝與基本配置LinuxWindowsMQ
- Linux & Windows 環境下 Redis 安裝與基本配置LinuxWindowsRedis
- Node.js 下載安裝與環境配置Node.js
- win10系統怎麼解除安裝防火牆 windows10防火牆的解除安裝步驟Win10防火牆Windows
- 雲伺服器需要防火牆嗎?防火牆如何啟用設定?伺服器防火牆
- Linux下安裝Go環境LinuxGo
- docker環境下安裝tensorflowDocker