BIND8+上DDNS的實做

常言道:『飲水思源』,在 Open Source 的世界裡,我們常常需要別人的幫助,但是在您有所心得的時候請記得分享給大家,『幫助人是快樂的喔』。歡迎您在使用 debian 的過程中的任何心得分享給大家。

BIND8+上DDNS的實做

文章ronmi » 週日 12月 17, 2006 11:25 pm

假定的前提:
你擁有一台dns server,他的ip是1.2.3.4
你也去註冊了一個自已的domain:example.com
在dns server(1.2.3.4)裡,已經安裝好了BIND8+,並且在named.conf中有example.com的設定
代碼: 選擇全部
zone "example.com" {
  type master;
  file "record_db_file_of_example_dot_com";
};


Study-Area的學習Linux Servers 第五章 架設DNS中,網中人兄及LEO兄已經展示了非常詳盡的,針對已知的client的解決方案。這裡實作的是以CGI方式的實做,達成近似於no-ip、dyndns等的效果。

第一個是較簡易,不考慮安全性的做法:
在named.conf的相關設定中給予本機update的權限
代碼: 選擇全部
allow-update{ localhost; };

撰寫CGI script(以PHP為例)
代碼: 選擇全部
<?php
function showerror(){
  echo "Error";
}
function userauth($u, $p){
  if($u=="somename" and $p=="somepass")
    return true;
  return false;
}

if(!isset($_REQUEST['user']) or !isset($_REQUEST['pass'])){
  showerror();
  exit;
}

$user=$_REQUEST['user'];
$pass=$_REQUEST['pass'];
if(!userauth($user, $pass)){
  showerror();
  exit;
}

$ip=$_SERVER['REMOTE_ADDR'];
$qs="server 127.0.0.1
update delete " . $user . ".example.com A
update add " . $user . ".example.com 0 A " . $ip . "
send
";

shell_exec ( "echo \"" . $qs . "\"|/path/to/nsupdate -v");
?>

那麼只要開啟
代碼: 選擇全部
http://1.2.3.4/path/to/update.script.php?user=username&pass=password

就可以自動更新dns記錄了

如果有需要,也可以寫一個client來做這件事


接下來是針對安全性做了一點點的強化的版本
考慮到也許你的dns server上會有些其他的使用者
用localhost的話,可能會被其他使用者亂改你的dns記錄
所以改用key的認證方式
方法也很簡單
首先參照先前所提LEO兄的文章(或是參照dnssec-keygen的man page)產生key pair,將key file放到一般service無法access的地方(如自行開啟一個專屬的目錄),然後將相關的權限設為600、owner與group設為正確的user
修改named.conf
代碼: 選擇全部
allow-update{ key ddnskeyname; };

修改上面的script
代碼: 選擇全部
find: shell_exec ( "echo \"" . $qs . "\"|/path/to/nsupdate -v");
replace: shell_exec ( "echo \"" . $qs . "\"|/path/to/nsupdate -v -k /path/to/key.file");


附帶一提,nsupdate有win32版,包在bind win32裡,可以在BIND9.NET下載,若想採用網中人兄與LEO兄提出的解決方案,也不需擔心Win32平台適用性的問題。

寫的不是很有系統,請見諒。
ronmi
懵懂的國中生
懵懂的國中生
 
文章: 103
註冊時間: 週一 12月 05, 2005 2:31 am
來自: Taiwan

回到 share

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客