參考

標題實在不知道怎麼取......

Content delivery network介紹

本文是介紹透過Bind和MaxMind來達成GeoDNS
前提是你已經架設好Bind
而Bind中
可以透過view的功能,來根據不同條件回答不同內容
其中一個條件是IP
而MaxMind.com有提供IP位置與國家對應的資料
首先,先安裝gawk
#cd /usr/ports/lang/gawk
#make install clean

編輯一個test.sh檔案
#vi test.sh
#------------------------

#!/bin/sh

[ -f GeoIPCountryCSV.zip ] || fetch http://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip

echo -n "Creating CBE (Country,Begin,End) CSV file..."
unzip -p GeoIPCountryCSV.zip GeoIPCountryWhois.csv | awk -F \" '{print $10","$6","$8}' > cbe.csv
echo -ne "DONE\nGenerating BIND GeoIP.acl file..."

(for c in $(awk -F , '{print $1}' cbe.csv | sort -u)
do
echo "acl \"$c\" {"
grep "^$c," cbe.csv | awk -F , 'function s(b,e,l,m,n) {l = int(log(e-b+1)/log(2)); m = 2^32-2^l; n = and(m,e); if (n == and(m,b)) printf "\t%u.%u.%u.%u/%u;\n",b/2^24%256,b/2^16%256,b/2^8%256,b%256,32-l; else {s(b,n-1); s(n,e)}} s($2,$3)'  //是一整行
echo -e "};\n"
done) > GeoIP.acl

rm -f cbe.csv
echo "DONE"

exit 0
#------------------------

執行此script會產生GeoIP.acl
GeoIP.acl是你Bind會用到的檔案,IP與國家對應


#vi /etc/namedb/named.conf
#-------------------------------------
include "/etc/namedb/GeoIP.acl"; //放在檔案起始
view "CN" {
match-clients {"CN"; };
zone "example.com" { type master; file "/etc/namedb/master/exam1.db";
};
view "TW" {
match-clients { "TW" };
zone  "example.com" { type master; file "/etc/namedb/master/exam2.db";
};


#-------------------------------------

#/etc/rc.d/named reload就可以測試看看

另外有人是在Bind上patch
做法參考http://www.caraytech.com/geodns/

 

補充一下,view可根據acl條件來執行
acl中,"!"我試過似乎沒什麼作用
ex:
acl "normal" { 8.8.8.8/32; };
acl "specify" { !8.8.8.8/32; };

後來我就只用一個acl搭配viewany
acl "normal" { 8.8.8.8/32; };
view {
match-clients { "normal"};
....(略)
};
view "other(可以亂取)" {
match-clients { any }
...(略)

}
達成我想要的結果


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 slinbody 的頭像
    slinbody

    495884965

    slinbody 發表在 痞客邦 留言(0) 人氣()