통상적으로 DDNS는 공유기 내장 기능으로 설정하시지요? 그런데 저전력 홈서버(24시간 켜져있는 PC)를 쓰고 계신다면 DDNS 정도는 홈서버에 넘겨버릴 수 있습니다. 무료 DDNS 서비스인 DuckDNS를 이용하면 되는데, DuckDNS가 리눅스, 윈도우, 맥OS, 안드로이드, 라즈베리파이, OpenWrt, 시놀로지 등등 다양한 OS와 하드웨어를 지원하기 때문에... 홈서버가 아니더라도 남아도는 스마트폰으로 DDNS를 설정할 수 있기도 합니다(항상 켜놓고 와이파이 연결해 놔야겠죠).

 

이번 글에서는 우분투에서 DuckDNS로 DDNS를 설정하는 과정을 설명하겠습니다.

https://www.duckdns.org

▲ DuckDNS 사이트 회원가입 필요합니다. 링크 타고 들어가세요.

 

▲ 현재 가입은 소셜계정으로만 받고 있습니다(개인정보 자체 수집 없음). 가지고 계신 SNS 계정으로 가입+로그인하세요.

 

▼ DuckDNS는 본인이 생성한 DDNS 주소와 token 값을 우분투에 입력해서 설정하게 됩니다. 그러니까 로그인 후 나오는 화면에 token 값이 안 보이면 token을 create하거나 recreate해서 우리 눈에 보이도록 해야 합니다(그래야 우리가 복사+붙여넣기 할 수 있음.). recreate token은 우측 상단 ||| 버튼을 누르면 나타납니다.

나중에라도 DDNS 쓰다가 토큰이 불특정 다수에게 노출돼서 단도리를 해야 되는 상황이 오면 recreate token 누르고 본인의 DDNS 설정도 바꿔주면 되겠죠?

DuckDNS 무료 DDNS 세팅

▲ 토큰 생성을 마쳤다면 sub domain 이름을 정하고 add domain 버튼을 눌러서 본인만의 DDNS 주소를 만들어주세요. 아마 자동으로 current ip에 현재 회선의 외부 IP가 입력되었을 겁니다. 나중에 DDNS 주소의 IP를 바꾸고 싶다면 https://www.findip.kr/ 사이트에 가서 외부IP 주소를 알아내어 바꿔주면 됩니다.

 

DuckDNS 서버측 세팅은 이것으로 끝난 거예요. 웹브라우저 주소창에 (본인 IP주소 대신) XXXX.duckdns.com 형식으로 입력하면 본인 컴퓨터에 접근할 수 있게 된 것인데, 공유기 방화벽이나 우분투(리눅스) 방화벽을 쓰고 있다면 XXXX.duckdns.com 이라고 치더라도 접근이 안될 겁니다. 방화벽을 해제하거나(비추천) 원하는 포트를 열어주세요(공유기 포트포워딩 기능 등으로 - 추천). 테스트 차원에서 공유기 관리자페이지 접근용 포트만 열어두는 것도 방법이 될 수 있겠죠?

 

※ 공유기 관리자페이지 접근용 포트를 여는 것은 개념만 익히면 공유기 브랜드에 상관없이 적용할 수 있습니다. 참고용 포스팅들을 적어둘게요.

Dlink 디링크 DIR-615 공유기 DDNS 설정 방법

DuckDNS(무료 DDNS) 가입, 설정, 공유기 세팅(Padavan 펌웨어)

 

각설하고, 우분투 홈서버 쪽을 세팅해봅시다.

사실 DuckDNS 사이트에 로그인한 다음 install 탭을 눌러보면 설명이 자세하게 나옵니다.

(직링크 : https://www.duckdns.org/install.jsp )

저는 그 설명에 나온 과정을 스크린샷을 보태서 쉽게(?) 설명하는 것 뿐입니다.

 

▲ 위 스샷처럼 로그인한 다음 install 탭을 클릭하고 OS나 Router(공유기)들 중에서 본인의 환경을 선택하면 설명이 나오는 겁니다.

 

▲ 본인이 생성한 DDNS 주소를 고르면...

 

▼ 아래처럼 자세한 설명이 나오는데... 복잡하게 느껴지더군요.

그래도 따라해야 합니다. 하나씩 설명을 해볼게요.

▲ 중간쯤에 있는 "echo url=블라블라" 형태의 초록색 글씨를 복사(Ctrl+C)해두면 좋습니다.

 

▼ 터미널 창에서

ps -ef | grep cr[o]n

curl

이라고 쳐서 cron과 curl이 구동되고 있는지 확인합니다. 아래 스샷처럼 나오면 되는 거예요.

 

▼ duckdns라는 디렉토리를 만들고, 그 디렉토리에 duck.sh 파일을 만들면서 에디터(nano, gedit 등)로 엽니다.

▲ 저는 루트 계정으로 진행하고 싶어서 최상위 경로(/)로 이동 후 sudo 명령어를 붙여 진행했습니다. 만약 본인 계정명으로 진행하고 싶다면 /home/계정명 경로(cd ~ 라고 입력)로 이동한 다음 그 위치에서 (sudo 명령어 안 붙이고) 일련의 과정을 처리하면 됩니다.

참! 디렉토리 경로를 기억해두세요! (저는 /duckdns 네요.)

 

▼ 조금 전, 위에서 "echo url=블라블라" 형태의 초록색 글씨를 복사(Ctrl+C)해두면 좋다고 했었죠? duck.sh 의 내용을 그것으로 채우고 저장+빠져나옵니다.

▲ 이 때 로그파일(duck.log)의 경로 주의! 초록색 텍스트에는 ~/duckdns/라고 적혀 있는데, duck.sh 파일이 있는 곳의 경로와 일치시키는 것이 좋습니다. 위에서 붉은 글씨로 디렉토리 경로를 기억해두라고 써놨었잖아요? 이 부분 때문에 그랬던 겁니다.

 

▲ chmod 700 duck.sh 이라고 치면 소유자(user)에게는 duck.sh 파일을 읽고+쓰고+실행할 수 있는 권한을 주고, 그룹(group)과 기타 사용자(others)에게는 duck.sh에 대한 어떠한 권한도 주지 않게 됩니다. 소유자가 duck.sh 파일을 실행할 수 있게끔 하는 것이 이 작업의 핵심이고요,

duck.sh 스크립트 파일을 일정 시간마다 자동 실행되게끔 하기 위해 crontab에 등록하는 과정이 필요합니다. crontab -e 라고 치면 현재 로그인한 계정의 크론탭 설정을 편집할 수 있는데, 저는 루트 계정으로 DDNS를 작동시킬 거라 명령어 앞에 sudo를 붙였습니다(sudo gedit /var/spool/cron/crontabs/root 처럼 입력해도 됩니다. /var/spool/cron/crontabs/ 경로에 우분투 계정 이름으로 계정별 crontab 파일이 있거든요.).

 

▲ 붉게 밑줄친 것처럼 입력하면 15분에 한 번씩 duck.sh 파일을 실행하게 됩니다. IP주소 변동을 체크하게 되겠죠? DuckDNS 사이트의 가이드에는 5분마다 실행하도록 권장하는데, 저는 그정도까지는 필요 없다고 생각해서 시간 간격을 늘렸습니다. 입력이 끝났다면 저장하고 빠져나옵니다.

 

참고로 크론탭은

* * * * *  수행할 명령어

이런 형식으로 구성하면 되는데, * * * * * 의 각 자릿값은 "분(0~59) / 시(0~23) / 일(1~31) / 월(1~12) / 요일(0~6) (0:일요일, 1:월요일, 2:화요일, …, 6:토요일)" 을 뜻합니다.

만약 리눅스에 익숙치 않아서 Crontab 구성이 어렵게 느껴지면 https://crontab.guru/ 사이트에서 제공하는 GUI를 통해 극복해보세요

 

▲ GUI로 봐도 복잡하군요. @.@;;

 

참고로 터미널 창에서 sudo crontab -l 이라고 입력하면 루트 계정의 크론탭 작업목록을 확인할 수 있고, "sudo crontab -l -u 계정명" 처럼 입력하면 우분투 계정별 크론탭 작업목록을 확인할 수 있습니다.

 

▲ 이제 duck.sh 스크립트 파일 실행 테스트. 터미널 창에서 "sudo /duckdns 디렉토리 경로/duck.sh" 형식으로 입력하면 위 스샷처럼 나올 겁니다(명령어가 틀렸다면 이런 형식으로 쳐보세요. sudo /bin/bash /duckdns/duckdns.sh  => 이런 형식으로 입력해야 실행된다면 crontab 명령어 구문도 같은 형식으로 수정해줘야 합니다.).

이후 "cat /디렉토리 경로/duck.log" 형식으로 입력했을 때 OK라는 메세지가 나오면 정상적으로 돌아가고 있다는 뜻이고, KO라고 뜨면 잘못된 것이니 duck.sh 파일을 편집하여 DDNS 주소와 토큰을 정정해줍니다. => 엄청난 실수를 저지르지 않는 한 OK 메세지를 보게 되실 거예요.

 

세팅 끝!

따라오느라 고생 많으셨습니다.

 

 

▲ Ghulam Tera

반응형