Bài viết này là bản nâng cấp của hướng dẫn cập nhật IP động cho tên miền qua Cloudflare mình đã chia sẻ trước đây. Thay vì sử dụng bash script và thiết lập cron thì giờ mình chuyển qua cài đặt bằng Docker cho nhanh gọn.

Mình sử dụng Docker image của tác giá timothymiller chia sẻ ở đây: https://github.com/timothymiller/cloudflare-ddns

1. Yêu cầu

  • Đã có sẵn tên miền và đã có tài khoản Cloudflare.
  • Tên miền đã được chuyển về CloudFlare quản lý.
  • Máy chủ / máy ảo chạy Linux (Ubuntu / Arch / CentOS / …) đã đượ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ị các thông số sau từ Cloudflare

  • API Token
  • Zone ID
  • Subdomain (A record)

Xem lại hướng dẫn trong bài viết này: https://thuanbui.me/cap-nhat-ip-dong-cho-ten-mien-qua-cloudflare-de-truy-cap-homelab-tai-nha/

3. Cài đặt cloudflare-ddns

Tạo thư mục mới trên máy chủ

mkdir ~/cloudflare-ddns
cd ~/cloudflare-ddns Code language: Bash (bash)

Tạo file config.json

nano config.jsonCode language: CSS (css)

Và nhập vào nội dung như bên dưới. Lưu ý cần thay đổi các thông số:

  • api_token (dòng 5): API Token của Cloudflare.
  • zone_id (dòng 11): Zone ID của tên miền.
  • name (dòng 14): submain bạn dùng để cập nhật IP. Ví dụ: subdomain là homeserver.thuanbui.me thì chỉ cần nhập homeserver
{
  "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
}Code language: JSON / JSON with Comments (json)

Nếu muốn cập nhật nhiều subdomain của cùng 1 tên miền, bạn bổ sung thêm thông số trong phần subdomains

{
  "cloudflare": [
    {
      "authentication": {
        "api_token": "So5eFPERxxxxxxxxxxxxxxxx4U4YRwu80Op",
        "api_key": {
          "api_key": "",
          "account_email": ""
        }
      },
      "zone_id": "aeb40exxxxxxxxxxxxxxxxxaf51a0b",
      "subdomains": [
        {
          "name": "homeserver1", // homeserver1.thuanbui.me
          "proxied": false
        },
        {
          "name": "homeserver1", //homeserver2.thuanbui.me
          "proxied": false
        }
      ]
    }
  ],
  "a": true,
  "aaaa": true,
  "purgeUnknownRecords": false,
  "ttl": 300
}Code language: JSON / JSON with Comments (json)

Nếu muốn cập nhật cùng lúc nhiều tên miền, mỗi tên miền cần khai báo thông số riêng, như ví dụ bên dưới

{
  "cloudflare": [
    {
      "authentication": {
        "api_token": "So5eFPERxxxxxxxxxxxxxxxx4U4YRwu80Op",
        "api_key": {
          "api_key": "",
          "account_email": ""
        }
      },
      "zone_id": "aeb40exxxxxxxxxxxxxxxxxaf51a0b",
      "subdomains": [
        {
          "name": "homeserver", // homeserver1.domain1.me
          "proxied": false
        }
      ]
    },
    {
      "authentication": {
        "api_token": "xxxxxxxxxxxxxxxxxxx",
        "api_key": {
          "api_key": "",
          "account_email": ""
        }
      },
      "zone_id": "xxxxxxxxxxxxxxxxxxxxxxx",
      "subdomains": [
        {
          "name": "homeserver", / /homeserver.domain2.me
          "proxied": false
        }
      ]
    }
  ],
  "a": true,
  "aaaa": true,
  "purgeUnknownRecords": false,
  "ttl": 300
}Code language: PHP (php)

Tạo file compose.yml, nhập vào nội dung bên dưới và lưu lại

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-stoppedCode language: YAML (yaml)

Kích hoạt bằng lệnh docker compose up -d.

Ứng dụng này sẽ tự động kiểm tra Public IP sau mỗi 15′ và cập nhật IP mới lên Cloudflare nếu phát hiện có sự thay đổi.

Vậy là xong.

Nếu bài viết của mình mang đến thông tin, kiến thức hữu ích cho bạn, đừng ngại mời mình ly bia để có thêm động lực chia sẻ nhiều hơn nữa. Cám ơn bạn!

Lưu ý: Nếu bạn cần hỗ trợ kỹ thuật, vui lòng gửi câu hỏi trực tiếp ở phần Thảo luận bên dưới, mình sẽ trả lời sớm. Đừng vào hỏi trong fanpage Yêu Chạy Bộ, sẽ không có phản hồi đâu!

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *


6 Comments

  1. Dear anh!
    Với đoạn code này thì e thấy nói tới subdomain , nhưng không thấy nói về việc cập nhật tự động tên miền chính, vậy tên miền chính sẽ tự động được cập nhật đúng không ạ

      1. e đang cấu hình theo đúng file này, nhưng không hiểu sao nó nhận mỗi tên miền chính và cập nhật IP cho tên miền chính mà các tên miền phụ phía đưới đều không cập nhật được mặc dù đã tạo A record cho nó rồi.
        Và em đang hơi lười 1 chút nên em muốn hỏi a là có thể cập nhật 2 tên miền một là tên miền chinh, 2 là tên miền *.domain.com ” * ” đại diện cho tất cả các tên miền wildcard sau này (e đang dùng onzu/cloudflare-ddns) thì có chức năng này

        1. Anh chưa test kiểu đó bao giờ nên không biết. Và thường anh chỉ cập nhật IP cho 1 tên miền duy nhất. Tất cả các tên miền chính / tên miền phụ còn lại nếu muốn cập nhật IP thì tạo CNAME trỏ nó về cái tên miền được cập nhật là xong.