Sunday, January 19, 2025

[Cisco] GRE Recursive Lookup

-

Trong bài viết tuần này, chúng ta cùng trao đổi về một lỗi thường xảy ra khi sử dụng giải pháp GRE tunnel trong mạng: Recursive routing lookup.
Như thường lệ, để cùng tìm hiểu về vấn đề quan tâm, chúng ta cùng trao đổi thông qua một bài lab ví dụ:

Sơ đồ:

Hình 1 – Sơ đồ bài lab ví dụ

Mô tả
– Sơ đồ gồm 3 router được đấu nối với nhau như trên hình 1.
– Trên sơ đồ này, chúng ta sẽ khảo sát hiện tượng Recursive routing lookup.
– Bạn đọc có thể thực hiện bài lab này trên thiết bị thật hoặc bằng giả lập trên GNS3.
Thực hiện
Bước 1: Cấu hình ban đầu
– 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.
– Cấu hình định tuyến RIPv2 trên các router đảm bảo mọi địa chỉ trên sơ đồ thấy nhau.
Cấu hình
Trên R1:

R1(config)#interface loopback 0
R1(config-if)#ip address 10.1.1.1 255.255.255.0
R1(config-if)#exit

R1(config)#interface loopback 1
R1(config-if)#ip address 10.1.11.1 255.255.255.0
R1(config-if)#exit

R1(config)#interface f0/0
R1(config-if)#no shutdown
R1(config-if)#ip address 10.1.12.1 255.255.255.0
R1(config-if)#exit

R1(config)#router rip
R1(config-router)#version 2
R1(config-router)#network 10.0.0.0
R1(config-router)#exit

Trên R2

R2(config)#interface f0/0
R2(config-if)#no shutdown
R2(config-if)#ip address 10.1.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 10.1.23.2 255.255.255.0
R2(config-if)#exit

R2(config)#router rip
R2(config-router)#version 2
R2(config-router)#network 10.0.0.0
R2(config-router)#exit

Trên R3

R3(config)#interface f0/1
R3(config-if)#no shutdown
R3(config-if)#ip address 10.1.23.3 255.255.255.0
R3(config-if)#exit

R3(config)#interface loopback 0
R3(config-if)#ip address 10.1.3.1 255.255.255.0
R3(config-if)#exit

R3(config)#interface loopback 1
R3(config-if)#ip address 10.1.33.1 255.255.255.0
R3(config-if)#exit

R3(config)#router rip
R3(config-router)#version 2
R3(config-router)#network 10.0.0.0
R3(config-router)#exit

Kiểm tra
Ta kiểm tra rằng định tuyến đã hội tụ và các địa chỉ có thể đi đến được nhau:

R1#show ip route rip
 10.0.0.0/24 is subnetted, 6 subnets
R 10.1.3.0 [120/2] via 10.1.12.2, 00:00:07, FastEthernet0/0
R 10.1.23.0 [120/1] via 10.1.12.2, 00:00:07, FastEthernet0/0
R 10.1.33.0 [120/2] via 10.1.12.2, 00:00:07, FastEthernet0/0

R2#show ip route rip
 10.0.0.0/24 is subnetted, 6 subnets
R 10.1.11.0 [120/1] via 10.1.12.1, 00:00:15, FastEthernet0/0 
R 10.1.3.0 [120/1] via 10.1.23.3, 00:00:03, FastEthernet0/1
R 10.1.1.0 [120/1] via 10.1.12.1, 00:00:15, FastEthernet0/0
R 10.1.33.0 [120/1] via 10.1.23.3, 00:00:03, FastEthernet0/1

R3#show ip route rip
 10.0.0.0/24 is subnetted, 6 subnets
R 10.1.11.0 [120/2] via 10.1.23.2, 00:00:26, FastEthernet0/1
R 10.1.12.0 [120/1] via 10.1.23.2, 00:00:26, FastEthernet0/1
R 10.1.1.0 [120/2] via 10.1.23.2, 00:00:26, FastEthernet0/1

R1#ping 10.1.3.1 source 10.1.1.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.1.3.1, timeout is 2 seconds:
Packet sent with a source address of 10.1.1.1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 56/72/108 ms

R1#ping 10.1.33.1 source 10.1.11.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.1.33.1, timeout is 2 seconds:
Packet sent with a source address of 10.1.11.1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 60/71/88 ms 

Bước 2: Cấu hình GRE
– Thực hiện thiết lập một GRE tunnel giữa R1 và R3 sử dụng các địa chỉ trên các loopback 0 của hai router. Trên tunnel sử dụng subnet IP 10.1.13.0/24, trong đó cổng tunnel phía R1 đặt địa chỉ là “.1” và cổng tunnel phía R3 đặt địa chỉ là “.3”.
– Cấu hình khắc phục lỗi recursive routing lookup xảy ra trong bước này.
– Đảm bảo rằng các loopback 1 của hai router R1 và R3 đi đến nhau thông qua GRE tunnel.
Thực hiện
Đầu tiên, ta thực hiện cấu hình GRE tunnel giữa R1 và R3 sử dụng các địa chỉ loopback 0 trên hai router để xây dựng đường hầm. Cũng trong cấu hình này, ta thực hiện đặt địa chỉ IP trên các interface tunnel mới thiết lập:

R1(config)#interface tunnel 13
R1(config-if)#tunnel source loopback 0
R1(config-if)#tunnel destination 10.1.3.1
R1(config-if)#ip address 10.1.13.1 255.255.255.0
R1(config-if)#exit

R3(config)#interface tunnel 13
R3(config-if)#tunnel source loopback 0
R3(config-if)#tunnel destination 10.1.1.1
R3(config-if)#ip address 10.1.13.3 255.255.255.0
R3(config-if)#exit

Lúc này, lỗi recursive routing lookup xảy ra trên router xây dựng tunnel sau (trong bước này là R3) khiến interface tunnel trên router này chuyển trạng thái qua lại liên tục giữa up và down:

*Mar 1 00:25:58.955: %LINEPROTO-5-UPDOWN: Line protocol on Interface Tunnel13,
changed state to up
R3# 
*Mar 1 00:26:07.959: %TUN-5-RECURDOWN: Tunnel13 temporarily disabled due to
recursive routing
*Mar 1 00:26:08.955: %LINEPROTO-5-UPDOWN: Line protocol on Interface Tunnel13,
changed state to down
R3#
*Mar 1 00:27:18.955: %LINEPROTO-5-UPDOWN: Line protocol on Interface Tunnel13,
changed state to up
R3#
*Mar 1 00:27:27.959: %TUN-5-RECURDOWN: Tunnel13 temporarily disabled due to
recursive routing
*Mar 1 00:27:28.955: %LINEPROTO-5-UPDOWN: Line protocol on Interface Tunnel13,
changed state to down
R3#
*Mar 1 00:28:38.955: %LINEPROTO-5-UPDOWN: Line protocol on Interface Tunnel13,
changed state to up
R3#
*Mar 1 00:28:47.959: %TUN-5-RECURDOWN: Tunnel13 temporarily disabled due to
recursive routing
*Mar 1 00:28:48.955: %LINEPROTO-5-UPDOWN: Line protocol on Interface Tunnel13,
changed state to down 

Lỗi Recursive Routing (định tuyến đệ quy) xảy ra khi sự tra cứu định tuyến chỉ ra rằng để đi đến subnet 1 thì cần phải đi đến next hop thuộc subnet 2, nhưng để đi đến được subnet 2 thì lại phải đi đến next hop thuộc subnet 1.
Ta thấy trong trường hợp này, để xây dựng được tunnel, hai địa chỉ trên các loopback 0 của R1 và R3 là 10.1.1.1 và 10.1.3.1 cần phải đi được đến nhau. Việc định tuyến để hai địa chỉ này thấy nhau được thực hiện thông qua cấu hình định tuyến RIPv2 trên hai router. Sau khi chạy định tuyến xong, hai địa chỉ loopback 0 đi được đến nhau, tunnel được thiết lập. Khi tunnel được thiết lập, vì địa chỉ ta đặt trên tunnel thuộc subnet 10.1.23.0/24 nên tunnel cũng tham gia định tuyến RIP. Khi tunnel tham gia định tuyến RIP, hai loopback 0 của hai router lại được học thông qua tunnel. Điều này dẫn đến Recursive Routing: để thiết lập được tunnel, hai loopback 0 của R1 và R3 phải thấy nhau; để hai loopback 0 này thấy nhau chúng lại được định tuyến để đi đến nhau thông qua tunnel! Khi hiện tượng này xảy ra, một thông báo log sẽ được phát ra và interface tunnel sẽ chuyển sang trạng thái down:

*Mar 1 00:16:57.951: %TUN-5-RECURDOWN: Tunnel13 temporarily disabled
due to recursive routing
*Mar 1 00:16:58.951: %LINEPROTO-5-UPDOWN: Line protocol on Interface
Tunnel13, changed state to down

Để khắc phục hiện tượng này, chúng ta chỉ cần đảm bảo các địa chỉ source và destination IP được dùng để tạo nên tunnel không chọn đường đi đến nhau thông qua tunnel nữa.
Trong bài lab này, để đảm bảo được như vậy, chúng ta sử dụng kỹ thuật distribute – list trên tiến trình RIP của hai router để thực hiện lọc không quảng bá các route 10.1.1.0/24 và 10.1.3.0/24 ra khỏi các cổng tunnel:

R1(config)#access-list 1 deny 10.1.1.0
R1(config)#access-list 1 permit any

R1(config)#router rip
R1(config-router)#distribute-list 1 out tunnel 13
R1(config-router)#exit

R3(config)#access-list 3 deny 10.1.3.0
R3(config)#access-list 3 permit any

R3(config)#router rip
R3(config-router)#distribute-list 3 out tunnel 13
R3(config-router)#exit

Sau khi thực hiện xong, lỗi Recursive Routing được khắc phục, interface tunnel 13 trên R3 duy trì trạng thái up trở lại:

*Mar 1 00:29:58.955: %LINEPROTO-5-UPDOWN: Line protocol on Interface
Tunnel13, changed state to up

Kiểm tra
Ta thực hiện kiểm tra rằng RIP đã hội tụ trên hai router R1, R3 và đảm bảo các loopback 1 đi đến nhau thông qua tunnel, còn các loopback 0 đi đến nhau thông qua các đường truyền vật lý:

R1#show ip route rip
 10.0.0.0/24 is subnetted, 7 subnets
R 10.1.3.0 [120/2] via 10.1.12.2, 00:00:26, FastEthernet0/0
R 10.1.23.0 [120/1] via 10.1.13.3, 00:00:15, Tunnel13
 [120/1] via 10.1.12.2, 00:00:26, FastEthernet0/0
R 10.1.33.0 [120/1] via 10.1.13.3, 00:00:15, Tunnel13

R3#show ip route rip
 10.0.0.0/24 is subnetted, 7 subnets
R 10.1.11.0 [120/1] via 10.1.13.1, 00:00:25, Tunnel13
R 10.1.12.0 [120/1] via 10.1.23.2, 00:00:08, FastEthernet0/1
 [120/1] via 10.1.13.1, 00:00:25, Tunnel13
R 10.1.1.0 [120/2] via 10.1.23.2, 00:00:08, FastEthernet0/1

Các loopback 1 đi đến được nhau:

R1#ping 10.1.33.1 source 10.1.11.1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.1.33.1, timeout is 2 seconds:
Packet sent with a source address of 10.1.11.1
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 56/73/100 ms

Đến đây, ta đã khắc phục được lỗi recursive routing loopkup với cấu hình GRE tunnel thực hiện ở trên.
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!

Previous article
Next article

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories