본문 바로가기
홈서버

홈서버 구축 시리즈 - 3편: DDNS 및 포트 포워딩 설치

by 나하니인데 2025. 1. 29.
반응형

안녕하세요! 오늘은 제가 최근에 겪은 홈서버 원격 접속 설정에 대한 이야기를 공유하고자 합니다.

 

배경

현재 저는 집에 홈서버를 구축하고 그 안에 MySQL 데이터베이스를 설치해서 운영하고 있습니다. 원래 계획으로는 서버 전체 세팅이 완료된 후에 외부 접속 설정을 진행할 계획이였습니다.

 

갑작스러운 필요성

설날 연휴 기간 동안 본가에 가야 하는 상황이 생겼습니다. 현재 개발 중인 퀴즈 앱의 문제들을 데이터베이스에 업데이트해야 하는 작업이 있어서, 본가에 있으면서도 집에 있는 서버에 접속할 수 있어야 했죠.

 

(데이터베이스를 외부에서 직접 접속하는 것은 보안적으로 바람직하지 않다고 생각합니다. 추후 서버 인프라를 완벽히 구축한 이후에는 외부에서 직접 접속을 차단하고, 백엔드를 통해서만 접근하거나 사설 네트워크 또는 VPN 통해서 접속이 가능하도록 설정할 계획입니다. 아주 일시적으로 본가에 가있을때만 접속 테스트 하기 위함!!)

 

이를 위해서는 다음과 같은 작업들이 필요했습니다:

  • 공유기 IP 주소를 통한 외부 접속 설정
  • 포트포워딩 설정
  • 보안 설정 검토 및 적용(현재는 일시적으로 개발을 위한 접속하기 위해 해당 부분은 소홀하게 세팅 했습니다 ㅠㅠ)

예정보다 일찍 외부 접속 설정을 시작하게 된 것이지만, 이번 기회에 기초 설정을 하기로 결정했습니다. 설날 연휴라는 특수한 상황이 오히려 이러한 설정의 필요성을 더욱 부각시켰네요.

 

먼저 해당 설정을 하기위해서 https://blog.ewq.kr/71 해당 블로그를 많이 참고하면서 진행을 했습니다.

 

해당 블로그를 보고 알게 된 사실은, 집에서 사용하는 인터넷은 ISP(인터넷 서비스 제공업체)를 통해 공인 IP를 부여받아 사용할 수 있다는 점입니다. 이 공인 IP를 통해 인터넷에 접속하고, 공유기를 통해 집 안의 컴퓨터, 스마트폰, 홈서버 등에는 각각 사설 IP가 할당됩니다. 이렇게 네트워크가 구성되어 우리는 인터넷과 내부 네트워크를 동시에 사용할 수 있게 됩니다. 하지만 본가에서 홈서버로 접속하려면 먼저 공인 IP를 통해 공유기에 접속한 뒤, 공유기에서 내부 네트워크의 홈서버로 연결해야 하며, 이를 위해 포트 포워딩 설정이 필요하다는 것도 알게 되었습니다. 포트 포워딩은 공인 IP로 들어온 외부 요청이 내부 네트워크의 특정 기기(예: 홈서버)로 전달되도록 설정하는 과정입니다. 또한, 대부분의 가정집 인터넷은 공인 IP가 고정되지 않고 유동 IP로 제공된다는 점도 확인할 수 있었습니다. 공인 IP가 유동적이라는 것은 일정 시간이나 공유기 재부팅 시마다 ISP에 의해 IP 주소가 변경된다는 의미이며, 고정 IP를 사용하려면 별도의 비용을 지불하거나, 가정용 인터넷에서는 아예 지원하지 않는 경우도 있다고 합니다. 결론적으로 가정집에서 완전한 고정 IP를 발급받는 것은 정책적, 비용적인 이유로 인해 현실적으로 어렵다는 점을 이해할 수 있었습니다.

 

고정IP를 할 수 없다면 그 방법을 해결하기 위해서는 DDNS 사용하기로 했다. 

 

DDNS 란?

DDNS(Dynamic DNS)는 Dynamic Domain Name System의 약자로, 유동 IP(Dynamic IP)를 사용하는 환경에서 변경된 공인 IP를 특정 도메인 이름에 자동으로 매핑해주는 서비스입니다. 즉, 공인 IP가 주기적으로 바뀌어도 사용자가 도메인 이름(예: example.com)을 통해 항상 동일한 방식으로 접속할 수 있도록 해줍니다.

 

DDNS가 필요한 이유

  • 유동 IP의 문제:
    가정용 인터넷에서는 공인 IP가 유동적으로 변경되기 때문에, 사용자가 외부에서 집에 있는 서버, NAS, CCTV 등에 접속하려면 매번 변경된 IP를 알아야 합니다. DDNS는 이 문제를 해결합니다.
  • 도메인 기반 접근:
    도메인을 통해 쉽게 접속 가능하므로, 사용자가 IP 주소를 기억하거나 수동으로 변경된 IP를 확인할 필요가 없습니다.

DDNS 구축

1. DDNS 서비스 제공업체 선택

DDNS 서비스 제공업체는 여러개가 있습니다. 대표적으로 No-IP, DynDNS, DuckDNS, Cloudflare가 있는데 여기서  Cloudflare는 기본적으로 DNS 관리 및 보안 기능을 제공하지만, 무료 플랜에서도 강력한 DDNS 구축이 가능해서 Cloudflare를 사용하기로 결정 했습니다.

 

2. Cloudflare 계정 생성 및 도메인 등록

 

2-1. Cloudflare 계정 생성

Cloudflare 홈페이지로 이동해 Free tier 계정을 만듭니다.

 

2-2. 도메인 등록

현재 저는 도메인을 구매한 상태가 아니여서 도메인을 도메인 구매 업체(가비아)에서 구입을 했습니다. 구입한 도메인을 Cloudflare가 제공하는 네임서버 주소로 도메인의 네임서버를 변경해야 합니다. 해당 내용은 따로 과정을 블로그에 쓰진 않겠습니다.

 

3. Cloudflare에서 DDNS를 위한 API 설정

Cloudflare의 API를 사용해 동적으로 IP를 업데이트하려면 API 토큰을 생성해야 합니다. 

 

API 토큰 생성:

  1. Cloudflare 대시보드에서 My Profile로 이동.
  2. API Tokens > Create Token 클릭.

저는 위 사진처럼 설정을 했고 블러처리는 자신의 도메인 주소 쓰면 됩니다. IP 주소 필터링은 제가 공인IP 유동 IP라서 아무런 설정을 안하겠습니다.

 

3. 토큰 이름 지정 후 Create Token을 클릭.

4. 생성된 API 토큰은 한 번만 표시되니 복사해 안전한 곳에 저장합니다.(저는 홈 서버에 저장해 두었습니다.)

3.  Cloudflare DNS 설정

  1. Cloudflare 대시보드에서 DNS 메뉴로 이동.
  2. A 레코드 추가:
    • Name: DDNS에서 사용할 서브도메인 이름 (예: home → home.yourdomain.com)
    • IPv4 주소: 현재 공인 IP 주소
    • Proxy 상태: "DNS only"로 설정 (클라우드 아이콘이 회색 상태여야 함).

4. DDNS 클라이언트 설정

Cloudflare API를 통해 공인 IP를 업데이트하려면, 홈 서버에서 스크립트를 실행하기로 했습니다.

 

1. Bash 스크립트 예시:

#!/bin/bash

# Cloudflare API 정보
CF_API_TOKEN="your_api_token"
CF_ZONE_ID="your_zone_id"
CF_RECORD_ID="your_record_id"
CF_DOMAIN="home.yourdomain.com"

# 현재 공인 IP 가져오기
CURRENT_IP=$(curl -s https://ifconfig.me)

# Cloudflare에 IP 업데이트 요청
RESPONSE=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/${CF_ZONE_ID}/dns_records/${CF_RECORD_ID}" \
-H "Authorization: Bearer ${CF_API_TOKEN}" \
-H "Content-Type: application/json" \
--data "{\"type\":\"A\",\"name\":\"${CF_DOMAIN}\",\"content\":\"${CURRENT_IP}\",\"ttl\":1,\"proxied\":false}")

# 업데이트 결과 출력
if echo "$RESPONSE" | grep -q '"success":true'; then
    echo "IP updated to ${CURRENT_IP}"
else
    echo "Failed to update IP"
    echo "$RESPONSE"
fi

 

2. 스크립트를 저장하고 실행 권한 부여:

chmod +x update_ip.sh
./update_ip.sh

 

3. 정기적으로 실행되도록 crontab에 추가:

crontab 명령은 **크론 스케줄링(cron job)**에서 특정 시간 간격마다 실행되는 작업을 설정하는 것입니다.

crontab -e

 

4. 아래 내용 추가

매일 자정(00:00) 에 실행 하도록 설정했습니다.

0 0 * * * /path/to/update_ip.sh

5.  테스트

  1. 공인 IP가 변경된 환경에서 도메인(예: home.yourdomain.com)으로 접속 시도.
  2. Cloudflare 대시보드의 DNS > A 레코드에서 IP 주소가 업데이트되었는지 확인.
  3. 접속이 정상적으로 이루어지면 설정 완료.

 

 

**번외 방법 2!!! (초간단 방법)**

해당 DDNS를 다 구축을 하고 사용하다가 우연히 알게된 사실이 있습니다. 그것은 어떤 공유기들은 DDNS를 지원한다는것을 알게 되었습니다. 

저도 다시 확인해 보니깐 저희 집 공유기는 DDNS를 지원을 해서 호스트 이름만 겹치지않게 만들면 사용을 할 수 있습니다. 이렇게 편한 방법이 있다니 이제 알게 되었네요 도메인도 살 필요없고 많이 편하게 사용할 수 있게 되었습니다!

 

 

 

포트 포워딩 설정

포트 포워딩은 외부 네트워크에서 내부 네트워크의 특정 장치나 서비스에 접근할 수 있도록 공유기에서 설정하는 과정입니다. 예를 들어, 외부에서 홈서버(DB, NAS 등)에 접속하려면 포트 포워딩을 통해 요청을 해당 서버로 전달해야 합니다.

 

1. 홈서버 사설 IP 고정으로 설정

포트 포워딩 설정하기 전에 홈서버의 사설 IP를 DHCP에서 고정 IP로 설정하는 것이 중요합니다. DHCP에서 IP가 동적으로 변경되면 포트 포워딩 설정이 제대로 작동하지 않기 때문에, 홈서버의 IP를 고정시켜야 안정적으로 외부 접속이 가능합니다.

집에서 사용하는 공유기를 통해서 설정이 가능합니다. 저는 iptime 제품을 사용하고 있습니다.

IP 수동설정 방법은 https://iwillcomplete.tistory.com/37 해당 블로그 참고하여서 진행을 했습니다.

 

2. 포트 포워딩 

 

2-1. 홈서버 사설 IP 주소 확인

위에서 수동 설정한 IP주소 사용 예정입니다. 그래도 다시 한번 서버 에서 사설 IP 주소를 확인해보겠습니다.

명령어 ip addr로 확인

 

 

사설 ip 일치한거 확인 하고.

 

2-3. 공유기 관리자 페이지 접속 후 포트 포워딩 메뉴로 이동

- 공유기 관리자 페이지에서 고급 설정 → NAT/포트 포워딩 → 포트 포워딩 메뉴를 클릭.

- "포트 포워딩 설정" 섹션에서 추가 버튼 클릭.

 

2-4. 포트 포워딩 설정

  • 각 항목에 아래와 같이 입력:
    • 서비스 이름: 규칙 이름 (예: HomeServer MySQL, HomeServer SSH).
    • 프로토콜: TCP, UDP 또는 둘 다 (보통 Both 선택).
    • 외부 포트: 외부에서 접속할 포트 (예: 3306, 22).
    • 내부 IP 주소: 홈서버의 사설 IP 주소 (예: 192.168.1.100).
    • 내부 포트: 내부 네트워크에서 사용하는 포트 (일반적으로 외부 포트와 동일).

 

 

반응형

댓글