나만의 인터넷 주소를 홈 서버에 연결해보자(feat. Cloudflare, DDNS)

나만의 인터넷 주소를 홈 서버에 연결해보자(feat. Cloudflare, DDNS)

인터넷을 사용할 때 주소 창에 172.217.213.100과 같은 진짜 ip 주소가 아닌
google.com같은 도메인 주소를 사용한다.
이것이 가능한 이유는 DNS(Domain Name System)서버가 도메인 주소를 ip주소로 변환해 주기 때문이다.

이번 포스팅에서는 도메인 주소 구매 후 DDNS설정까지 완료하여 홈 서버에 연결하는 과정을 소개하겠다.

도메인 구입

도메인 판매는 국내의 호스팅케이알, 가비아 해외의 cloudflare, google 등 이 있다.
이번엔 호스팅케이알을 통해 구매 하겠다.

도메인 검색 - 호스팅케이알 Hostingkr
호스팅케이알에서 최적의 도메인을 만들어보세요. 전세계에서 인기있는 도메인들을 합리적인 가격으로 선점하세요!

접속 후 검색창에 TLD(.com, .kr)를 빼고 검색하면 TLD별 가격이 나온다.
현재는 .kr은 약 10780원/년으로 나쁘지 않은 가격이다.

원하는 도메인을 구매 한다.

Cloudflare 연결

Cloudflare는 전 세계에 분산된 서버를 통해 빠른 DNS 응답과 proxy등 강력한 보안 서비스를 무료로 제공한다.

모든 곳에서 연결하고, 보호하고, 구축하기
복잡성과 비용을 줄이면서 직원, 애플리케이션, 네트워크를 어디에서든 더 빠르고 안전하게 만듭니다.

로그인 후 홈에서 도메인 온보딩 클릭

cloudflare home

구입 한 도메인 입력

domain register

요금제는 무료로 해도 충분합니다.

cloudflare plan

네임 서버를 변경하라는 안내창이 뜹니다.

cloudflare name server

Cloudflare 네임서버 주소를 복사 해 둔 뒤 호스팅케이알로 다시 돌아옵니다.
우 상단 나의 서비스 -> 도메인 -> 구입 한 도메인 클릭 -> 네임서버 편집

hostingkr domain

기본으로 호스팅케이알의 네임서버를 사용하도록 되어있을 것이다.

hostingkr nameserver

복사해 둔 cloudflare 주소로 변경 후 저장한다.

hostingkr nameserver

다시 Cloudflare로 돌아가 '내 이름 서버를 업데이트함` 클릭
네임 서버 변경이 반영될 때 까지 길면 하루가 걸린다고 하는데 나는 바로 반영 되었다.

등록이 완료된 모습

등록 확인이 안된다면 홈으로 나와서 도메인을 다시 눌러보면 되어 있는 경우도 있다.

이렇게 Cloudflare에 도메인 등록까지 완료하였다.

DDNS 설정

DNS -> 레코드 메뉴에서 직접 aaa.mydomain.comxxx.xxx.xxx.xxx로 연결하도록 설정할 수 있다.
하지만 대부분의 가정집에서는 유동IP를 사용하기 때문에 IP가 변경 될 때 마다 이를 직접 수정해 줘야 한다.

따라서 자동으로 IP변경을 감지 후 DNS 레코드를 수정해주는 DDNS(Dynamic DNS)를 적용해 보겠다.

Clouaflare API발급

우 상단 에서 프로필 클릭

cloudflare profile

좌측 메뉴 API토큰 -> 토큰 생성

API Token

템플릿에서 영역 DNS 편집

edit zone DNS

적절한 token이름, 권한, 영역을 설정한다

토큰을 생성하여 복사 해둔다
이 페이지를 나가면 토큰을 다시 볼 수 없으니 메모장에 옮겨 놓는다

Docker compose

디렉토리를 연 후 docker-compose.yml을 편집한다.

nano docker-compose.yml

아래 내용 붙여넣기

services:
  app:
    image: oznu/cloudflare-ddns:latest
    restart: always
    environment:
      - API_KEY=[Token]
      - ZONE=[mydomain.com]
      - SUBDOMAIN=*
      - PROXIED=false

API_KEY: 방금 발급 받은 토큰
ZONE: 구입한 도메인
SUBDOMAIN: 2차 도메인, 만약 2차도메인에 상관 없이 모든 주소를 연결하고 싶다면 와일드 카드 *을 사용하면 된다

ctrl + x -> y로 저장 후 나가기

docker compose up -d

docker compose logs -f로 로그를 확인하면
DNS record for '*.[domain]' was not found in [domain] zone. Creating now...
과 같은 DNS레코드를 찾고 생성하는 로그를 확인할 수 있다.

docker compose logs -f

확인

Cloudflare DNS의 레코드 메뉴에서 실제로 IP가 등록된 것을 확인할 수 있다.

또한 cmd나 powershell에서 DNS 정보를 조회하는 nslookup 명령어로도 확인할 수 있다.

win + R -> cmd
nslookup [test.도메인] 입력

nslookup