| BIND와 rndc를 이용한 유동IP에 동적도메인 설정하기 | 작성일 : 2005/09/04 20:51 |
| 조회수 : 16302 |
|
제목 : rndc 를 이용한 유동IP에 동적도메인 설정하기 - 클라이언트, 호스트 <img src='http://www.ziwoo.net/zb/upload/zb_ziwoo_pds_71_3.jpg'> [개요] 개인적으로 필요해서 만들었는데 나름대로 유용할 것 같아서 올려봅니다. 잘 하시는분들은 한두시간이면 만들 수 있는 스크립트들이지만, 아직 개념이 부족한 분이나 공부하시는 분들께는 참고가 될 듯 싶네요.. 파일 업로드가 안되므로 관련파일은 제 홈페이지 자료실에 올려 놓겠습니다. 조금전 완성해서 10여분간만 테스트 해보았으므로 사소한 스크립트의 오류등이 있을지도 모르겠네요.. 혹시 발견되면 리플 달아주시고요.. 아는게 php와 javascript 뿐이라 이렇게 만들었구요. 트레이빠에 쏙~ 들어가게 만들면 좋으련만.. [설정] nsupdate.hta 파일에 호스트명과 서버의 도메인을 알맞게 변경하세요. 호스트명은 이미 네임서버의 zone파일에 등록이 되어 있어야만 합니다. 즉 IP를 갱신만 하지.. 신규로 등록하진 못합니다. nsupdate.php 의 암호키부분을 서버의 /etc/rndc.key 파일의 안에 있는 인코딩된 암호키넘버와 같게 변경하세요. rndc 키 생성방법등은 설명하지 않습니다. 검색엔진 등을 이용해서 별도의 문서를 참조하세요. [테스트환경] 서버 OS : Redhat Linux 7.2 서버 네임데몬 : BIND 9.x 클라이언트 OS : windows XP [파일설명] nsupdate.hta - 클라이언트 파일 - htm 파일을 확장자만 hta 로 변경하여 윈도우즈 HTML 어플리케이션으로 변경. - 자바스크립트 <dynamic src>를 이용하여 일정한 시간 간격으로 클라이언트의 IP를 서버에 전송. nsupdate.php - 호스트 파일 - 클라이언트가 보낸 호스트.도메인명의 IP를 갱신하도록 BIND에 전달. 기타 아이콘 및 이미지 파일 등 [nsupdate.hta 파일 내용] <html> <head> <title>NS UPDATE</title> <meta http-equiv="content-type" content="text/html; charset=euc-kr"> <style>body,table,button,textarea{font-size:9pt}</style> <HTA:APPLICATION applicationName="NS UPDATE" id="nsupdate_client" border="dialog" maximizeButton="no" scroll="no" version="0.1" singleInstance="no" innerBorder="no" contextMenu="no" icon="nsupdate.ico" /> <script id="dynamic"></script> <script language="javascript"> <!-- // Domain Name var myHost = "woorizip.ziwoo.net"; var myDomain = "www.ziwoo.net"; window.resizeTo(250,230); dynamic.src="http://"+myDomain+"/nsupdate.php?mode=get_my_ip&my_host="+myHost; function start_ip(){ dynamic.src="http://"+myDomain+"/nsupdate.php?mode=start_ip&my_host="+myHost; document.all.nsicon.src="nsupdate2.gif"; document.all.status.innerHTML="Connecting.."; timmer(); } function timmer(){ var int_time = parseInt(document.F.int_time.value) * 1000 * 60; var_loop = setTimeout("start_ip()",int_time); } function stop_ip(){ if(confirm("Are you sure disconnect?")){ clearTimeout(var_loop); document.all.button_start.style.display = 'inline'; document.all.button_stop.style.display = 'none'; document.all.nsicon.src="nsupdate1.gif"; document.all.status.innerHTML="Disonnect"; } } //--> </script> </head> <body bgcolor="#cccccc" text="#000000" topmargin="0" leftmargin="0" onLOad="start_ip()"> <table width="250" height="50" bgcolor="FFFFFF"> <form name="F"> <tr><td align="center"><img id="nsicon" src="nsupdate1.gif"></td></tr> </table> <table align="center" bgcolor="CCCCCC"> <tr><td height="5"></td></tr> <tr><td>Status: <span id="status">Disconnect</span></td></tr> <tr><td>Host: <span id="my_host"></span></td></tr> <tr><td>IP Address: <span id="my_ip"></span></td></tr> <tr><td>Count: <span id="int_count">0</span></td></tr> <tr><td>Interval: <input type="text" name="int_time" value="10" size="2"> min</td></tr> <tr><td height="5"></td></tr> <tr> <td align="center"> <input id="button_start" type="button" value="Connect" onClick="start_ip();" style="display:inline"> <input id="button_stop" type="button" value="Disconnect" onClick="stop_ip();" style="display:none"> </td> </tr> </form> </table> </html> [nsupdate.php 파일 내용] <? $my_host = $_GET["my_host"]; if($mode=="get_my_ip"){ ?> document.all.my_host.innerHTML = "<?=$my_host?>"; document.all.my_ip.innerHTML = "<?=$REMOTE_ADDR?>"; <? }elseif($mode=="start_ip"){ $fh=popen("/usr/bin/nsupdate -d -y rndc-key:CdBg+0jQPycv2ejgGAy/d4==","w"); $foo=fread($fh,2); fwrite($fh,"prereq yxdomain ".$my_host." \r\n"); $foo=fread($fh,2); fwrite($fh,"update delete ".$my_host." \r\n"); $foo=fread($fh,2); fwrite($fh,"update add ".$my_host." 0 A ".$REMOTE_ADDR."\r\n"); $foo=fread($fh,2); fwrite($fh,"send \r\n"); $foo=fread($fh,2); fwrite($fh,"quit \r\n"); $foo=fread($fh,8096); unset($fh); ?> document.all.my_ip.innerHTML = "<?=$REMOTE_ADDR?>"; document.all.button_start.style.display = 'none'; document.all.button_stop.style.display = 'inline'; document.all.int_count.innerHTML = parseInt(document.all.int_count.innerHTML)+1; document.all.nsicon.src="nsupdate3.gif"; document.all.status.innerHTML="Connected"; <? } ?> |
|||||||||
|
|