Trong bài viết tuần trước, chúng ta đã cùng nhau trao đổi về kỹ thuật Policy Based Routing (PBR). Trong bài viết tuần này, chúng ta sẽ cùng tiếp tục tìm hiểu về kỹ thuật path – control quan trọng này.
Như thường lệ, chúng ta sẽ cùng trao đổi vấn đề cần quan tâm thông qua một bài lab ví dụ:
Sơ đồ
Hình 1 – Sơ đồ bài lab ví dụ.
Mô tả
- Bài lab này sử dụng lại sơ đồ của bải lab trong bài viết trước. Sơ đồ gồm 5 router được đấu nối với nhau và được đặt IP theo quy hoạch IP được chỉ ra trên hình 1. Các router trên sơ đồ cũng được cấu hình định tuyến OSPF Area 0 đảm bảo mọi địa chỉ thấy nhau.
- Trên sơ đồ này, chúng ta tiếp tục cấu hình các kịch bản khác có sử dụng đến công cụ PBR để thực hiện path – control.
- Bạn đọc có thể sử dụng router thật hoặc giả lập trên GNS – 3 để thực hiện bài lab này.
- Để tiện cho việc theo dõi, phần “Thực hiện” tiếp theo đây sẽ trình bày lại phần cấu hình cơ bản cho sơ đồ lab mà ta đã thực hiện trong bài viết trước.
Thực hiện
Bước 1: Cấu hình cơ bản cho sơ đồ lab
- Thực hiện đặt địa chỉ IP trên các cổng của các router theo quy hoạch IP được chỉ ra trên hình 1.
- Chạy định tuyến OSPF đảm bảo mọi địa chỉ thấy nhau. Câu hình để các loopback được quảng bá đi đúng subnet của chúng.
Cấu hình
Trên R1:
R1(config)#interface f0/0
R1(config-if)#no shutdown
R1(config-if)#ip address 192.168.12.1 255.255.255.0
R1(config-if)#exit
R1(config)#interface f0/1
R1(config-if)#no shutdown
R1(config-if)#ip address 192.168.15.1 255.255.255.0
R1(config-if)#exit
R1(config)#interface s0/0/0
R1(config-if)#no shutdown
R1(config-if)#ip address 192.168.13.1 255.255.255.0
R1(config-if)#exit
R1(config)#interface loopback 0
R1(config-if)#ip address 192.168.1.1 255.255.255.0
R1(config-if)#ip ospf network point-to-point
R1(config-if)#exit
R1(config)#router ospf 1
R1(config-router)#network 192.168.1.1 0.0.0.0 area 0
R1(config-router)#network 192.168.12.1 0.0.0.0 area 0
R1(config-router)#network 192.168.13.1 0.0.0.0 area 0
R1(config-router)#network 192.168.15.1 0.0.0.0 area 0
R1(config-router)#exit
Trên R2:
R2(config)#interface f0/0
R2(config-if)#no shutdown
R2(config-if)#ip address 192.168.12.2 255.255.255.0
R2(config-if)#exit
R2(config)#interface f0/1
R2(config-if)#no shutdown
R2(config-if)#ip address 192.168.24.2 255.255.255.0
R2(config-if)#exit
R2(config)#interface loopback 0
R2(config-if)#ip address 192.168.2.1 255.255.255.0
R2(config-if)#ip ospf network point-to-point
R2(config-if)#exit
R2(config)#router ospf 1
R2(config-router)#network 192.168.2.1 0.0.0.0 area 0
R2(config-router)#network 192.168.12.2 0.0.0.0 area 0
R2(config-router)#network 192.168.2.2 0.0.0.0 area 0
R2(config-router)#network 192.168.24.2 0.0.0.0 area 0
R2(config-router)#exit
Trên R3
R3(config)#interface f0/1
R3(config-if)#no shutdown
R3(config-if)#ip address 192.168.34.3 255.255.255.0
R3(config-if)#exit
R3(config)#interface s0/0/0
R3(config-if)#no shutdown
R3(config-if)#ip address 192.168.13.3 255.255.255.0
R3(config-if)#exit
R3(config)#interface loopback 0
R3(config-if)#ip address 192.168.3.1 255.255.255.0
R3(config-if)#ip ospf network point-to-point
R3(config-if)#exit
R3(config)#router ospf 1
R3(config-router)#network 192.168.3.1 0.0.0.0 area 0
R3(config-router)#network 192.168.13.3 0.0.0.0 area 0
R3(config-router)#network 192.168.13.3 0.0.0.0 area 0
R3(config-router)#network 192.168.34.3 0.0.0.0 area 0
R3(config-router)#exit
Trên R4:
R4(config)#interface f0/0
R4(config-if)#no shutdown
R4(config-if)#ip address 192.168.24.4 255.255.255.0
R4(config-if)#exit
R4(config)#interface f0/1
R4(config-if)#no shutdown
R4(config-if)#ip address 192.168.34.4 255.255.255.0
R4(config-if)#exit
R4(config)#interface loopback 0
R4(config-if)#ip address 192.168.4.1 255.255.255.0
R4(config-if)#ip ospf network point-to-point
R4(config-if)#exit
R4(config)#router ospf 1
R4(config-router)#network 192.168.4.1 0.0.0.0 area 0
R4(config-router)#network 192.168.24.4 0.0.0.0 area 0
R4(config-router)#network 192.168.34.4 0.0.0.0 area 0
R4(config-router)#exit
Trên R5:
R5(config)#interface f0/0
R5(config-if)#no shutdown
R5(config-if)#ip address 192.168.15.5 255.255.255.0
R5(config-if)#exit
R5(config)#interface loopback 0
R5(config-if)#ip address 192.168.5.1 255.255.255.0
R5(config-if)#ip ospf network point-to-point
R5(config-if)#exit
R5(config)#interface loopback 1
R5(config-if)#ip address 192.168.55.1 255.255.255.0
R5(config-if)#ip ospf network point-to-point
R5(config-if)#exit
R5(config)#router ospf 1
R5(config-router)#network 192.168.5.1 0.0.0.0 area 0
R5(config-router)#network 192.168.55.1 0.0.0.0 area 0
R5(config-router)#network 192.168.15.5 0.0.0.0 area 0
R5(config-router)#exit
Kiểm tra
Ta kiểm tra kết quả cấu hình vừa thực hiện:
R1#show ip route ospf
O 192.168.24.0/24 [110/2] via 192.168.12.2, 00:17:35, FastEthernet0/0 O 192.168.55.0/24 [110/2] via 192.168.15.5, 00:12:39, FastEthernet0/1 O 192.168.4.0/24 [110/3] via 192.168.12.2, 00:13:59, FastEthernet0/0 O 192.168.5.0/24 [110/2] via 192.168.15.5, 00:12:39, FastEthernet0/1 O 192.168.34.0/24 [110/3] via 192.168.12.2, 00:13:59, FastEthernet0/0 O 192.168.2.0/24 [110/2] via 192.168.12.2, 00:17:45, FastEthernet0/0 O 192.168.3.0/24 [110/4] via 192.168.12.2, 00:13:59, FastEthernet0/0
R2#show ip route ospf
O 192.168.13.0/24 [110/65] via 192.168.12.1, 00:17:08, FastEthernet0/0 O 192.168.15.0/24 [110/2] via 192.168.12.1, 00:17:51, FastEthernet0/0 O 192.168.55.0/24 [110/3] via 192.168.12.1, 00:12:47, FastEthernet0/0 O 192.168.4.0/24 [110/2] via 192.168.24.4, 00:14:08, FastEthernet0/1 O 192.168.5.0/24 [110/3] via 192.168.12.1, 00:12:47, FastEthernet0/0 O 192.168.34.0/24 [110/2] via 192.168.24.4, 00:14:08, FastEthernet0/1 O 192.168.1.0/24 [110/2] via 192.168.12.1, 00:17:51, FastEthernet0/0 O 192.168.3.0/24 [110/3] via 192.168.24.4, 00:14:08, FastEthernet0/1
R3#show ip route ospf
O 192.168.12.0/24 [110/3] via 192.168.34.4, 00:14:11, FastEthernet0/1 O 192.168.15.0/24 [110/4] via 192.168.34.4, 00:14:11, FastEthernet0/1 O 192.168.24.0/24 [110/2] via 192.168.34.4, 00:14:11, FastEthernet0/1 O 192.168.55.0/24 [110/5] via 192.168.34.4, 00:12:50, FastEthernet0/1 O 192.168.4.0/24 [110/2] via 192.168.34.4, 00:14:11, FastEthernet0/1
O 192.168.5.0/24 [110/5] via 192.168.34.4, 00:12:50, FastEthernet0/1 O 192.168.1.0/24 [110/4] via 192.168.34.4, 00:14:11, FastEthernet0/1 O 192.168.2.0/24 [110/3] via 192.168.34.4, 00:14:11, FastEthernet0/1
R4#show ip route ospf
O 192.168.12.0/24 [110/2] via 192.168.24.2, 00:14:07, FastEthernet0/0 O 192.168.13.0/24 [110/65] via 192.168.34.3, 00:14:07, FastEthernet0/1 O 192.168.15.0/24 [110/3] via 192.168.24.2, 00:14:07, FastEthernet0/0 O 192.168.55.0/24 [110/4] via 192.168.24.2, 00:12:54, FastEthernet0/0 O 192.168.5.0/24 [110/4] via 192.168.24.2, 00:12:54, FastEthernet0/0
O 192.168.1.0/24 [110/3] via 192.168.24.2, 00:14:07, FastEthernet0/0 O 192.168.2.0/24 [110/2] via 192.168.24.2, 00:14:07, FastEthernet0/0 O 192.168.3.0/24 [110/2] via 192.168.34.3, 00:14:07, FastEthernet0/1
R5#show ip route ospf
O 192.168.12.0/24 [110/2] via 192.168.15.1, 00:12:59, FastEthernet0/0 O 192.168.13.0/24 [110/65] via 192.168.15.1, 00:12:59, FastEthernet0/0 O 192.168.24.0/24 [110/3] via 192.168.15.1, 00:12:59, FastEthernet0/0 O 192.168.4.0/24 [110/4] via 192.168.15.1, 00:12:59, FastEthernet0/0 O 192.168.34.0/24 [110/4] via 192.168.15.1, 00:12:59, FastEthernet0/0 O 192.168.1.0/24 [110/2] via 192.168.15.1, 00:12:59, FastEthernet0/0 O 192.168.2.0/24 [110/3] via 192.168.15.1, 00:12:59, FastEthernet0/0 O 192.168.3.0/24 [110/5] via 192.168.15.1, 00:12:59, FastEthernet0/0
Kết quả show cho thấy tất cả các subnet trên sơ đồ đều đã hiển thị trong bảng định tuyến của các router.
Bước 2: Cấu hình Policy Based Routing
Thực hiện cấu hình PBR trên R1 để bẻ đường đi của gói tin theo yêu cầu sau:
- Mọi lưu lượng web xuất phát từ mạng 192.168.5.0/24 đi đến server 192.168.4.1 tại subnet 192.168.4.0/24 và mọi lưu lượng telnet xuất phát từ mạng 192.168.55.0/24 đến router R4 đều phải được chuyển đi theo đường serial point – to – point nối giữa R1 và R3.
- Các lưu lượng còn lại được chuyển đi bình thường theo kết quả chỉ đường trong bảng định tuyến.
Cấu hình
Trên R1:
R1(config)#access-list 100 permit tcp 192.168.5.0 0.0.0.255 host 192.168.4.1 eq 80
R1(config)#access-list 100 permit tcp 192.168.55.0 0.0.0.255 host 192.168.4.1 eq 23
R1(config)#access-list 100 permit tcp 192.168.55.0 0.0.0.255 host 192.168.24.4 eq 23
R1(config)#access-list 100 permit tcp 192.168.55.0 0.0.0.255 host 192.168.34.4 eq 23
R1(config)#route-map PBR permit 10
R1(config-route-map)#match ip address 100
R1(config-route-map)#set ip next-hop 192.168.13.3
R1(config-route-map)#exit
R1(config)#interface f0/1
R1(config-if)#ip policy route-map PBR
R1(config-if)#exit
Ghi chú
Với PBR, ta có thể hiệu chỉnh đường đi không chỉ theo source của gói tin IP như đã thực hiện trong bài lab trước mà còn có thể hiệu chỉnh đường đi cho các gói tin dựa vào các đặc điểm khác của chúng như giao thức nền TCP, UDP, port được sử dụng,… Điều này khiến cho PBR trở thành một công cụ rất mạnh cho hoạt động định tuyến của Cisco IOS, giúp chúng ta có thể bẻ đường đi cho rất nhiều loại lưu lượng mà ta quan tâm.
Để có thể tác động lên đường đi của các loại lưu lượng khác nhau, chúng ta chỉ cần viết access – list dạng mở rộng (extended) permit đúng loại lưu lượng cần tác động và viết route – map tham chiếu đến access – list này. Như chúng ta đã biết, ACL dạng extended của Cisco IOS cho phép chúng ta lựa chọn được rất nhiều loại lưu lượng khác nhau nên khi sử dụng cùng với route – map trong một cấu hình PBR, chúng ta có thể thực hiện được các tác vụ bẻ đường rất đa dạng cho các loại lưu lượng mà ta cần thiết lập chính sách về đường đi.
Kiểm tra
Ta bật debug trên R1 để quan sát hoạt động của PBR:
R1#debug ip policy
Policy routing debugging is on
Thực hiện cấu hình Telnet và bật HTTP trên router R4 để kiểm tra:
R4(config)#line vty 0 4
R4(config-line)#password cisco
R4(config-line)#exit
R4(config)#ip http server
Ta thực hiện telnet từ mạng 192.168.5.0/24 đến địa chỉ 192.168.4.1 bằng port 80 để giả lập lưu lượng web đi từ mạng 192.168.5.0/24 đến địa chỉ này:
R5#telnet 192.168.4.1 80 /source-interface lo0
Trying 192.168.4.1, 80 ... Open
exit
HTTP/1.1 400 Bad Request
Date: Fri, 01 Mar 2002 00:37:07 GMT
Server: cisco-IOS
Accept-Ranges: none
400 Bad Request
[Connection to 192.168.4.1 closed by foreign host]
Kết quả debug trên R1:
Ta thấy lưu lượng web đi từ mạng 192.168.5.0/24 đến địa chỉ 192.168.4.1 đã được thực hiện policy based routing.
Tiếp theo, ta thực hiện telnet từ mạng 192.168.55.0/24 đến R4 (có thể chọn địa chỉ của một trong 03 interface của R4):
R5#telnet 192.168.24.4 /source-interface lo1
Trying 192.168.24.4 ... Open
User Access Verification
Password:
R4>
Kết quả debug trên R1:
Ta thấy lưu lượng telnet từ mạng 192.168.55.0/24 đi đến R4 đều đã được thực hiện policy based routing.
Bước 3: Local policy – based routing
Thực hiện policy based routing trên R1 đảm bảo mọi lưu lượng xuất phát từ loopback 0 mới tạo đi đến loopback 0 của R4 đều phải được chuyển hướng đi theo cổng s0/0/0 của R1.
Cấu hình
Trên R1:
R1(config)#access-list 101 permit ip host 192.168.1.1 host 192.168.4.1
R1(config)#route-map LOCAL_PBR permit 10
R1(config-route-map)#match ip address 101
R1(config-route-map)#set ip next-hop 192.168.13.3
R1(config-route-map)#exit
R1(config)#ip local policy route-map LOCAL_PBR
Ghi chú Câu lệnh “R(config-if)#ip policy route-map…” chỉ có tác dụng với lưu lượng đi vào cổng và trung chuyển qua router, không có tác dụng với lưu lượng xuất phát từ chính bản thân router. Để có thể sử dụng Policy Based Routing với lưu lượng xuất phát từ chính bản thân router, chúng ta phải sử dụng một lệnh khác để áp policy:
R(config)#ip local policy route-map Tên_route_map
Việc khai báo route – map để thực hiện chính sách bẻ đường đi cho dữ liệu được thực hiện hoàn toàn giống như với khai báo route – map để áp lên cổng.
Kiểm tra
Ta thực hiện ping từ R1 để kiểm tra:
R1#ping 192.168.4.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 192.168.4.1, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 48/73/104 ms
R1#
*Mar 1 00:57:49.779: IP: s=192.168.12.1 (local), d=192.168.4.1, len 100, policy rejected -- normal forwarding
*Mar 1 00:57:49.867: IP: s=192.168.12.1 (local), d=192.168.4.1, len 100, policy rejected -- normal forwarding
*Mar 1 00:57:49.927: IP: s=192.168.12.1 (local), d=192.168.4.1, len 100, policy rejected -- normal forwarding
*Mar 1 00:57:50.031: IP: s=192.168.12.1 (local), d=192.168.4.1, len 100, policy rejected -- normal forwarding
*Mar 1 00:57:50.083: IP: s=192.168.12.1 (local), d=192.168.4.1, len 100, policy rejected -- normal forwarding
Ta thấy, lưu lượng đi đến 192.168.4.1 không xuất phát từ loopback 0 mới tạo trên R1 sẽ được forward bình thường theo kết quả trong bảng định tuyến.
Tiếp theo, ta thực hiện ping đến 192.168.4.1 từ loopback 0:
Kết quả debug cho thấy lưu lượng xuất phát từ địa chỉ 192.168.1.1 đi đến 192.168.4.1 đã được thực hiện policy – based routing đúng theo yêu cầu.
Trên đây, chúng ta đã cùng thực hiện thêm một số yêu cầu với policy – based routing tiêp theo bài lab đã thực hiện trong bài viết trước. Trong các bài viết tới, chúng ta sẽ tiếp tục tìm hiểu về PBR.
Cảm ơn các bạn!
Hẹn gặp lại các bạn trong các bài viết tiếp theo!