Khắc phục sự cố GRE Tunnel trên Cisco – Hiểu đúng để Troubleshoot hiệu quả
Generic Routing Encapsulation (GRE) là một trong những công nghệ tunneling kinh điển trong thế giới mạng Cisco. Dù ngày nay chúng ta có nhiều lựa chọn hiện đại hơn như IPsec VPN, DMVPN hay SD-WAN overlay, GRE vẫn là một nền tảng kiến thức cực kỳ quan trọng, đặc biệt đối với kỹ sư mạng học theo lộ trình CCNP/CCIE.
GRE thường xuất hiện trong các bài lab routing, VPN overlay, multicast transport, dynamic routing over tunnel, hoặc trong các bài troubleshooting thực chiến khi cần vận chuyển một loại traffic qua hạ tầng IP không hỗ trợ trực tiếp loại traffic đó.
Bài viết này sẽ đi từ nguyên lý hoạt động đến cách khắc phục các lỗi GRE tunnel phổ biến trên thiết bị Cisco. Nội dung được xây dựng từ tài liệu kỹ thuật Cisco/CCNP troubleshooting nhưng được trình bày lại theo hướng đào tạo thực chiến.
GRE Tunnel là gì?
GRE (Generic Routing Encapsulation) là một tunneling protocol cho phép đóng gói (encapsulate) nhiều loại gói tin lớp Network vào bên trong một giao thức vận chuyển GRE để truyền qua mạng IP.
Nói đơn giản hơn:
Bạn có thể lấy một gói IPv6, hoặc IPv4, thậm chí multicast traffic, đóng gói nó vào GRE, sau đó gửi qua một mạng IPv4 thông thường.
Ví dụ:
GRE chính là công cụ để tạo “đường hầm logic” đó.
Kiến trúc GRE tunnel
Ví dụ:
HQ (San Francisco)
LAN nội bộ:
10.1.1.0/24
Public interface:
192.0.2.1
Tunnel IP:
172.16.1.1/30
Branch (Toronto)
LAN nội bộ:
192.168.1.0/24
Public interface:
203.0.113.1
Tunnel IP:
172.16.1.2/30
Mặc dù hai router không kết nối trực tiếp, GRE tunnel sẽ tạo ra một virtual point-to-point link giữa chúng.
Logic nhìn từ routing table:
HQ thấy Branch như hàng xóm trực tiếp.
Branch cũng thấy HQ tương tự.
Cấu hình GRE tunnel
HQ
interface Tunnel0
ip address 172.16.1.1 255.255.255.252
tunnel source FastEthernet3/0
tunnel destination 203.0.113.1 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, Cisco mặc định dùng:
GRE/IP
Nếu muốn explicit:
tunnel mode gre ip
GRE encapsulation hoạt động như thế nào?
GRE sử dụng mô hình encapsulation ba lớp. Passenger protocol
Đây là gói gốc.
Ví dụ:
Carrier protocol
GRE header được thêm vào để mang payload.
Transport protocol
Cisco thêm outer IP header để gói GRE có thể đi qua mạng public.
Kết quả:
Original Packet
↓
Add GRE Header
↓
Add New IP Header
↓
Send over Internet
Ví dụ:
Một gói IPv6 nội bộ có thể được đóng gói:
IPv6 payload
inside
GRE
inside
IPv4
Điều này giải thích tại sao GRE cực kỳ hữu ích trong các môi trường transition.
Lợi ích của GRE
Điểm mạnh lớn nhất của GRE là khả năng vận chuyển routing protocol traffic.
Ví dụ:
Không có GRE:
Internet không cho phép private routing adjacency giữa hai site.
Không thể chạy:
Có GRE:
Tunnel hoạt động như link point-to-point.
Bạn có thể chạy dynamic routing trên đó.
Ví dụ routing table tại HQ:
D 192.168.1.0/24 [90/26880256] via 172.16.1.2, Tunnel0
Điều này cho thấy EIGRP đang học route từ tunnel.
Kiểm tra GRE tunnel
Kiểm tra trạng thái interface
show interfaces tunnel 0
Ví dụ:
Tunnel0 is up, line protocol is up
Nếu thấy:
up/down
hoặc
administratively down
thì phải điều tra tiếp.
Kiểm tra nhanh toàn bộ interface
show ip interface brief
Ví dụ:
Tunnel0 172.16.1.1 YES manual up up
Kiểm tra reachability public endpoint
HQ phải ping được public IP của Branch:
ping 203.0.113.1
Branch phải ping được HQ:
ping 192.0.2.1
Nếu bước này fail thì GRE chắc chắn không lên.
GRE không tạo tunnel nếu underlay không reach được.
Các lỗi GRE tunnel phổ biến khi troubleshooting
1. Public reachability failure
Đây là lỗi phổ biến nhất.
Tunnel phụ thuộc hoàn toàn vào underlay IP connectivity.
Nếu router A không ping được public IP router B:
GRE fail.
Kiểm tra:
show ip route
ping
traceroute
Cần xác minh:
2. Tunnel IP không cùng subnet
Tunnel GRE là virtual point-to-point link.
Hai đầu phải cùng subnet.
Sai:
HQ
172.16.1.1/30
Branch
172.16.2.2/30
Tunnel adjacency sẽ fail.
Kiểm tra:
show interfaces tunnel 0
hoặc:
show ip interface brief
3. Tunnel source / destination sai
GRE tunnel cần biết:
Ví dụ đúng:
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
Nếu không đối xứng:
Tunnel fail.
4. Tunnel mode sai
Muốn vận chuyển IPv4 hoặc IPv6 qua GRE over IPv4:
Cần:
tunnel mode gre ip
Kiểm tra:
show interfaces tunnel 0
Bạn sẽ thấy:
Tunnel protocol/transport GRE/IP
5. ACL chặn GRE
GRE không dùng TCP hay UDP.
GRE dùng:
IP Protocol Number 47
Đây là lỗi rất hay gặp.
Firewall hoặc ACL chỉ permit:
tcp
udp
icmp
nhưng không permit protocol 47.
Kết quả:
Tunnel không hoạt động.
Kiểm tra:
show ip interface
show access-list
6. MTU và fragmentation
GRE thêm overhead khoảng:
24 bytes
Nếu physical MTU:
1500 bytes
thì payload thực tế chỉ còn:
1476 bytes
Nếu packet lớn hơn:
Fragmentation xảy ra.
Hệ quả:
Kiểm tra:
show interfaces tunnel 0
Ví dụ:
Tunnel transport MTU 1476 bytes
7. Recursive routing
Đây là lỗi GRE kinh điển.
Thông báo:
%TUN-5-RECURDOWN:
Tunnel0 temporarily disabled due to recursive routing
Ý nghĩa:
Router đang cố route traffic đến tunnel destination… bằng chính tunnel đó.
Ví dụ:
Muốn đến:
203.0.113.1
nhưng routing table lại chỉ ra:
via Tunnel0
=> loop logic.
Tunnel tự shutdown để tránh recursion.
Cách xử lý:
Đảm bảo public tunnel destination được route qua physical interface.
Không được route qua tunnel.
8. Routing protocol không chạy trên tunnel
Tunnel lên nhưng không học route.
Rất thường gặp.
Ví dụ:
Tunnel:
up/up
nhưng:
show ip route
không thấy remote network.
Nguyên nhân:
OSPF/EIGRP chưa enable trên tunnel.
Ví dụ:
router ospf 1
network 172.16.1.0 0.0.0.3 area 0
hoặc:
router eigrp 100
network 172.16.1.0 0.0.0.3
GRE over IPv6
GRE không chỉ vận chuyển IPv4.
Ví dụ:
Bạn có thể chạy IPv6 traffic qua IPv4 underlay.
Tunnel source/destination vẫn là IPv4:
tunnel source 192.0.2.1
tunnel destination 203.0.113.1
Nhưng tunnel interface dùng IPv6:
ipv6 address FE80::1 link-local
Đây là kỹ thuật transition cổ điển nhưng vẫn rất hữu ích để hiểu encapsulation.
Tư duy troubleshooting thực chiến
Khi GRE lỗi, thứ tự suy nghĩ nên là:
Layer 3 underlay trước
Ping public IP được chưa?
Nếu chưa, đừng nhìn tunnel.
Tunnel logic tiếp theo
Policy/security
ACL/firewall có permit protocol 47 không?
Performance
MTU / fragmentation?
Routing intelligence
Tunnel destination có bị recursive route không?
Dynamic routing có chạy trên tunnel không?
Kết luận
GRE là một công nghệ deceptively simple.
Cấu hình chỉ vài dòng.
Nhưng troubleshooting lại đòi hỏi tư duy routing rất chắc.
Một GRE tunnel hoạt động tốt yêu cầu:
Nếu hiểu sâu GRE, bạn sẽ dễ dàng tiếp cận các công nghệ overlay hiện đại hơn như:
Vì bản chất, tất cả đều là câu chuyện:
encapsulation + transport + routing intelligence
Generic Routing Encapsulation (GRE) là một trong những công nghệ tunneling kinh điển trong thế giới mạng Cisco. Dù ngày nay chúng ta có nhiều lựa chọn hiện đại hơn như IPsec VPN, DMVPN hay SD-WAN overlay, GRE vẫn là một nền tảng kiến thức cực kỳ quan trọng, đặc biệt đối với kỹ sư mạng học theo lộ trình CCNP/CCIE.
GRE thường xuất hiện trong các bài lab routing, VPN overlay, multicast transport, dynamic routing over tunnel, hoặc trong các bài troubleshooting thực chiến khi cần vận chuyển một loại traffic qua hạ tầng IP không hỗ trợ trực tiếp loại traffic đó.
Bài viết này sẽ đi từ nguyên lý hoạt động đến cách khắc phục các lỗi GRE tunnel phổ biến trên thiết bị Cisco. Nội dung được xây dựng từ tài liệu kỹ thuật Cisco/CCNP troubleshooting nhưng được trình bày lại theo hướng đào tạo thực chiến.
GRE Tunnel là gì?
GRE (Generic Routing Encapsulation) là một tunneling protocol cho phép đóng gói (encapsulate) nhiều loại gói tin lớp Network vào bên trong một giao thức vận chuyển GRE để truyền qua mạng IP.
Nói đơn giản hơn:
Bạn có thể lấy một gói IPv6, hoặc IPv4, thậm chí multicast traffic, đóng gói nó vào GRE, sau đó gửi qua một mạng IPv4 thông thường.
Ví dụ:
- Chi nhánh A và chi nhánh B không kết nối trực tiếp
- Cả hai chỉ có Internet public
- Nhưng bạn muốn hai router hoạt động như thể đang nối point-to-point với nhau
GRE chính là công cụ để tạo “đường hầm logic” đó.
Kiến trúc GRE tunnel
Ví dụ:
HQ (San Francisco)
LAN nội bộ:
10.1.1.0/24
Public interface:
192.0.2.1
Tunnel IP:
172.16.1.1/30
Branch (Toronto)
LAN nội bộ:
192.168.1.0/24
Public interface:
203.0.113.1
Tunnel IP:
172.16.1.2/30
Mặc dù hai router không kết nối trực tiếp, GRE tunnel sẽ tạo ra một virtual point-to-point link giữa chúng.
Logic nhìn từ routing table:
HQ thấy Branch như hàng xóm trực tiếp.
Branch cũng thấy HQ tương tự.
Cấu hình GRE tunnel
HQ
interface Tunnel0
ip address 172.16.1.1 255.255.255.252
tunnel source FastEthernet3/0
tunnel destination 203.0.113.1 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, Cisco mặc định dùng:
GRE/IP
Nếu muốn explicit:
tunnel mode gre ip
GRE encapsulation hoạt động như thế nào?
GRE sử dụng mô hình encapsulation ba lớp. Passenger protocol
Đây là gói gốc.
Ví dụ:
- IPv4 packet
- IPv6 packet
- multicast packet
Carrier protocol
GRE header được thêm vào để mang payload.
Transport protocol
Cisco thêm outer IP header để gói GRE có thể đi qua mạng public.
Kết quả:
Original Packet
↓
Add GRE Header
↓
Add New IP Header
↓
Send over Internet
Ví dụ:
Một gói IPv6 nội bộ có thể được đóng gói:
IPv6 payload
inside
GRE
inside
IPv4
Điều này giải thích tại sao GRE cực kỳ hữu ích trong các môi trường transition.
Lợi ích của GRE
Điểm mạnh lớn nhất của GRE là khả năng vận chuyển routing protocol traffic.
Ví dụ:
Không có GRE:
Internet không cho phép private routing adjacency giữa hai site.
Không thể chạy:
- OSPF
- EIGRP
- RIP
- multicast routing
Có GRE:
Tunnel hoạt động như link point-to-point.
Bạn có thể chạy dynamic routing trên đó.
Ví dụ routing table tại HQ:
D 192.168.1.0/24 [90/26880256] via 172.16.1.2, Tunnel0
Điều này cho thấy EIGRP đang học route từ tunnel.
Kiểm tra GRE tunnel
Kiểm tra trạng thái interface
show interfaces tunnel 0
Ví dụ:
Tunnel0 is up, line protocol is up
Nếu thấy:
up/down
hoặc
administratively down
thì phải điều tra tiếp.
Kiểm tra nhanh toàn bộ interface
show ip interface brief
Ví dụ:
Tunnel0 172.16.1.1 YES manual up up
Kiểm tra reachability public endpoint
HQ phải ping được public IP của Branch:
ping 203.0.113.1
Branch phải ping được HQ:
ping 192.0.2.1
Nếu bước này fail thì GRE chắc chắn không lên.
GRE không tạo tunnel nếu underlay không reach được.
Các lỗi GRE tunnel phổ biến khi troubleshooting
1. Public reachability failure
Đây là lỗi phổ biến nhất.
Tunnel phụ thuộc hoàn toàn vào underlay IP connectivity.
Nếu router A không ping được public IP router B:
GRE fail.
Kiểm tra:
show ip route
ping
traceroute
Cần xác minh:
- default route
- ISP routing
- NAT issue
- upstream filtering
2. Tunnel IP không cùng subnet
Tunnel GRE là virtual point-to-point link.
Hai đầu phải cùng subnet.
Sai:
HQ
172.16.1.1/30
Branch
172.16.2.2/30
Tunnel adjacency sẽ fail.
Kiểm tra:
show interfaces tunnel 0
hoặc:
show ip interface brief
3. Tunnel source / destination sai
GRE tunnel cần biết:
- bắt đầu từ đâu
- kết thúc ở đâu
Ví dụ đúng:
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
Nếu không đối xứng:
Tunnel fail.
4. Tunnel mode sai
Muốn vận chuyển IPv4 hoặc IPv6 qua GRE over IPv4:
Cần:
tunnel mode gre ip
Kiểm tra:
show interfaces tunnel 0
Bạn sẽ thấy:
Tunnel protocol/transport GRE/IP
5. ACL chặn GRE
GRE không dùng TCP hay UDP.
GRE dùng:
IP Protocol Number 47
Đây là lỗi rất hay gặp.
Firewall hoặc ACL chỉ permit:
tcp
udp
icmp
nhưng không permit protocol 47.
Kết quả:
Tunnel không hoạt động.
Kiểm tra:
show ip interface
show access-list
6. MTU và fragmentation
GRE thêm overhead khoảng:
24 bytes
Nếu physical MTU:
1500 bytes
thì payload thực tế chỉ còn:
1476 bytes
Nếu packet lớn hơn:
Fragmentation xảy ra.
Hệ quả:
- tăng CPU
- delay
- performance giảm
- packet drop
Kiểm tra:
show interfaces tunnel 0
Ví dụ:
Tunnel transport MTU 1476 bytes
7. Recursive routing
Đây là lỗi GRE kinh điển.
Thông báo:
%TUN-5-RECURDOWN:
Tunnel0 temporarily disabled due to recursive routing
Ý nghĩa:
Router đang cố route traffic đến tunnel destination… bằng chính tunnel đó.
Ví dụ:
Muốn đến:
203.0.113.1
nhưng routing table lại chỉ ra:
via Tunnel0
=> loop logic.
Tunnel tự shutdown để tránh recursion.
Cách xử lý:
Đảm bảo public tunnel destination được route qua physical interface.
Không được route qua tunnel.
8. Routing protocol không chạy trên tunnel
Tunnel lên nhưng không học route.
Rất thường gặp.
Ví dụ:
Tunnel:
up/up
nhưng:
show ip route
không thấy remote network.
Nguyên nhân:
OSPF/EIGRP chưa enable trên tunnel.
Ví dụ:
router ospf 1
network 172.16.1.0 0.0.0.3 area 0
hoặc:
router eigrp 100
network 172.16.1.0 0.0.0.3
GRE over IPv6
GRE không chỉ vận chuyển IPv4.
Ví dụ:
Bạn có thể chạy IPv6 traffic qua IPv4 underlay.
Tunnel source/destination vẫn là IPv4:
tunnel source 192.0.2.1
tunnel destination 203.0.113.1
Nhưng tunnel interface dùng IPv6:
ipv6 address FE80::1 link-local
Đây là kỹ thuật transition cổ điển nhưng vẫn rất hữu ích để hiểu encapsulation.
Tư duy troubleshooting thực chiến
Khi GRE lỗi, thứ tự suy nghĩ nên là:
Layer 3 underlay trước
Ping public IP được chưa?
Nếu chưa, đừng nhìn tunnel.
Tunnel logic tiếp theo
- source đúng chưa?
- destination đúng chưa?
- subnet đúng chưa?
- mode đúng chưa?
Policy/security
ACL/firewall có permit protocol 47 không?
Performance
MTU / fragmentation?
Routing intelligence
Tunnel destination có bị recursive route không?
Dynamic routing có chạy trên tunnel không?
Kết luận
GRE là một công nghệ deceptively simple.
Cấu hình chỉ vài dòng.
Nhưng troubleshooting lại đòi hỏi tư duy routing rất chắc.
Một GRE tunnel hoạt động tốt yêu cầu:
- underlay connectivity chuẩn
- addressing chính xác
- encapsulation đúng
- ACL permit protocol 47
- MTU phù hợp
- routing logic không recursion
- overlay routing hoạt động đúng
Nếu hiểu sâu GRE, bạn sẽ dễ dàng tiếp cận các công nghệ overlay hiện đại hơn như:
- DMVPN
- FlexVPN
- SD-WAN
- VXLAN overlays
Vì bản chất, tất cả đều là câu chuyện:
encapsulation + transport + routing intelligence