Sunteți pe pagina 1din 5

Cisco Networking Academy

www.infoacademy.net

5. GRE (Generic Routing Encapsulation)

Este un protocol folosit pentru crearea de conexiuni virtuale (VPN-uri), point-to-point,


intre, de regula, 2 retele private. Protocolul a fost dezvoltat de Cisco, apoi a fost oferit
comunitatii internationale, fiind standardizat in o serie de RFC-uri.

Initial, acest protocol a fost proiectat stateless – nu stim la un capat al tunelului virtual de
existenta/starea celuilalt capat al tunelului. Extensii ulterioare adaugate permit acest lucru
(prin mesaje de keepalive).

El permite incapsularea a o mare varietate de protocoale de L3 (ex. IPv4, IPv6,


AppleTalk, IPX s.a.) in interiorul altor protocoale de L3 (ex. IPv4, IPv6 s.a). Pachetele
vor contine prin urmare 2 headere de retea, headerul “din interior” fiind cel al pachetului
original.

Un prim avantaj al protocolului GRE fata de alte protocoale de tunelare este posibilitatea
incapsularii nu doar a traficului unicast IPv4 ci si a celui multicast, facilitate utila in cazul
protocoalelor de routare ce trimit astfel de update-uri).
Un al 2-lea avantaj este facilitatea de a incapsula nu doar IPv4 ci si alte protocoale de L3
Non-IP (IPSec nu permite acest lucru).
Un al 3-lea avantaj este caracterul sau ubicuu – gasim acest protocol in implementarile nu
doar a celor de la Cisco, ci si pe Linux/Unix (comanda ip tunnel …), Windows (tunelele
PPTP sunt construite peste incapsularea GRE), sa.
Un al 4-lea avantaj este dimensiunea redusa a headerului GRE, overhead care insa nu este
fix – in functie de facilitatile pe care ni le dorim de la tunel (secventializare, autentificare,
routare dupa sursa) overhead-ul acesta se poate mari (se introduc/populeaza campuri noi
in header)

Dezavantajul major al prtocolului GRE este ca el nu ofera decat facilitati minimale de


autentificarea a celuilalt capat al tunelului (“cu cine vorbesc”), si nu ofera facilitati de
criptare a traficului tunelat – acesta se va transmite asa cum l-a generat sursa.

Headerul GRE conform cu prima implementare (redata in RFC 1701) este:

0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
┌─┬─┬─┬─┬─┬─────┬─────────┬─────┬───────────────────────────────┐
│C│R│K│S│s│Recur│ Flags │ Ver │ Protocol Type │
├─┴─┴─┴─┴─┴─────┴─────────┴─────┼───────────────────────────────┤
│ Checksum (optional) │ Offset (optional) │
├───────────────────────────────┴───────────────────────────────┤
│ Key (optional) │
├───────────────────────────────────────────────────────────────┤
│ Sequence Number (optional) │
├───────────────────────────────────────────────────────────────┤
│ Routing (optional) │
└───────────────────────────────────────────────────────────────┘
1
Cisco Networking Academy
www.infoacademy.net

Campurile de interes sunt:


- Checksum (flag, bitul 0): daca este 1 campul checksum este prezent, altfel acest
camp lipseste
- key (flag, bitul 2): daca este 1 campul key este prezent in header, altfel acest camp
lipseste
- Sequence number (flag, bitul 3): daca este 1 atunci campul sequence number este
prezent, altfel acesta lipseste
- Version (biti 13-15): identifica versiunea GRE si tb sa aiba valoarea 0
- Protocol type: tipul de protocol incapsulat peste GRE (cel din “interiorul”
mesajului). Pentru IPv4 acesta are valoarea 0x0800, pt IPv6 are valoarea 0x86DD,
samd.
- Checksum: daca este prezent, ofera asigurarea integritatii atat a headerului GRE cat
si payload-ul acestuia
- Key: in principal, este folosita drept metoda (ineficienta) de securitate: fiecare pachet
are aceiasi cheie stabilita manual la cele 2 capete ale tunelului (nescalabil). Daca se
primeste un mesaj cu o cheie diferita el va fi aruncat. Cheia, ce nu se modifica in
timp, se trimite in clar.
O a 2-a utilitate, rar folosita, este de a identifica diferitele flow-uri dintr-un acelasi
tunel GRE multipoint.
- Sequence number: permite identificarea pachetelor ce ajung in alta ordine decat au
fost introduse in tunel, caz in care vor fi aruncate – este util in cazul protocoalelor
„pasager‟ ce nu permit reordonarea mesajelor (ex: cele bazate pe LLC2)

Headerul GRE conform cu implementarea redata in RFC 2784 este:

0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
┌─┬───────────────────────┬─────┬───────────────────────────────┐
│C│ Reserved0 │ Ver │ Protocol Type │
├─┴───────────────────────┴─────┼───────────────────────────────┤
│ Checksum (optional) │ Reserved1 (optional) │
└───────────────────────────────┴───────────────────────────────┘

In acest RFC ulterior s-a renuntat la headere-le de routare, seq number, key-ing, cat si la
bitii de flag corespunzatori – ei sunt inlocuiti cu 0, ceea ce asigura interoperabilitatea cu
implementarea 1701 (bitii cu valoarea 0 reprezentau absenta acestor campuri).

Daca mesajul este trimis de 2784, acei biti de 0 vor fi interpretati corespunzator de 1701
(certifica absenta campurilor optionale). Daca 1701 trimite mesaje cu acei biti pe 0 atunci
2784 va accepta acel mesaj.
In cazul in care 1701 trimite un mesaj cu cel putin 1 bit din bitii respectivi pe 1, 2784 va
arunca acel pachet.

2
Cisco Networking Academy
www.infoacademy.net

Headerul GRE conform cu implementarea redata in RFC 2890 este:

0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
┌─┬─┬─┬─┬─────────────────┬─────┬───────────────────────────────┐
│C│ │K│S│ Reserved0 │ Ver │ Protocol Type │
├─┴─┴─┴─┴─────────────────┴─────┼───────────────────────────────┤
│ Checksum (optional) │ Reserved1 (optional) │
├───────────────────────────────┴───────────────────────────────┤
│ Key (optional) │
├───────────────────────────────────────────────────────────────┤
│ Sequence Number (optional) │
└───────────────────────────────────────────────────────────────┘

Dupa cum se observa s-a revenit in acest RFC la bitii si headerul de key-ing si de
sequence-ing.

Versiunile de cod IOS mai noi decat 12.2T implementeaza RFC 2784 si, optional, RFC
2890.

GRE este adesea folosit impreuna cu un alt protocol pentru a oferii securitatea traficului
in tranzit - in acest rol se foloseste adesea IPSec, sau, uneori, criptare la nivelul L7 OSI.

Configurare pe routerele Cisco in CLI:

R1(config)# int serial 0/0


R1(config-if)# ip address 200.0.0.1 255.255.255.248
R1(config-if)# no shutdown
R1(config-if)# exit
R1(config)# int tunnel 0  semnificatie locala

3
Cisco Networking Academy
www.infoacademy.net

Obligatoriu:
R1(config-if)# ip add 172.20.255.253 255.255.255.252  pornim IPv4 pe interfata
R1(config-if)# tunnel-source serial 0/0  putem preciza o adresa IPv4, IPv6..
R1(config)-if# tunnel-destination 154.1.2.3  adresa IPv4 publica a celuilalt capat

Optional:
R1(config-if)# tunnel checksum  cerem verificarea integritatii
R1(config-if)# tunnel key 123454321  identica la capatul opus, 32 biti
R1(config-if)# tunnel sequence-datagrams  se arunca pkt. daca vin in alta ordine
R1(config-if)# tunnel mode gre ip  Default. Se va incapsula IPv4
R1(config-if)# keepalive 2 2  detectam pierderea comunicarii cu
celalalt capat al tunelului. Se trimit la 2 sec, holddown 4 sec

R1(config-if)# ip ospf 1 area 0  pornim OSPF catre vecin, prin tunel


R1(config-if)# exit

R1(config)# int fa0/0


R1(config-if)# ip add 172.20.0.254 255.255.255.0
R1(config-if)# no shutdown
R1(config-if)# ip ospf 1 area 1
R1(config-if)# exit

R1(config)# ip route 0.0.0.0 0.0.0.0 s0/0  ruta default prin Service Provider
-----------------------------------------
R2(config)# int serial 0/1
R2(config-if)# ip add 154.1.2.3 255.255.255.248
R2(config-if)# no shutdown
R2(config-if)# exit

R2(config)# int tunnel 3


R2(config-if)# ip add 172.20.255.254 255.255.255.252
R2(config-if)# tunnel-source serial 0/1
R2(config)-if# tunnel-destination 200.0.0.1
R2(config-if)# tunnel checksum
R2(config-if)# tunnel key 123454321
R2(config-if)# tunnel sequence-datagrams
R2(config-if)# keepalive 2 2
R2(config-if)# ip ospf 1 area 0
R2(config-if)# exit

R2(config)# int fa0/1


R2(config-if)# ip add 172.20.1.254 255.255.255.0
R2(config-if)# no shutdown
R2(config-if)# ip ospf 1 area 2

4
Cisco Networking Academy
www.infoacademy.net

R2(config)# ip route 0.0.0.0 0.0.0.0 s0/1

- Vizualizare:
Router# show ip interface brief
Router# show interface tunnel 0
Router# show running-config interface tunnel0
Router# show ip route

- Depanare:
Router# debug tunnel
Router# debug interface tunnel <nr>