DDNS(Dynamic DNS) 를 활용한 SSH 접근

June 30, 2024

제가 최근에 라즈베리파이를 가지고 놀면서 DDNS를 활용한 경험을 공유하려고 합니다.

가정용 인터넷 서비스는 동적 IP를 제공하기 때문에, IP 주소가 주기적으로 변경됩니다. 이로 인해 외부에서 SSH로 접근하는 것이 불편할 수 있습니다. 이를 해결하기 위해 DDNS (Dynamic DNS)를 사용하여 언제든지 동일한 도메인 이름으로 SSH 접근이 가능하도록 설정하였습니다.

DDNS란

DDNS는 Dynamic Domain Name System의 약자로, 동적 IP 주소를 고정된 도메인 이름으로 매핑해주는 서비스입니다. 동적 IP 주소는 ISP(Internet Service Provider)에서 주기적으로 변경될 수 있기 때문에, 외부에서 해당 IP 주소로 접근하는 것이 어려울 수 있습니다. DDNS를 사용하면 IP 주소가 변경되더라도 도메인 이름을 통해 언제든지 동일한 서버에 접근할 수 있습니다.

작동 원리

  • 클라이언트 업데이트: 라우터나 서버에서 동작하는 클라이언트 프로그램이 주기적으로 현재의 IP 주소를 DDNS 서비스에 업데이트합니다.
  • DNS 레코드 갱신: DDNS 서비스는 새로운 IP 주소로 DNS 레코드를 갱신하여, 도메인 이름이 항상 올바른 IP 주소를 가리키도록 합니다.
  • 도메인 접근: 사용자는 도메인 이름을 통해 서버에 접근할 수 있으며, DDNS 서비스는 자동으로 최신 IP 주소를 제공합니다.

라즈베리파이에 DDNS 설정하기

1. OS 설치

라즈베리파이에는 다양한 os 설치가 가능한데 저는 라즈베리파이 공식 OS인 라즈비안을 설치하였습니다.

2. 도메인 구매

No-IP라는 곳을 통하면 무료로 도메인을 제공받아서 사용할 수 있지만, 저는 원하는 도메인 네임을 사용하기 위해 namecheap 라는 사이트를 통해서 1년짜리 도메인을 구매하였습니다.아래는 namecheap 를 통해 도메인을 구매하고 DDNS 를 사용하는 방법입니다.

  1. 원하는 도메인 구매

  2. Domain List → 구매한 도메인 우측의 MANAGE 버튼 클릭

  3. Advanced DNS 클릭

  4. ADD NEW RECORD

    Type : A + Dynamic DNS Record

    Host : @

    TTL : Automatic

    raspberry-pi-ddns1.png

  5. Dynamic DNS를 활성화하고, Dynamic DNS Password를 기억해둡니다.

    raspberry-pi-ddns2.png

3. 라즈베리 파이에 ddclient 설치 및 설정

  1. ddclient 설치

  2. ddclient 설정 파일 편

    password에는 도매인 구매 및 DDNS 설정을 하면서 생성된 password를 입력해 줍니다.

  3. ddclient 데몬 설정

    데몬으로 설정하면 백그라운드에서 주기적으로 IP 주소를 확인하고 필요할 때마다 업데이트를 수행한다고 합니다.

  4. ddclient 서비스 재시작

  5. ddclient 로그 확인

4. 라즈베리 파이에서 SSH 설정 변경

  1. SSH 설정 파일 열기

  2. 포트 변경

    저의 경우에는 22 포트로 했다가 계속 안되었습니다. 보안상의 이유로 인터넷 서비스 제공업체가 포트 22를 차단 할 수 있다고 합니다.

  3. SSH 서비스 재시작

5. 방화벽 설정

UFW (Uncomplicated Firewall)는 시스템에서 방화벽을 간편하게 설정하고 관리할 수 있도록 도와주는 도구입니다. UFW를 설치하고 사용하는 것이 필수는 아니지만 보안 측면에서 이점이 많을것 같아 추가하였습니다.

  1. UFW 설치

  2. UFW 활성화

  3. 포트 2222 허용

  4. 방화벽 상태 확인

기타 설정

시스템 재부팅 시 자동으로 ddclient, ssh, ufw가 실행되도록 설정합니다

6. 라우터 포트 포워딩 설정

웹 브라우저에서 라우터의 ip 주소를 입력하여 설정 페이지에 접속합니다.

맥에서는 다음으로 ip주소를 확인 할 수 있습니다.

  1. 로그인(보통 공유기에 패스워드가 적혀있습니다)

  2. 포트 포워딩 메뉴 접근

    "Port Forwarding", "Virtual Server", "NAT", "Applications" 등으로 불릴 수 있습니다.

  3. 포트 포워딩 설정

    • Service Name: SSH
    • External Port: 2222
    • Internal IP Address: 라즈베리 파이의 로컬 IP 주소 (예: )
    • Internal Port: 2222
    • Protocol: TCP

    라즈베리파이의 로컬 IP 주소 찾는 방법은 다음을 라즈베리파이 터미널에 입력하여 확인할 수 있습니다.

  4. 설정 저장

    포트 포워딩 설정을 저장합니다.

7. 외부에서 접근해보기

노트북에서 위의 명령어를 입력하면 외부에서 접근이 가능합니다.

raspberry-pi-ssh.png

8. 추가!!! 진짜 중요!! (내부 IP 고정 설정)

SSH 접속이 한동안 잘 되다가 갑자기 안 되는 경우가 있습니다. 이 문제는 외부 IP뿐 아니라 내부 IP가 자동으로 바뀌기 때문에 발생할 수 있습니다.

🔎 문제의 원인

외부 IP는 DDNS(Dynamic DNS)를 통해 자동으로 갱신되기 때문에 일반적으로 문제가 없습니다.

그러나 내부 IP는 공유기에서 DHCP로 자동 할당되기 때문에 미니 컴퓨터나 라즈베리파이의 IP가 재부팅 시 바뀔 수 있습니다.

이 경우 공유기의 포트포워딩 대상이 바뀐 IP를 가리키지 않아 접속이 끊기게 됩니다.

✅ 해결 방법: DHCP 고정 할당 설정하기

미니컴퓨터에서 내부 IP를 확인합니다:

브라우저 주소창에 해당 IP를 입력하여 공유기 설정 페이지에 접속합니다.

관리자 로그인 후, 메뉴에서 DHCP 할당 정보 또는 IP 주소 예약, 고정 IP 설정 항목을 찾습니다.

미니컴퓨터의 MAC 주소와 현재 IP 주소를 선택하여 해당 장비에 항상 같은 내부 IP가 할당되도록 설정합니다.

  • 외부 IP 문제는 DDNS로 해결
  • 내부 IP 문제는 공유기에서 고정 IP 할당으로 해결

이렇게 두 가지 모두 고정해두면, 재부팅 이후에도 안정적으로 외부에서 접속이 가능해집니다!

추가 보안 설정

추가로 저는 ssh 접근시 password 와 OTP 를 입력하게 하고 fail2ban을 이용해서 password를 5번 이상 틀리게 되면 해당 ip를 일주일 동안 차단하도록 하였습니다.