Bookmark

RouterOS v7: định tuyến client qua nhiều WAN bằng Routing Rules

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 qua VNPT1.
  • Client 10.0.0.11 đi qua VT2.
  • Client 10.0.0.12 sử dụng bảng main.
  • Client 10.0.0.15 đi qua VNPT1.
  • Client 10.0.1.25 đi qua VNPT1.

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

Danh sách interface WAN/LAN trong WinBox
WinBox: danh sách các interface và PPPoE client được dùng trong mô hình.

Mô hình interface trong cấu hình thực tế

Các interface liên quan:

InterfaceVai trò
bridgeLANMạng LAN chính
LAN2Cổng vật lý chứa các macvlan cho PPPoE
LAN3Cổng vật lý chứa VLAN 597-VNPT-LAN3
597-VNPT-LAN3-MACVLAN1MACVLAN dùng cho PPPoE VNPT1
LAN2-MACVLAN1MACVLAN dùng cho PPPoE VT2
LAN2-MACVLAN2MACVLAN dùng cho PPPoE VT1
VNPT1PPPoE client của VNPT
VT2PPPoE client của Viettel/đường VT2
VT1PPPoE client chính còn lại

Các PPPoE client trong export:

1
2
3
4
5
6
7
8
/interface pppoe-client
add add-default-route=yes default-route-distance=3 \
    interface=597-VNPT-LAN3-MACVLAN1 name=VNPT1

add add-default-route=yes default-route-distance=2 \
    interface=LAN2-MACVLAN1 name=VT2

add 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:

1
2
3
/routing table
add disabled=no fib name=VNPT1
add 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.

Các routing table VNPT1 và VT2 trong WinBox
WinBox: các routing table có bật FIB.

Default route cho từng WAN

Bảng VNPT1 có default route đi qua PPPoE interface VNPT1:

1
2
3
/ip route
add 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:

1
2
3
/ip route
add 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 VNPT1 sẽ dùng WAN VNPT1.
  • Gói được tra cứu trong table VT2 sẽ dùng WAN VT2.
  • Gói được tra cứu trong table main sẽ dùng các route chính của router.

Kiểm tra route:

1
2
3
/ip route print detail where routing-table=VNPT1
/ip route print detail where routing-table=VT2
/ip route print detail where routing-table=main
Default route của VNPT1 và VT2 trong WinBox
WinBox: default route trỏ tới từng PPPoE interface.

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:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
/routing rule
add action=lookup-only-in-table \
    comment="LAN IPv4 -> main" \
    dst-address=10.0.0.0/23 table=main

add action=lookup-only-in-table \
    comment="WG IPv4 -> main" \
    dst-address=10.0.2.0/24 table=main

add 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:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
add action=lookup-only-in-table \
    comment="Socks5_1 -> VNPT1" \
    src-address=10.0.0.10/32 table=VNPT1

add action=lookup-only-in-table \
    comment="Socks5_2 -> VT2" \
    src-address=10.0.0.11/32 table=VT2

add action=lookup-only-in-table \
    comment="Socks5_3 -> main" \
    src-address=10.0.0.12/32 table=main

add action=lookup-only-in-table \
    comment="HTTPS Proxy -> VNPT1" \
    src-address=10.0.0.15/32 table=VNPT1

add 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

Danh sách Routing Rules trong WinBox
WinBox: thứ tự rule nội bộ và rule định tuyến theo client.
Chi tiết rule Socks5_1 đi qua VNPT1
WinBox: src-address=10.0.0.10/32, action lookup-only-in-table, table VNPT1.
Chi tiết rule Socks5_2 đi qua VT2
WinBox: 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:

1
 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
2
3
4
1. Mạng nội bộ → main
2. Mạng WireGuard/VLAN nội bộ → main
3. Client cụ thể → table WAN mong muốn
4. 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:

1
2
3
4
/routing rule
add 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:

1
2
3
4
/routing rule
add 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ự:

1
/routing rule print detail

Xem route trong policy table:

1
2
/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:

1
/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:

1
curl -4 https://ifconfig.me

Thực hiện lần lượt trên các client:

1
2
3
4
5
10.0.0.10 → IP public của VNPT1
10.0.0.11 → IP public của VT2
10.0.0.12 → IP public theo main
10.0.0.15 → IP public của VNPT1
10.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:

1
2
3
4
/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:

1
2
3
10.0.0.0/23  → bridgeLAN
10.0.2.0/24  → WireGuard1
10.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/128fd00:10::25/128. IPv4 và IPv6 cần kiểm tra riêng:

1
2
/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:

1
2
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:

1
/routing rule export file=routing-rules-before-change

Vô hiệu hóa rule theo số thứ tự:

1
/routing rule disable <rule-number>

Hoặc xóa rule sau khi đã xác nhận đúng số:

1
/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:

1
2
3
4
5
6
7
8
9
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.

0 Bình luận

Góp Ý / Bình Luận / Đánh giá