커피닉스, 시스템 엔지니어의 쉼터 커피향이 나는 *NIX
커피닉스
시스템/네트웍/보안을 다루는 곳
* HanIRC의 #coffeenix 방
[ 장비 및 회선 후원 ]
HOME > 네트워크(network) > 네임서버(name server, dns, bind) 도움말
검색 : 사이트 WHOIS 웹서버 종류


  BIND와 rndc를 이용한 유동IP에 동적도메인 설정하기 작성일 : 2005/09/04 20:51
 
  • 글쓴이 : 박명우 ( http://www.ziwoo.net/zb/view.php?uid=71&startPage=1&boardid=zb_ziwoo_pds )
  • 조회수 : 16301
          [ 이전화면 / 수정 ]   비밀번호 :     인쇄용 화면
      제목 : 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";
    <?
    }
    ?>
      커피닉스 카페 최근 글
    [11/06] World News Digest:
    [06/16] [질문]SAN 스위치 브로드케이드 dcx8510-4 장비관련입니다.
    [04/22] Re: 영화속에 컴퓨터 이야기 ~스워드피쉬(2001)
    [10/20] Cross Compiler 깔
    [07/14] SSL АО
    [04/26] Re: 도스화면 원격조종 여부
    [04/25] 도스화면 원격조종 여부
    [10/30] Cshell에서 난수 설정
    [10/23] 공항철도주식회사 SE 구인 件
    [01/26] Re: wget으로 다른서버에있는 디렉토리를 가져오려고합니다.
    [01/25] wget으로 다른서버에있는 디렉토리를 가져오려고합니다.
    [01/11] 특정 안드로이드 WebView 버전에서 SSL 문제 (WebView 버그)
    [08/01] DNS forwarder (전달자) 서버를 통해서 쿼리하면 역방향을 받아오질 못합니다.
    [05/16] (주)후이즈 시스템엔지니어 (경력자) 모집
    [02/15] [AWS] Cloudfront edge 확인하기
      New!   최근에 등록한 페이지
      KiCad EDA Suite project (Free/Libre/Open-Source EDA Suite) (CAD)
      오픈캐스케이드 캐드 (OpenCASCADE CAD)
      QCad for Windows --- GNU GPL (Free Software)
      The Hello World Collection
      IPMI를 활용한 리눅스 서버관리
      DNS 설정 검사
      nagiosgraph 설치 방법
      Slony-I 설치 방법 (postgresql replication tool)
      Qmail기반의 Anti spam 시스템 구축하기
      clusterssh

    [ 함께하는 사이트 ]




    운영진 : 좋은진호(truefeel), 야수(yasu), 범냉이, sCag
    2003년 8월 4일~