· 톺아보기

강좌

Asus 공유기에서 duckdns 사용하기

OLIVER · · 수정

조회 22,934 · 공감 3 · 댓글 22

asuscomm.com에서 갈아타야 하는 이유는 아래 링크들로 대신합니다. (금방 복구된건 생략)

2016년 5월 21일 https://www.clien.net/service/board/cm_nas/9177138CLIEN

2016년 7월 22일 https://www.clien.net/service/board/cm_nas/9416989CLIEN

2016년 9월 30일 https://www.clien.net/service/board/cm_nas/9700448CLIEN

2017년 4월 18일 https://www.clien.net/service/board/cm_nas/10611501CLIEN

2017년 7월 15일 https://www.clien.net/service/board/news/10976754CLIEN



원문 작성자 x검은그림자x님 글에 링크되어 있던 이미지가 보이지 않아 보강하는 김에, 스크립트 부분을 교체하고 다시 정리해봤습니다. 

x검은그림자x님의 원문 : http://www.ppomppu.co.kr/zboard/view.php?id=nas&no=21815

 

 

※ Asus 공유기에는 최신버전의 Merlin 펌웨어가 설치되어 있고, duckdns.org에 가입 및 도메인 설정은 되어있다고 가정합니다. 

※ 이 게시물이 작성될 시점의 Merlin 펌웨어 버전은 380.64_2였고, 이후 업데이트된 380.65에서도 작동하는걸 확인했습니다.

※ Merlin 펌웨어가 아닌 정식 펌웨어에서 duckdns등을 사용하시려면 johnair님의 강좌 게시물(링크)을 참고하시기 바랍니다.

※ 관리/설정 페이지의 언어는 [영문] 기준입니다.


 

1. 웹브라우저에서 공유기 관리 페이지 → Administration → System 으로 이동합니다.

 

2. Persistent JFFS2 partition과 SSH Daemon의 세부 항목을 아래와 같이 설정하고 적용합니다.

 

Format JFFS partition at next boot : No

Enable JFFS custom scripts and configs : Yes

 

Enable SSH : LAN only (외부에서 작업한다면 LAN+WAN)

SSH service port : 22

Allow SSH password login : Yes

 

3. SSH로 공유기에 접속해서, 아래 반전 표시된 부분을 입력하세요.

※ 저는 macOS라 터미널을 사용했습니다. 윈도는 putty등을 사용하면 됩니다.

 

USER$ ssh 공유기관리자ID@192.168.0.1

공유기관리자ID@192.168.0.1's password: 공유기관리자패스워드

 

ASUSWRT-Merlin RT-AC88U 380.61 -- Fri Aug 5 :01:21:01 UTC 2016

관리자@RT-AC88U-8B10:/tmp/home/root# cd /jffs/scripts/

관리자@RT-AC88U-8B10:/tmp/home/root# vi ddns-start

 

이 상태에서 키보드의 'I' 키를 누르면 편집모드로 들어갑니다. 아래 두개의 스크립트중 하나를 입력하거나 붙여넣으세요.

※ duckdns의 본인 계정정보 페이지에서 도메인과 토큰을 확인합니다.

 

---------------스크립트1---------------

#!/bin/sh

 

# register a subdomain at https://www.duckdns.org/ to get your token

SUBDOMAIN="도메인이름"

TOKEN="토큰"

 

# no modification below needed

curl --silent "https://www.duckdns.org/update?domains=$SUBDOMAIN&token=$TOKEN&ip=" >/dev/null 2>&1

if [ $? -eq 0 ];

then

 /sbin/ddns_custom_updated 1

else

 /sbin/ddns_custom_updated 0

fi

---------------스크립트1---------------

 ※ 코드 출처 : https://github.com/RMerl/asuswrt-merlin/wiki/Custom-DDNS 


---------------스크립트2---------------

#!/bin/sh


SUBDOMAIN="도메인이름"

TOKEN="토큰"


QUERY="https://www.duckdns.org/update?domains=$SUBDOMAIN&token=$TOKEN&ip=$1&verbose=true"


RESULT=`curl --silent "$QUERY"`


if [ "$RESULT" = "KO" ]

then

 /sbin/ddns_custom_updated 0

 LOGFILE=/jffs/scripts/ERROR_`date +%Y%m%d`.log

 date >> ${LOGFILE}

 echo $QUERY >> ${LOGFILE}

 echo $RESULT >> ${LOGFILE}

 echo >> ${LOGFILE}

else

 /sbin/ddns_custom_updated 1

 LOGFILE=/jffs/scripts/result.log

 date >> ${LOGFILE}

 echo $RESULT >> ${LOGFILE}

 echo >> ${LOGFILE}

fi

---------------스크립트2---------------

※ 코드 출처 : 클리앙 nas당 메두사_님 

도메인등록이 실패해도 duckdns에 질의만 성공하면 성공처리 되던걸... 도메인등록을 성공해야 성공으로 처리하게 바꾸고, 실패했을때 날린 질의문을 따로 저장하고, 성공한 이력도 모아서 저장하게 해놨습니다. (시간,IP주소, 변경여부)

그리고 ip주소도 자동으로 받는게 아니라, 멀린펌에서 실행할때 던져주는 ip주소를 이용하게 했구요.

---------------------------------------------


※ 반드시 반전된 부분만 본인의 도메인과 토큰값으로 수정해서 쓰세요. 모바일 클리앙 앱 혹은 모바일 브라우저에서는  반전표시가 보이지 않을 수 있으니 되도록이면 PC의 웹브라우저로 확인해보세요.

※ 스크립트는 둘중 하나만 사용하세요. 



그리고 esc 키를 눌러 편집모드를 빠져나온 뒤에 :wq 를 입력하고 엔터를 누르면 저장하고 SSH 상태로 돌아옵니다.

 

 

4. 권한을 변경합니다.

 

admin@RT-AC88U-8B10:/tmp/home/root# chmod a+x ddns-start 

 

여기까지 하면 이제 터미널(혹은 putty)에서 볼일은 끝났습니다.

 

 

5. 웹브라우저의 공유기 관리페이지 → WAN → DDNS 항목으로 이동해서 아래와 같이 설정합니다.

 

Enable the DDNS Client : Yes

Server : Custom

Host Name : 도메인.duckdns.org

 

"Request error! Please try again" 같은 에러가 뜨기도 하지만, 6번에서 테스트해보고 문제 없으면 5. 항목은 생략하고 아예 설정하지 않아도 무방합니다.

 

6. 잠시 후에 외부망에서 "도메인.duckdns.org"으로 접속해서 연결이 정상적으로 이루어지는지 확인해봅니다.

 

7. 잘 작동한다면 2번으로 돌아가 Enable SSH : No로 변경하여 SSH 서비스를 닫아줍니다.



----- 추가 -----

위 방법으로 duckdns와 같은 서드파티 ddns를 세팅하더라도, 기존에 사용하던 asuscomm.com 역시 유지(접속)되는 것 같습니다. 저는 원격지에서 duckdns와 asuscomm 두 도메인 모두 연결에 성공했습니다. 일단 asuscomm설정을 먼저 해두고, 나중에 duckdns가 죽었을때의 백업으로 asuscomm을 사용하면 될 것 같습니다.

댓글 22

  1. arthurdykim ·
    전 dns o matic인가에서 그냥 연결해서 사용합니다
  2. x검은그림자x · · 공감 1
    깔끔하게 정리하셨네요~ㅎ
  3. OLIVER ·
    앗... 진짜가 나타났....
    작성하신 글엔 사진 링크가 죽어있는데 마침 예전에 스크랩한 글이 있더라구요. 찾아보니 클량에 없기도 하고, 저도 정리하는 차원에서 올렸습니다;;
    덕분에 잘 이용하고 있습니다. 감사합니다!
  4. OLIVER ·
    처음보는 커펌인데 링크 가보니 N56U 전용인 것 같네요.
    멀린펌이 정펌기반이라 사용중인데, duckdns정도는 지원했으면 좋을 것 같긴 합니다.
  5. LastWeapon ·
    duckdns쓰는이유가있나요??
  6. OLIVER ·
    asus에서 제공하는 ddns인 asuscomm.com는 의외로 자주 죽습니다. 평소에는 잘 되다가도 꼭 급할(?)때만 골라서 돌아가시더라구요.
    대체할 무료 ddns 업체를 알아보니 나스당원들을 비롯해서 duckdns를 사용&추천하는 분들이 꽤 많았습니다. 처음엔 시놀로지 nas에 세팅해서 유사시 백업용으로만 사용하다가, 얼마전 duckdns에 두글자짜리 서브도메인을 득템하면서 아예 공유기에 세팅했습니다. 기존 xxxx.asuscomm.com에서 yy.duckdns.org로 세글자 줄였습니다!
  7. 용갈e ·
    오 저도 duckdns 사용중입니다 n66에 ㅎㅎ
  8. OLIVER ·
    네, duckdns가 괜찮더라구요! ㅎㅎ
  9. bluetooth ·
    지금 잘 연결은 되어서 사용중인데
    관리자 화면에선 Request error! Please try again!! 계속 나오네요.
    적용 눌리면 적용중..중중중....
    원래 그런걸까요? ^^
  10. OLIVER ·
    외부망에서 테스트해보고 연결 잘되면 신경안쓰셔도 됩니다.
  11. 타이단지 ·
    좋은 팁 감사합니다^^
  12. OLIVER ·
    x검은그림자x님이 잘 적어주신 글 덕분입니다!
  13. 닉네임고민 ·
    감사합니다. 이번의 이글을 보고 duckdns로 갈아탔는데요..
    아이디.duckdns.org 만 치면 접속이 안되고
    아이디.duckdns.org:포트포워딩숫자 이렇게 입력해야 접속되는데 정상인건가요?
  14. OLIVER ·
    ddns는 유동 아이피를 특정 도메인(id.duckdns.org같은)으로 연결시켜주기만 하는 서비스입니다. ddns 주소로만 접속하면 기본 80포트로 접속되구요, 기타 다른 서비스는 설정하신 포트번호를 적어주셔야 합니다.
  15. ZEMA ·
    이 방법을 사용하면 기존에 사용하면 asuscomm.com 은 사용하지 못하게 되는건가요?
  16. OLIVER ·
    둘다 동시에 사용한다는 생각은 저도 한번도 안해봤는데, 지금 테스트하니 이전에 사용하던 asuscomm.com으로도 접속이 되네요;;
    asuscomm으로 설정해서 연결되는 것 확인하고, 이후에 본문처럼 duckdns 세팅하고나면 아마도 둘다 되는 것 같기도 합니다. (우연히 된건지, 원래 그런건지 확인할 길이 없으니 보장할 순 없습니다만...)
  17. 경포대 ·
    감사합니다 덕분에 잘 설정하였네요 ^^
  18. 메두사 · · 공감 1
    쓰신 글 참조해서... 스크립트를 조금 수정해서 쓰고 있습니다.

    도메인등록이 실패해도 duckdns에 질의만 성공하면 성공처리 되던걸... 도메인등록을 성공해야 성공으로 처리하게 바꾸고,
    실패했을때 날린 질의문을 따로 저장하고..
    성공한 이력도 모아서 저장하게 해놨습니다. (시간,IP주소, 변경여부)

    그리고 ip주소도 자동으로 받는게 아니라, 멀린펌에서 실행할때 던져주는 ip주소를 이용하게 했구요

    ---------------
    #!/bin/sh

    SUBDOMAIN="도메인이름"
    TOKEN="토큰"

    QUERY="https://www.duckdns.org/update?domains=$SUBDOMAIN&token=$TOKEN&ip=$1&verbose=true"

    RESULT=`curl --silent "$QUERY"`

    if [ "$RESULT" = "KO" ]
    then
    /sbin/ddns_custom_updated 0
    LOGFILE=/jffs/scripts/ERROR_`date +%Y%m%d`.log
    date >> ${LOGFILE}
    echo $QUERY >> ${LOGFILE}
    echo $RESULT >> ${LOGFILE}
    echo >> ${LOGFILE}
    else
    /sbin/ddns_custom_updated 1
    LOGFILE=/jffs/scripts/result.log
    date >> ${LOGFILE}
    echo $RESULT >> ${LOGFILE}
    echo >> ${LOGFILE}
    fi
  19. OLIVER ·
    능력자님 감사합니다ㅠㅜ 올려주신 스크립트도 곧 본문에 추가하도록 하겠습니다.
  20. O0dH8HPvGJbG · · 공감 1
    1번 스크립트를 작성하고 다음 스크립트를 작성함께 작성하면 공유기 재기동 때마다
    자동으로 crontab 작업으로 등록을 시켜주네요.

    굳이 custom ddns 로 설정하지 않아도 잘 동작합니다. :)

    https://gist.github.com/johnpark82/35eaeca5661bbc521dc0521b857cae88


나스당 최근 글

나스당 목록 더 보기