Việc quản lý các bản ghi DNS cho các máy chủ có IP động là một thách thức phổ biến đối với nhiều quản trị viên hệ thống. Một giải pháp hiệu quả là sử dụng Cloudflare kết hợp với một script tự động để cập nhật IP của máy chủ mỗi khi nó thay đổi. Trong bài viết này, chúng ta sẽ hướng dẫn cách thiết lập và tự động hóa quá trình cập nhật DNS records của Cloudflare khi IP của máy chủ thay đổi.

Bước 1: Tạo Script Cập Nhật DNS Records

Đầu tiên, bạn cần tạo một script bash để tự động cập nhật bản ghi DNS của Cloudflare. Dưới đây là một ví dụ script mà bạn có thể sử dụng:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/bin/bash

# Cloudflare API thông tin
email="your-cloudflare-email@example.com"
api_key="your-global-api-key"
zone_id="your-zone-id"
record_name="subdomain.example.com"

# Lấy IP hiện tại của máy chủ
current_ip=$(curl -s http://ipv4.icanhazip.com)

# Lấy thông tin DNS record từ Cloudflare
dns_record=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones/${zone_id}/dns_records?name=${record_name}" \
-H "X-Auth-Email: ${email}" \
-H "X-Auth-Key: ${api_key}" \
-H "Content-Type: application/json")

# Lấy IP hiện tại từ DNS record trên Cloudflare
cloudflare_ip=$(echo "$dns_record" | jq -r '.result[0].content')
record_id=$(echo "$dns_record" | jq -r '.result[0].id')

# Kiểm tra xem IP có thay đổi hay không
if [ "$current_ip" = "$cloudflare_ip" ]; then
echo "IP hasn't changed. Exiting."
exit 0
fi

# Cập nhật DNS record với IP mới
update=$(curl -s -X PUT "https://api.cloudflare.com/client/v4/zones/${zone_id}/dns_records/${record_id}" \
-H "X-Auth-Email: ${email}" \
-H "X-Auth-Key: ${api_key}" \
-H "Content-Type: application/json" \
--data "{\"type\":\"A\",\"name\":\"${record_name}\",\"content\":\"${current_ip}\",\"ttl\":120,\"proxied\":false}")

# Kiểm tra kết quả cập nhật
if echo "$update" | grep -q '"success":true'; then
echo "DNS record updated successfully."
else
echo "Failed to update DNS record."
echo $update
fi

Chỉnh sửa thông tin trong script

Trước khi sử dụng script, bạn cần thay đổi một số thông tin sau để phù hợp với tài khoản Cloudflare và tên miền của bạn:

  • auth_email: Địa chỉ email dùng để đăng nhập vào Cloudflare.
  • auth_method: Phương thức xác thực, mặc định là global.
  • auth_key: Global API Key hoặc API Token của bạn. Bạn có thể lấy Global API Key từ trang quản lý tài khoản Cloudflare của bạn.
  • zone_identifier: Mã định danh của vùng (zone) mà bạn muốn cập nhật bản ghi. Bạn có thể tìm thấy mã này trong tab “Overview” của trang quản lý tên miền trong Cloudflare.
  • record_name: Tên bản ghi DNS mà bạn muốn cập nhật, ví dụ thuanqt.com.
  • ttl: Thời gian sống của bản ghi DNS, mặc định là 3600 giây.
  • proxy: Thiết lập chế độ proxy của Cloudflare, có thể là true hoặc false.

Sau khi đã chỉnh sửa các thông tin trên, lưu script vào một file, ví dụ như /path/to/ddns_updater.sh.

Bước 2: Thiết Lập Cron Job để Tự Động Chạy Script

Trước khi crontab phải cấp quyền thực thi cho script, sử dụng lệnh chmod để cấp quyền thực thi cho script:

1
chmod +x /path/to/ddns_updater.sh

Để script này chạy tự động mỗi 2 phút, bạn cần thiết lập cron job. Mở crontab để chỉnh sửa:

1
crontab -e

Thêm dòng sau vào crontab để chạy script mỗi 2 phút và lưu log vào /path/to/ddns_updater.log:

1
*/2 * * * * /path/to/ddns_updater.sh >> /path/to/ddns_updater.log 2>&1

Bước 3: Làm Rỗng File Log Mỗi 7 Ngày

Để làm rỗng file log mỗi 7 ngày (vào lúc nửa đêm Chủ Nhật), thêm dòng sau vào crontab:

1
0 0 * * 0 > /path/to/ddns_updater.log

Tổng Hợp crontab

File crontab của bạn sẽ trông như sau:

1
2
*/2 * * * * /path/to/ddns_updater.sh >> /path/to/ddns_updater.log 2>&1
0 0 * * 0 > /path/to/ddns_updater.log

Kiểm Tra Cron Job

Để đảm bảo cron job hoạt động chính xác, bạn có thể kiểm tra log tại /path/to/ddns_updater.log sau vài phút.

Với cách thiết lập này, script sẽ được chạy mỗi 2 phút để cập nhật IP và làm rỗng file log mỗi tuần một lần. Điều này đảm bảo rằng các bản ghi DNS của bạn luôn được cập nhật một cách tự động và chính xác, giúp máy chủ của bạn duy trì kết nối mà không bị gián đoạn do thay đổi IP động.

Hy vọng bài viết này sẽ giúp bạn dễ dàng quản lý các bản ghi DNS cho các máy chủ có IP động bằng cách sử dụng Cloudflare và cron job. Chúc bạn thành công!