Đối với trường hợp VPS nằm cùng mạng có thể tham khảo tại bài viết tạo DDNS với n8n và Cloudflare. Tuy nhiên, nếu mạng công ty không có VPS thì làm như thế nào để check sự thay đổi của DDNS? Tình huống mạng dùng Draytek Vigor 2925 và DDNS của dynu.com (không cần renew thường xuyên).

Cron – kiểm tra định kỳ

Node: Cron

Gợi ý:

  • 5 phút / 10 phút là hợp lý
  • DDNS không cần check quá nhanh

🔹 1. Query DNS

Cách ổn định nhất: dùng DNS over HTTPS

Node: HTTP Request

  • Method: GET
  • URL (Google DNS):
https://dns.google/resolve
  • Query Params:
KeyValue
nameddns.freeddns.org
typeA

hoặc dùng

GET https://dns.google/resolve?name=ddns.freeddns.org&type=A

📥 Response mẫu

{
  "Answer": [
    {
      "name": "ddns.freeddns.org.",
      "type": 1,
      "TTL": 60,
      "data": "203.113.xxx.xxx"
    }
  ]
}

🔹 2. Lấy IP

Node: Set

FieldValue
ip{{ $json.Answer[0].data }}

hoặc dùng

ip = {{ $json.Answer[0].data }}

🔹 3. So sánh & lưu IP (Code node)

Code Node:

const staticData = $getWorkflowStaticData('global');

const currentIp = $json.ip;
const oldIp = staticData.ddns_ip ?? null;

let changed = false;

if (oldIp === null) {
  // lần đầu chạy
  staticData.ddns_ip = currentIp;
} else if (currentIp !== oldIp) {
  changed = true;
  staticData.ddns_ip = currentIp;
}

return [{
  json: {
    changed,
    currentIp,
    oldIp
  }
}];

🔹 4. IF

Condition:

{{ $json.changed === true }}

🔹 5. Gửi thông báo

Message:

🔔 DNS IP thay đổi

Host: ddns.freeddns.org
IP cũ: {{ $json.oldIp }}
IP mới: {{ $json.currentIp }}
Thời gian: {{ $now }}