Giới thiệu giải pháp GRE Recursive Lookup

Thảo luận trong 'Routing' bắt đầu bởi lanhha, 24/11/17.

  1. lanhha

    lanhha New Member

    Trong bài viết 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.

    Sơ đồ
    upload_2017-11-24_10-11-7.jpeg

    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.
     

trang này