RouterOS v7: định tuyến client qua nhiều WAN bằng Routing Rules
- Mục tiêu của cấu hình
- Mô hình interface trong cấu hình thực tế
- Routing table là gì?
- Default route cho từng WAN
- Routing Rules trong cấu hình thực tế
- Vì sao phải đặt rule mạng nội bộ trước?
- Thêm một client mới
- Kiểm tra rule và route
- Kiểm tra khi client không truy cập được LAN
- Lưu ý về IPv6
- Rollback một rule
- Tóm tắt
- Hình ảnh minh họa WinBox
- Nguồn tham khảo
- Footnotes
Bài viết sử dụng một cấu hình RouterOS 7.21.5 thực tế để minh họa cách định tuyến từng client qua nhiều WAN. Các IP và tên interface được giữ nguyên trong ví dụ để dễ đối chiếu với giao diện WinBox.
Không nên copy toàn bộ cấu hình vào router khác. Hãy kiểm tra tên interface, gateway, routing table và dải IP trước khi áp dụng.
Mục tiêu của cấu hình
Mục tiêu là cho phép chọn WAN theo từng client trong mạng LAN:
- Client
10.0.0.10đi quaVNPT1. - Client
10.0.0.11đi quaVT2. - Client
10.0.0.12sử dụng bảngmain. - Client
10.0.0.15đi quaVNPT1. - Client
10.0.1.25đi quaVNPT1.
Mô hình này thường được gọi là policy routing hoặc source-based routing: router quyết định đường đi dựa trên địa chỉ nguồn thay vì chỉ dùng default route chung.1

Mô hình interface trong cấu hình thực tế
Các interface liên quan:
| Interface | Vai trò |
|---|---|
bridgeLAN | Mạng LAN chính |
LAN2 | Cổng vật lý chứa các macvlan cho PPPoE |
LAN3 | Cổng vật lý chứa VLAN 597-VNPT-LAN3 |
597-VNPT-LAN3-MACVLAN1 | MACVLAN dùng cho PPPoE VNPT1 |
LAN2-MACVLAN1 | MACVLAN dùng cho PPPoE VT2 |
LAN2-MACVLAN2 | MACVLAN dùng cho PPPoE VT1 |
VNPT1 | PPPoE client của VNPT |
VT2 | PPPoE client của Viettel/đường VT2 |
VT1 | PPPoE client chính còn lại |
Các PPPoE client trong export:
/interface pppoe-clientadd add-default-route=yes default-route-distance=3 \ interface=597-VNPT-LAN3-MACVLAN1 name=VNPT1add add-default-route=yes default-route-distance=2 \ interface=LAN2-MACVLAN1 name=VT2add add-default-route=yes interface=LAN2-MACVLAN2 name=VT1
Tên user PPPoE đã được bỏ khỏi tutorial. Không đưa username, password hoặc secret vào bài công khai.
Routing table là gì?
RouterOS v7 cho phép tạo nhiều routing table. Mỗi table có thể chứa default route tới một WAN khác nhau.1
Trong cấu hình thực tế có hai table policy routing đang bật:
/routing tableadd disabled=no fib name=VNPT1add disabled=no fib name=VT2
Tham số fib cho phép table được dùng để tra cứu và chuyển tiếp gói tin. Các table chỉ có tác dụng khi chúng có route phù hợp.

Default route cho từng WAN
Bảng VNPT1 có default route đi qua PPPoE interface VNPT1:
/ip routeadd disabled=no dst-address=0.0.0.0/0 \ gateway=VNPT1 routing-table=VNPT1
Bảng VT2 có default route đi qua PPPoE interface VT2:
/ip routeadd disabled=no dst-address=0.0.0.0/0 \ gateway=VT2 routing-table=VT2
Điều này có nghĩa:
- Gói được tra cứu trong table
VNPT1sẽ dùng WANVNPT1. - Gói được tra cứu trong table
VT2sẽ dùng WANVT2. - Gói được tra cứu trong table
mainsẽ dùng các route chính của router.
Kiểm tra route:
/ip route print detail where routing-table=VNPT1/ip route print detail where routing-table=VT2/ip route print detail where routing-table=main

Routing Rules trong cấu hình thực tế
Các rule nội bộ được đặt trước các rule theo client:
/routing ruleadd action=lookup-only-in-table \ comment="LAN IPv4 -> main" \ dst-address=10.0.0.0/23 table=mainadd action=lookup-only-in-table \ comment="WG IPv4 -> main" \ dst-address=10.0.2.0/24 table=mainadd action=lookup-only-in-table \ comment="VLAN10 IPv4 -> main" \ dst-address=10.0.3.0/24 table=main
Các rule này giữ traffic tới mạng nội bộ ở lại table main, thay vì đẩy traffic nội bộ qua WAN. Đây là phần quan trọng để client vẫn truy cập được Proxmox, OpenHAB, AdGuard Home và các thiết bị LAN.
Sau đó mới đến các rule chọn WAN theo client:
add action=lookup-only-in-table \ comment="Socks5_1 -> VNPT1" \ src-address=10.0.0.10/32 table=VNPT1add action=lookup-only-in-table \ comment="Socks5_2 -> VT2" \ src-address=10.0.0.11/32 table=VT2add action=lookup-only-in-table \ comment="Socks5_3 -> main" \ src-address=10.0.0.12/32 table=mainadd action=lookup-only-in-table \ comment="HTTPS Proxy -> VNPT1" \ src-address=10.0.0.15/32 table=VNPT1add action=lookup-only-in-table \ comment="PC LINUX -> VNPT1" \ src-address=10.0.1.25/32 table=VNPT1
lookup-only-in-table yêu cầu RouterOS chỉ tra cứu trong table được chỉ định. Nếu table không có route phù hợp, gói có thể bị loại thay vì rơi xuống table khác. Đây là khác biệt quan trọng so với lookup.2


src-address=10.0.0.10/32, action lookup-only-in-table, table VNPT1.
src-address=10.0.0.11/32, action lookup-only-in-table, table VT2.Vì sao phải đặt rule mạng nội bộ trước?
Giả sử 10.0.0.10 được định tuyến qua table VNPT1. Khi client này truy cập 10.0.0.4 — máy AdGuard Home — router cần ưu tiên rule:
dst-address=10.0.0.0/23 table=main
Nếu không có rule nội bộ ở trước, request có thể bị tra cứu trong table VNPT1 và đi ra WAN thay vì tới máy LAN.
Thứ tự khái niệm nên là:
1. Mạng nội bộ → main2. Mạng WireGuard/VLAN nội bộ → main3. Client cụ thể → table WAN mong muốn4. Các route còn lại → xử lý theo main/default route
Thêm một client mới
Ví dụ muốn cho client 10.0.0.20 đi qua VNPT1:
/routing ruleadd action=lookup-only-in-table \ comment="New client -> VNPT1" \ src-address=10.0.0.20/32 table=VNPT1
Nếu muốn client đi qua VT2:
/routing ruleadd action=lookup-only-in-table \ comment="New client -> VT2" \ src-address=10.0.0.20/32 table=VT2
Nên dùng /32 cho một host. Nếu muốn áp dụng cho cả subnet, thay bằng CIDR phù hợp, ví dụ 10.0.1.0/24.
Kiểm tra rule và route
Xem toàn bộ rule theo đúng thứ tự:
/routing rule print detail
Xem route trong policy table:
/ip route print detail where routing-table=VNPT1/ip route print detail where routing-table=VT2
Kiểm tra route tới một địa chỉ Internet từ router:
/routing/route/print detail where dst-address=0.0.0.0/0
Từ chính client, kiểm tra IP public bằng trình duyệt hoặc lệnh:
curl -4 https://ifconfig.me
Thực hiện lần lượt trên các client:
10.0.0.10 → IP public của VNPT110.0.0.11 → IP public của VT210.0.0.12 → IP public theo main10.0.0.15 → IP public của VNPT110.0.1.25 → IP public của VNPT1
Kết quả IP public có thể thay đổi theo thời điểm, nên đây chỉ là kiểm tra định tuyến tương đối.
Kiểm tra khi client không truy cập được LAN
Nếu client đi Internet được nhưng không truy cập được 10.0.0.4, 10.0.0.2 hoặc OpenHAB, kiểm tra:
/routing rule print detail/ip route print detail where routing-table=main/ip firewall filter print stats/ip firewall nat print stats
Các mạng LAN trong export gồm:
10.0.0.0/23 → bridgeLAN10.0.2.0/24 → WireGuard110.0.3.0/24 → VLAN10_Guest
Hãy bảo đảm các rule dst-address cho các mạng này nằm trước rule src-address của client.
Lưu ý về IPv6
Export cũng có các rule IPv6 tương ứng, ví dụ client fd00:10::10/128 và fd00:10::25/128. IPv4 và IPv6 cần kiểm tra riêng:
/routing rule print detail/ipv6 route print detail
Một client có thể đi IPv4 qua VNPT1 nhưng IPv6 lại đi theo route khác. Nếu mục tiêu là bắt client dùng cùng một WAN cho cả hai giao thức, phải cấu hình và kiểm thử cả hai nhóm rule.
Trong export có rule:
comment="Socks5_2 v6 -> VT1" \src-address=fd00:10::11/128 table=main
Comment nói VT1, nhưng table thực tế là main. Đây là điểm cần kiểm tra lại trên thiết bị trước khi đưa vào tài liệu chính thức.
Rollback một rule
Trước khi chỉnh sửa, nên xuất riêng routing rule:
/routing rule export file=routing-rules-before-change
Vô hiệu hóa rule theo số thứ tự:
/routing rule disable <rule-number>
Hoặc xóa rule sau khi đã xác nhận đúng số:
/routing rule remove <rule-number>
Không nên xóa theo số nếu vừa thêm/xóa nhiều rule. Hãy dùng print detail để xác nhận lại comment và src-address trước.
Tóm tắt
Cấu hình policy routing trong ví dụ này hoạt động theo chuỗi:
Client source address ↓/routing rule ↓Routing table VNPT1 hoặc VT2 ↓Default route qua PPPoE interface tương ứng ↓WAN được chọn
Phần khó nhất không phải là thêm một rule mới, mà là bảo đảm traffic tới mạng nội bộ vẫn được đưa về main trước khi áp dụng rule chọn WAN.
Hình ảnh minh họa WinBox
Các ảnh dưới đây minh họa trực tiếp những mục cấu hình được sử dụng trong ví dụ: interface, routing table, default route và routing rule.
Nguồn tham khảo
Mình đã lược bỏ các phần không liên quan như firewall, NAT, WireGuard và DDNS để tập trung vào cơ chế định tuyến client bằng Routing Rules.
Bình Luận & Thảo Luận
Góp ý, hỏi đáp và chia sẻ suy nghĩ của bạn