대학/회사의 네트워크는 기본적으로 고정IP를 기반으로 한다. 하지만 집에서 사용하는 인터넷은 유동IP이다. 언제 IP가 바뀔지 모른다. 이를 해결하기 위해 DDNS라는 것이 있다. DDNS를 이용하는 2가지 방법이 있다.
첫 번째 방법으론 이전 글에서도 언급한 적이 있는 공유기에 있는 DDNS를 이용하는 방법이다.
공유기 DDNS 이용하기 : http://www.withover.com/2014/12/nginx-php5-mysql.html위 링크의 중간 부분부터 iptime DDNS를 설정하는 방법이 나온다. 이 방법을 이용하면 도메인.iptime.org 같은 형태의 도메인을 획득 할 수 있다. 인터넷 서비스 업체에서 IP를 변경하더라도 공유기에서 IP를 자동으로 도메인에 업데이트 하기 때문에 다른 작업이 필요없다. 하지만, withover.com 의 도메인을 직접 구입해서 사용하는 입장에서는 iptime.org라는 다른 도메인을 사용해야 한다는 점이 아쉬운 방법이다.
두 번째 방법이 DDNS를 지원해주는 dnsever.com 과 같은 서비스를 이용하는 방법이 있다. 이 방법을 이용하면, http://pi.withover.com 과 같이 withover.com 도메인의 하위 도메인을 이용할 수 있다. 세계적으로 많이 사용하는 dyndns.com 서비스을 이용한다면 공유기 설정만으로 DDNS를 이용할 수 있다. 하지만, 필자는 dnsever.com 을 이용하기 때문에 dnsever.com 을 이용해서, 특정 도메인과 필자의 라즈베리 파이이를 연결하는 방법을 설명하려 한다.
DNSever.com : http://dnsever.compi.withover.com 을 입력했을 때, 변환과정을 간략히 보자.
http://pi.withover.com -> DNS Server -> 입력된 도메인을 특정 IP를 변환 -> IP를 가지고 서버를 찾음위 과정을 거쳐 특정 도메인이 IP로 변환되어 서버를 찾는 것이다.
먼저 간략하게 DDNS를 등록해 보자. 도메인 구입과 dnsever.com에 도메인 등록은 완료되었다고 가정한다.
DNSever.com 에 로그인 -> 기본 도메인 선택 -> 다이나믹 DNS 관리 -> DDNS에 공유기 외부 IP등록고정 IP를 사용한다면, 위 단계까지만 해도 문제가 없다. 하지만, 일반 가정집에서 인터넷 공유기를 이용해 서버를 구축했다면, IP가 주기적으로 변경된다. IP가 변경되면 도메인은 잘못된 IP에 연결을 시도하게 된다. 이 문제를 해결하렴 IP가 변경되는 것을 감지해 DNS정보를 업데이트 해야한다. dnydns.com 서비스를 이용한다면 보통의 공유기에서 이 작업을 자동으로 처리할 수 있다. 하지만, 우리나라에서 많이 사용하는 dnsever.com 서비스는 crontab 등을 사용해 변경된 IP를 등록하는 작업을 만들어야한다.
DNSEver.com의 DDNS 등록 참고 : https://kr.dnsever.com/help/wiki/wiki.php?AboutDDNSHelp다음 단계를 통해서 DDNS 정보를 주기적으로 업데이트하는 작업을 만들어보자.
먼저, DNSEver.com 의 다이나믹 DNS 관리 페이지에서 DNS 인증코드(authcode) 를 등록한다. 자동으로 IP를 업데이트할 때 필요한 코드이다.
DNS 인증코드를 등록한 후, 아래 형식의 코드를 서버에서 실행한다. 정상적으로 실행되면 dnsever.com에 등록된 도메인 IP의 업데이트가 이루어 진다.
linx 사용시
lynx -source -auth=아이디:인증코드 'http://dyna.dnsever.com/update.php?host[호스트이름]'
wget 사용시아래의 코드는 필자의 pi.withover.com 도메인의 IP를 업데이트하는 코드이다. 사용자ID(userid)와 DNS인증코드(12345678)은 다른 코드로 바꾸었다.
wget -O - --http-user=아이디 --http-passwd=인증코드 'http://dyna.dnsever.com/update.php?host[호스트이름]'
pi@raspberrypi ~ $ wget -O - --http-user=userid --http-passwd=12345678 'http://dyna.dnsever.com/update.php?host[pi.withover.com]'위 내용을 crontab 과 같이 주기적으로 실행하는 서비스에 등록해보자.
--2015-01-03 16:08:56-- http://dyna.dnsever.com/update.php?host[pi.withover.com]
Resolving dyna.dnsever.com (dyna.dnsever.com)... 211.233.75.82, 211.233.75.81
Connecting to dyna.dnsever.com (dyna.dnsever.com)|211.233.75.82|:80... connected.
HTTP request sent, awaiting response... 401 Unauthorized
Connecting to dyna.dnsever.com (dyna.dnsever.com)|211.233.75.82|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 238 [text/xml]
Saving to: `STDOUT'
0% [ ] 0 --.-K/s <?xml version="1.0" encoding="utf-8" ?>
<dnsever>
<result type="update" code="701" numOfSuccess="1" numOfFailure="0" msg="DDNS Update Success">
<host name="pi.withover.com" code="720" msg="Update Success"></host>
</result>
</dnsever>
100%[===================================>] 238 --.-K/s in 0s
2015-01-03 16:08:56 (3.44 MB/s) - written to stdout [238/238]
pi@raspberrypi ~ $
Cron : http://en.wikipedia.org/wiki/Cron
Crontab 설명 : http://jmnote.com/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4_%EB%B0%98%EB%B3%B5_%EC%98%88%EC%95%BD%EC%9E%91%EC%97%85_cron,_crond,_crontabdnsever.com 에서 1분이내의 시도가 있으면 거부를 주기 때문에 5분마다 실행하는 크론탭을 만들어보자.
$ crontab -e아래의 내용을 마지막에 붙여 넣고 저장한다. 5분 단위로 서비스를 호출하는 코드이다.
*/5 * * * * wget -O - --http-user=userid --http-passwd=12345678 'http://dyna.dnsever.com/update.php?host[pi.withover.com]'크론탭 서비스를 다시 시작한다.
$ sudo apt-get service cron restart다음의 명령으로 등록된 크론탭 리스트를 볼수 있다.
$ crontab -lISP 업체에서 공유기에 할당된 IP를 바꾸더라도 5분 이내에 바뀐 IP로 DNS가 설정되게 된다.
추가.
DNS업데이트를 쉘로 바꾸었고, 로그를 남기게 설정을 변경하였다.
위 크론탭 내용을 setdns.sh 등의 쉘 파일로 만든다.
$ vi setdns.sh
-O - --http-user=userid --http-passwd=12345678 'http://dyna.dnsever.com/update.php?host[pi.withover.com]'
쉘 실행권한을 준다.
$ chmod +x setdns.sh쉘을 크론탭에서 실행한다. 그리고 로그를 남긴다.
00 * * * * $HOME/setdns.sh > $HOME/setdns.sh.log
댓글 쓰기