Cloudflare DDNS: Hướng dẫn Cập nhật DNS tự động
I. Giới thiệu Cloudflare DDNS
Cloudflare DDNS (Dynamic DNS) là công cụ tự động cập nhật IP address của bạn lên Cloudflare DNS khi IP thay đổi. Điều này rất hữu ích khi:
- Bạn có ISP cấp IP động (DHCP)
- Muốn access server từ internet mà không biết IP hiện tại
- IP thường xuyên thay đổi (nhà riêng, VPS, ...)
- Không muốn update DNS record thủ công mỗi lần IP thay đổi
Chức năng chính:
- Tự động phát hiện IP công cộng hiện tại
- Cập nhật DNS record trên Cloudflare tự động
- Hỗ trợ IPv4 và IPv6
- Kiểm tra định kỳ (interval tùy chỉnh)
- Ghi log chi tiết hoạt động
II. Chuẩn bị Cloudflare API Token
1. Tạo API Token trong Cloudflare
Trước tiên, bạn cần tạo API token có quyền chỉnh sửa DNS:
- Đăng nhập Cloudflare Dashboard
- Vào Account Profile (góc phải) → API Tokens
- Click Create Token
- Chọn template: Edit zone DNS
- Cấu hình quyền:
- Permissions: Zone → DNS → Edit
- Zone Resources: Include → Specific zone → Chọn domain của bạn
- Click Continue to summary → Create Token
- Copy token và lưu lại (chỉ hiển thị 1 lần)
2. Lấy Zone ID và Domain
Bạn cũng cần Zone ID của domain:
- Vào Cloudflare Dashboard → Chọn domain
- Kéo xuống dưới cùng → Zone ID (sao chép)
- Note lại domain name (ví dụ:
yourdomain.com)
III. Cấu hình Cloudflare DDNS
1. Tạo File Config
Tạo file config.json với nội dung sau:
{
"auth": {
"api_token": "YOUR_API_TOKEN_HERE"
},
"zone_id": "YOUR_ZONE_ID_HERE",
"subdomains": [
{
"name": "home",
"type": "A",
"ttl": 1
},
{
"name": "server",
"type": "A",
"ttl": 1
}
],
"update_frequency": 600,
"log_level": "info"
}
Giải thích:
- api_token: API token từ Cloudflare (không phải password)
- zone_id: Zone ID của domain
- subdomains: Danh sách subdomain cần update
- name: Tên subdomain (ví dụ "home" → home.yourdomain.com)
- type: A (IPv4) hoặc AAAA (IPv6)
- ttl: 1 để update ngay lập tức, hoặc 3600 cho TTL 1 giờ
- update_frequency: Khoảng thời gian kiểm tra (giây), 600 = 10 phút
- log_level: info, debug, warn, error
2. Docker Compose
version: "3.8"
services:
cloudflare-ddns:
image: timothyjmiller/cloudflare-ddns:latest
container_name: cloudflare-ddns
environment:
PUID: 1000
PGID: 1000
volumes:
- /root/cloudflare-ddns/config.json:/config.json:ro
security_opt:
- no-new-privileges:true
network_mode: "host"
deploy:
restart_policy:
condition: unless-stopped
Giải thích cấu hình:
- PUID/PGID: User ID (1000 = non-root user)
- volumes: Mount config.json (read-only)
- network_mode: host: Sử dụng network host để phát hiện IP đúng
- security_opt: Bảo mật, không tạo process mới
- restart: unless-stopped: Tự động restart nếu bị crash
IV. Triển khai với Portainer
Bước 1: Tạo thư mục và file config
SSH vào server và chạy:
mkdir -p /root/cloudflare-ddns # Tạo file config.json với nội dung từ phần III.1 nano /root/cloudflare-ddns/config.json
Paste nội dung config và thay đổi:
YOUR_API_TOKEN_HERE→ API token từ CloudflareYOUR_ZONE_ID_HERE→ Zone ID của domainhome,server→ Tên subdomain của bạn
Lưu file (Ctrl+X → Y → Enter).
Bước 2: Deploy qua Portainer
- Vào Portainer Dashboard
- Chọn Stacks → Add stack
- Đặt tên Stack:
cloudflare-ddns - Copy/paste docker-compose vào Web editor
- Click Deploy the stack
Container sẽ khởi động và bắt đầu cập nhật DNS.
Bước 3: Kiểm tra Logs
Vào Portainer → Stacks → cloudflare-ddns → Container → cloudflare-ddns → Logs.
Bạn sẽ thấy các dòng như:
[INFO] Updating DNS record for home.yourdomain.com to 203.0.113.42 [INFO] Successfully updated DNS record
V. Cấu hình Advanced
1. Hỗ trợ IPv6
Để cập nhật cả IPv4 và IPv6:
{
"auth": {
"api_token": "YOUR_API_TOKEN_HERE"
},
"zone_id": "YOUR_ZONE_ID_HERE",
"subdomains": [
{
"name": "home",
"type": "A",
"ttl": 1
},
{
"name": "home",
"type": "AAAA",
"ttl": 1
}
],
"update_frequency": 600,
"log_level": "info"
}
2. Wildcard DNS
Để cập nhật wildcard record (*.yourdomain.com):
{
"name": "*",
"type": "A",
"ttl": 1
}
3. Tùy chỉnh IP Detection
Nếu muốn phát hiện IP từ interface mạng cụ thể:
{
"detection": {
"strategy": "interface",
"interface": "eth0"
}
}
Hoặc sử dụng external service:
{
"detection": {
"strategy": "http",
"url": "https://api.ipify.org?format=json"
}
}
VI. Troubleshooting
DNS không update
- Kiểm tra API token có quyền chỉnh sửa DNS không
- Kiểm tra Zone ID có đúng không
- Kiểm tra config.json có format JSON hợp lệ không (dùng jsonlint.com)
- Xem logs:
docker logs cloudflare-ddns
Container restart liên tục
- Kiểm tra file config.json đã mount vào container không
- Kiểm tra permission:
chmod 644 /root/cloudflare-ddns/config.json - Xem logs để tìm lỗi cụ thể
IP không được phát hiện đúng
- Kiểm tra
network_mode: "host"trong docker-compose - Thử thay đổi detection strategy trong config.json
- Test IP detection:
curl https://api.ipify.org
VII. Lưu ý quan trọng
- API Token: Giữ kín API token, đừng share hoặc commit lên Git
- Config file: Mount với
:ro(read-only) để bảo mật - TTL: Đặt TTL = 1 để update ngay, nhưng tốn API quota. Cloudflare có giới hạn API calls
- Update frequency: Không nên quá thường xuyên (minium ~5 phút) để tránh abuse
- DNS Propagation: Sau khi update, DNS mới sẽ propagate trong vài phút
- Backup config: Sao lưu file config.json ở nơi an toàn
Vậy là bạn đã hoàn thành cấu hình Cloudflare DDNS để tự động cập nhật DNS khi IP thay đổi!