Giới Thiệu

Nếu bạn đang vận hành một homelab tại nhà và có địa chỉ IP động từ nhà cung cấp dịch vụ Internet (ISP), bạn sẽ gặp khó khăn khi truy cập từ xa vì IP có thể thay đổi theo thời gian. Giải pháp đơn giản là sử dụng Cloudflare để tự động cập nhật IP động vào tên miền của bạn, giúp truy cập homelab một cách ổn định. Bài viết này sẽ hướng dẫn bạn cách thực hiện chi tiết và tối ưu nhất.

1. Tại Sao Cần Cập Nhật IP Động Cho Homelab?

Hầu hết các ISP không cung cấp địa chỉ IP tĩnh miễn phí, dẫn đến việc IP thay đổi sau một khoảng thời gian nhất định. Điều này khiến việc truy cập từ xa vào homelab trở nên khó khăn, vì địa chỉ IP bạn sử dụng hôm nay có thể không còn hợp lệ vào ngày mai. Bằng cách cập nhật IP động lên Cloudflare, bạn có thể:

  • Truy cập homelab từ bất cứ đâu thông qua tên miền.
  • Tránh mất kết nối khi ISP thay đổi địa chỉ IP.
  • Dễ dàng thiết lập dịch vụ VPN, máy chủ web hoặc bất kỳ ứng dụng nào trong homelab.

2. Cách Cập Nhật IP Động Tự Động Trên Cloudflare

Để tự động cập nhật IP mới lên Cloudflare, bạn có thể sử dụng một script chạy định kỳ trên máy chủ hoặc thiết bị trong mạng nội bộ.

Bước 1: Lấy Thông Tin Cần Thiết

Trước khi tạo script, bạn cần chuẩn bị các thông tin sau:

  • Tên miền bạn muốn cập nhật (ví dụ: homelab.example.com).
  • API Token từ Cloudflare (được cấp quyền cập nhật DNS).
  • Zone IDRecord Name của bản ghi DNS cần cập nhật.

API TokenZone ID mình đã hướng dẫn bạn có thể xem tại đây

Còn Record Name: bạn lấy chính tên miền của bạn luôn nhé

Bước 2: Viết script cập nhật IP động

Tạo một file script trên aaPanel (hoặc server của bạn), ví dụ:

/root/update_ip_cloudflare.sh

Dưới đây là một script đơn giản để cập nhật IP động trên Cloudflare:

#!/bin/bash
#  Cấu hình thông tin Cloudflare

auth_token="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"       # Thay bằng API Token của bạn
zone_identifier="xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"            # Lấy từ Cloudflare Dashboard
record_name="blogeai.com"                                  # Tên miền cần cập nhật
proxied=true                                               # Bật (true) hoặc tắt (false) proxy của Cloudflare

# Lấy IP Public hiện tại
ip=$(curl -s https://api64.ipify.org)
if [[ -z "$ip" ]]; then
  echo "[ERROR] Không thể lấy địa chỉ IP hiện tại!"
  exit 1
else
  echo "[INFO] IP Public hiện tại: $ip"
fi

# Lấy thông tin bản ghi DNS từ Cloudflare
record_info=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/$zone_identifier/dns_records?name=$record_name&type=A" \
     -H "Authorization: Bearer $auth_token" \
     -H "Content-Type: application/json")

# Kiểm tra xem bản ghi có tồn tại không
record_count=$(echo "$record_info" | jq -r '.result | length')

if [[ "$record_count" -eq 0 ]]; then
  echo "[ERROR] Không tìm thấy bản ghi DNS cho $record_name!"
  exit 1
fi

# Lấy ID và IP hiện tại của bản ghi DNS
record_identifier=$(echo "$record_info" | jq -r '.result[0].id')
old_ip=$(echo "$record_info" | jq -r '.result[0].content')

echo "[INFO] IP hiện tại trên Cloudflare: $old_ip"

# Kiểm tra xem IP có thay đổi không
if [[ "$ip" == "$old_ip" ]]; then
  echo "[INFO] IP không thay đổi. Không cần cập nhật."
  exit 0
fi

echo "[INFO] IP đã thay đổi từ $old_ip → $ip. Đang cập nhật..."

# Cập nhật IP trên Cloudflare
update_response=$(curl -s -X PATCH "https://api.cloudflare.com/client/v4/zones/$zone_identifier/dns_records/$record_identifier" \
     -H "Authorization: Bearer $auth_token" \
     -H "Content-Type: application/json" \
     --data "{\"type\":\"A\",\"name\":\"$record_name\",\"content\":\"$ip\",\"ttl\":120,\"proxied\":$proxied}")

# Kiểm tra kết quả cập nhật
if echo "$update_response" | grep -q '"success":true'; then
  echo "[SUCCESS] Cập nhật thành công! IP mới: $ip (Proxy: $proxied)"
else
  echo "[ERROR] Lỗi khi cập nhật IP! Phản hồi từ Cloudflare: $update_response"
  exit 1
fi

Lưu ý:

  • Thay auth_token bằng API Token đã tạo.
  • Lấy ZONE_IDRECORD_ID đã lấy được theo hướng dẫn trên

Bước 3: Test xem Script đã chạy đúng chưa

Thiết lập quyền thực thi cho file update_ip_cloudflare.sh

chmod +X update_ip_cloudflare.sh
  • Nếu chưa có jq, cài đặt bằng:

# Debian/Ubuntu

apt install jq -y 

# CentOS

yum install jq -y 

Gõ lệnh sau để chạy thử

bash /www/root/update_ip_cloudflare.sh

Sửa đường dẫn /www/root/ cho phù hợp

Như hình là đã Thành Công rồi nhé

Bước 4: Thiết Lập Chạy Script Tự Động

Để đảm bảo IP luôn được cập nhật, bạn có thể thiết lập cronjob trên Linux hoặc Task Scheduler trên Windows.

Trên Linux (Sử Dụng Cronjob)

Chạy lệnh sau để mở trình chỉnh sửa cronjob:

crontab -e

Thêm dòng sau để chạy script mỗi 5 phút:

*/5 * * * * /bin/bash /www/root/update_ip_cloudflare.sh

Trên Windows (Sử Dụng Task Scheduler)

  1. Mở Task Scheduler và tạo một tác vụ mới.
  2. Chọn Trigger chạy mỗi 5 phút.
  3. Trong phần Action, chọn Start a program và nhập đường dẫn tới script Python.

Trên aapanel cũng sử dụng Cron job

  • Các bạn cấu hình như hình trên là chạy đúng

3. Kiểm Tra Và Khắc Phục Sự Cố

Kiểm Tra Lịch Sử Cập Nhật DNS

Bạn có thể kiểm tra lịch sử cập nhật IP trong Cloudflare bằng cách:

  • Truy cập Cloudflare Dashboard.
  • Chọn DomainDNS.
  • Xem bản ghi A của domain có được cập nhật đúng IP hay không.

Lỗi Thường Gặp Và Cách Khắc Phục

  • Lỗi Unauthorized (403): Kiểm tra lại API Token có quyền chỉnh sửa DNS không.
  • IP không cập nhật: Xác nhận script chạy đúng bằng cách chạy thủ công.
  • Sai Record ID: Kiểm tra lại ID của bản ghi DNS bạn muốn cập nhật.

4. Kết Luận

Cập nhật IP động cho tên miền qua Cloudflare là một giải pháp hiệu quả để đảm bảo kết nối ổn định với homelab tại nhà. Chỉ cần một lần thiết lập, bạn có thể yên tâm truy cập từ xa mà không lo IP thay đổi. Nếu bạn gặp bất kỳ vấn đề nào, hãy để lại bình luận để được hỗ trợ!

Hy vọng bài viết này hữu ích. Nếu bạn thấy hay, đừng quên chia sẻ để giúp nhiều người khác biết đến giải pháp này nhé!

Categorized in:

Quản Trị Mạng,