ddclient으로 동적 DNS(DDNS) 자동화
Ubuntu 홈서버 구축기· 15 / 15
- 1 — 홈서버 구축 과정 정리
- 2 — 운영체제 선택과 설치
- 3 — Rufus로 Ubuntu USB 부팅 디스크 만들기
- 4 — Windows 디스크 파티셔닝과 Ubuntu 설치
- 5 — SSH 원격 접속 설정
- 6 — 방화벽 설정
- 7 — Cloudflare DNS 설정
- 8 — Nginx 설치와 리버스 프록시
- 9 — Nginx SSL/TLS 발급과 자동 갱신
- 10 — MySQL 설치와 설정
- 11 — Node.js 설치와 백엔드 애플리케이션 실행
- 12 — DHCP Reservation으로 내부 IP 고정
- 13 — 포트 포워딩
- 14 — 동적 DNS(DDNS) 개념과 테스트
- 15 — ddclient으로 동적 DNS(DDNS) 자동화
이전 문서에서 DDNS가 이루어지는 과정을 테스트해보았다. 해당 과정은 DNS 동적 업데이트 클라이언트인 **ddclient**가 수행하는 과정과 동일하다.
서버 내에 직접 위 과정을 스크립트를 작성해 자동으로 실행되도록 구성할 수도 있지만, 복잡성과 효율적으로 관리하기 위해 **ddclient**를 설치했다.
ddclient
ddclient는 DNS 동적 업데이트 클라이언트로서, 간단한 설정으로 구성할 수 있고 오류 처리 및 재시도 로직을 통해 관리자의 번거로움과 서버의 부담을 덜어준다.
Cron 작업과 통합되어 주기적으로 IP 주소를 확인하기 때문에 별도로 타이머나 스케줄링 스크립트를 운영할 필요가 없으며, 다양한 DNS 서비스를 지원하기 때문에 DNS 서비스를 바꾸더라도 업데이트 로직을 직접 수정할 필요없이 간단한 설정 변경만으로 관리할 수 있다.
ddclient 설치 및 설정
ddclient 설치부터 환경변수 설정, 서비스 실행까지 순서대로 진행한다.
-
패키지 설치
sudo apt install ddclient설치를 진행하면 그래픽 인터페이스로 연결할 DNS 서비스나 계정 등 기본 정보를 입력하게 된다.
-
클라이언트 환경변수 설정
ddclient가 DDNS 수행하며 이용할 정보를 환경변수로 준비한다.
sudo vim etc/ddclient.conf# Configuration file for ddclient generated by debconf # # /etc/ddclient.conf # DNS 서비스 protocol=cloudflare # API 프로토콜 지정 ssl=yes # IP 주소 조회 사이트 use=web web=ifconfig.co # DNS 서비스 계정(Cloudflare 계정) [email protected] # DNS 서비스 비밀번호(Cloudflare 글로벌 키) password=example5c7f8b1e4a2d4f3a8e9d6c7b1f3a # 도메인 네임 zone=domain.com # 전체 호스트(DNS 레코드) api.domain.com -
클라이언트 실행 및 자동 시작 설정
sudo systemctl start ddclient.service sudo systemctl enable ddclient.service -
클라이언트 구동 확인
ddclient의 로그를 확인해보면, 주어진 환경변수에 따라 적절한 업데이트 과정을 순차적으로 진행하는 것을 확인해볼 수 있다.
sudo ddclient -daemon=0 -debug -verbose -noquiet=== opt ==== ... === globals ==== ... === config ==== config{api.domain.com}{host} : api.domain.com config{api.domain.com}{password} : <redacted> config{api.domain.com}{protocol} : cloudflare config{api.domain.com}{server} : api.cloudflare.com/client/v4 config{api.domain.com}{use} : web config{api.domain.com}{web} : ifconfig.co config{api.domain.com}{zone} : domain.com ... === cache ==== ... # 서버 IP 주소 조회 DEBUG: proxy = <undefined> DEBUG: protocol = https DEBUG: server = ifconfig.co DEBUG: url = DEBUG: ip ver = CONNECT: ifconfig.co CONNECTED: using SSL SENDING: GET / HTTP/1.1 SENDING: Host: ifconfig.co ... RECEIVE: HTTP/1.1 200 OK ... RECEIVE: 111.111.111.111 # Cloudflare Zone ID 조회 INFO: getting Cloudflare Zone ID for api.domain.com DEBUG: proxy = <undefined> DEBUG: protocol = https DEBUG: server = api.cloudflare.com DEBUG: url = client/v4/zones/?<redacted> DEBUG: ip ver = CONNECT: api.cloudflare.com CONNECTED: using SSL SENDING: GET /client/v4/zones/?name=domain.dev HTTP/1.1 SENDING: Host: api.cloudflare.com ... RECEIVE: HTTP/1.1 200 OK ... RECEIVE: {"result":[{"id":"examp1e52c5a8e4b5f0d3c6a9e2b1d7f","name":"domain.com" ... }]} # 다음 단계 진행 판단 DEBUG: get_ip: using web, ifconfig.co reports 111.111.111.111 WARNING: skipping update of api.angari.dev from <nothing> to 111.111.111.111. ...위 예시 로그의 경우, 현재 서버의 IP 주소와 Cloudflare DNS IP 주소가 일치하여 DNS 업데이트 과정을 중단한 것이다.
이렇게 동적 DNS 설정을 완료했다.