29 0 268KB
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 R1(config-if)# exit
pornim OSPF catre vecin, prin tunel
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
5