BGP kavramı nedir ve Trendyol’da BGP nasıl yönetiliyor?
Herkese selam,
1 yılı aşkın bir süredir Trendyol’da Asc. System Engineer olarak çalışıyorum.
Bu başlıkta sizlerle BGP kavramını ve Trendyol’da BGP sessionlarını nasıl yönettiğimizi ve bunu yaparken arka tarafta kullandığımız teknolojiler hakkında bilgiler vereceğim.
Giriş
BGP yani Border Gateway Protocol kavramı BGP-1 versiyonu ile Haziran 1989 yılında ilk olarak karşımıza çıktı. Burada tanımlanan ilk versiyondan önce temelleri RFC904'deki EGP kavramına ve RFC1092 ve RFC1903'de tanımlanan NSFNET kavramlarına dayanmakta idi. Cloudflare’e göre BGP tanımı ise: “BGP, veri yönlendirmeyi etkinleştirerek, internetin çalışmasını sağlayan protokoldür. Singapur’daki bir kullanıcı Arjantin’deki origin sunucuları olan bir web sitesini yüklediğinde, BGP bu iletişimin hızlı ve verimli bir şekilde gerçekleşmesini sağlayan protokoldür.”
BGP haberleşme sisteminin ana prensibi diğer BGP bağlantılarıyla ara haberleşmedeki ulaşılabilirlik bilgisini iletmektir. Bu ulaşılabilirlik bilgisi otonom sistemler(AS) üzerinden iletilebilmektedir. BGP’de yönlendiricilere bu sebeple otonom sistem numarası atanır.
Otonom sistem numarası 1 ile 65535 arasında değişir. 64512 ile 65535 arası özel otonom sistem numarasıdır ve herkes tarafından kullanılabilir. BGP, yönlendirme tablosunu oluşturmak için metrik hesaplarken, hedefe giderken üzerinden geçilen otonom sistem sayısını göz önüne alır. Bu durum BGP’nin Distance Vector (Uzaklık Yönelim) algoritmasını kullandığını gösterir. EIGRP ve IGRP gibi otonom sistem özelliğine göre çalışan yönlendirme protkollerinin aksine BGP farklı otonom sistemlere ait yönlendiriciler arasında da çalışabilmektedir. Bir otonom sistemden çıkan BGP update (güncelleme) paketine otonom sistem numarası eklenir. Böylece otonom sistemden çıkan update (güncelleme) paketinin aynı otonom sisteme girmesi engellenerek loop (döngü) oluşması engellenir.
BGP güvenilir bir iletim katmanı protokolü üzerinde çalışmaktadır. Bu bize retransmission, acknowledgement,sequencing gibi konularda avantaj kazandırmaktadır. Bununla birlikte kimlik doğrulama konusunda herhangi bir alternatif BGP’nin kendi protokolüne ek olarak kullanılabilir. Bununla birlikte BGP gerçekten de güvenilir, sağlıklı çalışan bir yönlendirme protokolü olmasına karşın yavaş bir yönlendirme protokolüdür.
İlk yayımlanan BGP-1 versiyonundan bu yana farklı özellikler ile 4 farklı versiyon duyurulmuştur.
BGP’nin 1. versiyonu EGP’nin yerini almak üzere 1989’da RFC 1105 belgesinde tanımlanmıştı, 2. sürümü ise 1990’da RFC 1163’te ve 3. sürümü de 1991’de RFC 1267 belgesinde tanımlanmıştır. Son olarak, CIDR desteğini içeren sürüm 4, RFC 1771 ve RFC 4271 belgesinde tanımlandı.
BGP4 CIDR’yi ve yol toplamayı destekleyen ilk sürümdür ve IGP,RIP,OSPF ve EIGRP’nin aksine atlama sayısı bant genişliği veya gecikme gibi ölçümleri kullanmaz. Diğer protokollerin akisne BGP ağ kurallarına veya routelarda kullanılan kurallara göre yönlendirme kararları verir.
BGP’nin temel özelliklerinden bahsetmek istersek;
- BGP, IP adreslerinin özetlenebileceği CIDR, “Classless Inter-Domain Routing”i destekler.
- BGP iletişim için TCP 179. Portu kullanır.
- 60 saniyede bir 19 byte uzunluğunda bir paket TCP 179. Port kullanılarak gönderilir.
- BGP, TCP kullandığından dolayı diğer yönlendirme protokollerindeki gibi doğrulama işlemi yapılmaz.
- Güncelleme paketlerinde sadece değişen rotalar gönderilir.
- Bağlantınının güvenliğinin sağlanması için MD5, Message Digest algorithm 5 (İleti Özeti Algoritması 5) ile erişimin yetkilendirmesi sağlanılır.
BGP, otonom sistemin içinde veya dışında çalışmasına göre ikiye ayrılır:
- EBGP (Exterior Border Gateway Protocol — Dış Sınır Geçit Protokolü)
Farklı otonom sistem içinde bulunan yönlendiricilerin birbirleriyle komşuluk kurarabilmesi için EBGP, Exterior Border Gateway Protocol (Dış Sınır Geçit Protokolü) kullanılır. Bu protokol kullanılarak komşudan öğrenilen ağ bilgisi yönlendici tablosuna administrative distance değeri 20 olacak şekilde eklenir. - IBGP (Interior Border Gateway Protocol — İç Sınır Geçit Protokolü)
Aynı otonom sistem içinde bulunan yönlendiricilerin birbirleriyle komşuluk kurarabilmesi için IGBP, Interior Border Gateway Protocol (İç Sınır Geçit Protokolü) kullanılır. Bu protokol kullanılarak komşudan öğrenilen ağ bilgisi yönlendici tablosuna “administrative distance” değeri 200 olacak şekilde eklenir.
Birazda BIRD’den bahsedelim;
BIRD, Linux ve diğer UNIX benzeri işletim sistemlerinde çalışan bir yönlendirme yazılımıdır. BGP, OSPF ve RIP dahil olmak üzere çeşitli yönlendirme protokollerini kullanmaktadır. Ağustos 2022 itibariyle, en son sürüm 2.0.10'dır ve maintain edilen sürümler 2.0 ve1.6'dır. Trendyol’da BIRD aktif olarak BGP üzerinden haberleşmede external load balancer’dan dışarıya duyurulan servislerde ve diğer amaçlar ile kullanılmaktadır.
Bird Mimarisi
BIRD, bellekte birden fazla yönlendirme tablosuna ve yönlendirme tablosu ile başka bir yönlendirme tablosuna, çekirdek yönlendirme tablosuna, harici ağ yönlendiricisi vb. gibi bağlantılar arasında yönlendirme bilgisi alışverişi yapan protokollere sahip tek bir işlem olarak çalışır.
Routing(Yönlendirme) ve Routing Tabloları
BIRD’ün bir yönlendirme tablosu, bellek içi yollar topluluğudur.
Route, bir hedef ağ için paketleri yönlendireceği bir dizi bilgidir. Bir hedef ağ adresinden (net), genellikle sonraki atlama (gw) olarak adlandırılan bir yönlendirici adresinden, bu rotayı getiren kaynak protokol örneğinden (proto) ve route’a getiren yönlendirme protokolüne bağlı özniteliklerden oluşur.
Örneğin,BGP peerden gelen ASN (bgp_path), yerel tercih değeri (bgp_local_pref) vb. listeleri vardır. BIRD yönlendirme tabloları, Linux kerneldeki yönlendirme tabloları ile aynı değildir. Kernel yönlendirme tablosundaki bir routeda yalnızca iki özelliği vardır, bunlar; hedef adres ve next hop’dur.
BIRD, istediğiniz kadar routing tablosuna sahip olabilir. Aşağıdaki tablolar default tanımlanmıştır.
master4
IPv4 için ön tanımlı gelen routing tablosu
master6
IPv6 için ön tanımlı gelen routing tablosu
Ayrıca yeni bir routing tablosunu IPv4 için eklemek istersek bird.conf
‘da aşağıdaki gibi bir komut eklemeliyiz.
ipv4 table another_table;
Protokoller ve kanallar
Protokol, bir yönlendirme tablosunu bir şeye bağlar. Bir şey başka bir yönlendirici ise, protokol BGP veya OSPF gibi standart yönlendirme protokollerinden biridir. Bir BIRD işlemi, bir protokolün birkaç örneğine sahip olabilir. Örneğin, her eş yönlendirici için BGP örneklerinin oluşturulması gerekir. Bir protokolün örneklerini ayırt etmek için her protokol örneğinin benzersiz bir adı vardır.
Aşağıdaki yapılandırma, sırasıyla ty1 ve ty2 adlı iki BGP protokolü örneği oluşturalım.
protocol bgp ty1 {
local AS 65000;
neighbor 10.20.30.40 AS 65001;
...
}
protocol bgp ty2 {
local AS 65000;
neighbor 10.20.30.41 AS 65001;
...
}
Bir protokol örneğinin kanalları olabilir. Kanal, IPv4 veya IPv6 gibi bir ağ türü için rotaların nasıl dışa veya içe aktarılacağını temsil eder. Kullanılabilir kanallar protokole göre değişir. BGP hem ipv4 hem de ipv6 kanallarına sahip olabilir. Belirtilmezse, ipv4 kanalı master4 tablosuyla, ipv6 kanalı ise master6 tablosuyla ilişkilendirilir.
Diğer örneğimizde, 10.20.30.40'ta çalışan bir eBGP, peer ve master4 yönlendirme tablosu arasında IPv4 yolları alışverişi yapan bir BGP örneğinin yapılandırmasıdır. Eş yönlendirici, tüm IPv4 rotalarını içe aktarır ve static1'de tanımlanan statik rotalar hariç tüm rotaları master4'te dışa aktarır.
protocol bgp ty1 {
local AS 65000;
neighbor 10.20.30.40 AS 65001;ipv4 {
import all;
export filter {
if proto = "static1" then reject;
accept;
};
};
}
Bir kanal boş (varsayılan) konfigürasyona sahipse kısaca şu şekilde yazılabilir:
protocol bgp ty1 {
// snip
ipv4;
}
eBGP dışında, varsayılan kanal yapılandırması tüm rotaları içe aktarır ve hiçbir şeyi dışa aktarmaz.
Birdc komutları ve hata giderme adımları
Yönlendirme tablolarını veya protokol örneklerini tanılamak için birdc komutunu kullanılmaktadır.
Bir yönlendirme tablosunda routeları göstermek için:
bird> show route
Table master4:
0.0.0.0/0 unicast [ty1 18:55:10.191] * (100) [AS65000i]
via 10.69.64.1 on eth0
unicast [ty2 18:55:09.946] (100) [AS65000i]
via 10.69.128.1 on eth1
10.69.0.5/32 unicast [ty1 18:55:07.808] * (100) [i]
via 10.69.64.1 on eth0
unicast [ty2 18:55:07.609] (100) [i]
via 10.69.128.1 on eth1
10.69.0.4/32 unicast [ty1 18:55:10.903] * (100) [i]
via 10.69.64.1 on eth0
unicast [ty2 18:55:11.059] (100) [i]
via 10.69.128.1 on eth1
10.69.0.3/32 unicast [direct1 18:55:03.687] * (240)
dev node0
Protocol instancesları göstermek için:
bird> show protocols
Name Proto Table State Since Info
device1 Device --- up 18:16:10.826
bfd1 BFD --- up 18:16:10.826
defaultgw Static master4 up 18:16:10.826
kernel1 Kernel master4 up 18:16:10.826
trial-ty1 BGP --- up 18:16:14.081 Established
trial-ty2 BGP --- up 18:16:14.686 Established
Instance hakkında daha detaylı bilgi için ise;
bird> show protocols all 'trial-ty1'
Name Proto Table State Since Info
trial-ty1 BGP --- up 18:16:14.081 Established
BGP state: Established
Neighbor address: 10.0.1.1
Neighbor AS: 64600
Neighbor ID: 10.0.1.1
Local capabilities
Multiprotocol
AF announced: ipv4
Route refresh
Graceful restart
4-octet AS numbers
Enhanced refresh
Neighbor capabilities
Multiprotocol
AF announced: ipv4
Route refresh
Graceful restart
4-octet AS numbers
Enhanced refresh
Session: external AS4
Source address: 10.0.1.0
Hold timer: 177.403/240
Keepalive timer: 8.268/80
Channel ipv4
State: UP
Table: master4
Preference: 100
Input filter: ACCEPT
Output filter: ACCEPT
Routes: 4 imported, 2 exported
Route change stats: received rejected filtered ignored accepted
Import updates: 4 0 0 0 4
Import withdraws: 0 0 --- 0 0
Export updates: 7 4 0 --- 3
Export withdraws: 0 --- --- --- 1
BGP Next hop: 10.0.1.0
Yukarıdaki komutlar gibi diğer başka komutlar ile birdc üzerinden çeşitli denetleme ve hata ayıklama işlemleri yapılabilmektedir.
Trendyol’da Load Balancer seviyesinde BIRD kullanımı
Trendyol’da Load Balancer seviyesinde BIRD servisini external ve internal cihazlarımızda kullanmaktayız.
Temel anlamda external load balancerlardaki yapımıza bakacak olursak;
Burada görüldüğü gibi External Load Balancer cihazları, Routerlar(R1,R2) ve Traffic Distributor(TD1,TD2) cihazlarıyla haberleşme süreçlerinde BIRD protokolünü kullanmaktadır.
Internal Load Balancer tarafında ise;
Internal Load Balancer cihazları ise Switchler(SW1,SW2) DCI(Datacenter Interconnect) Router(DCIR1,DCIR2) cihazlarıyla haberleşme süreçlerinde BIRD protokolünü kullanmaktadır.