- 论坛徽章:
- 1
|
DNS服务器每秒处理350个请求负荷重吗?
$generate 適合固定的表示法,通常用在動態IP 這磈上不錯
因為 USER 不可能跟你要反解授權,但若是一般固定 IP
您可能因為他的要求, 他的資料卡在中間,一個 $generate
你就要拆成兩個寫,以後再有一個客戶要做,就要再拆,久了就失去意義了.
(當然,多數人的要求可能只是要有反解就好,不見得要一致或要授權)
這裏提供您一個方式,當然只是觸發您的思考而以,我沒有做的很仔細
- -- MYSQL Table for DNS data
- CREATE TABLE PTR (
- SN int(20) NOT NULL auto_increment,
- DOMAIN varchar(64) NOT NULL default '',
- FQDN varchar(64) NOT NULL default '',
- TYPE varchar(10) NOT NULL default '',
- RDATA varchar(64) NOT NULL default '',
- PRIMARY KEY (SN),
- KEY DOMAIN (DOMAIN),
- KEY TYPE (TYPE),
- KEY RDATA (RDATA)
- ) TYPE=MyISAM;
- --
- -- Dumping data for table 'PTR'
- --
- -- 1.2.3 為 network id,正向寫法
- -- 1.3.2.1.in-addr.arpa. 為 FQDN 寫法
- INSERT INTO PTR VALUES (1,'1.2.3','1.3.2.1.in-addr.arpa.','PTR','1-2-3-1.isp.net.cn.');
- INSERT INTO PTR VALUES (2,'1.2.3','2.3.2.1.in-addr.arpa.','PTR','1-2-3-2.isp.net.cn.');
- INSERT INTO PTR VALUES (3,'1.2.3','3.3.2.1.in-addr.arpa.','PTR','1-2-3-3.isp.net.cn.');
- INSERT INTO PTR VALUES (4,'1.2.3','4.3.2.1.in-addr.arpa.','PTR','1-2-3-4.isp.net.cn.');
- INSERT INTO PTR VALUES (5,'1.2.3','5.3.2.1.in-addr.arpa.','PTR','1-2-3-5.isp.net.cn.');
- INSERT INTO PTR VALUES (6,'1.2.3','6.3.2.1.in-addr.arpa.','PTR','1-2-3-6.isp.net.cn.');
- INSERT INTO PTR VALUES (7,'1.2.2','1.2.2.1.in-addr.arpa.','PTR','1-2-2-1.isp.net.cn.');
- INSERT INTO PTR VALUES (8,'1.2.2','2.2.2.1.in-addr.arpa.','PTR','1-2-2-2.isp.net.cn.');
- INSERT INTO PTR VALUES (9,'1.2.2','3.2.2.1.in-addr.arpa.','PTR','1-2-2-3.isp.net.cn.');
- INSERT INTO PTR VALUES (10,'1.2.2','4.2.2.1.in-addr.arpa.','PTR','1-2-2-4.isp.net.cn.');
- INSERT INTO PTR VALUES (11,'1.2.2','5.2.2.1.in-addr.arpa.','PTR','1-2-2-5.isp.net.cn.');
- INSERT INTO PTR VALUES (12,'1.2.2','6.2.2.1.in-addr.arpa.','PTR','1-2-2-6.isp.net.cn.');
- INSERT INTO PTR VALUES (13,'1.4','1.2.4.1.in-addr.arpa.','PTR','1-2-4-1.isp.net.cn.');
- INSERT INTO PTR VALUES (14,'1.4','2.2.4.1.in-addr.arpa.','PTR','1-2-4-2.isp.net.cn.');
- INSERT INTO PTR VALUES (15,'1.4','3.2.4.1.in-addr.arpa.','PTR','1-2-4-3.isp.net.cn.');
- INSERT INTO PTR VALUES (16,'1.4','4.2.4.1.in-addr.arpa.','PTR','1-2-4-4.isp.net.cn.');
- INSERT INTO PTR VALUES (17,'1.4','5.2.4.1.in-addr.arpa.','PTR','1-2-4-5.isp.net.cn.');
- INSERT INTO PTR VALUES (18,'1.4','6.2.4.1.in-addr.arpa.','PTR','1-2-4-6.isp.net.cn.');
复制代码
- #!/bin/sh
- # Mysql 連接定義
- MYSQL="mysql -h host -u username -pPassword Dbname"
- # TLD,做用不大,但若要產生不同的 TLD 時用 (RBL,替您先考量好 RBL 需要)
- TLD="in-addr.arpa"
- # 有問?#125;時的 mail
- EMAIL="abel@isp.net.cn"
- # zone file 產生的暫存路徑
- TMP_DIR=/home/abelyang/tmp
- # named 的目錄所在
- NAMED_DIR=/var/named
- # 找出所有的 domain
- for domain in `echo "select DOMAIN from PTR where TYPE='PTR' group by DOMAIN" | $MYSQL | grep -v DOMAIN`
- do
- # 產生 named.conf 中的 zone 宣告, named.conf 中使用 include "/var/named/named.conf.include" 來取用
- echo $domain| awk ' BEGIN { FS="."}{ print $4"."$3"."$2"."$1 }'| sed -e "s/^\.*\([0-9].*\)/zone \"\1.$TLD\" {type master;file \"$domain\";};/g" >;>;$TMP_DIR/named.conf.include
- # 反解名稱,因為我的例子中寫成 1.2.3 ,實際 DNS 表現為 3.2.1
- rev=`echo $domain| awk ' BEGIN { FS="."}{ print $4"."$3"."$2"."$1 }'| sed -e 's/^\.*\([0-9].*\)/\1/g'`
- # 產生 zone file SOA/NS RR, 這個 NS RR 要經過 APNIC 授權,且 Zone 一致
- # http://www.apnic.net/services/rev-del/new-domain.html
- cat << EOF >;$TMP_DIR/$rev.$TLD
- \$TTL=3600
- \$ORIGIN $TLD.
- $rev IN SOA ns1.isp.net.cn. abel.isp.net.cn ( $(date +%s) 10800 3600
- 864000 86400)
- IN NS ns1.isp.net.cn.
- IN NS ns2.isp.net.cn.
- EOF
- # 將 PTR 資料放進該 Zone 之內
- echo "select concat(FQDN,\" IN \",TYPE,\" \",RDATA) from PTR where DOMAIN='$domain' and TYPE='PTR'"|$MYSQL | grep -v 'concat' >;>;$TMP_DIR/$rev.$TLD
- done
- # 先檢查 zone file block 數是否正確,以預防 mysql 失效或?#93;有資料,這個6只是一個經驗值
- cnt=`du -s $TMP_DIR`
- if [ $cnt -gt 6 ]
- then cp -f $TMP_DIR/* $NAMED_DIR/
- # 量對才 copy 覆蓋及 rndc reload
- rndc reload
- # 量不對表示 Mysql 可能有問?#125;,不 reload DNS 免得出錯
- else echo "Reverse DNS have no data!!"| mail $EMAIL -s "PTR no data"
- fi
复制代码
只要做一個網頁,讓 User 自己去改 PTR 資料, update 到 mysql 中即可,若您要開放
CNAME, 上述的部份可能 TYPE 要補 CNAME 描述,但相信若您介面或功能做的好, User
不太可能使用 CNAME
另外,有是反解若這樣做了的話,正解也可以做了,也就是可以幫人家做代管
因為花的工作其實是差不了多少的,因為作法都雷同
不建議您用資料庫直接做,像 Powerdns 或 mydns 那種對一般公司還
可以,但對代管或 ISP 反解而言,遭受攻擊時,無法應付每秒超過千次的查
詢.
Ex: I hate you, 且發現你跑 Powerdns/mysql , 那我就送一堆 query
給你,基本上這種 DNS 在壓力下很容易掛 |
|