POLICY BASED ROUTING
Như các bạn đã biết, việc định tuyến tìm đường đi và forward dữ liệu trên Router chỉ dựa vào trường Destination IP của IP Packet để xử lý. Tức là khi có một packet đi tới Router, Router chỉ nhìn Destination IP của packet đó, tra bảng định tuyến để Forward packet đi tương ứng bảng định tuyến chứ không phân biệt được Packet đó gửi từ đâu. Nên giả sử ta muốn phân biệt packet đó được gửi từ VLAN 20 hoặc packet đó là một lưu lượng duyệt Web để chuyển hướng thích hợp thì ta không làm được khi chỉ dựa vào bảng định tuyến.
Cisco IOS cung cấp tiện ích Policy Based Routing giúp chuyển hướng lưu lượng thích hợp dựa vào source IP của IP Packet thông qua việc tham chiếu đến một Access Control List (ACL) hoặc một Prefix list.
Ví dụ, đối với sơ đồ mạng bên dưới ta muốn kiểm soát toàn bộ lưu lượng của VLAN 10 đến Server chỉ đi theo hướng qua R3, toàn bộ lưu lượng duyệt Web nội bộ của VLAN 20 đến Server chỉ đi theo hướng R2, còn các lưu lượng khác cư xử bình thường theo hoạt động định tuyến.
Với yêu cầu đặt ra, ta cần kiểm tra các Packet xuất phát từ VLAN 10 đến Server phải đi vào cổng F0/0.10 của R1 và đi ra khỏi cổng F0/2 của R1 để đến R3, còn các packet có data bên trong thuộc về lưu lượng duyệt web nội bộ của VLAN 20 phải đi vào cổng F0/0.20 của R1 và đi ra khỏi cổng F0/1 của R1 để đến R2. Nếu chỉ dựa vào hoạt động định tuyến thông thường sẽ không thực hiện được yêu cầu này.
Để đáp ứng yêu cầu đặt ra, ta sử dụng kỹ thuật Policy Based Routing tham chiếu đến một Route map trên các cổng F0/0.10 và F0/0.20 để lọc các lưu lượng thích hợp và chỉ đường đi thích hợp cho chúng.
Về Route map, thì route map có cấu trúc và cách hoạt động tương tự như ACL nhưng nó linh hoạt hơn và mạnh mẽ hơn ACL. Cụ thể như sau:
Về cấu trúc của Route map cũng là một danh sách nhiều dòng, trong đó có hai mệnh đề chính là permit và deny, permit sẽ cho phép tham gia vào một hoạt động nào đó còn deny thì không cho phép. Và cuối cùng của Route map luôn luôn có một dòng mặc định là deny và bị ẩn đi.
route-map PBR1 permit 10
match ip address ACL-10
set ip next-hop 192.168.5.2
route-map PBR1 permit 20
match ip address ACL-100
set ip next-hop 192.168.5.1
route-map PBR1 deny
trong đó PBR1 là tên của Route map; permit 10 và permit 20 là hai dòng permit với số thứ tự của route map; mệnh đề match cho phép kiểm tra điều kiện và tham chiếu đến một ACL hoặc Prefix list hoặc các thông số điều kiện khác; mệnh đề set cho phép thực hiện các lệnh nhưng trước khi thực hiện nó sẽ điều chỉnh lại một số thông số ta khai báo. Với lệnh trên, chỉ những packet nào khớp với ACL ACL-10 thì được đẩy qua next-hop 192.168.5.2, còn những packet nào khớp với ACL ACL-100 thì được đẩy qua next-hop 192.168.5.1. Những packet khác không khớp với hai ACL trên sẽ đi vào dòng deny của Route map.
Về trình tự xét của route map cũng tương tự ACL, tức là xét từ trên xuống dưới, nếu khớp với dòng nào thì thực thi ngay dòng đó và bỏ qua tất cả các dòng còn lại, nếu packet đang xét không khớp với bất kỳ dòng nào trong route map thì nó sẽ khớp với dòng deny bị ẩn và packet sẽ không được tham gia vào Policy Based Routing. Và cuối cùng, Packet đó sẽ được Forward dựa theo hoạt động định tuyến bình thường từ bảng định tuyến.
Khi viết xong 1 route map mà để đó thì sẽ không có tác dụng cho đến khi ta áp nó vào trong một interface nào đó. Khác với ACL, route map chỉ có thể được áp vào interface theo chiều in, chứ hoàn toàn không có chiều out. Một route map như trên được áp vào một interface sẽ tạo nên hoạt động Policy Based Routing.
Quay lại ví dụ sơ đồ mạng như mô tả ở trên, để toàn bộ lưu lượng của VLAN 10 đến Server chỉ đi theo hướng qua R3, toàn bộ lưu lượng duyệt Web nội bộ của VLAN 20 đến Server chỉ đi theo hướng R2, còn các lưu lượng khác cư xử bình thường theo hoạt động định tuyến. Ta sử dụng kỹ thuật Policy Based Routing trên hai sub-interface F0/0.10 và F0/0.20 của R1
Đầu tiên là viết ACL lọc ra các loại lưu lượng cần thiết, ACL 110 lấy lưu lượng của VLAN 10 đến Server; ACL 120 lấy lưu lượng duyệt Web của VLAN 20 đến Server
R1(config)#access-list 110 permit ip 192.168.10.0 0.0.0.255 host 192.168.4.1 R1(config)#access-list 120 permit tcp 192.168.20.0 0.0.0.255 host 192.168.4.1 eq 80 R1(config)#access-list 120 permit tcp 192.168.20.0 0.0.0.255 host 192.168.4.1 eq 443 |
Tiếp theo viết Route map tham chiếu đến ACL vừa viết, route map PBR-vlan10 tham chiếu đến ACL 110; route map PBR-vlan20 tham chiếu đến ACL 120
R1(config)#route-map PBR-vlan10 permit 10 R1(config-route-map)#match ip address 110 R1(config-route-map)#set ip next-hop 192.168.13.3 R1(config)#route-map PBR-vlan20 permit 10 R1(config-route-map)#match ip address 120 R1(config-route-map)#set ip next-hop 192.168.12.2 R1#show route-map |
Cuối cùng là áp route map vào interface
R1(config)#interface f0/0.10 R1(config-if)#ip policy route-map PBR-vlan10 R1(config)#interface f0/0.20 R1(config-if)#ip policy route-map PBR-vlan20 |
Ta có thể kiểm tra bằng cách debug ip policy để xem hoạt động của PBR.
Nhưng PBR cũng có điểm yếu, giả sử bất kỹ dữ liệu nào của VLAN 10 đến Server 192.168.4.1 khi đi vào interface F0/0.10 đều khớp với ACL 110 và luôn luôn được chuyển hướng theo mệnh đề set ip next-hop đến 192.168.13.3, nhưng nếu nex-hop 192.168.13.3 bị sự cố không để đi đến được thì hoạt động chuyển hướng vẫn xảy ra nhưng các packet không thể đến đích được. Do vậy, để đảm bảo packet có thể đi đến server thì người ta thường kết hợp PBR với ip sla với ý tưởng như sau: tạo một track ip sla ping liên tục đến địa chỉ next-hop 192.168.13.3, nếu kết quả ping thành công thì track ở trạng thái up, hoạt động PBR diễn ra bình thường, nếu ping không thành công, trạng thái track bị down thì sẽ ngưng hoạt động PBR và Router sẽ forward packet theo bảng định tuyến bình thường để đảm bảo VLAN 10 có thể đến được Server.
Việc cấu hình như sau: trên Router R1 tạo một ip sla để ping đến ip next-hop 192.168.13.3, sau đó gắn ip sla này vào một Track Object và đưa track object này vào trong mệnh đề set của route-map để kiểm tra next-hop còn đi đến được hay không.
R1(config)#ip sla 1 R1(config-ip-sla)#icmp-echo 192.168.13.3 R1(config-ip-sla)#frequency 4 R1(config-ip-sla)#threshold 2 R1(config-ip-sla)#exit R1(config)#ip sla schedule 1 life forever start-time now R1(config)#track 1 ip sla 1 reachability R1(config)#route-map PBR-vlan10 permit 10 R1(config-route-map)#match ip address 110 R1(config-route-map)# set ip next-hop verify-availability 192.168.13.3 1 track 1 |
Trong đó:
Như vậy, track sẽ kiểm tra next-hop 192.168.13.3 có đi đến được không, nếu được thì track up và PBR diễn ra bình thường để forward packet đến 192.168.13.3. Nếu next-hop không đi đến được track sẽ trả kết quả down thì sẽ ngưng hoạt động PBR và packet sẽ được forward theo bảng định tuyến.
Như vậy, tuỳ theo ACL mà ta có thể lọc ra các loại lưu lượng khác nhau, kết hợp với sla ta có thể chuyển hướng lưu lượng để giảm tải cho các Router cũng như lựa chọn đường đi thích hợp, tuỳ vào nhu cầu và hiện trạng của hệ thống.
Nguyễn Khánh Linh!!!