Hướng dẫn troubleshooting GRE Tunnel
Generic Routing Encapsulation (GRE) là một giao thức đường hầm (tunneling protocol) được sử dụng để đóng gói nhiều loại gói tin lớp mạng khác nhau bên trong giao thức GRE để có thể truyền qua mạng IP. Ví dụ, bạn có thể đóng gói các gói tin IPv6 bên trong GRE để truyền qua hạ tầng IPv4. GRE là một chủ đề khá rộng. Tuy nhiên, trong phạm vi phục vụ cho việc troubleshooting và ôn tập chứng chỉ CCNP, chúng ta sẽ tập trung vào các lợi ích của GRE trong kết nối site-to-site và những nguyên nhân thường gặp khiến GRE Tunnel không hoạt động như mong đợi.
GRE Tunnel hoạt động như thế nào?
GRE cho phép tạo một kết nối điểm-điểm (point-to-point) ảo giữa hai router Cisco ở xa nhau thông qua mạng IP trung gian.
Trong ví dụ HQ (San Francisco), Branch (Toronto) cùng kết nối Internet nhưng không kết nối trực tiếp với nhau. Thông qua GRE Tunnel HQ sử dụng địa chỉ Tunnel: 172.16.1.1/30, Branch sử dụng địa chỉ Tunnel: 172.16.1.2/30.
Cấu hình router HQ:
interface Tunnel0
ip address 172.16.1.1 255.255.255.252
tunnel source FastEthernet3/0
tunnel destination 203.0.113.1
Router chi nhánh Branch:
interface Tunnel0
ip address 172.16.1.2 255.255.255.252
tunnel source FastEthernet1/0
tunnel destination 192.0.2.1
Nếu không chỉ định tunnel mode thì Cisco sẽ sử dụng mặc định:
tunnel mode gre ip hay còn gọi là GRE/IP.
Lợi ích lớn nhất của GRE
GRE cho phép hai site trao đổi thông tin định tuyến động (OSPF, EIGRP, RIP...) qua Internet. Ví dụ Router HQ học được mạng 192.168.1.0/24 từ Branch. Router Branch học được mạng 10.1.1.0/24 từ HQ. Điều này rất hữu ích khi xây dựng VPN Site-to-Site hoặc DMVPN.
Cấu trúc gói tin GRE
Khi một gói tin đi qua GRE Tunnel, Router Cisco sẽ:
Bước 1: Giữ nguyên gói tin gốc (Passenger Protocol)
Bước 2: Thêm GRE Header (Carrier Protocol)
Bước 3: Thêm IP Header mới (Transport Protocol)
Điều này cho phép gói tin riêng tư bên trong được vận chuyển qua Internet công cộng.
7 Nguyên Nhân Thường Gặp Khi GRE Tunnel Không Hoạt Động
1. Hai đầu không reach được nhau qua mạng công cộng
GRE Tunnel không thể hình thành nếu hai router không ping được địa chỉ public của nhau. Cách Kiểm tra:
ping <public-ip-remote>
Ví dụ:
HQ# ping 203.0.113.1
Branch# ping 192.0.2.1
Nếu ping thất bại, hãy kiểm tra Routing, ISP, ACL, Firewall, NAT.
2. Địa chỉ Tunnel IP không cùng subnet
Tunnel Interface thực chất là một kết nối point-to-point. Hai đầu tunnel phải nằm trong cùng subnet. Ví dụ đúng:
HQ 172.16.1.1/30
Branch 172.16.1.2/30
Lệnh dùng để Kiểm tra:
show interfaces tunnel 0
show ip interface brief
3. Sai Tunnel Source hoặc Tunnel Destination
GRE cần biết tunnel bắt đầu từ đâu (source) và tunnel kết thúc ở đâu (destination). Hai đầu phải đối xứng. Ví dụ:
HQ:
tunnel source 192.0.2.1
tunnel destination 203.0.113.1
Branch:
tunnel source 203.0.113.1
tunnel destination 192.0.2.1
Chỉ cần sai một địa chỉ là Tunnel sẽ down.
4. Sai Tunnel Mode
Để vận chuyển IPv4 hoặc IPv6 qua mạng IPv4 cần dùng:
tunnel mode gre ip
Khi kiểm tra:
show interfaces tunnel 0
Bạn sẽ thấy:
Tunnel protocol/transport GRE/IP
5. ACL hoặc Firewall chặn GRE
Đây là lỗi rất phổ biến ngoài thực tế. GRE không dùng TCP hay UDP.. GRE sử dụng IP Protocol Number = 47. Nhiều firewall cho phép TCP, UDP, ICMP nhưng lại vô tình chặn Protocol 47.
Kiểm tra:
show ip interface
show access-list
Nếu có ACL giữa hai site, hãy đảm bảo GRE được permit.
6. Fragmentation và MTU
GRE Header chiếm 24 bytes, do đó 1500 - 24 = 1476 bytes
Payload thực tế chỉ còn khoảng 1476 bytes. Nếu máy trạm gửi gói lớn hơn 1476 bytes, Router phải thực hiện fragmentation. Hậu quả là tăng CPU, tăng độ trễ, giảm throughput, hiệu năng tunnel giảm. Kiểm tra:
show interfaces tunnel 0
Ví dụ:
Tunnel transport MTU 1476 bytes
7. Recursive Routing
Đây là lỗi kinh điển trong GRE. Thông báo:
%TUN-5-RECURDOWN:
Tunnel0 temporarily disabled due to recursive routing
Ý nghĩa là Router đang cố đi tới địa chỉ đích của tunnel bằng chính Tunnel Interface.
Ví dụ:
Tunnel Destination
↓
Routing Table
↓
Tunnel0
Điều này tạo vòng lặp logic. Tunnel sẽ tự động shutdown để bảo vệ hệ thống. Nguyên nhân thường gặp của lỗi này là:
Tunnel UP không đồng nghĩa lưu lượng sẽ đi qua được.
Nếu muốn học route động qua GRE, EIGRP, OSPF, IS-IS
thì Tunnel Interface phải được đưa vào tiến trình định tuyến. Ví dụ:
router ospf 1
network 172.16.1.0 0.0.0.3 area 0
Nếu chúng ta lỡ quên bước này thì tunnel vẫn UP, ping tunnel vẫn được, nhưng lúc này router không học route từ đầu bên kia
Đây là lỗi rất dễ gặp trong quá trình triển khai GRE thực tế.
Góc nhìn thực chiến CCNP/CCIE
Khi gặp sự cố GRE Tunnel, thứ tự kiểm tra nhanh mà chúng ta nên thực hiện thường sẽ là:
Generic Routing Encapsulation (GRE) là một giao thức đường hầm (tunneling protocol) được sử dụng để đóng gói nhiều loại gói tin lớp mạng khác nhau bên trong giao thức GRE để có thể truyền qua mạng IP. Ví dụ, bạn có thể đóng gói các gói tin IPv6 bên trong GRE để truyền qua hạ tầng IPv4. GRE là một chủ đề khá rộng. Tuy nhiên, trong phạm vi phục vụ cho việc troubleshooting và ôn tập chứng chỉ CCNP, chúng ta sẽ tập trung vào các lợi ích của GRE trong kết nối site-to-site và những nguyên nhân thường gặp khiến GRE Tunnel không hoạt động như mong đợi.
GRE Tunnel hoạt động như thế nào?
GRE cho phép tạo một kết nối điểm-điểm (point-to-point) ảo giữa hai router Cisco ở xa nhau thông qua mạng IP trung gian.
Trong ví dụ HQ (San Francisco), Branch (Toronto) cùng kết nối Internet nhưng không kết nối trực tiếp với nhau. Thông qua GRE Tunnel HQ sử dụng địa chỉ Tunnel: 172.16.1.1/30, Branch sử dụng địa chỉ Tunnel: 172.16.1.2/30.
Cấu hình router HQ:
interface Tunnel0
ip address 172.16.1.1 255.255.255.252
tunnel source FastEthernet3/0
tunnel destination 203.0.113.1
Router chi nhánh Branch:
interface Tunnel0
ip address 172.16.1.2 255.255.255.252
tunnel source FastEthernet1/0
tunnel destination 192.0.2.1
Nếu không chỉ định tunnel mode thì Cisco sẽ sử dụng mặc định:
tunnel mode gre ip hay còn gọi là GRE/IP.
Lợi ích lớn nhất của GRE
GRE cho phép hai site trao đổi thông tin định tuyến động (OSPF, EIGRP, RIP...) qua Internet. Ví dụ Router HQ học được mạng 192.168.1.0/24 từ Branch. Router Branch học được mạng 10.1.1.0/24 từ HQ. Điều này rất hữu ích khi xây dựng VPN Site-to-Site hoặc DMVPN.
Cấu trúc gói tin GRE
Khi một gói tin đi qua GRE Tunnel, Router Cisco sẽ:
Bước 1: Giữ nguyên gói tin gốc (Passenger Protocol)
Bước 2: Thêm GRE Header (Carrier Protocol)
Bước 3: Thêm IP Header mới (Transport Protocol)
Điều này cho phép gói tin riêng tư bên trong được vận chuyển qua Internet công cộng.
7 Nguyên Nhân Thường Gặp Khi GRE Tunnel Không Hoạt Động
1. Hai đầu không reach được nhau qua mạng công cộng
GRE Tunnel không thể hình thành nếu hai router không ping được địa chỉ public của nhau. Cách Kiểm tra:
ping <public-ip-remote>
Ví dụ:
HQ# ping 203.0.113.1
Branch# ping 192.0.2.1
Nếu ping thất bại, hãy kiểm tra Routing, ISP, ACL, Firewall, NAT.
2. Địa chỉ Tunnel IP không cùng subnet
Tunnel Interface thực chất là một kết nối point-to-point. Hai đầu tunnel phải nằm trong cùng subnet. Ví dụ đúng:
HQ 172.16.1.1/30
Branch 172.16.1.2/30
Lệnh dùng để Kiểm tra:
show interfaces tunnel 0
show ip interface brief
3. Sai Tunnel Source hoặc Tunnel Destination
GRE cần biết tunnel bắt đầu từ đâu (source) và tunnel kết thúc ở đâu (destination). Hai đầu phải đối xứng. Ví dụ:
HQ:
tunnel source 192.0.2.1
tunnel destination 203.0.113.1
Branch:
tunnel source 203.0.113.1
tunnel destination 192.0.2.1
Chỉ cần sai một địa chỉ là Tunnel sẽ down.
4. Sai Tunnel Mode
Để vận chuyển IPv4 hoặc IPv6 qua mạng IPv4 cần dùng:
tunnel mode gre ip
Khi kiểm tra:
show interfaces tunnel 0
Bạn sẽ thấy:
Tunnel protocol/transport GRE/IP
5. ACL hoặc Firewall chặn GRE
Đây là lỗi rất phổ biến ngoài thực tế. GRE không dùng TCP hay UDP.. GRE sử dụng IP Protocol Number = 47. Nhiều firewall cho phép TCP, UDP, ICMP nhưng lại vô tình chặn Protocol 47.
Kiểm tra:
show ip interface
show access-list
Nếu có ACL giữa hai site, hãy đảm bảo GRE được permit.
6. Fragmentation và MTU
GRE Header chiếm 24 bytes, do đó 1500 - 24 = 1476 bytes
Payload thực tế chỉ còn khoảng 1476 bytes. Nếu máy trạm gửi gói lớn hơn 1476 bytes, Router phải thực hiện fragmentation. Hậu quả là tăng CPU, tăng độ trễ, giảm throughput, hiệu năng tunnel giảm. Kiểm tra:
show interfaces tunnel 0
Ví dụ:
Tunnel transport MTU 1476 bytes
7. Recursive Routing
Đây là lỗi kinh điển trong GRE. Thông báo:
%TUN-5-RECURDOWN:
Tunnel0 temporarily disabled due to recursive routing
Ý nghĩa là Router đang cố đi tới địa chỉ đích của tunnel bằng chính Tunnel Interface.
Ví dụ:
Tunnel Destination
↓
Routing Table
↓
Tunnel0
Điều này tạo vòng lặp logic. Tunnel sẽ tự động shutdown để bảo vệ hệ thống. Nguyên nhân thường gặp của lỗi này là:
- Cấu hình Route mặc định sai
- Dynamic routing học sai đường đi
- Thiếu route tới địa chỉ public của peer
Tunnel UP không đồng nghĩa lưu lượng sẽ đi qua được.
Nếu muốn học route động qua GRE, EIGRP, OSPF, IS-IS
thì Tunnel Interface phải được đưa vào tiến trình định tuyến. Ví dụ:
router ospf 1
network 172.16.1.0 0.0.0.3 area 0
Nếu chúng ta lỡ quên bước này thì tunnel vẫn UP, ping tunnel vẫn được, nhưng lúc này router không học route từ đầu bên kia
Đây là lỗi rất dễ gặp trong quá trình triển khai GRE thực tế.
Góc nhìn thực chiến CCNP/CCIE
Khi gặp sự cố GRE Tunnel, thứ tự kiểm tra nhanh mà chúng ta nên thực hiện thường sẽ là:
- Ping địa chỉ public hai đầu.
- Kiểm tra Tunnel Source/Destination.
- Kiểm tra trạng thái Tunnel Interface.
- Kiểm tra Protocol 47 có bị firewall chặn hay không.
- Kiểm tra routing tới Tunnel Destination.
- Kiểm tra MTU/Fragmentation.
- Kiểm tra OSPF/EIGRP đang chạy trên Tunnel Interface hay chưa.