Generic Routing Encapsulation

Merhaba,
Yazımda GRE (Generic Routing Encapsulation) protokolünün çalışma şeklinden, faydalarından ve konfigürasyonundan bahsedeceğim. Bu yazının benim için bir ilk olmasından dolayı yaşadığım heyecan ve tecrübesizlik umarım yazıma da yansımaz 🙂

GRE bir kapsülleme protokolü olarak çalışır. GRE, üzerine IP başlığı eklenip IP paketi haline gelmiş veriyi kapsüller ve üzerine yeni bir IP başlığı ekler. Yeni eklenen IP başlığında ise paketin gideceği hedefin IP adresi bulunmaz. Onun yerine GRE tünelinin uç IP adresleri bulunur. Üçüncü katmanda çalışan cihazlar bu paketi yönlendirirken kapsülün dışındaki IP adreslerine yani GRE tünelinin uç IP adreslerine bakarak yönlendirme yapar. Dolayısıyla kapsülün içindeki IP adresinden haberdar olmazlar. Paket, tünelin sonuna geldiğinde GRE kapsülü çıkarılır ve paket kendi kaynak ve hedef IP adreslerine göre yönlendirmeye devam eder.

OSI modeli referans alınarak GRE’nin çalışma şeklini bir de Vikipedia’dan aldığım bu şema üzerinden açıklamaya çalışayım.
Farklı lokasyonlarda bulunan networkler arasında GRE tüneli oluşturulduğunu düşünün. Networkleri haberleştirebilmek için kullanılan ISP IPv4 kullanıyor olsun. GRE sayesinde siz kendi LAN (Local Area Network)’larınızda IPv6 kullanabilirsiniz. Şemadaki gibi; bir LAN’dan diğer bir LAN’a gidecek bir paket tünelde GRE ile kapsüllenecek ve tünelin source ve destination IP adresini yani IPv4 adreslerini alacak ve o adreslere uygun şekilde sizin diğer networkünüze yönlendirilecektir. Fakat kapsül içindeki pakette IPv6 adresiniz olacaktır. Tünel sonunda kapsül atıldığında, sizin paketiniz diğer networkünüzde yine IPv6 adresini kullanarak yoluna devam edecektir. Bu GRE tünellemesinin kullanım alanlarından biridir.

Bu noktada ayrıca bir konuya dikkat çekmek istiyorum. Kendi networkünüzde IPv6 kullanacaksanız, yönlendirme yapacağınız interface’in de IPv6 adresine sahip olması gerekir. Yani örneğin IPv6 için statik yönlendirme yaparak tünel üzerinden IPv6 paketleri göndermek için IPv6 route “X:X:X:X:X:X:X:X/0-128” Tunnel 0 komutunu girdiğinizde tünel IP adresi IPv6 değilse rota IPv6 Routing Tablosuna eklenmeyecek, dolayısıyla tünel üzerinden yönlendirme yapılamayacaktır. Fakat tünelin source ve destination adresleri IPv4 olmalıdır. ISP’nin 3.katman cihazları tünelin source ve destination IP adreslerine göre yönlendirme yaptığı ve IPv4 adreslerini kullandığından dolayı IPv6 adreslerine göre yönlendirme yapamayacaklardır.

GRE enkapsülasyonunu biraz da konfigürasyon üzerinde açıklamaya çalışayım.

Şekildeki LAN1 ve LAN2 farklı lokasyonlarda bulunan networklerin çıkış routerları, ISP1 veISP2 de aradaki bağlantıyı sağlayan servis sağlayıcının routerlarıdır. LAN1 ve LAN2 routerlarının arkasında görüldüğü gibi private IP kullanan networkler bulunmaktadır. Dolayısıyla normalde servis sağlayıcılar bu IP adreslerini yönlendirmezler. Bu nedenle LAN1 ve LAN2 arasında GRE tüneli kurarak haberleşmelerini sağlayacağız.

LAN1’de tünel oluşturmak için;

LAN1(config)# interface Tunnel0
LAN1(config-if)# ip address 100.0.0.1 255.255.255.252
LAN1(config-if)# tunnel source 1.0.0.1
LAN1(config-if)# tunnel destination 3.0.0.2
LAN2’de tünel oluşturmak için;
LAN2(config)#interface Tunnel0
LAN2(config-if)#ip address 100.0.0.2 255.255.255.252
LAN2(config-if)#tunnel source 3.0.0.2
LAN2(config-if)#tunnel destination 1.0.0.1

Bu şekilde LAN1 ve LAN2 arasında tünel oluşturmuş oluyoruz. Bu tünel interfacelerinin çalışması için iki önemli husus vardır;
• Tünel interfaceinde belirtilen kaynak ve hedef IP adresleri tünelin oluşturulduğu cihaz için ulaşılabilir olmalıdır.
• Tünel IP adresleri aynı network içinde olmalıdır.
Tünelin çalışmasına örnek olarak LAN1 veLAN2 üzerlerindeki networkleri OSPF ile GRE tüneli üzerinden anons etmesini sağlayalım. Bunun için;

LAN1(config)# router ospf 1
LAN1(config-router)# network 192.168.0.0 0.0.0.255 area 0
LAN2(config)# router ospf 1
LAN2(config-router)# network 192.168.1.0 0.0.0.255 area 0

Bu şekilde LAN1 veLAN2 routerları üzerinde OSPF protokolünü aktif hale getiriyoruz ve anons edeceği networkü belirtiyoruz. Daha sonra aşağıdaki konfigürasyon ile tünel üzerinden OSPF konuşmaya başlıyoruz.

LAN1(config)# interface Tunnel0
LAN1(config-if)# ip ospf 1 area 0
LAN2(config)# interface Tunnel0
LAN2(config-if)# ip ospf 1 area 0

Bu şekilde LAN1 ve LAN2, üzerlerindeki networkleri birbirlerine ISP1ve ISP2 routerları öğrenmeden GRE tüneli üzerinden öğretmiş oldu. Bunu LAN1’de show ip route çıktısında görebiliriz.

192.168.1.0/32 is subnetted, 1 subnets
O 192.168.1.1 [110/11112] via 100.0.0.2, 06:30:56, Tunnel0

LAN1 fa0/0’ ı Wireshark ile dinlediğimizde 192.168.0.1’dan 192.168.1.1’a atılan bir ping paketini açtığımızda aşağıdaki gibi bir görüntü elde edeceğiz.

Dikkat edilirse, iki adet IPv4 paketi ve aralarında GRE enkapsülasyonu görülecektir.
Ayrıca GRE tünellemesinde birbiriyle karışabilen tünel IP adresi, tünel source/destination IP adresleri ve tünel üzerinden giden paketlerin source ve destination IP adresleri kavramlarını açıklayalım.
Tünel IP adresi, tünel interface’inin kendi IP adresidir ve o interface’in kimliğidir. Tünel interface’ini router’a connected olarak bağlanmasını ve bu interface’ler üzerinden routing yapılmasını sağlar.

Tünel source/destination IP adresleri, ISP’nin GRE kapsülünün dışında gördüğü IP adresleridir. ISP bu adreslere bakarak yönlendirme yapar ve paketlerin tünel interface’inde destination olarak belirtilen yere yani tünelin sonuna gitmesini sağlar. Bu IP’leri tünel interface’inin altında” tunnel source IP adresi” ve “tunnel destination IP adresi” komutlarıyla belirtiyoruz. Bu IP adresleri kullanılabilir ve tünellerin oluşturulduğu cihazlar tarafından ulaşılabilir olmalıdır. Wireshark çıktısında bu adresler, GRE kapsülünün üst kısmında belirtilen başlıktaki source: 1.0.0.1, destination: 3.0.0.2 adresleridir.

Tünel üzerinden akan trafiğe ait paketlerin source/destination IP adresleri, zaten orijinal trafiğe ait olan IP adresleridir. Tünel dışında bu adreslere göre yönlendirme yapılır. Wireshark çıktısında bu adresler, GRE kapsülünün alt kısmında belirtilen başlıktaki source: 192.168.0.1, destination: 192.168.1.1 adresleridir.

GRE Tünellerinin Avantajları:
• Belli bir protokol kullanan bir network üzerinden çeşitli protokoller kullanabilmeyi sağlar.
• Sınırlı sayıda cihaz bulunan networklerde geçici çözüm sağlar.
• Sürekli olmayan alt networklerin birbirine bağlanmasını sağlar.
• WAN (Wide Area Network)’ larda VPN bağlantısı sağlar.

GRE Başlık Yapısı

• C – Checksum Present (0 biti); Eğer bu bit 1 olarak işaretlenmişse Checksum ve Reserved1 alanları geçerli bilgi içerir demektir.
• Reserved0 (1-12 arası bitler); 1-5 arası bitler 0 olmadığı takdirde paketi alan cihaz paketi çöpe atar. 6-12 arası bitler gelecekte kullanılması için ayrılmıştır fakat 0 olarak gönderilir ve dikkate alınmaz.
• Ver – Version Number(13-15 arası bitler); GRE versiyonu belirtir ve tek versiyon olduğu için tüm bitler 0 olmalıdır.
• Protocol Type (17-32 arası bitler); Bu alan GRE kapsülünün içindeki ağ katmanı başlığını hangi protokolü olduğunu belirtir.
• Checksum(33-48); Bu alanın amacı alanda bulunan bitlerin değerini 0 yapmaktır.
• Reserved1(48-64); Gelecekte kullanmak için ayrılmış bir alandır ve tüm bitleri 0 olarak gönderilir.

Bir sonraki yazıda görüşmek üzere!

Samet Cesur

“Generic Routing Encapsulation” için bir cevap

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir