티스토리 뷰
Ubuntu에서 Duck DNS로 Dynamic DNS 설정하기 (SSH 외부 접속)
ISP에서 유동 IP를 사용하는 환경에서도 도메인으로 항상 SSH 접속이 가능하도록 Duck DNS를 설정하는 방법을 정리합니다.
Dynamic DNS(DDNS)란?
ISP가 공인 IP를 주기적으로 변경하는 환경에서, 도메인 이름을 항상 현재 IP에 자동으로 매핑해주는 서비스입니다.
[ 문제 상황 ]
월요일: 118.37.94.241 → ssh user@118.37.94.241 ✅
화요일: IP 변경됨! → ssh user@118.37.94.241 ❌ 접속 불가
[ DDNS 적용 후 ]
ssh user@mypc.duckdns.org → IP가 바뀌어도 항상 접속 가능 ✅동작 원리
┌─────────┐ 5분마다 IP 전송 ┌───────────┐
│ 내 PC │ ──────────────────→ │ Duck DNS │
│ │ "내 IP는 지금 │ 서버 │
│ │ xxx.xxx.xxx.xxx" │ │
└─────────┘ └───────────┘
│
│ DNS 응답
▼
┌─────────┐ mypc.duckdns.org ┌───────────┐
│ 외부 PC │ ──── DNS 질의 ────→ │ Duck DNS │
│ │ ←── xxx.xxx.xxx.xxx ── │ 서버 │
│ │ └───────────┘
│ │ ssh xxx.xxx.xxx.xxx:22
│ │ ──────────────────────→ 내 PC에 접속
└─────────┘환경
- Ubuntu 24.04 LTS
- SSH 서버 설치 및 실행 중 (
openssh-server)
SSH 서버가 없다면 먼저 설치합니다.
sudo apt install openssh-server -y
sudo systemctl enable --now sshd
1. Duck DNS 도메인 등록
- https://www.duckdns.org 접속
- GitHub, Google 등으로 로그인
- 원하는 서브도메인 입력 (예:
mypc) → add domain 클릭 mypc.duckdns.org도메인이 생성됨- 페이지 상단의 token을 복사해둡니다
2. IP 자동 갱신 스크립트 생성
Duck DNS에 현재 IP를 주기적으로 알려주는 스크립트를 만듭니다.
mkdir -p ~/duckdns
nano ~/duckdns/duck.sh
아래 내용을 작성합니다. 내도메인과 내토큰을 본인 것으로 변경하세요.
#!/bin/bash
echo url="https://www.duckdns.org/update?domains=내도메인&token=내토큰&ip=" | curl -k -o ~/duckdns/duck.log -K -
예를 들어 도메인이 mypc, 토큰이 abcd1234-5678-efgh라면:
#!/bin/bash
echo url="https://www.duckdns.org/update?domains=mypc&token=abcd1234-5678-efgh&ip=" | curl -k -o ~/duckdns/duck.log -K -
실행 권한을 부여합니다.
chmod 700 ~/duckdns/duck.sh
3. 테스트 실행
~/duckdns/duck.sh
cat ~/duckdns/duck.log
OK가 출력되면 성공입니다. KO가 출력되면 도메인이나 토큰을 다시 확인하세요.
4. Cron으로 자동 실행 등록
5분마다 자동으로 IP를 갱신하도록 cron에 등록합니다.
crontab -e
맨 아래에 다음 줄을 추가합니다.
*/5 * * * * ~/duckdns/duck.sh >/dev/null 2>&1저장 후 등록 확인:
crontab -l
5. 외부에서 접속 확인
외부 PC에서 아래 명령어로 접속합니다.
ssh 유저이름@내도메인.duckdns.org
비밀번호를 입력하면 접속됩니다.
6. 보안 설정 (권장)
공인 IP에 SSH가 노출되면 봇들의 무차별 로그인 시도가 들어옵니다. 실제로 하루에 수천 건이 발생할 수 있습니다. 아래 보안 설정을 권장합니다.
fail2ban 설치
비밀번호를 여러 번 틀리는 IP를 자동 차단합니다.
sudo apt install fail2ban -y
SSH 키 인증 설정
외부 PC에서 실행:
ssh-keygen -t ed25519
ssh-copy-id 유저이름@내도메인.duckdns.org
비밀번호 로그인 비활성화
키 등록이 완료된 후, 서버에서 실행:
sudo nano /etc/ssh/sshd_config
아래 항목을 변경합니다.
PasswordAuthentication noSSH 재시작:
sudo systemctl restart sshd
이후 SSH 키가 없는 사람은 비밀번호를 알아도 로그인이 불가능합니다.
요약
| 단계 | 내용 |
|---|---|
| Duck DNS 가입 | 도메인 등록 + 토큰 확인 |
| 스크립트 생성 | ~/duckdns/duck.sh |
| Cron 등록 | 5분마다 IP 자동 갱신 |
| 보안 설정 | fail2ban + SSH 키 인증 + 비밀번호 로그인 차단 |
무료이고 설정도 간단해서 개인 서버 용도로 추천합니다.
'기타' 카테고리의 다른 글
| Headless 서버에서 GWS CLI 인증하기 (0) | 2026.04.02 |
|---|---|
| 특정 코어를 특정 프로세스에 할당하여 처리하는 방법 CPU Affinity: taskset과 start /affinity (0) | 2026.03.23 |
| 마크다운을 정보 유출 걱정 없이 PDF로 변환하는 가장 쉬운 방법 (무료, 설치 없음, 서버 파일 업로드 없음) (0) | 2026.03.21 |
| claude code 쓰다가 영 정신 못 차리는 거 같을때 (0) | 2026.03.21 |
| 20260320 클로드 코드 사용하며 느낀점 (0) | 2026.03.20 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- FairMOT
- 단축키
- LCA
- 조합
- 백준 11437
- 백준
- PyCharm
- cosine
- ㅂ
- Lowest Common Ancestor
- 백트래킹
- 문제집
- 자료구조
- C++ Deploy
- 위상 정렬 알고리즘
- 순열
- 가장 긴 증가하는 부분 수열
- 이분탐색
- 백준 11053
- 백준 1766
- 인공지능을 위한 선형대수
- MOT
- 파이참
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
글 보관함
