Route map là nền tảng của Policy-Based Routing (PBR)
Động lực cốt lõi (driving force) của Policy-Based Routing (PBR) chính là route map. Vì vậy, nếu bạn không đọc được route map và không hiểu nó đang thực hiện điều gì thì gần như bạn sẽ không thể troubleshooting PBR.
Hãy xem Ví dụ 16-3, minh họa một cấu hình PBR dựa trên sơ đồ ở Hình 16-1. Mặc dù đây chỉ là một ví dụ đơn giản, nhưng có thể thấy rằng PBR liên quan đến nhiều thành phần cấu hình khác nhau mà bạn phải kiểm tra khi troubleshooting, bao gồm:
Branch#
access-list 100 permit ip 10.1.4.0 0.0.0.255 10.1.1.0 0.0.0.255
!
route-map PBR_EXAMPLE permit 10
match ip address 100
set ip next-hop 10.1.14.1
!
interface GigabitEthernet0/0
ip policy route-map PBR_EXAMPLE
Những điểm cần kiểm tra khi troubleshooting PBR
1. Kiểm tra PBR được áp dụng ở đâu
PBR chỉ tác động đến:
Do đó cần xác nhận:
Có thể sử dụng:
show ip policy
để xem interface nào đang bật PBR và route map nào được áp dụng.
Nếu kiểm tra Local Policy Routing thì dùng:
show ip local policy
2. Kiểm tra thứ tự xử lý của Route Map
Route map luôn được xử lý:
Ngay khi một sequence được match:
Do đó, thứ tự các sequence cực kỳ quan trọng.
Sử dụng:
show route-map
để xác nhận thứ tự các sequence.
3. Hiểu đúng ý nghĩa của Permit và Deny
Đây là điểm rất nhiều người nhầm.
Đối với PBR:
permit
Không có nghĩa là "cho phép gói tin đi qua".
Nó có nghĩa là:
Ví dụ:
route-map PBR permit 10
sẽ thực hiện:
set ip next-hop ...
deny
Không có nghĩa là chặn gói tin.
Nó chỉ đơn giản có nghĩa:
Sau đó router sẽ:
Nếu khi tạo sequence bạn không ghi permit hoặc deny thì mặc định sẽ là:
permit
Nếu vô tình cấu hình sai permit thành deny (hoặc ngược lại), PBR sẽ không hoạt động như mong muốn.
Implicit Deny trong Route Map
Cuối mọi route map luôn tồn tại:
implicit deny
Tuy nhiên với PBR, implicit deny không có nghĩa là drop packet.
Nó chỉ có nghĩa:
Sau đó router vẫn định tuyến theo Routing Table.
Đây là điểm khác biệt rất lớn giữa:
ACL:
implicit deny
→ Drop packet
PBR:
implicit deny
→ Route normally
4. Kiểm tra Traffic nào đang được Match
PBR có thể match nhiều đối tượng khác nhau, ví dụ:
Dùng:
show route-map
để xem phần Match.
Sau đó kiểm tra từng thành phần.
Ví dụ:
Nếu route map dùng:
match ip address 100
thì cần kiểm tra ACL:
show ip access-lists
Nếu dùng Prefix List:
show ip prefix-list
Một lưu ý rất quan trọng:
Nếu một sequence không có lệnh match, router hiểu là:
match all
5. Kiểm tra hành động Set
Sau khi packet match một sequence, router sẽ thực hiện các lệnh trong phần:
set
Ví dụ:
set ip next-hop 10.1.14.1
Đây chính là hành động PBR sẽ áp dụng.
Kiểm tra bằng:
show route-map
Ví dụ show ip policy
Branch# show ip policy
Interface Route map
Gi0/0 PBR_EXAMPLE
Kết quả cho thấy:
Ví dụ show route-map
Branch# show route-map
route-map PBR_EXAMPLE, permit, sequence 10
Match clauses:
ip address (access-lists): 100
Set clauses:
ip next-hop 10.1.14.1
Policy routing matches: 30 packets, 3420 bytes
Có thể đọc như sau:
Kiểm tra đường đi bằng Traceroute
Khi troubleshooting PBR, cần xác minh packet thực sự đi theo đường nào.
Có thể dùng:
Trên Windows:
tracert
Trên Cisco IOS:
traceroute
Ví dụ:
C:\> tracert 10.1.1.1
Kết quả:
10.1.4.4
↓
10.1.14.1
Trong khi Routing Table lại cho thấy:
show ip route 10.1.1.1Next Hop
10.1.24.2
Điều này chứng minh:
Routing Table muốn đi:
10.1.24.2
Nhưng vì PBR được áp dụng nên packet lại đi:
10.1.14.1
Nếu traceroute tới một địa chỉ khác:
192.0.2.1
thì kết quả là:
10.1.24.2
vì traffic này không match ACL nên không bị PBR tác động.
Kiểm tra thống kê PBR
show route-mapPolicy routing matches:
36 packets
3780 bytes
Con số này tăng lên khi packet thực sự được PBR xử lý.
Đây là một trong những chỉ số rất hữu ích để xác nhận route map có đang hoạt động hay không.
Theo dõi PBR theo thời gian thực
Để quan sát PBR hoạt động realtime:
debug ip policy
Ví dụ:
IP: s=10.1.4.1 (GigabitEthernet0/0),
d=10.1.1.1,
policy match
IP: route map PBR_EXAMPLE,
item 10,
permit
IP: policy routed
GigabitEthernet0/0
↓
FastEthernet1/0
Next-Hop
10.1.14.1
Log trên cho biết:
Tổng kết
Khi troubleshooting Policy-Based Routing, nên kiểm tra theo trình tự sau:
Động lực cốt lõi (driving force) của Policy-Based Routing (PBR) chính là route map. Vì vậy, nếu bạn không đọc được route map và không hiểu nó đang thực hiện điều gì thì gần như bạn sẽ không thể troubleshooting PBR.
Hãy xem Ví dụ 16-3, minh họa một cấu hình PBR dựa trên sơ đồ ở Hình 16-1. Mặc dù đây chỉ là một ví dụ đơn giản, nhưng có thể thấy rằng PBR liên quan đến nhiều thành phần cấu hình khác nhau mà bạn phải kiểm tra khi troubleshooting, bao gồm:
- Access Control List (ACL)
- Route map với các điều kiện match và hành động set
- Interface nơi PBR được áp dụng
Branch#
access-list 100 permit ip 10.1.4.0 0.0.0.255 10.1.1.0 0.0.0.255
!
route-map PBR_EXAMPLE permit 10
match ip address 100
set ip next-hop 10.1.14.1
!
interface GigabitEthernet0/0
ip policy route-map PBR_EXAMPLE
Những điểm cần kiểm tra khi troubleshooting PBR
1. Kiểm tra PBR được áp dụng ở đâu
PBR chỉ tác động đến:
- Các gói tin đi vào (inbound) trên một interface.
- Hoặc các gói tin được router tự sinh ra (locally generated traffic) nếu sử dụng Local Policy Routing.
Do đó cần xác nhận:
- Route map đã được gắn đúng interface hay chưa.
- Hay đã được áp dụng cho local policy của router hay chưa.
Có thể sử dụng:
show ip policy
để xem interface nào đang bật PBR và route map nào được áp dụng.
Nếu kiểm tra Local Policy Routing thì dùng:
show ip local policy
2. Kiểm tra thứ tự xử lý của Route Map
Route map luôn được xử lý:
- từ sequence number nhỏ đến lớn.
Ngay khi một sequence được match:
- Router dừng kiểm tra các sequence tiếp theo.
- Thực hiện các hành động trong phần set của sequence đó.
Do đó, thứ tự các sequence cực kỳ quan trọng.
Sử dụng:
show route-map
để xác nhận thứ tự các sequence.
3. Hiểu đúng ý nghĩa của Permit và Deny
Đây là điểm rất nhiều người nhầm.
Đối với PBR:
permit
Không có nghĩa là "cho phép gói tin đi qua".
Nó có nghĩa là:
Áp dụng Policy-Based Routing cho gói tin theo các lệnh trong phần set.
Ví dụ:
route-map PBR permit 10
sẽ thực hiện:
set ip next-hop ...
deny
Không có nghĩa là chặn gói tin.
Nó chỉ đơn giản có nghĩa:
Không áp dụng PBR.
Sau đó router sẽ:
- quay về quy trình định tuyến thông thường (normal routing)
- tra cứu Routing Table.
Nếu khi tạo sequence bạn không ghi permit hoặc deny thì mặc định sẽ là:
permit
Nếu vô tình cấu hình sai permit thành deny (hoặc ngược lại), PBR sẽ không hoạt động như mong muốn.
Implicit Deny trong Route Map
Cuối mọi route map luôn tồn tại:
implicit deny
Tuy nhiên với PBR, implicit deny không có nghĩa là drop packet.
Nó chỉ có nghĩa:
Không áp dụng PBR.
Sau đó router vẫn định tuyến theo Routing Table.
Đây là điểm khác biệt rất lớn giữa:
- Route Map trong PBR
- ACL
ACL:
implicit deny
→ Drop packet
PBR:
implicit deny
→ Route normally
4. Kiểm tra Traffic nào đang được Match
PBR có thể match nhiều đối tượng khác nhau, ví dụ:
- ACL
- Prefix List
- Inbound Interface
- nhiều tiêu chí khác
Dùng:
show route-map
để xem phần Match.
Sau đó kiểm tra từng thành phần.
Ví dụ:
Nếu route map dùng:
match ip address 100
thì cần kiểm tra ACL:
show ip access-lists
Nếu dùng Prefix List:
show ip prefix-list
Một lưu ý rất quan trọng:
Nếu một sequence không có lệnh match, router hiểu là:
match all
5. Kiểm tra hành động Set
Sau khi packet match một sequence, router sẽ thực hiện các lệnh trong phần:
set
Ví dụ:
set ip next-hop 10.1.14.1
Đây chính là hành động PBR sẽ áp dụng.
Kiểm tra bằng:
show route-map
Ví dụ show ip policy
Branch# show ip policy
Interface Route map
Gi0/0 PBR_EXAMPLE
Kết quả cho thấy:
- Interface Gi0/0 đang áp dụng route map PBR_EXAMPLE.
Ví dụ show route-map
Branch# show route-map
route-map PBR_EXAMPLE, permit, sequence 10
Match clauses:
ip address (access-lists): 100
Set clauses:
ip next-hop 10.1.14.1
Policy routing matches: 30 packets, 3420 bytes
Có thể đọc như sau:
- Sequence 10
- permit
- match ACL 100
- set next-hop là 10.1.14.1
- đã có 30 packet được PBR xử lý
Kiểm tra đường đi bằng Traceroute
Khi troubleshooting PBR, cần xác minh packet thực sự đi theo đường nào.
Có thể dùng:
Trên Windows:
tracert
Trên Cisco IOS:
traceroute
Ví dụ:
C:\> tracert 10.1.1.1
Kết quả:
10.1.4.4
↓
10.1.14.1
Trong khi Routing Table lại cho thấy:
show ip route 10.1.1.1Next Hop
10.1.24.2
Điều này chứng minh:
Routing Table muốn đi:
10.1.24.2
Nhưng vì PBR được áp dụng nên packet lại đi:
10.1.14.1
Nếu traceroute tới một địa chỉ khác:
192.0.2.1
thì kết quả là:
10.1.24.2
vì traffic này không match ACL nên không bị PBR tác động.
Kiểm tra thống kê PBR
show route-mapPolicy routing matches:
36 packets
3780 bytes
Con số này tăng lên khi packet thực sự được PBR xử lý.
Đây là một trong những chỉ số rất hữu ích để xác nhận route map có đang hoạt động hay không.
Theo dõi PBR theo thời gian thực
Để quan sát PBR hoạt động realtime:
debug ip policy
Ví dụ:
IP: s=10.1.4.1 (GigabitEthernet0/0),
d=10.1.1.1,
policy match
IP: route map PBR_EXAMPLE,
item 10,
permit
IP: policy routed
GigabitEthernet0/0
↓
FastEthernet1/0
Next-Hop
10.1.14.1
Log trên cho biết:
- Packet đến từ 10.1.4.1.
- Đi vào GigabitEthernet0/0.
- Destination là 10.1.1.1.
- Match route map PBR_EXAMPLE, sequence 10.
- Sequence là permit, nên PBR được áp dụng.
- Router chuyển packet từ Gi0/0 sang Fa1/0.
- Next-hop được ép thành 10.1.14.1 thay vì sử dụng kết quả tra cứu trong Routing Table.
Tổng kết
Khi troubleshooting Policy-Based Routing, nên kiểm tra theo trình tự sau:
- Xác nhận PBR đã được áp dụng đúng interface hoặc Local Policy bằng show ip policy hoặc show ip local policy.
- Kiểm tra thứ tự các sequence trong route map bằng show route-map, vì router xử lý từ sequence thấp đến cao và dừng ngay khi có match.
- Xác minh ý nghĩa của permit và deny: permit sẽ áp dụng PBR theo các lệnh set, còn deny hoặc implicit deny sẽ bỏ qua PBR và định tuyến theo Routing Table.
- Kiểm tra điều kiện match (ACL, Prefix List, Interface...) và xác minh các đối tượng liên quan bằng các lệnh như show ip access-lists hoặc show ip prefix-list.
- Kiểm tra phần set để đảm bảo hành động (ví dụ set ip next-hop) đúng với thiết kế.
- Dùng traceroute để xác nhận lưu lượng thực tế đi theo đường PBR mong muốn.
- Theo dõi bộ đếm Policy routing matches trong show route-map và sử dụng debug ip policy khi cần phân tích hoạt động của PBR theo thời gian thực.