▶ 들어가며
ASUS 공유기에는 기본적으로 ASUS DDNS(*.asuscomm.com)를 통해 외부에서 도메인을 활용해 유동 IP로 연결되어 있는 공유기에 접속이 가능합니다. 하지만 집에서 웹서버를 운영하는 경우 또는 기타 사유로 인해 CloudFlare에 DDNS를 설정해야 하는 분들이 있으실 겁니다.
저의 경우에는 집에 웹서버를 만들다 보니 도메인을 CloudFlare에 연결시켜 CDN 서비스를 이용하려고 했습니다만, CloudFlare에서 A 타입 레코드(도메인의 원본 주소, 예를 들면 example.com, sample.org 같은 도메인)로 실시간으로 나의 ASUS 공유기 IP를 연동시켜주어야 할 필요가 있었습니다.
CloudFlare의 A 타입 레코드에는 반드시 IPv4(혹은 장차 v6가 될 수도 있지만) 주소를 입력해줘야 하는 만큼, CloudFlare API를 활용해 내 ASUS 공유기가 실시간으로 바뀌는 유동 IP를 CloudFlare로 전송할 수 있도록 하는 방법을 소개하고자 합니다.
▶ 준비물
– Merlin-Firmware(이하 멀린롬)을 지원하는 ASUS 공유기여야 합니다. 자세한 사항은 멀린롬 홈페이지를 참고하세요. (아래 링크)
– SSH 접속을 위한 클라이언트 프로그램, 본 팁에서는 PuTTY를 활용할 예정
– 간단한 Linux 관련 지식 (저도 없습니다만 (…), 있으면 좋기야 하겠지요. ^^;)
▶ 멀린롬 다운받아 설치하기
먼저, ASUS 공유기를 좀 더 자유롭게 만들어주기 위해, ASUS 공유기에 멀린롬을 설치해 주도록 합시다. 멀린롬 최신 버전은 아래 사이트에서 다운로드가 가능합니다.
아래 홈페이지에서 Download를 눌러, 메인 다운로드 사이트나 미러 다운로드 사이트로 들어갑니다.
![[Download를 누르고 다운로드 사이트 서버 중 하나를 선택합니다.]](https://blog.gomgom.net/wordpress/wp-content/uploads/2015/12/1_downmerlin.jpg)
본인 ASUS 공유기 제품명을 선택하여, 최신 버전의 멀린롬을 다운로드 합니다.
(※ 이 때, MODIFIED 버튼을 눌러 최신으로 업로드 된 멀린롬을 다운로드 합니다.)
![[ 최신 버전의 펌웨어를 꼭 다운받도록 합니다. ]](https://blog.gomgom.net/wordpress/wp-content/uploads/2015/12/3_merlin_down2.jpg)
다운로드 받은 멀린롬을 평소 공유기 업데이트 하는 것과 같이 넣어주고 업로드를 눌러 멀린롬 설치를 완료합니다.
![[압축을 풀어 여러분들이 원하는 곳에 파일을 둡니다.]](https://blog.gomgom.net/wordpress/wp-content/uploads/2015/12/4_unpacking.jpg)
![[이어서 통상 펌웨어 업그레이드를 하는 것처럼 진행하시면 됩니다.]](https://blog.gomgom.net/wordpress/wp-content/uploads/2015/12/5_merlin_admin_page.jpg)
▶ ASUS 공유기 SSH 및 JFFS2 파티션 설정
멀린롬 설치가 완료된 ASUS 공유기에서 이제 SSH 접속을 가능하게 하고, JFFS 파티션을 활용하고자 합니다.
멀린롬 설치가 완료된 ASUS 공유기 메인 페이지에서 관리 – 시스템으로 들어가 아래와 같이 설정을 맞추어 줍니다.
![[ JFFS2, SSH 부분을 다음과 같이 설정해 줍니다. ]](https://blog.gomgom.net/wordpress/wp-content/uploads/2015/12/7_setup_comp.jpg)
그리고 PuTTY로 공유기에 직접 SSH 접속이 가능한지 확인하고, JFFS 파티션이 있는지 확인해 봅시다.
![[ SSH ID랑 비밀번호는 여러분들 공유기 관리자 ID와 비밀번호와 같습니다. PuTTY 사용법은 인터넷에 찾아보면 많이 나옵니다. ]](https://blog.gomgom.net/wordpress/wp-content/uploads/2015/12/7_setup_comp_2.jpg)
▶ CloudFlare 사전 준비
먼저, CloudFlare에 네임서버를 연결하고 A Type 도메인이 제대로 연결되었는지 확인합니다.
![[ A 레코드는 꼭 설정되어있어야 합니다. CNAME도 이와 같이 설정되어 있는 것이 정상입니다. ]](https://blog.gomgom.net/wordpress/wp-content/uploads/2015/12/new01_cloudflare.jpg)
CloudFlare에서 여러분들이 꼭 알아야 할 것은 5가지인데, 쉽게 알 수 있는 것이 3가지, 그리고 알아내기 조금 어려운 것이 2가지입니다.
1) CloudFlare에 등록한 이메일 (=CloudFlare 아이디)
여러분들이 등록한 CloudFlare 이메일입니다.
2) CloudFlare API Key (사실상 비밀번호 대용으로 쓰이기 때문에 외부에 유출되지 않게 소중하게 간직하셔야 합니다.)
CloudFlare API Key는 CloudFlare 홈페이지 오른쪽 상단의 여러분들 등록된 이름을 누르고, My Settings에서 찾으실 수 있습니다.
![[ My Account를 눌러 나온 곳에서, View API Key를 눌러 API Key를 확인합니다. ]](https://blog.gomgom.net/wordpress/wp-content/uploads/2015/12/new02_APIKey.jpg)
3) CloudFlare 도메인 존
CloudFlare의 API 에서 ‘존(ZONE)’의 의미를 잘 몰랐는데, 사실상 개별 도메인이라고 생각하시면 됩니다.
클라우드플레어 API 개정으로 이제 ZONE ID를 찾으실 필요가 없게 되었습니다. 클라우드플레어 공식 홈페이지에서 여러분들 사이트를 대표하는 이름이 바로 존 ID가 되었습니다.
![[ ZONE 이름은 클라우드플레어 페이지에서 찾으실 수 있습니다. ]](https://blog.gomgom.net/wordpress/wp-content/uploads/2015/12/new_zone_name.jpg)
4) 도메인 존의 A 레코드 고유 ID (= 즉, 등록된 도메인의 A 레코드 고유 ID) & A 레코드 이름
ZONE 이름을 알아내셨으면, 그 존에 소속된 도메인의 A 레코드 값을 알아내시면 됩니다. 그냥 ID가 ‘A’ 거나 하면 좋았겠지만, 여러분들 도메인의 A 레코드는 고유의 값(ID)을 가지고 있습니다. 이제 그 고유값을 알아내기 위해 PuTTY에 다음과 같은 명령어를 입력해 줍시다.
curl https://www.cloudflare.com/api_json.html -d 'a=rec_load_all' \
-d 'tkn={YOUR_API_KEY}' \
-d 'email={YOUR_EMAIL_ADDRESS}' \
-d 'z={YOUR_DOMAIN_NAME}'
예를 들어, CloudFlare 아이디 [email protected] 에 등록된 example.com 도메인(ZONE 이름은 같다고 생각하고)의, 레코드 ID를 알기 위해서,
(CloudFlare API 키 값은 똑같이 a1b2c3d4e5f6g7h8i9j10k11l12m13n14o15p라고 가정하면)
curl https://www.cloudflare.com/api_json.html -d 'a=rec_load_all' \ -d 'tkn=a1b2c3d4e5f6g7h8i9j10k11l12m13n14o15p' \ -d '[email protected]' \ -d 'z=example.com'
라고 입력하시면 됩니다.
입력하면 다음과 같은 결과값을 만나실 수 있는데, 여기에서 그림 아래 빨간색으로 표시된 부분이 여러분들 도메인의 A레코드 고유 ID입니다. 잘 적어두시면 됩니다.
![[ 이전보다 레코드 ID를 알아내는게 쉽게 되었습니다. ]](https://blog.gomgom.net/wordpress/wp-content/uploads/2016/07/new_record_id2.png)
이 고유값을 @@@@@@@@@@@@@@@@ 라고 가정해 보고 아래로 넘어가시면 됩니다.
또한 이 A 레코드의 name 부분도 같이 기억해 두셔야 할텐데, 보통은 여러분들 WWW를 뺀 도메인일 겁니다(예: example.com).
▶ CloudFlare DDNS 스크립트 완성하기
이제 여러분들이 ASUS 공유기가 CloudFlare에 동적 IP를 보내줄 수 있는 스크립트를 만들도록 해 봅시다.
아래와 같은 스크립트를 공유기 SSH를 통해 /jffs/scripts/ 폴더에 ddns-start 라는 스크립트를 아래와 같이 만들어 주면 됩니다. [2016/07/24 내용수정]
#!/bin/sh
NEW_IP='wget http://ipinfo.io/ip -qO -'
curl https://www.cloudflare.com/api_json.html \
-d 'a=rec_edit' \
-d 'tkn={여러분들의 API 키를 여기에 입력하면 됩니다}' \
-d 'email={여러분들의 CloudFlare ID 메일 주소를 입력하시면 됩니다}' \
-d 'z={여러분들의 ZONE 이름을 여기에 입력하시면 됩니다}' \
-d 'id={A 레코드의 ID를 여기에 입력하시면 됩니다}' \
-d 'type=A' \
-d 'name={A 레코드의 이름을 여기에 입력하시면 됩니다 (보통 WWW 없는 도메인)}' \
-d 'ttl=1' \
-d "content=$NEW_IP"
echo $NEW_IP > /var/tmp/current_ip.txt
if [ $? -eq 0 ]; then
/sbin/ddns_custom_updated 1
else
/sbin/ddns_custom_updated 0
fi
아까 위에서 알아본 정보들을 예시로 하여 토대로 만들면 예시는 다음과 같습니다. [2016/07/24 내용수정]
#!/bin/sh NEW_IP='wget http://ipinfo.io/ip -qO -' curl https://www.cloudflare.com/api_json.html \ -d 'a=rec_edit' \ -d 'tkn=a1b2c3d4e5f6g7h8i9j10k11l12m13n14o15p' \ -d '[email protected]' \ -d 'z=example.com' \ -d 'id=@@@@@@@@@@@@@@@@' \ -d 'type=A' \ -d 'name=example.com' \ -d 'ttl=1' \ -d "content=$NEW_IP" echo $NEW_IP > /var/tmp/current_ip.txt if [ $? -eq 0 ]; then /sbin/ddns_custom_updated 1 else /sbin/ddns_custom_updated 0 fi
※ 리눅스를 잘 하지 못하시는 분들은 SSH 창에 vi /jffs/scripts/ddns-start 라고 입력하시고 난 뒤에, 공백 창이 나오면 i 버튼을 한번 눌러주시고, 위에 스크립트에서 여러분들 정보를 넣어 복사하여 PuTTY 창에서 오른쪽 버튼을 눌러 붙여넣으신 후, ESC 키를 한번 누르신 뒤 :wq 라고 치시고 엔터를 누르시면 됩니다.
이후, 권한 및 소유자 설정을 다시 한번 확인해 주셔야 하기 떄문에, 아래와 같은 명령어를 실행해 주시기 바랍니다.
(#은 콘솔을 나타내기 위한 표시로, 입력하진 않습니다.) # chmod 755 /jffs/scripts/ddns-start # chown -R admin:root /jffs/scripts/ddns-start
▶ 적용하기 및 정리
이제 대망의 장정이 끝났습니다. 다시 ASUS 멀린롬 설정창으로 돌아와 [WAN > DDNS]로 들어가서 아래와 같이 설정합니다.
![[ 위와 같이 설정해주면 등록 성공! 이라고 뜨면서 성공합니다. ]](https://blog.gomgom.net/wordpress/wp-content/uploads/2015/12/putty_fin.jpg)
적용을 누르시면, 여러분들의 IP가 CloudFlare로 들어가 있으신 것을 확인하실수 있습니다.
![[ 이와 같이 A 레코드에 여러분들의 WAN IP가 들어가 있다면 성공한 것입니다. ]](https://blog.gomgom.net/wordpress/wp-content/uploads/2015/12/comfirm.jpg)
축하합니다. 모두 끝나셨습니다. 이제 여러분들은 앞으로 여러분들의 도메인으로 CloudFlare DDNS 서비스를 받아보실 수 있게 되었습니다. :))
이상으로 ASUS 공유기에서 CloudFlare DDNS 를 적용할 수 있는 방법 소개를 마치겠습니다. 감사합니다.

답글 남기기