Docker Homelab Series - Phần 7: No-IP DDNS: Hướng dẫn Cập nhật DNS tự động

Hướng dẫn No-IP DDNS

No-IP DDNS: Hướng dẫn Cập nhật DNS tự động

No-IP DDNS

I. Giới thiệu No-IP DDNS

No-IP DDNS (Dynamic DNS) là dịch vụ miễn phí cung cấp tên miền động và tự động cập nhật IP khi thay đổi. Điều này rất hữu ích khi:

  • Bạn có ISP cấp IP động (DHCP)
  • Muốn sử dụng tên miền miễn phí (*.ddnskey.com, *.redirectme.net, ...)
  • Cần access server từ internet với tên miền ổn định
  • Không muốn trả phí cho tên miền hoặc DNS động

Lợi ích No-IP:

  • Hoàn toàn miễn phí (có phiên bản pro)
  • Hỗ trợ nhiều tên miền (mặc định 3 tên miền miễn phí)
  • Tự động phát hiện và cập nhật IP
  • Giao diện quản lý web dễ sử dụng
  • API hỗ trợ Docker/Linux

So sánh Cloudflare DDNS vs No-IP DDNS:

Tính năng Cloudflare DDNS No-IP DDNS
Giá Miễn phí (cần đã có domain) Miễn phí (tên miền miễn phí)
Tên miền Domain riêng của bạn *.ddnskey.com, *.redirectme.net
Cập nhật IP Tự động Tự động
Bảo mật Cao (SSL, WAF) Cơ bản

II. Chuẩn bị tài khoản No-IP

1. Đăng ký tài khoản No-IP

Trước tiên, bạn cần tạo tài khoản No-IP:

  1. Truy cập www.noip.com
  2. Click Sign Up
  3. Điền thông tin:
    • Email (sử dụng để đăng nhập)
    • Mật khẩu
    • Lựa chọn dùng thử miễn phí
  4. Xác nhận email
  5. Đăng nhập vào tài khoản

2. Tạo DDNS Hostname

Sau khi đăng nhập:

  1. Vào Dynamic DNSNo-IP Hostnames
  2. Click Create Hostname
  3. Điền thông tin:
    • Hostname: my-server (ví dụ)
    • Domain: Chọn domain miễn phí (ví dụ: ddnskey.com)
    • Record Type: A (IPv4) hoặc AAAA (IPv6)
    • IPv4 Address: Để trống (sẽ được cập nhật tự động)
  4. Click Create

Bạn sẽ có hostname: my-server.ddnskey.com

3. Tạo Update Client Group (Optional)

Để sử dụng chức năng Update Client (cần cho DUC):

  1. Vào Dynamic DNSUpdate Client Group (hoặc Create Group)
  2. Click Create Group
  3. Đặt tên group: my-group
  4. Chọn hostnames cần quản lý (từ bước 2)
  5. Click Create
  6. Copy Group Name (sẽ dùng cho NOIP_USERNAME)
  7. Tạo password cho group (sẽ dùng cho NOIP_PASSWORD)

III. Cấu hình No-IP DDNS với Docker

1. Docker Compose

version: "3.8"
services:
  noip:
    image: ghcr.io/noipcom/noip-duc:latest
    container_name: noip-duc
    restart: always
    network_mode: host
    environment:
      - NOIP_USERNAME=group:user
      - NOIP_PASSWORD=your_password
      - NOIP_HOSTNAMES=my-server.ddnskey.com
    mem_limit: 1024m
    cpus: 0.1

Giải thích cấu hình:

  • NOIP_USERNAME: Format là group:user hoặc chỉ email nếu không dùng group
  • NOIP_PASSWORD: Mật khẩu của group hoặc email account
  • NOIP_HOSTNAMES: Danh sách hostname cách nhau bằng dấu phẩy
  • network_mode: host: Để container phát hiện IP đúng của máy
  • restart: always: Tự động restart nếu có sự cố

2. Ví dụ cấu hình với nhiều hostname

version: "3.8"
services:
  noip:
    image: ghcr.io/noipcom/noip-duc:latest
    container_name: noip-duc
    restart: always
    network_mode: host
    environment:
      - NOIP_USERNAME=mygroup:myuser
      - NOIP_PASSWORD=strong_password_here
      - NOIP_HOSTNAMES=server1.ddnskey.com,server2.ddnskey.com,backup.redirectme.net
    mem_limit: 1024m
    cpus: 0.1

IV. Triển khai với Portainer

Bước 1: Chuẩn bị thông tin

Trước khi deploy, hãy chuẩn bị:

  • Group Name: Tên group từ No-IP (hoặc email account)
  • Password: Mật khẩu group (hoặc mật khẩu email)
  • Hostnames: Danh sách hostname (cách nhau bằng dấu phẩy)

Bước 2: Deploy qua Portainer

  1. Vào Portainer Dashboard
  2. Chọn StacksAdd stack
  3. Đặt tên Stack: noip-ddns
  4. Copy/paste docker-compose vào Web editor
  5. Thay đổi:
    • mygroup:myuser → Group name thực tế
    • strong_password_here → Password thực tế
    • server1.ddnskey.com → Hostnames thực tế của bạn
  6. Click Deploy the stack

Bước 3: Kiểm tra hoạt động

Vào Portainer → Stacks → noip-ddns → Container → noip-duc → Logs.

Bạn sẽ thấy các dòng như:

[2024-01-15 10:30:00] Successfully updated IP for my-server.ddnskey.com
Current IP: 203.0.113.42

Bước 4: Xác minh trên No-IP Dashboard

  1. Đăng nhập vào www.noip.com
  2. Vào Dynamic DNSNo-IP Hostnames
  3. Kiểm tra IP address của hostname đã được cập nhật chưa
  4. Status nên là Active

V. Cấu hình Advanced

1. Sử dụng Environment File

Thay vì hardcode credentials vào docker-compose, tạo file .env:

# /root/noip/.env
NOIP_USERNAME=mygroup:myuser
NOIP_PASSWORD=strong_password_here
NOIP_HOSTNAMES=server1.ddnskey.com,server2.ddnskey.com

Sau đó cập nhật docker-compose:

version: "3.8"
services:
  noip:
    image: ghcr.io/noipcom/noip-duc:latest
    container_name: noip-duc
    restart: always
    network_mode: host
    env_file:
      - /root/noip/.env
    mem_limit: 1024m
    cpus: 0.1

2. Hỗ trợ IPv6

Nếu muốn cập nhật cả IPv6, hãy tạo thêm hostname AAAA record trên No-IP.

3. Custom Interval (Update Frequency)

Một số image cho phép thiết lập interval cập nhật:

environment:
  - NOIP_INTERVAL=600  # Cập nhật mỗi 10 phút (600 giây)

VI. Troubleshooting

Container restart liên tục

  • Kiểm tra NOIP_USERNAME và NOIP_PASSWORD có đúng không
  • Kiểm tra format username: nên là group:user hoặc email
  • Xem logs: docker logs noip-duc

IP không được cập nhật

  • Kiểm tra network_mode: host có được set không
  • Kiểm tra hostname có tồn tại trên No-IP không
  • Kiểm tra password có đúng không (lưu ý: phân biệt hoa/thường)
  • Xem logs để tìm error cụ thể

Authentication failed

  • Đảm bảo bạn đã tạo Update Client Group (nếu sử dụng group)
  • Kiểm tra tài khoản No-IP có bị lock hay cảnh báo không
  • Thử reset password trên No-IP Dashboard
  • Test credentials trên trang Dynamic Updates của No-IP

VII. Lưu ý quan trọng

  • Username format: Nếu dùng group, phải là group:user, không phải email
  • Password bảo mật: Sử dụng .env file thay vì hardcode trong docker-compose
  • Hostname format: Phải đầy đủ (ví dụ: my-server.ddnskey.com, không phải chỉ my-server)
  • Network mode: Bắt buộc phải dùng network_mode: host để phát hiện IP đúng
  • Update interval: No-IP giới hạn tần suất cập nhật, thường là 30 phút để tránh abuse
  • No-IP Membership: Tài khoản miễn phí cần confirm hostname trong 30 ngày, nếu không sẽ bị xóa
  • Backup solution: Kết hợp với Cloudflare DDNS để có sự dự phòng

Vậy là bạn đã hoàn thành cấu hình No-IP DDNS để tự động cập nhật DNS từ tên miền miễn phí!

Post a Comment

Previous Post Next Post
QR Code
Quét mã QR để gọi miễn phí