Hướng dẫn thực hành · MikroTik
Trong trang này
Cloudflare WARP: cài sau mạng nền
WARP trong dự án dùng WireGuard và định tuyến IPv4 chọn lọc trên RouterOS 7. Đây là tích hợp cộng đồng, không phải ứng dụng Cloudflare One Client chính thức chạy trên MikroTik. Không dùng trên RouterOS 6.
1. Điều kiện và quyết định có cần cài
- Mạng nền từ generator đã chạy; có danh sách interface
LANvới BridgeLAN và các VLAN cần thiết. Firewall nhận established/related, NAT và multi-WAN đã qua test. - Có macOS, Python 3; bản tạo tài khoản thường cần Homebrew và
wgcf. Nếu chỉ có Windows/Linux, tạo/import từ profile bằng Python theo CLI bên dưới rồi chuyển file qua WinBox; chức năng Clipboard trong launcher dành cho macOS. - WARP mặc định chọn Telegram, Medium và BBC theo các IP/domain được liệt kê. Không tự đưa Zalo, toàn Internet hoặc mạng LAN qua tunnel.
- Nếu bot gửi trực tiếp được và không cần định tuyến chọn lọc, bỏ qua WARP sẽ giảm phụ thuộc. WARP không làm public IPv4 cho port-forward, không cộng băng thông một kết nối và không thay một WAN dự phòng.
2. Tạo WARP thường ngay trên web
Mở Tạo WARP. Chọn dịch vụ cần đi qua tunnel; có thể thêm domain hoặc IPv4/CIDR, mỗi dòng một đích. Tên address list trong RouterOS là WARP_LIST. Không nhập mạng LAN, private IP, IP endpoint hay các probe giám sát; bộ tạo chặn các IP/CIDR trùng này.
Đọc điều khoản Cloudflare, tích đồng ý rồi bấm Tạo WARP mới. Trình duyệt dùng Web Crypto X25519 để tạo keypair, chỉ gửi public key qua API cùng domain tới Cloudflare. Private key không gửi lên server và không lưu localStorage. Worker không lưu account token/response vào database hoặc log payload. Giới hạn 2 lượt/phút/IP tại điểm xử lý Cloudflare; đây là chống bấm lặp cơ bản, không phải quota toàn cầu tuyệt đối.
Khi có profile hợp lệ, phần xem trước sinh lệnh và mở nút Copy cấu hình/Tải .rsc. Đổi dịch vụ hoặc thêm domain sẽ dùng lại tài khoản vừa tạo. Tải/copy trước khi đóng trang; tải lại trang làm mất private key trong bộ nhớ. Không có chức năng khôi phục key từ server. Cấu hình chứa key nên phải lưu riêng tư.
Nếu trình duyệt không hỗ trợ X25519 hoặc API từ chối/timeout, trang báo lỗi, không tự tạo profile giả và không tự gửi lại yêu cầu. Với timeout, đăng ký có thể đã diễn ra nhưng chưa nhận response. Dùng command trên macOS bên dưới nếu cần. API client WARP không phải API public có cam kết ổn định, nên khả năng đăng ký có thể thay đổi.
3. Tải bộ công cụ dự phòng
Tải bộ WARP không chứa khóa riêng, giải nén vào thư mục riêng tư. Đọc README.md trong gói. Các file đi cùng nhau: warp_config.py, hai launcher .command, script gỡ và README.
Không tải profile do người lạ chia sẻ. Các file *.conf, .rsc đã sinh và Clipboard chứa private key; không đẩy lên Git hoặc gửi nhóm chat.
4. Cách A: tạo tài khoản WARP thường trên macOS
Mở Tao_Acc_WARP_Mikrotik.command. Nếu macOS chưa cho chạy, mở Terminal, gõ bash rồi kéo đúng file .command vào cửa sổ và Enter; kiểm tra đường dẫn trước khi chạy. Không dùng lệnh bỏ bảo mật toàn máy.
Script kiểm tra wgcf, dùng Homebrew cài nếu chưa có; wgcf register --accept-tos đồng ý điều khoản Cloudflare và đăng ký tài khoản mới mỗi lần chạy. Đọc điều khoản trước; không chạy liên tục để thử. Sau đó nó tạo profile trong thư mục tạm, kiểm tra key/address/endpoint, lưu mikrotik_warp_generated.rsc quyền 0600 và copy vào Clipboard.
Nếu đăng ký lỗi, dừng và kiểm tra thông báo của wgcf/network. Không tạo endpoint hoặc public key phỏng đoán. Việc có file RSC chỉ xác nhận sinh file, chưa xác nhận Cloudflare chấp nhận tunnel. wgcf upstream.
5. Cách B: chuyển profile WireGuard có sẵn
Nếu đã có profile hợp lệ của chính bạn, dùng Tao_Cau_Hinh_WARP_Tu_Profile.command, nhập đường dẫn đầy đủ tới .conf. Công cụ xử lý profile tại máy, không nhận JWT và không đăng ký thiết bị Zero Trust. Nó phân giải hostname endpoint qua DNS khi cần.
Trên macOS có thể dùng CLI trong thư mục đã giải nén:
python3 warp_config.py /duong/dan/profile.conf /duong/dan/mikrotik_warp_generated.rsc
Profile phải có [Interface] PrivateKey, IPv4 /32, [Peer] PublicKey, Endpoint host:port. Công cụ từ chối khóa sai độ dài/base64, địa chỉ sai và port ngoài 1–65535. Khi dùng nhiều peer/profile kiểu khác, cần chuyển về profile WARP một peer đúng chuẩn trước, không tự chọn đại endpoint.
Với Zero Trust, theo lựa chọn của chủ dự án, chỉ sử dụng Tao_Acc_WARP_Zero_Trust_Mikrotik.command trên máy anh để tạo tài khoản/profile. File command này không đưa lên web, không commit và không nằm trong ZIP public; vẫn là helper thử nghiệm dùng API đăng ký client, chưa xác nhận end-to-end. Chạy từ thư mục Cloudflare WARP trên máy, đọc hướng dẫn đăng nhập của helper, giữ JWT/profile/RSC riêng tư. Sau khi có profile, dùng bộ chuyển profile ở trên để nhận cấu hình routing đã sửa; không nhập lại RSC cũ do helper tạo. Web không nhận JWT Zero Trust.
Cloudflare One Client có MASQUE và WireGuard, nhưng chuyển profile WireGuard không đồng nghĩa có đầy đủ device posture, DNS proxy hay chính sách của client chính thức. Tài khoản phải được tổ chức cho phép dùng WireGuard và enrollment phù hợp.
Nguồn: Cloudflare One Client và thiết lập tunnel.
6. Nạp cấu hình trên router
- Backup router, giữ phiên MAC WinBox tại chỗ. Đọc file sinh ra để biết những object sẽ được thay:
wg-warp,to-warp,WARP_LIST, rule comment WARP và watchdog WARP. - Xác nhận không có cấu hình khác dùng những tên này. Cài lại sẽ thay cấu hình WARP cũ, không phải tạo tunnel thứ hai.
- Mở Files trong WinBox, tải
mikrotik_warp_generated.rsclên router. Kiểm tra đúng tên file, không đăng ảnh chứa Source/private key. - Với file tải từ web, tên mặc định là
mikrotik-warp.rsc; đổi tên trong lệnh bên dưới cho đúng file đã tải. Mở New Terminal và import:
/import file-name=mikrotik_warp_generated.rsc
- Đọc output. Nếu lỗi, dừng và kiểm tra phần đã chạy; khối không tự hoàn tác. Nếu không lỗi, thực hiện mục 7 rồi xóa file nhập khỏi Files; giữ bản backup riêng trên máy nếu cần.
Không dán lại cấu hình nền generator sau WARP; generator dành cho router trắng. Thay đổi LAN hoặc thêm VLAN sau này phải giữ danh sách LAN đúng.
7. Kiểm tra trước khi sử dụng
Trong WireGuard > Peers, xem peer của wg-warp: Last Handshake phải mới, Rx/Tx tăng khi thử traffic. Không chia sẻ private key. Đọc thêm:
/interface wireguard peers print
/ip route print where routing-table=to-warp
/ip firewall mangle print stats where comment~"WARP"
/tool netwatch print detail where comment="WARP-Watchdog"
/ping 1.1.1.2 count=5
1.1.1.2/32 là canary được ép qua tunnel trong main, không phải DNS mặc định hay probe của PPPoE Monitor. Route blackhole dự phòng ngăn canary đi nhầm WAN khi interface mất; Netwatch dùng kết quả để bật/tắt rule đánh dấu WARP.
Sau cài, đóng/mở lại ứng dụng Telegram/trang cần test để tạo kết nối mới. Các kết nối đã FastTrack hoặc mang mark PCC từ trước không tự đổi tunnel. Counter WARP phải tăng; website thường vẫn dùng WAN. Nếu ping đạt nhưng HTTPS treo, kiểm tra MTU/MSS, endpoint, DNS và chính sách Cloudflare; ping một IP không chứng minh mọi dịch vụ hoạt động.
8. Khi chạy chung với PCC, cảnh báo và QoS
- Rule WARP được đặt trước PCC, chỉ bắt kết nối mới từ
LANhoặc router và cònconnection-mark=no-mark. Kết nối đã được đánh dấu đường WAN trả về được giữ nguyên. wg-warpkhông thêm vào danh sách WAN: danh sách này còn được generator dùng cho quyền WinBox. Firewall chỉ mở forward từ LAN ra tunnel; traffic ngược cần established/related của cấu hình nền.- FastTrack giữ
connection-mark=no-mark, loại kết nối WARP/PCC đã đánh dấu. Nếu QoS đã tắt FastTrack thì WARP không tạo lại rule đó. - Packet mark download theo
in-interface=pppoe-outNkhông bắt gói bên trong tunnel từwg-warp. Vì vậy FQ-CoDel download theo WAN chưa được đảm bảo cho WARP. PCQ LAN chính cần đo riêng; không cam kết tốc độ/CPU khi bật tất cả. - Telegram Fetch do router phát được chọn qua chain output. Zalo mặc định đi WAN. Muốn thêm Zalo phải xác định hostname API thực tế và kiểm tra dịch vụ; không đưa IP endpoint/probe/mạng private vào WARP_LIST.
- Watchdog đo mỗi 10 giây, timeout 2 giây; lúc khởi động còn có startup delay của Netwatch theo phiên bản. Khi canary down, bỏ mark WARP, đóng các kết nối WARP cũ để phiên mới đi WAN theo cấu hình nền. Nếu ISP vẫn chặn Telegram, fallback WAN không bảo đảm gửi được cảnh báo.
- Khi canary up, rule được bật lại. Phiên đang đi WAN vẫn giữ tới khi ứng dụng kết nối lại. Không xóa toàn bộ connection tracking của router để ép chuyển tuyến.
9. Thêm đích và gỡ bỏ
Thêm domain cụ thể nếu thật sự cần:
/ip firewall address-list add list=WARP_LIST address=tenmien.com
Domain không bao gồm mọi subdomain. CDN dùng IP chung có thể làm dịch vụ khác cùng IP đi tunnel; client dùng DoH có thể phân giải IP khác router. Kiểm tra counter/địa chỉ đích thực tế, không chỉ tên website.
Định tuyến toàn bộ một VLAN qua WARP
Nếu muốn toàn bộ lưu lượng Internet của một VLAN đi qua WARP thay vì chỉ các domain chọn lọc, thêm rule Mangle sau (thay VLAN_10 bằng tên interface VLAN của bạn):
/ip firewall mangle
add chain=prerouting in-interface=VLAN_10 dst-address-type=!local connection-state=new connection-mark=no-mark action=mark-connection new-connection-mark=warp-conn passthrough=yes place-before=[find where comment="WARP LAN Mark-Conn"] comment="WARP VLAN 10 Mark-Conn"
- Tự động failover: Tận dụng rule
WARP LAN Mark-Routesẵn có; khi Watchdog phát hiện WARP down sẽ tự động tạm tắt rule này để VLAN quay về dùng WAN thường và tự bật lại khi tunnel phục hồi. - Không kẹt mạng nội bộ: Điều kiện
dst-address-type=!localbảo đảm thiết bị trong VLAN vẫn truy vấn được DNS và gateway nội bộ của router.
Khi gỡ, có thể import file mikrotik_warp_remove.rsc trong gói đã tải hoặc copy khối lệnh sau chạy trong Terminal để gỡ sạch toàn bộ cấu hình WARP (dừng watchdog trước, không gỡ điều kiện FastTrack connection-mark=no-mark mà PCC cần):
{
:do { /tool netwatch remove [find comment="WARP-Watchdog"] } on-error={}
:do { /queue tree remove [find name="WARP Download"] } on-error={}
:do { /queue type remove [find name="warp-fq-codel"] } on-error={}
:do { /ip firewall connection remove [find where connection-mark=warp-conn] } on-error={}
:do { /ip firewall filter remove [find comment~"WARP"] } on-error={}
:do { /interface list member remove [find interface=wg-warp] } on-error={}
:do { /ip firewall mangle remove [find comment~"WARP"] } on-error={}
:do { /ip firewall nat remove [find comment~"WARP"] } on-error={}
:do { /ip route remove [find comment~"WARP"] } on-error={}
:do { /ip route remove [find routing-table=to-warp] } on-error={}
:do { /routing table remove [find name=to-warp] } on-error={}
:do {
:local alItems [/ip firewall address-list find where list=WARP_LIST]
:while ([:len $alItems] > 0) do={
:foreach i in=$alItems do={
:do { /ip firewall address-list remove $i } on-error={}
}
:set alItems [/ip firewall address-list find where list=WARP_LIST]
}
} on-error={}
:do { /ip address remove [find interface=wg-warp] } on-error={}
:do { /interface wireguard peers remove [find interface=wg-warp] } on-error={}
:do { /interface wireguard remove [find name=wg-warp] } on-error={}
:do { /tool netwatch remove [find comment~"WARP"] } on-error={}
# Keep connection-mark=no-mark on FastTrack: PCC also depends on this guard.
:log info "=== CLOUDFLARE WARP CONFIGURATION REMOVED SUCCESSFULLY ==="
}
Sau gỡ: kiểm tra không còn wg-warp, route to-warp, watchdog WARP; web thường và từng WAN vẫn chạy. Bài test mất tunnel và rollback chi tiết nằm trong kiểm thử hệ thống.
10. QoS download WARP sau giải mã
Trang tạo WARP và hai command local có tùy chọn Giới hạn download WARP (Mbps). 0 tắt; số nguyên 1–10000 bật queue FQ-CoDel tên WARP Download. Mức nhập là mức giới hạn thực, không tự nhân 95%. Đo tốc độ WARP ổn định trước rồi chọn thấp hơn khoảng 5–10%; không lấy tổng tốc độ 4 WAN làm tốc độ một tunnel.
Ví dụ chuyển profile sẵn có với giới hạn 80 Mbps:
python3 warp_config.py /duong/dan/profile.conf /duong/dan/mikrotik_warp_generated.rsc --download-mbps 80
Bộ sinh đặt packet mark warp-download ở forward, chỉ gói từ wg-warp ra interface list LAN; queue parent global xử lý tải xuống đã giải mã. Không đưa tunnel vào WAN list, không sửa mark download-wanN, không bật/tắt FastTrack toàn router. Traffic đã mang connection-mark WARP phải được loại khỏi FastTrack như cấu hình nền yêu cầu.
Đây là giới hạn download riêng cho tunnel, không phải ngân sách tổng chung WARP + WAN thường. Queue WARP không biết tunnel đang chạy trên WAN vật lý nào; không tự đổi mức khi failover sang ISP chậm hơn. Sau đổi ISP, đo lại và chỉnh mức phù hợp đường chậm nhất nếu cần. Upload vẫn do cấu hình WAN hiện có xử lý lớp ngoài; không có giới hạn upload WARP riêng. PCQ target LAN chính vẫn có thể giới hạn thêm, vì vậy kết quả đo chịu cả hai lớp queue. VLAN chỉ được queue WARP bắt khi thuộc LAN list.
Các tên WARP Download, warp-fq-codel, comment WARP QoS thuộc bộ cài. Không tái dùng queue type này trong queue tùy chỉnh: cài lại/gỡ WARP sẽ xóa nó. Cài lại với mức 0 cũng gỡ queue WARP cũ. Nếu muốn chỉnh mức trên router đã cài queue, không cần tạo tài khoản lại:
/queue tree set [find where name="WARP Download"] max-limit=80M
Chỉ chạy sau khi xác nhận queue tồn tại; thay 80M bằng mức đã đo. Nếu trước đó chưa bật QoS, tạo lại RSC từ profile giữ riêng hoặc dùng cấu hình còn trong phiên web; đọc phạm vi cleanup trước import. Không đăng ký tài khoản mới chỉ để đổi mức queue.
Xem bài test QoS và chẩn đoán counter. Nền tảng queue/packet mark theo MikroTik Queues. Chưa có phép đo router thật trong bản phát hành này.