Skip to content

nerdnam/DDNS-Updater-Python-Ver

Repository files navigation

Project Logo

Web UI Screenshot


Homepage Widget Example

Homepage Logo
Homepage μœ„μ ― 연동 μ˜ˆμ‹œ (μœ„μ ― 섀정은 μ•„λž˜ μ°Έκ³ )

  • Homepage μœ„μ ― μ„€μ • μ˜ˆμ‹œ (services.yaml):
    - My DDNS Status: # μ„œλΉ„μŠ€ κ·Έλ£Ήλͺ… (μ›ν•˜λŠ” λŒ€λ‘œ λ³€κ²½)
        - DDNS Updater-py:
            icon: https://raw.githubusercontent.com/nerdnam/DDNS-Updater-Python-Ver/main/favicon/favicon.png # 직접 μ•„μ΄μ½˜ 경둜 μ§€μ •
            href: http://YOUR_SERVER_IP:30007 # μ‹€μ œ 접속 μ£Όμ†Œλ‘œ λ³€κ²½
            description: DDNS Updater Status
            widget:
              type: customapi
              url: http://YOUR_SERVER_IP:30007/api?id=YOUR_RECORD_ID # μ‹€μ œ API μ£Όμ†Œ 및 λ ˆμ½”λ“œ ID둜 λ³€κ²½
              refreshInterval: 3600000 # 1μ‹œκ°„ (λ°€λ¦¬μ΄ˆ λ‹¨μœ„, 선택 사항, κΈ°λ³Έκ°’ 10초)
              method: GET # 선택 사항
              mappings:
                - field: domain
                  label: Domain
                - field: provider
                  label: Provider
                - field: current_ip
                  label: IPv4
                - field: status3 # UI의 "Up Status"에 ν•΄λ‹Ή (예: "05-17 18:30")
                  label: Last Update
    • YOUR_SERVER_IP: DDNS Updaterκ°€ μ‹€ν–‰ 쀑인 μ„œλ²„μ˜ IP μ£Όμ†Œ λ˜λŠ” λ„λ©”μΈμœΌλ‘œ λ³€κ²½ν•˜μ„Έμš”.
    • YOUR_RECORD_ID: ddns_config.ini에 μ„€μ •ν•œ νŠΉμ • λ ˆμ½”λ“œμ˜ ID (μ„Ήμ…˜ 이름)둜 λ³€κ²½ν•˜μ„Έμš”.

DDNS Updater (Python Version - IPv4 Only)

이 ν”„λ‘œμ νŠΈλŠ” qdm12/ddns-updater ν”„λ‘œμ νŠΈλ₯Ό Python으둜 ν¬νŒ…ν•œ λ²„μ „μž…λ‹ˆλ‹€. 원본 ν”„λ‘œμ νŠΈμ˜ κ°•λ ₯ν•œ DDNS μ—…λ°μ΄νŠΈ κΈ°λŠ₯은 μœ μ§€ν•˜λ©΄μ„œ, ν˜„μž¬ μƒνƒœλ₯Ό μ‘°νšŒν•  수 μžˆλŠ” HTTP API κΈ°λŠ₯을 μΆ”κ°€ν•˜κ³  IPv4 μ „μš©μœΌλ‘œ λ‹¨μˆœν™”ν•˜λŠ” 것을 λͺ©ν‘œλ‘œ ν•©λ‹ˆλ‹€.

Python으둜 μž‘μ„±λœ 동적 DNS(DDNS) μ—…λ°μ΄νŠΈ ν΄λΌμ΄μ–ΈνŠΈμž…λ‹ˆλ‹€. ν˜„μž¬ IP μ£Όμ†Œλ₯Ό 주기적으둜 ν™•μΈν•˜μ—¬, λ³€κ²½λ˜μ—ˆμ„ 경우 μ„€μ •λœ DNS ν”„λ‘œλ°”μ΄λ”μ˜ λ ˆμ½”λ“œλ₯Ό μžλ™μœΌλ‘œ μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€. μ›Ή UIλ₯Ό 톡해 ν˜„μž¬ μƒνƒœ 확인 및 μˆ˜λ™ μ—…λ°μ΄νŠΈκ°€ κ°€λŠ₯ν•˜λ©°, μΆ”κ°€λœ APIλ₯Ό 톡해 μƒνƒœ 정보λ₯Ό JSON ν˜•μ‹μœΌλ‘œ μ‘°νšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ν˜„μž¬ 버전은 IPv4 μ£Όμ†Œ μ—…λ°μ΄νŠΈμ—λ§Œ μ§‘μ€‘λ˜μ–΄ 있으며, IPv6 지원은 μΆ”ν›„ κ³„νšλ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

μ£Όμš” κΈ°λŠ₯

  • λ‹€μ–‘ν•œ DDNS ν”„λ‘œλ°”μ΄λ” 지원: Cloudflare, GoDaddy, Namecheap λ“± λ‹€μˆ˜μ˜ ν”„λ‘œλ°”μ΄λ” 지원 (ν”ŒλŸ¬κ·ΈμΈ λ°©μ‹μœΌλ‘œ ν™•μž₯ κ°€λŠ₯).
  • μžλ™ IP λ³€κ²½ 감지 및 μ—…λ°μ΄νŠΈ: 주기적으둜 곡인 IP μ£Όμ†Œλ₯Ό ν™•μΈν•˜κ³  λ³€κ²½ μ‹œ DDNS λ ˆμ½”λ“œ μ—…λ°μ΄νŠΈ.
  • λ ˆμ½”λ“œλ³„ 상세 μ„€μ •: 각 DDNS λ ˆμ½”λ“œλ§ˆλ‹€ μ—…λ°μ΄νŠΈ μ£ΌκΈ°, cooldown μ‹œκ°„, νƒ€μž„μ‘΄, HTTP νƒ€μž„μ•„μ›ƒ 등을 κ°œλ³„μ μœΌλ‘œ μ„€μ • κ°€λŠ₯.
  • μ›Ή UI 제곡:
    • μ„€μ •λœ λͺ¨λ“  DDNS λ ˆμ½”λ“œμ˜ ν˜„μž¬ μƒνƒœ (μ—…λ°μ΄νŠΈ μ—¬λΆ€, ν˜„μž¬ IP, λ§ˆμ§€λ§‰ μ—…λ°μ΄νŠΈ μ‹œκ°„ λ“±) ν‘œμ‹œ.
    • κ°œλ³„ λ ˆμ½”λ“œ μˆ˜λ™ μ—…λ°μ΄νŠΈ κΈ°λŠ₯.
    • λ ˆμ½”λ“œλ³„ 둜그 쑰회 κΈ°λŠ₯.
  • μƒνƒœ 쑰회 API 제곡 (μ£Όμš” μΆ”κ°€ κΈ°λŠ₯): ν˜„μž¬ DDNS λ ˆμ½”λ“œ μƒνƒœ 정보λ₯Ό JSON ν˜•μ‹μœΌλ‘œ μ‘°νšŒν•  수 μžˆλŠ” HTTP API μ—”λ“œν¬μΈνŠΈ 제곡.
  • 상세 λ‘œκΉ…: 각 λ ˆμ½”λ“œλ³„ μ—…λ°μ΄νŠΈ μ‹œλ„ 및 κ²°κ³Όλ₯Ό λ‚ μ§œλ³„ 둜그 파일둜 기둝.
  • Docker 지원: Docker 및 Docker Composeλ₯Ό μ‚¬μš©ν•˜μ—¬ μ‰½κ²Œ 배포 및 μ‹€ν–‰ κ°€λŠ₯ (GHCR 이미지 제곡).
  • μ„€μ • 파일 기반 운영: ddns_config.ini νŒŒμΌμ„ 톡해 λͺ¨λ“  μ„€μ • 관리.
  • 디버그 λͺ¨λ“œ: μ„€μ • νŒŒμΌμ„ 톡해 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ „μ²΄μ˜ 디버그 λ‘œκΉ… 및 Flask 디버그 λͺ¨λ“œ ν™œμ„±ν™” κ°€λŠ₯.

ν”„λ‘œμ νŠΈ ꡬ쑰

ddns-updater-python-ver/
β”œβ”€β”€ ddns_updater/                           # 메인 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ Python νŒ¨ν‚€μ§€
β”‚   β”œβ”€β”€ __init__.py                         # ddns_updater νŒ¨ν‚€μ§€ μ΄ˆκΈ°ν™” 파일
β”‚   β”œβ”€β”€ app.py                              # Flask μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 둜직 (UI 및 API 라우트)
β”‚   β”œβ”€β”€ config.py                           # ddns_config.ini 파일 νŒŒμ‹± 및 μ„€μ • 관리 둜직
β”‚   β”œβ”€β”€ ip_fetcher.py                       # 곡인 IP μ£Όμ†Œ 쑰회 둜직
β”‚   β”œβ”€β”€ state.py                            # ddns_state.json 파일 관리 및 μƒνƒœ μ—…λ°μ΄νŠΈ 둜직
β”‚   β”œβ”€β”€ updater.py                          # κ°œλ³„ DDNS λ ˆμ½”λ“œ μ—…λ°μ΄νŠΈ 처리 둜직
β”‚   β”œβ”€β”€ utils.py                            # 곡톡 μœ ν‹Έλ¦¬ν‹° ν•¨μˆ˜ (예: μ‹œκ°„ νŒŒμ‹±)
β”‚   └── providers/                          # DDNS ν”„λ‘œλ°”μ΄λ”λ³„ 둜직 κ΅¬ν˜„ 디렉토리 (ν”ŒλŸ¬κ·ΈμΈ 방식)
β”‚       β”œβ”€β”€ __init__.py                     # ν”„λ‘œλ°”μ΄λ” λͺ¨λ“ˆ 동적 λ‘œλ”© 및 관리
β”‚       β”œβ”€β”€ base_provider.py                # λͺ¨λ“  ν”„λ‘œλ°”μ΄λ” 클래슀의 좔상 κΈ°λ³Έ 클래슀
β”‚       β”œβ”€β”€ cloudflare_provider.py          # (예: cloudflare_provider.py)
β”‚       β”œβ”€  example_provider.py             # (μ˜ˆμ‹œ) νŠΉμ • ν”„λ‘œλ°”μ΄λ” κ΅¬ν˜„ 파일
β”‚       └── ...                             # (기타 λͺ¨λ“  ν”„λ‘œλ°”μ΄λ” 파일)
β”œβ”€β”€ logs/                                   # (μžλ™ 생성) 둜그 파일 μ €μž₯ 디렉토리
β”‚   └── <nick>/                             # μ„€μ • 파일의 'nick' 값에 λ”°λ₯Έ ν•˜μœ„ 디렉토리
β”‚       └── DDNS_Log_<section>_<date>.log   # λ ˆμ½”λ“œλ³„, λ‚ μ§œλ³„ 둜그 파일
β”œβ”€β”€ static/                                 # μ›Ή UI용 정적 파일 디렉토리 (favicon λ“±)
β”‚   └── styles.css                          # μ›Ή UI μŠ€νƒ€μΌμ‹œνŠΈ
β”œβ”€β”€ templates/                              # μ›Ή UI용 HTML ν…œν”Œλ¦Ώ 디렉토리
β”‚   └── index.html                          # 메인 μ›Ή νŽ˜μ΄μ§€ ν…œν”Œλ¦Ώ
β”œβ”€β”€ .github/                                # GitHub Actions μ›Œν¬ν”Œλ‘œμš°
β”‚   └── workflows/
β”‚       └── ghcr-publish.yml                # GHCR 이미지 λΉŒλ“œ 및 ν‘Έμ‹œ μžλ™ν™”
β”œβ”€β”€ .dockerignore                           # Docker 이미지 λΉŒλ“œ μ‹œ μ œμ™Έν•  파일 λͺ©λ‘
β”œβ”€β”€ ddns_config.ini                         # (μ‚¬μš©μž 생성) μ‹€μ œ DDNS μ„€μ • 파일
β”œβ”€β”€ ddns_config.ini_total_providers         # (μ˜ˆμ‹œ 파일) μ§€μ›ν•˜λŠ” λͺ¨λ“  ν”„λ‘œλ°”μ΄λ” μ„€μ • μ˜ˆμ‹œ 포함
β”œβ”€β”€ ddns_state.json                         # (μžλ™ 생성) DDNS λ ˆμ½”λ“œμ˜ ν˜„μž¬ μƒνƒœ μ €μž₯ 파일
β”œβ”€β”€ docker-compose.yml                      # Docker Compose 싀행을 μœ„ν•œ μ„€μ • 파일
β”œβ”€β”€ Dockerfile                              # Docker 이미지 생성을 μœ„ν•œ μ„€μ • 파일
β”œβ”€β”€ LICENSE                                 # ν”„λ‘œμ νŠΈ λΌμ΄μ„ μŠ€ 파일
β”œβ”€β”€ README.md                               # 이 파일
β”œβ”€β”€ requirements.txt                        # Python μ˜μ‘΄μ„± νŒ¨ν‚€μ§€ λͺ©λ‘
└── run.py                                  # μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰ 슀크립트 (μŠ€μΌ€μ€„λŸ¬ 및 Flask μ„œλ²„ μ‹€ν–‰)

μ„€μΉ˜ 및 μ‹€ν–‰

이 μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ Docker 이미지λ₯Ό 톡해 μ‰½κ²Œ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ˜λŠ” μ†ŒμŠ€ μ½”λ“œλ₯Ό 직접 μ‹€ν–‰ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

방법 1: Docker 이미지 μ‚¬μš© (ꢌμž₯)

GitHub Container Registry (GHCR)에 미리 λΉŒλ“œλœ Docker 이미지λ₯Ό μ‚¬μš©ν•˜μ—¬ κ°„νŽΈν•˜κ²Œ μ‹€ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

이미지 Pull (선택 사항, docker run λ˜λŠ” docker-compose up μ‹œ μžλ™μœΌλ‘œ λ°›μ•„μ˜΄):

docker pull ghcr.io/nerdnam/ddns-updater-python-ver:latest
# νŠΉμ • 버전을 μ‚¬μš©ν•˜λ €λ©΄ (예: 0.0.1 버전):
# docker pull ghcr.io/nerdnam/ddns-updater-python-ver:0.0.1

1.1 Docker Run을 μ‚¬μš©ν•œ μ‹€ν–‰

# ν˜ΈμŠ€νŠΈμ— μ„€μ • 및 데이터 μ €μž₯을 μœ„ν•œ 디렉토리 생성 (졜초 1회)
# 이 μŠ€ν¬λ¦½νŠΈκ°€ μžˆλŠ” μœ„μΉ˜λ₯Ό κΈ°μ€€μœΌλ‘œ ./config 와 ./data 디렉토리λ₯Ό μƒμ„±ν•©λ‹ˆλ‹€.
mkdir -p ./config
mkdir -p ./data

# 예제 μ„€μ • νŒŒμΌμ„ ./config/ddns_config.ini 둜 볡사 ν›„, λ‚΄μš©μ„ μžμ‹ μ˜ ν™˜κ²½μ— 맞게 μˆ˜μ •ν•©λ‹ˆλ‹€.
# cp ddns_config.ini_total_providers ./config/ddns_config.ini
# nano ./config/ddns_config.ini # λ˜λŠ” μ„ ν˜Έν•˜λŠ” νŽΈμ§‘κΈ° μ‚¬μš©

docker run -d \
  --name ddns-updater-py \
  -p 30007:30007 \
  -v "$(pwd)/config/ddns_config.ini:/app/ddns_config.ini:ro" \
  -v "$(pwd)/data/ddns_state.json:/app/ddns_state.json" \
  -v "$(pwd)/data/logs:/app/logs" \
  -e PYTHONUNBUFFERED=1 \
  -e TZ="Asia/Seoul" \
  -e FLASK_RUN_HOST="0.0.0.0" \
  -e FLASK_RUN_PORT="30007" \
  -e FLASK_SECRET_KEY="your_very_strong_production_secret_key_!@#$%^&*()" \
  ghcr.io/nerdnam/ddns-updater-python-ver:latest
  • -v "$(pwd)/config/ddns_config.ini...": 호슀트의 μ„€μ • νŒŒμΌμ„ μ»¨ν…Œμ΄λ„ˆλ‘œ 읽기 μ „μš©(:ro)으둜 λ§ˆμš΄νŠΈν•©λ‹ˆλ‹€. λ°˜λ“œμ‹œ μ‹€μ œ 경둜둜 μˆ˜μ •ν•˜κ³ , ddns_config.ini νŒŒμΌμ„ μ€€λΉ„ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  • -v "$(pwd)/data/...": μƒνƒœ 파일과 둜그λ₯Ό ν˜ΈμŠ€νŠΈμ— μ €μž₯ν•˜κΈ° μœ„ν•΄ λ§ˆμš΄νŠΈν•©λ‹ˆλ‹€.
  • -e FLASK_SECRET_KEY=...: λ°˜λ“œμ‹œ κ°•λ ₯ν•˜κ³  예츑 λΆˆκ°€λŠ₯ν•œ κ°’μœΌλ‘œ λ³€κ²½ν•˜μ„Έμš”. λ³΄μ•ˆμƒ 맀우 μ€‘μš”ν•©λ‹ˆλ‹€.
  • ghcr.io/nerdnam/ddns-updater-python-ver:latest: μ‚¬μš©ν•  Docker μ΄λ―Έμ§€μž…λ‹ˆλ‹€. νŠΉμ • 버전을 μ‚¬μš©ν•˜λ €λ©΄ νƒœκ·Έλ₯Ό λ³€κ²½ν•˜μ„Έμš” (예: :0.0.1).

1.2 Docker Composeλ₯Ό μ‚¬μš©ν•œ μ‹€ν–‰

ν”„λ‘œμ νŠΈ 루트 λ˜λŠ” μ›ν•˜λŠ” μœ„μΉ˜μ— λ‹€μŒ λ‚΄μš©μœΌλ‘œ docker-compose.yml νŒŒμΌμ„ μƒμ„±ν•©λ‹ˆλ‹€.

# docker-compose.yml
version: '3.8'

services:
  ddns-updater-py: # μ„œλΉ„μŠ€ 이름 (μ›ν•˜λŠ” λŒ€λ‘œ λ³€κ²½ κ°€λŠ₯)
    image: ghcr.io/nerdnam/ddns-updater-python-ver:latest
    # νŠΉμ • 버전을 μ‚¬μš©ν•˜λ €λ©΄: image: ghcr.io/nerdnam/ddns-updater-python-ver:0.0.1
    # --- λ˜λŠ” 둜컬 Dockerfile을 μ‚¬μš©ν•˜μ—¬ 직접 λΉŒλ“œν•  경우 (μœ„ image 라인 주석 처리 λ˜λŠ” μ‚­μ œ) ---
    # build:
    #   context: . # Dockerfile이 μžˆλŠ” ν˜„μž¬ 디렉토리
    #   dockerfile: Dockerfile
    # -----------------------------------------------------------------------------
    container_name: ddns-updater-py # 싀행될 μ»¨ν…Œμ΄λ„ˆμ˜ 이름
    ports:
      - "30007:30007" # <호슀트_포트>:<μ»¨ν…Œμ΄λ„ˆ_포트>
    volumes:
      # ν˜ΈμŠ€νŠΈμ— config 디렉토리λ₯Ό λ§Œλ“€κ³  κ·Έ μ•ˆμ— ddns_config.ini νŒŒμΌμ„ μœ„μΉ˜μ‹œν‚€μ„Έμš”.
      # docker-compose.yml 파일이 μžˆλŠ” μœ„μΉ˜λ₯Ό κΈ°μ€€μœΌλ‘œ μƒλŒ€ 경둜λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.
      - ./config/ddns_config.ini:/app/ddns_config.ini:ro
      # ν˜ΈμŠ€νŠΈμ— data 디렉토리λ₯Ό λ§Œλ“€κ³  μƒνƒœ 파일과 둜그λ₯Ό μ €μž₯ν•©λ‹ˆλ‹€.
      - ./data/ddns_state.json:/app/ddns_state.json # 초기 μ‹€ν–‰ μ‹œ 파일이 μ—†λ‹€λ©΄ 빈 파일둜 생성될 수 있음
      - ./data/logs:/app/logs
    environment:
      - PYTHONUNBUFFERED=1
      - TZ=Asia/Seoul # μ»¨ν…Œμ΄λ„ˆ νƒ€μž„μ‘΄ μ„€μ • (예: Asia/Seoul, Etc/UTC)
      - FLASK_RUN_HOST=0.0.0.0
      - FLASK_RUN_PORT=30007 # Dockerfile 및 run.py와 일치
      # μ€‘μš”: μ‹€μ œ 운영 μ‹œμ—λŠ” κ°•λ ₯ν•˜κ³  예츑 λΆˆκ°€λŠ₯ν•œ μ‹œν¬λ¦Ώ ν‚€λ₯Ό μ‚¬μš©ν•˜κ³ ,
      # .env νŒŒμΌμ„ 톡해 μ£Όμž…ν•˜κ±°λ‚˜ Docker secrets κΈ°λŠ₯을 μ‚¬μš©ν•˜λŠ” 것이 더 μ•ˆμ „ν•©λ‹ˆλ‹€.
      - FLASK_SECRET_KEY=your_very_strong_production_secret_key_!@#$%^&*()
      # - DDNS_UPDATER_NO_UI=false # true둜 μ„€μ • μ‹œ UI λΉ„ν™œμ„±ν™” (κΈ°λ³Έκ°’ false, 즉 UI μ‹€ν–‰)
    restart: unless-stopped # μ»¨ν…Œμ΄λ„ˆ 비정상 μ’…λ£Œ μ‹œ μžλ™ μž¬μ‹œμž‘ (μˆ˜λ™ 쀑지 μ‹œ μ œμ™Έ)

μ‹€ν–‰ μ „ μ€€λΉ„ (Docker Compose μ‚¬μš© μ‹œ):

  • docker-compose.yml 파일이 μžˆλŠ” 디렉토리 κΈ°μ€€μœΌλ‘œ ./config/ 디렉토리λ₯Ό λ§Œλ“€κ³ , κ·Έ μ•ˆμ— ddns_config.ini νŒŒμΌμ„ μ€€λΉ„ν•©λ‹ˆλ‹€. (예제: cp ddns_config.ini_total_providers ./config/ddns_config.ini ν›„ μˆ˜μ •)
  • ./data/ 디렉토리λ₯Ό λ§Œλ“­λ‹ˆλ‹€ (μƒνƒœ 파일 및 둜그 μ €μž₯용).

Docker Compose μ‹€ν–‰:

docker-compose up -d
# 이미지λ₯Ό λ‹€μ‹œ λΉŒλ“œν•΄μ•Ό ν•˜λŠ” 경우 (build μ„Ήμ…˜ μ‚¬μš© μ‹œ):
# docker-compose up -d --build

둜그 확인:

docker-compose logs -f ddns-updater-py
# λ˜λŠ” docker logs -f ddns-updater-py (docker run μ‚¬μš© μ‹œ)

쀑지 및 제거:

docker-compose down
# λ˜λŠ” docker stop ddns-updater-py && docker rm ddns-updater-py (docker run μ‚¬μš© μ‹œ)

방법 2: μ†ŒμŠ€ μ½”λ“œ 직접 μ‹€ν–‰ (개발 및 ν…ŒμŠ€νŠΈμš©)

사전 μ€€λΉ„ 사항

  • Python 3.9 이상 ꢌμž₯
  • pip (Python νŒ¨ν‚€μ§€ μ„€μΉ˜ 도ꡬ)

2.1 μ†ŒμŠ€ μ½”λ“œ λ‹€μš΄λ‘œλ“œ λ˜λŠ” 클둠

git clone https://github.com/nerdnam/DDNS-Updater-Python-Ver.git
cd DDNS-Updater-Python-Ver

2.2 가상 ν™˜κ²½ 생성 및 ν™œμ„±ν™” (ꢌμž₯)

python3 -m venv .venv
source .venv/bin/activate  # Linux/macOS
# .venv\Scripts\activate.bat  # Windows (cmd)
# .venv\Scripts\activate.ps1 # Windows (PowerShell) - μ‹€ν–‰ μ •μ±… 문제 μ‹œ: Set-ExecutionPolicy RemoteSigned -Scope Process

2.3 μ˜μ‘΄μ„± νŒ¨ν‚€μ§€ μ„€μΉ˜

pip install -r requirements.txt

2.4 μ„€μ • 파일 μ€€λΉ„

ν”„λ‘œμ νŠΈ 루트 디렉토리에 ddns_config.ini νŒŒμΌμ„ μƒμ„±ν•˜κ³  섀정을 μž…λ ₯ν•©λ‹ˆλ‹€. (μžμ„Έν•œ μ„€μ • μ˜ˆμ‹œλŠ” ddns_config.ini_total_providers 파일 μ°Έκ³ )

cp ddns_config.ini_total_providers ddns_config.ini
# nano ddns_config.ini # λ˜λŠ” μ„ ν˜Έν•˜λŠ” νŽΈμ§‘κΈ°λ‘œ μˆ˜μ •

2.5 μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰

가상 ν™˜κ²½μ΄ ν™œμ„±ν™”λœ μƒνƒœμ—μ„œ λ‹€μŒ λͺ…령을 μ‹€ν–‰ν•©λ‹ˆλ‹€:

python run.py

μ›Ή UIλŠ” 기본적으둜 http://0.0.0.0:30007 (λ˜λŠ” http://localhost:30007)μ—μ„œ μ ‘κ·Ό κ°€λŠ₯ν•©λ‹ˆλ‹€.


μ›Ή UI

μ• ν”Œλ¦¬μΌ€μ΄μ…˜ μ‹€ν–‰ ν›„, μ›Ή λΈŒλΌμš°μ €μ—μ„œ http://<μ„œλ²„_IP_λ˜λŠ”_localhost>:30007둜 μ ‘μ†ν•˜λ©΄ λ‹€μŒ κΈ°λŠ₯을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

  • μ„€μ •λœ DDNS λ ˆμ½”λ“œ λͺ©λ‘: 각 λ ˆμ½”λ“œμ˜ ID, 도메인, 호슀트, ν”„λ‘œλ°”μ΄λ”, IP 버전, ν˜„μž¬ μƒνƒœ, λ§ˆμ§€λ§‰ μ—…λ°μ΄νŠΈ μ‹œκ°„, ν˜„μž¬ IP, 이전 IP λͺ©λ‘μ„ λ³΄μ—¬μ€λ‹ˆλ‹€.
  • μˆ˜λ™ μ—…λ°μ΄νŠΈ: 각 λ ˆμ½”λ“œ μ˜†μ˜ "Update Now" λ²„νŠΌμ„ ν΄λ¦­ν•˜μ—¬ μ¦‰μ‹œ μ—…λ°μ΄νŠΈλ₯Ό μ‹œλ„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 둜그 쑰회: λ“œλ‘­λ‹€μš΄ λ©”λ‰΄μ—μ„œ λ ˆμ½”λ“œλ₯Ό μ„ νƒν•˜κ³  "Fetch Log" λ²„νŠΌμ„ ν΄λ¦­ν•˜μ—¬ ν•΄λ‹Ή λ ˆμ½”λ“œμ˜ μ΅œμ‹  둜그λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μ „μ—­ μ„€μ • ν‘œμ‹œ: ddns_config.ini의 [ddns] μ„Ήμ…˜μ— μ„€μ •λœ 기본값듀을 λ³΄μ—¬μ€λ‹ˆλ‹€.
  • API μ‚¬μš© κ°€μ΄λ“œ: JSON ν˜•μ‹μœΌλ‘œ μƒνƒœ 정보λ₯Ό μ‘°νšŒν•  수 μžˆλŠ” API μ—”λ“œν¬μΈνŠΈ μ‚¬μš©λ²•μ„ μ•ˆλ‚΄ν•©λ‹ˆλ‹€.
  • ν˜„μž¬ κ°μ§€λœ 곡인 IP: μ›Ή UIλ₯Ό λ‘œλ“œν•  λ•Œ μ„œλ²„κ°€ κ°μ§€ν•œ 곡인 IPv4 μ£Όμ†Œλ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€.

API μ‚¬μš©λ²•

ν˜„μž¬ DDNS μƒνƒœ 정보λ₯Ό JSON ν˜•μ‹μœΌλ‘œ μ‘°νšŒν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • κΈ°λ³Έ μ—”λ“œν¬μΈνŠΈ: http://<μ„œλ²„_IP_λ˜λŠ”_localhost>:30007/api
  • HTTP λ©”μ†Œλ“œ: GET

μ‚¬μš© κ°€λŠ₯ν•œ 경둜:

  • /api: μ„€μ •λœ λͺ¨λ“  DDNS λ ˆμ½”λ“œμ˜ μƒνƒœ 정보λ₯Ό λ”•μ…”λ„ˆλ¦¬ ν˜•νƒœλ‘œ λ°˜ν™˜ν•©λ‹ˆλ‹€ (ν‚€: λ ˆμ½”λ“œ ID).
  • /api?id=<λ ˆμ½”λ“œ_ID>: νŠΉμ • λ ˆμ½”λ“œ ID에 ν•΄λ‹Ήν•˜λŠ” μƒνƒœ 정보λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
    • 예: /api?id=home_server
  • /api?domain=<도메인_이름>: νŠΉμ • 도메인 이름(FQDN λ˜λŠ” κΈ°λ³Έ 도메인)에 ν•΄λ‹Ήν•˜λŠ” λ ˆμ½”λ“œ(λ“€)의 μƒνƒœ 정보λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
    • 예: /api?domain=example.com λ˜λŠ” /api?domain=myhost.example.com

응닡 JSON μ˜ˆμ‹œ (단일 λ ˆμ½”λ“œ):

{
  "id": "home_server",
  "domain": "example.com",
  "owner": "@",
  "provider": "cloudflare",
  "ip_version": "ipv4",
  "proxied": false,
  "status1": "Updated",
  "status2": "25-05-07 20:30",
  "status3": "05-07 20:30",
  "current_ip": "123.123.123.123",
  "previous_ips": ["123.123.123.123", "123.123.123.122"],
  "date1": "2025-05-07",
  "date2": "25-05-07",
  "time1": "20:30:00",
  "time2": "20:30"
}

μ§€μ›λ˜λŠ” ν”„λ‘œλ°”μ΄λ”

ν˜„μž¬ κ΅¬ν˜„λœ ν”„λ‘œλ°”μ΄λ” λͺ©λ‘μ€ ddns_updater/providers/ 디렉토리 및 ddns_updater/providers/__init__.py 파일의 get_supported_providers() ν•¨μˆ˜λ₯Ό 톡해 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. μƒˆλ‘œμš΄ ν”„λ‘œλ°”μ΄λ”λŠ” BaseProviderλ₯Ό μƒμ†ν•˜μ—¬ μ‰½κ²Œ μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

(μ•„λž˜ λͺ©λ‘μ€ ddns_config.ini_total_providers νŒŒμΌμ— λͺ…μ‹œλœ ν”„λ‘œλ°”μ΄λ”λ₯Ό κΈ°μ€€μœΌλ‘œ μž‘μ„±λ˜μ—ˆμœΌλ©°, μ‹€μ œ κ΅¬ν˜„ μ—¬λΆ€λŠ” μ½”λ“œ 확인이 ν•„μš”ν•©λ‹ˆλ‹€.)

  • Aliyun
  • All-Inkl
  • AWS Route 53
  • ChangeIP
  • Cloudflare
  • Custom URL (HTTP API 방식)
  • DD24
  • DDNSS.de
  • deSEC.io
  • DigitalOcean
  • DNS-O-Matic
  • Domeneshop
  • DonDominio
  • DreamHost
  • DuckDNS
  • Dyn.com
  • Dynu
  • DynV6
  • EasyDNS
  • FreeDNS (afraid.org)
  • Gandi
  • GCP (Google Cloud DNS)
  • GoDaddy
  • GoIP (ν•˜λ“œμ›¨μ–΄ μž₯λΉ„)
  • HE.net (Hurricane Electric)
  • Hetzner DNS
  • Infomaniak
  • INWX
  • Ionos (1&1)
  • Linode
  • LuaDNS
  • MyAddr.tools
  • Name.com
  • Namecheap
  • NameSilo
  • Netcup
  • Njalla
  • No-IP
  • Now-DNS.com
  • OpenDNS
  • OVH (DynHost 및 ZoneDNS API λͺ¨λ“œ)
  • Porkbun
  • Selfhost.de
  • Servercow.de
  • Spdyn
  • Strato
  • Variomedia.de
  • Vultr
  • ZoneEdit
  • (Example Provider Template - 개발자용 μ˜ˆμ‹œ)

κΈ°μ—¬

버그 리포트, κΈ°λŠ₯ μ œμ•ˆ, μ½”λ“œ κΈ°μ—¬ λͺ¨λ‘ ν™˜μ˜ν•©λ‹ˆλ‹€. GitHub μ €μž₯μ†Œλ₯Ό 톡해 이슈λ₯Ό μƒμ„±ν•˜κ±°λ‚˜ ν’€ λ¦¬ν€˜μŠ€νŠΈλ₯Ό λ³΄λ‚΄μ£Όμ„Έμš”.

λΌμ΄μ„ μŠ€

MIT λΌμ΄μ„ μŠ€

About

No description, website, or topics provided.

Resources

License

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors 2

  •  
  •  

Languages