Hướng dẫn cấu hình Dynamic DNS (DDNS) qua Cloudflare sử dụng Docker Compose

  • Người khởi tạo Người khởi tạo anhptt
  • Ngày bắt đầu Ngày bắt đầu
Hướng dẫn cấu hình Dynamic DNS (DDNS) qua Cloudflare sử dụng Docker Compose
Chào mọi người,
Bài viết này là giải pháp nâng cấp cho việc cập nhật IP động cho tên miền qua Cloudflare. Thay vì sử dụng bash script và thiết lập cron phức tạp, hiện tại mình chuyển qua cài đặt bằng Docker để quá trình quản lý trở nên nhanh gọn và tiện lợi hơn.
Trong bài hướng dẫn này, chúng ta sẽ sử dụng Docker image của tác giả timothymiller: cloudflare-ddns trên GitHub.
1. Yêu cầu chuẩn bị

  • []Đã có sẵn tên miền và tài khoản Cloudflare.[]Tên miền đã được chuyển DNS về Cloudflare quản lý.
  • Máy chủ / máy ảo chạy Linux (Ubuntu / Arch / CentOS / …) có IP động (Home server, Homelab) đã được cài sẵn Docker và Docker Compose.
2. Chuẩn bị thông số từ Cloudflare
Bạn cần chuẩn bị sẵn các thông số sau trên dashboard của Cloudflare để đưa vào file cấu hình:

  1. []API Token (Lưu ý: Dùng Token, không dùng Global API Key để đảm bảo bảo mật).[]Zone ID của tên miền.
  2. Subdomain (A record) mà bạn muốn trỏ IP về.
3. Các bước cài đặt cloudflare-ddns
Bước 3.1: Tạo thư mục làm việc
Truy cập vào terminal (SSH) trên máy chủ của bạn và chạy lệnh sau để tạo thư mục mới:
Bash:
mkdir ~/cloudflare-ddns
cd ~/cloudflare-ddns
Bước 3.2: Tạo file config.json
Tạo file cấu hình bằng nano:
Bash:
nano config.json
Tùy vào nhu cầu sử dụng, bạn chọn 1 trong 3 cấu hình bên dưới để dán vào file.
Lưu ý cần thay đổi các thông số sau cho đúng với tài khoản của bạn:
  • api_token: Điền API Token của Cloudflare.
  • zone_id: Điền Zone ID của tên miền.
  • name: Subdomain bạn dùng để cập nhật IP (Ví dụ: tên miền của bạn là homeserver.domain.com thì chỉ cần nhập homeserver).
Trường hợp 1: Chỉ cập nhật 1 subdomain
JSON:
{
"cloudflare": [
{
"authentication": {
"api_token": "So5eFPERxxxxxxxxxxxxxxxx4U4YRwu80Op",
"api_key": {
"api_key": "",
"account_email": ""
}
},
"zone_id": "aeb40exxxxxxxxxxxxxxxxxaf51a0b",
"subdomains": [
{
"name": "homeserver",
"proxied": false
}
]
}
],
"a": true,
"aaaa": true,
"purgeUnknownRecords": false,
"ttl": 300
}
Trường hợp 2: Cập nhật nhiều subdomain của CÙNG 1 tên miền
JSON:
{
"cloudflare": [
{
"authentication": {
"api_token": "So5eFPERxxxxxxxxxxxxxxxx4U4YRwu80Op",
"api_key": {
"api_key": "",
"account_email": ""
}
},
"zone_id": "aeb40exxxxxxxxxxxxxxxxxaf51a0b",
"subdomains": [
{
"name": "homeserver1",
"proxied": false
},
{
"name": "homeserver2",
"proxied": false
}
]
}
],
"a": true,
"aaaa": true,
"purgeUnknownRecords": false,
"ttl": 300
}
Trường hợp 3: Cập nhật cùng lúc NHIỀU tên miền khác nhau
JSON:
{
"cloudflare": [
{
"authentication": {
"api_token": "So5eFPERxxxxxxxxxxxxxxxx4U4YRwu80Op",
"api_key": {
"api_key": "",
"account_email": ""
}
},
"zone_id": "aeb40exxxxxxxxxxxxxxxxxaf51a0b",
"subdomains": [
{
"name": "homeserver",
"proxied": false
}
]
},
{
"authentication": {
"api_token": "TokenCuaTenMienThuHaiXXXXXX",
"api_key": {
"api_key": "",
"account_email": ""
}
},
"zone_id": "ZoneIdCuaTenMienThuHaiXXXXXX",
"subdomains": [
{
"name": "homeserver",
"proxied": false
}
]
}
],
"a": true,
"aaaa": true,
"purgeUnknownRecords": false,
"ttl": 300
}
Lưu xong bấm Ctrl+O, Enter để lưu và Ctrl+X để thoát.
Bước 3.3: Tạo file compose.yml
Tiếp tục tạo file Docker Compose:
Bash:
nano compose.yml
Dán nội dung sau vào:
YAML:
services:
cloudflare-ddns:
image: timothyjmiller/cloudflare-ddns:latest
container_name: cloudflare-ddns
security_opt:
- no-new-privileges:true
network_mode: "host"
environment:
- PUID=1000
- PGID=1000
volumes:
- ./config.json:/config.json
restart: unless-stopped
Lưu lại file tương tự như trên.
Bước 3.4: Chạy Container
Cuối cùng, khởi động container bằng lệnh:
Bash:
docker compose up -d
Xong!
Sau khi khởi chạy, ứng dụng này sẽ tự động kiểm tra Public IP của bạn sau mỗi 15 phút. Nếu phát hiện IP bị nhà mạng thay đổi, nó sẽ tự động call API lên Cloudflare để cập nhật IP mới ngay lập tức. Homelab của bạn sẽ không bao giờ lo bị mất kết nối từ bên ngoài.
Chúc các bạn thành công! Nếu có thắc mắc gì hãy để lại bình luận bên dưới nhé.
 
Back
Top Dưới