ASUS 공유기에 CloudFlare DDNS 적용하기
안녕하세요 Expbox입니다.
갑작스럽게 서버를 사용하지 못하는 일이 발생해서 나스라도 집에 설치하여 사용하려고 준비중입니다. 집에서는 기존에 사용하던 OPNsense를 사용하는게 아니라 ASUS RT-AX56U 공유기를 사용하고 있습니다. ASUS에서 시놀로지처럼 자체적인 DDNS를 제공해주긴 하나 가끔 문제가 생기는 것으로 알고있습니다. 또한 저는 이미 CloudFlare에 등록된 도메인을 가지고 있어 제 도메인을 사용하는 것이 더 편하니 제 ASUS RT-AX56U에 제 도메인을 연결해보도록 하겠습니다.
참고
CloudFlare 도메인을 사용하기 위해서는 ASUS 공유기에 Asuswrt-Merlin 펌웨어를 올려야합니다. 정식 펌웨어에서는 사용할 수 없기 때문에 꼭 펌웨어를 교체하였는지 확인하는 과정이 필요합니다. 멀린펌을 설치하는 부분은 크게 어렵지 않으니 [자신이 가지고있는 ASUS 공유기 모델 + Merlin(멀린펌)]으로 검색하시면 잘 나옵니다. 요청하시는 분들이 있다면 나중에 다루는 것으로 하겠습니다.
아래는 참고한 깃허브 주소입니다.
준비 사항
- 정식펌웨어가 아닌 멀린펌웨어를 설치한 ASUS 공유기(이 게시물에서는 멀린펌웨어 384.7 버전 이상을 사용하셔야 가능한 방법을 소개하고있습니다. - 저는 388.2_2 버전을 사용했습니다.)
- SSH를 접속할 수 있는 클라이언트(아무 클라이언트 사용해도 됩니다. - 저는 맥북에 iterm2를 사용하였습니다.)
- CloudFlare에 등록되어있는 아이디와 도메인
1. JFFS2 파티션 및 SSH 활성화
멀린펌을 사용하게 되면 JFFS2 파티션을 사용할 수 있게됩니다. 저 또한 자세히 아는 것은 아니지만 공유기 또한 하나의 컴퓨터라고 볼 수 있어서 CPU, RAM, 저장장치 등이 존재합니다. 저장장치에서 펌웨어, OS 등을 설치하고 남은 부분을 스크립트, 설정 파일 등을 저장할 수 있도록 만들어주는 과정을 거쳐야합니다.
또한 SSH는 헤놀로지 혹은 서버를 운영하고 계신분들은 아시겠지만 원격 콘솔입니다. 앞서 공유기가 하나의 컴퓨터라고 말씀드렸는데 이 공유기에 원격으로 접속해서 설정 파일을 만들고 명령을 실행해야하기에 SSH를 활성화해야합니다.
ASUS 공유기에서 고급 설정을 보면 [관리] 버튼을 찾아 클릭합니다.
그리고 위에서 [시스템]이라는 탭을 클릭합니다.
[Persistent JFFS2 partition] 부분에서 [Enable JFFS custom scripts and configs] 의 라디오 버튼 부분을 [예] 로 바꿉니다.
또한 아래의 [서비스] 부분에서 [Enable SSH]를 [LAN only]로 변경해주고 SSH 포트를 원하는 포트(저는 22로 했습니다.)로 변경합니다.
그리고 맨 아래에 [적용]을 클릭하고 저장되면 맨 위에서 [재시작] 버튼을 클릭하면 됩니다.
2. CloudFlare API Token 생성하기
CloudFlare에서 DDNS를 사용하기 위해서 다른 클라이언트 등은 이메일과 패스워드를 입력하거나 Global API Key를 입력할 때도 있긴한데 이 경우 CloudFlare 계정 보안에 큰 문제가 생길 수 있어 API Token을 생성하여 그런 문제를 해결하는 방법을 사용합니다. 특정 권한만 사용할 수 있는 API Token을 생성하여 사용합니다.
https://dash.cloudflare.com/login
위 링크에 접속하여 CloudFlare에 로그인합니다.
https://dash.cloudflare.com/profile/api-tokens
그 후 위 링크에 접속하여 API Token 생성 창으로 이동합니다.
[Create Token]을 클릭합니다.
API Token을 만드는 템플릿이 존재하는데 맨 위에 있는 [Edit zone DNS] 부분에서 [Use template]를 클릭합니다.
[Token name] 부분은 원하는 이름으로 변경하시고 아래 [Permissions]과 [Zone Resources] 부분은 이미지와 동일하게 맞춰주시면 됩니다. 도메인이 여러개라면 [Zone Resources]에서 [All zones]로 하지 마시고 [Specific zone]으로 변경하시고 원하는 도메인으로 해둘 수도 있습니다.
이후 [Continue to summary]를 클릭, [Create Token]을 클릭합니다.
그러면 이렇게 Token이 생성되는데 이 페이지에서 나가게 되면 Token을 더 이상 확인할 수 없기 때문에 메모장에 저장해두시거나 기억(?)을 해두시면 됩니다. 토큰을 공개하는건 좀 그렇고 일부 가렸습니다. 아마 게시글이 올라갈 때 쯤이면 토큰 자체가 삭제되긴 할테지만 괜히 긁어 부스럼 만들긴 좀 그래서요.
3. ASUS 공유기에 SSH 접속하기
이제 공유기에 SSH로 접속해서 DDNS를 연결할 차례입니다. 이것도 어렵지 않아요. 복사 붙여넣기만 잘하면 됩니다.
앞서 멀린펌웨어 384.7 버전 이상을 사용해야한다고 했는데 이제부터 사용해야할 In-a-Dyn(inadyn) 클라이언트가 멀린펌웨어 384.7 버전부터 탑재되었기 때문입니다. 한번 더 강조드리는데 멀린펌웨어 384.7 이상의 버전을 사용하셔야합니다.
먼저 사용해야할 설정 파일을 만들어야합니다. 위에서 생성해둔 CloudFlare API Token을 사용하게 되는겁니다.
username = zone.name
password = api_token
hostname = hostname.zone.name
ttl = 1 # optional, value of 1 is 'automatic'.
proxied = false # optional.
}
위의 내용을 아무 메모장에 붙여넣기합니다. 그리고 내용을 수정합니다.
zone.name 는 자신이 가지고 있는 도메인으로 수정합니다.
- 예시: example.com
api_token 은 2에서 생성한 CloudFlare API Token 으로 수정합니다.
- 예시: qwertyuiopasdfghjklzxcvbnm1234567890
hostname.zone.name 은 자신이 사용할 (서브)도메인으로 수정합니다.
- 예시: asus.example.com
나머지 ttl과 proxied는 굳이 바꿀 필요없으나 CloudFlare의 DNS를 사용하시는 분은 proxied의 false를 true로 바꿔주시면 될 것 같습니다.
ssh id@192.168.0.1 -p 22
저는 공유기의 아이디가 id 이고 공유기의 ip가 192.168.0.1이며 포트는 22입니다. 따라서 아래의 명령어를 이용하여 로그인 할 수 있습니다. 아이디는 공유기 관리자 페이지에서 사용하는 아이디, 비밀번호는 공유기 관리자 페이지에 접속할 수 있는 비밀번호를 사용하면 됩니다.
공유기에 SSH로 접속되었다면 위의 명령어를 사용합니다.
username = example.com
password = qwertyuiopasdfghjklzxcvbnm1234567890
hostname = asus.example.com
ttl = 1 # optional, value of 1 is 'automatic'.
proxied = false # optional.
}
그리고 vi 편집기가 실행되면 i 를 눌러 편집모드로 변경한 뒤 위에서 메모장에 만들어둔 내용을 붙여넣습니다. 내용이 정상적으로 붙여넣어졌다면 ESC를 누르고 :wq 혹은 :x를 입력하여 저장 후 빠져나옵니다.
참고: 내용이 정상적으로 붙여넣어지지 않았다면 ESC를 누르고 :q!를 입력하여 저장하지 않고 빠져나옵니다.
그리고 위의 명령어를 붙여넣고 엔터를 누른 후 시간이 좀 지나고 CloudFlare Dashboard를 확인하면 A 네임으로 정상적으로 DDNS가 연결되어있는 것을 확인할 수 있습니다.
이후 위의 명령어를 사용하여 SSH 접속을 해제하시면 됩니다.
참고: 만약 작동하지 않는다면 API Token, 도메인 등을 다시 한번 확인해보시고 그래도 안된다면 아래의 링크를 확인해보시기 바랍니다.
4. 마치며 ASUS RT-AX56U의 SSH 접속 비활성화
DDNS 연결이 완료된 것을 확인했다면 보안상 SSH의 접속을 비활성화하는 것이 좋습니다. 1번에서 적용했던 대로 [관리] - [시스템] 탭으로 접속합니다.
아래의 [서비스] 부분에서 [Enable SSH]를 [아니오]로 변경합니다.
그리고 맨 아래에 [적용] 버튼을 클릭하면 끝입니다.
사실 스크립트를 사용하는 등의 다른 깃허브 레포도 있긴 한데 제가 찾아본 것들에서는 Global API를 써야하는 경우가 있기도하고 너무 오래 방치된 등의 문제가 있었습니다. 그래서 ip가 엄청 자주 바뀌는 것도 아니고 공유기 특성상 재부팅을 자주하는 것도 아니라 그냥 간단하게 적용해봤는데 정상적으로 잘 작동하는 것 같습니다.
궁금한 점이나 틀린 내용 등이 있으시면 댓글 남겨주시면 감사하겠습니다.
읽어주셔서 감사합니다.
멀린펌을 올려도 UI 자체는 크게 바뀌지않는군요??
소중한 정보 정말 감사드립니다. 한번 적용해봐야겠네요..^^;;
글에서 잘 정리해주신 부분이 도움이 많이 됐습니다.
직접 해 보니 추가적으로 설정해야 할 부분이 있어 댓글 남깁니다.
https://github.com/RMerl/asuswrt-merlin.ng/wiki/DDNS-services#using-one-of-the-services-supported-by-in-a-dyn-but-not-by-the-asuswrt-merlin-webui
에서 configuration file check 부터의 부분을 적용하시면 A 레코드 생성이 정상적으로 진행되는 것을 확인할 수 있었습니다.
좋은 글 감사드립니다. DNS/DDNS가 뭔지도 모르고 넙죽넙죽 다른 게시글들 받아먹으면서 설정하다가, 이번 계기로 많이 배웠습니다.
CloudFlare에서 도메인 받아놓고 못 쓰고 있었는데 비록 시간은 오래 걸렸지만 덕분에 해결되어 감사합니다.
cmt alert