作者 主題: DDNS with PHP  (閱讀 4603 次)

0 會員 與 1 訪客 正在閱讀本文。

Anonymous

  • 訪客
DDNS with PHP
« 於: 2002-03-19 11:16 »
DDNS with PHP
Anonymous
隨班附讀路人甲


路人甲發問囉! 張貼: 2002-03-19 03:00  
--------------------------------------------------------------------------------
 以下是以RH7.2 + BIND 9.1.3 + Apahce + PHP所達成的DDNS更新
優點是DNS Clinet不須安裝任何特殊程式,完全由WEB Server來判別
Client的IP位置,並且利用nsupdate將之更新至DNS server中。
這支PHP程式,我盡量將它寫到最單純,以加速處理時間。

我想不管是Windows或Unix/Linx....等只要能執行Web Browser或
HTTP協定程式的軟體都可以利用這軟體來更新DNS。

另外這裡並未使用dnssec-keygen及update-policy來控制更新方式
(我以為實在沒必要,除非DNS和PHP在不同機器)

這個PHP程式只是很單純將Client IP傳入暫存檔,再交付nsupdate
執行,所以並沒有任何安全檢驗措施,不然使用SSL或其他認證方式
也是可行。但這樣會增加Client端的不便,另外也可設計一些額外的
指令來控制DNS如新增一筆還未存在的記錄。自己衡量吧。

PS:
當然也可以嘗試直接更改Zone File的方式來更新,但我不認為是一個
聰明的主意。

以下是以example.com為例,我們要更新server.example.com的IP
------------------------------------------------------
1.Configure /etc/named.conf
options {
allow-query { any; };
allow-transfer { none; };
};

zone "example.com" IN {
type master;
file "example.com.zone";
allow-update { localhost };

};

------------------------------------------------------
2. Configure Zone file /var/named/example.com.zone
$TTL 86400
@ IN SOA ns.examples.com. root.example.com (
2002020601 ; serial
28800 ; refresh
7200 ; retry
604800 ; expire
86400 ; ttl
)
@ IN NS ns.example.com.
@ IN MX mail.example.com.
ns IN A 10.0.0.100
mail IN CNAME server.example.com.
www IN CNAME server.example.com.
$TTL 0
server IN A 10.0.0.1

------------------------------------------------------
3. Configure PHP ddns.php




//Change this to your DNS server
$DNS_SERVER="ns.example.com";

$DNSUPDATE="/usr/bin/nsupdate -v";


//tmpfilename=/tmp/server.example.com.tmp
$tmpfilename="/tmp/" . $FQDN . ".tmp";

$tmpfile=fopen($tmpfilename,"w+");

//Generating "nsupdate" commands
$cmd1="server ".$DNS_SERVER."n";
$cmd2="update delete " . $FQDN . " A" . "n";
$cmd3="update add " . $FQDN . " 0 A ". $REMOTE_ADDR ."n";
$cmd4="send n";

$cmdall=$cmd1 . $cmd2 . $cmd3 . $cmd4

//write all command into a tmp file
fwrite($tmpfile,$cmdall,strlen($cmdall));

//close file;
fclose($tmpfile);

$runcmd=$DNSUPDATE . $tmpfilename;

//Execute nupdate -v filename
exec($runcmd);

//Remove tmp file
unlink($filename);

?>



------------------------------------------------------
4 . Update DNS with follow URL
http://ns.example.com/ddns.php?FQDM=server.example.com

EX:
wget --delete-after http://ns.example.com/ddns.php?FQDN=server.example.com
or
lynx http://ns.example.com/ddns.php?FQDN=server.example.com


user01@aknine.com.tw
2002.MAR.19