Giới thiệu về Cloudflare
Cloudflare là một dịch vụ trung gian (proxy) toàn cầu cung cấp giải pháp bảo mật và tăng tốc cho các website, ứng dụng và API thông qua mạng lưới CDN (Content Delivery Network) mạnh mẽ. Cloudflare giúp bảo vệ chống lại các cuộc tấn công DDoS, cải thiện thời gian tải trang, tăng cường bảo mật SSL/TLS và giảm bớt tải cho máy chủ gốc bằng cách lưu nội dung tĩnh gần với người dùng cuối.
DDNS với Cloudflare
Dynamic DNS (DDNS) là một phương pháp tự động cập nhật địa chỉ IP động vào bản ghi DNS của domain khi IP thay đổi, rất hữu ích khi sử dụng các kết nối Internet không có IP cố định. Cloudflare hỗ trợ tích hợp DDNS dễ dàng thông qua API hoặc các phần mềm chuyên dụng, cho phép người dùng cập nhật bản ghi DNS của mình theo thời gian thực, giúp đảm bảo dịch vụ luôn sẵn sàng và ổn định dù IP có thay đổi.
Trong bài viết trước, POWERNET đã hướng dẫn bạn cấu hình Proxy trên Mikrotik và cấu hình DDNS trên Mikrotik, bài viết hôm nay POWERNET sẽ hướng dẫn bạn cấu hình dịch vụ DDNS (Dynamic DNS) với Cloudflare dể bạn có thể dễ dàng truy cập vào Mikrotik từ xa, không cần phải nhớ IP Public của từng cụm Proxy.
Đối với những bạn chỉ có nhu cầu sử dụng cá nhân (dùng dưới 3 DDNS) hoặc không có tên miền (domain) riêng thì không cần dùng đến Cloudflare. Tuy nhiên nếu bạn nào xây dựng hệ thống Proxy Dân cư để cung cấp cho khách hàng, có nhiều cụm Proxy khác nhau, muốn làm thương hiệu cho dịch vụ Proxy và đã có tên miền riêng thì nên sử dụng Cloudflare để làm DDNS cho các cụm Proxy Dân cư
Bước 1: Đăng ký tên miền và tạo tài khoản Cloudflare
- Bạn có thể truy cập vào PowerNet và đăng ký cho mình 1 tên miền, tên miền thì bạn có thể dùng bất kỳ tên miền nào cũng được, rẻ càng tốt vì chỉ dùng để làm DDNS thôi
- Sau khi đăng ký tên miền hoàn tất, bạn thực hiện tạo tài khoản Cloudflare và trỏ nameserver của tên miền về nameserver của Cloudflare.
Bước 2: Lấy thông tin API Key
- Để lấy API Key bạn truy cập vào tên miền cần cấu hình DDNS > Get your API token.
- Tại mục API key bạn tìm đến mục Global API Key > View > Nhập mật khẩu tài khoản Cloudflare và copy thông tin API Key hiển thị trên màn hình
Bước 3: Lấy thông tin Zone ID
- Để lấy API Key bạn truy cập vào tên miền cần cấu hình DDNS > API > Zone ID
Bước 4: Lấy thông tin Record ID
- Trước tiên bạn cần tạo bản ghi DNS để cấu hình DDNS. Ví dụ mình có domain là powernet.mobi, mình sẽ tạo 1 subdomain là proxydancu.powernet.mobi làm DDNS
- Để tạo bản ghi DNS, bạn phải truy cập vào Domain muốn tạo > DNS > Add Record
- Mục Type bản để là A
- Mục Name bạn để tên dns bạn muốn đặt, ví dụ ở đây mình tạo bản ghi là proxydancu
- Mục IPv4 address bạn đặt IP nào cũng được
- Mục Proxy Status bạn tắt chế độ Proxy của Cloudflare
- Cuối cùng nhấn Save để tạo bản ghi DNS
- Sau khi tạo xong Record DNS, bạn chạy câu lệnh sau để lấy ra giá trị Record ID của Record DNS bạn vừa tạo. Trong đó:
1 2 3 | curl -X GET "https://api.cloudflare.com/client/v4/zones/<Zone_ID>/dns_records?name=<Record_DNS>" \ -H "X-Auth-Email: <Email_Dang_Ky_Cloudflare>" \ -H "X-Auth-Key: <Global_API_Key>" |
- Zone_ID: Bạn lấy từ Bước 3
- Record_DNS: Chính là bản ghi DNS bạn vừa tạo khi nãy
- Email_Dang_Ky_Cloudflare: Bạn đăng ký tài khoản Cloudflare với Email nào thì nhập Email vào
- Global_API_Key: Bạn lấy ở Bước 1
- Sau khi chạy xong, bạn sẽ lấy được Record ID có dạng như sau
1 | {"result":[{"id":"b6ac16ca81c8ba9320f339fa4eedf4f4","name":"proxydancu.powernet.mobi","type":"A","content":"1.1.1.1","proxiable":false,"proxied":false,"ttl":1,"settings":{},"meta":{},"comment":null,"tags":[],"created_on":"2025-06-11T08:59:13.159026Z","modified_on":"2025-06-11T08:59:13.159026Z"}],"success":true,"errors":[],"messages":[],"result_info":{"page":1,"per_page":100,"count":1,"total_count":1,"total_pages":1}} |
Bước 5: Cấu hình DDNS Cloudflare trên Mikrotik
- Bạn vào mục System > Scripts > Nhấn vào dấu “+” để tạo Scripts mới
- Tại mục Name bạn đặt tên là Cloudflare, chọn vào mục Don’t Require Permissions rồi Paste đoạn mã sau vào. Sau đó nhấn Apply > Run Scripts
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 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | # Update Cloudflare DNS IPv4 address script # RouterOS version >= 6.44 is required # ** CONFIGURE SECTION ** # WAN IPv4 interface :local wanif "pppoe-out1" # Cloudflare section :local email "" :local key "" :local zoneId "" :local hostId "" # Domain hostname :local hostName "" # ** END OF CONFIGURE SECTION ** # Get WAN interface IPv4 address :global ip4wan :local ip4new [/ip address get [/ip address find interface=$wanif] address] :set ip4new [:pick [:tostr $ip4new] 0 [:find [:tostr $ip4new] "/"]] :if ([:len $ip4new] = 0) do={ :log error "[Cloudflare DDNS] Could not get IPv4 for interface $wanif" :error "[Cloudflare DDNS] Could not get IPv4 for interface $wanif" } :if ($ip4new != $ip4wan) do={ :log info "[Cloudflare DDNS] WAN IPv4 address for interface $wanif has been changed to $ip4new." :local url "https://api.cloudflare.com/client/v4/zones/$zoneId/dns_records/$hostId" :local header "X-Auth-Email: $email, X-Auth-Key: $key, content-type: application/json" :local data "{\"type\":\"A\",\"name\":\"$hostName\",\"content\":\"$ip4new\",\"ttl\":120}" # :log info "[Cloudflare DDNS] URL: $url" # :log info "[Cloudflare DDNS] HEADER: $header" # :log info "[Cloudflare DDNS] DATA: $data" :log info "[Cloudflare DDNS] Updating host $hostName address." :local jsonAnswer [/tool fetch mode=https http-method=put http-header-field=$header http-data=$data url=$url as-value output=user] :if ([:len $jsonAnswer] > 0) do={ /system script run "JParseFunctions"; global JSONLoads; global JSONUnload :local result ([$JSONLoads ($jsonAnswer->"data")]->"success") $JSONUnload :if ($result = true) do={ :log info "[Cloudflare DDNS] Successfully updated IPv4 address to $ip4new." :set ip4wan $ip4new } else={ :log error "[Cloudflare DDNS] Error while updating IPv4 address." } } else={ :log error "[Cloudflare DDNS] No answer from Cloudflare API." } } /system scheduler add name=Cloudflare interval=1m on-event="/system script Cloudflare" start-time=startup |

Scripts này sẽ lấy IP Public của pppoe-out1 và cập nhật lên Record DNS bạn đã tạo ở Bước 4
Bạn thay giá trị như :local email – :local key – :local zoneId – :local hostId – :local hostName thành các thông tin bạn đã tạo ở Bước 1,2,3,4. Trong đó
- :local email: Là tài khoản Email dùng để đăng ký Cloudflare
- :local key: Chính là Global API Key bạn lấy ở Bước 2
- :local zoneId: Chính là Zone ID bạn lấy ở Bước 3
- :local hostid: Chính là Record ID bạn lấy ở Bước 4
- :local hostname: Chính là Record DNS bạn đã tạo ở Bước 4
Bước 6: Tạo Scheduler để tự động chạy Script cập nhật Cloudflare
Sau khi cấu hình xong DDNS với Cloudflare, bạn cần tạo 1 Schedule định kỳ mỗi phút sẽ gọi thực thi Script cập nhật DDNS Cloudflare, mục đích là kiểm tra và nếu IP Public của pppoe-out1 có thay đổi thì sẽ được cập nhật kịp thời lên Cloudflare
Bạn sử dụng câu lệnh sau (chạy trên Terminal)
1 | /system scheduler add name=new_scheduler interval=1m on-event=Cloudflare |
Sau khi chạy xong lệnh tạo Scheduler bạn truy cập vào mục System > Scheduler để kiểm tra xem đã có Scheduler hay chưa