← Cloudflare Magic Transit / magic-transit / reference
Maximální přenosová jednotka a maximální velikost segmentu
Protože Magic Transit obaluje váš provoz do dalších hlaviček (enkapsulace), zmenšuje se v každém paketu prostor dostupný pro vaše původní data. Pokud s touto režií nepočítáte, mohou být pakety pro danou síťovou cestu příliš velké a budou zahozeny nebo fragmentovány, což vede ke ztrátě výkonu nebo k výpadkům spojení. Tato stránka vysvětluje dvě klíčové hodnoty, které je třeba nastavit: maximální přenosová jednotka (MTU) a maximální velikost segmentu (MSS).
MTU a MSS
maximální přenosová jednotka (MTU) ↗ je hodnota vyjadřující největší datový paket, který zařízení připojené k síti přijme. MTU se v síťové komunikaci téměř vždy vztahuje na vrstvu 3 modelu OSI (Open Systems Interconnection) a zahrnuje celý paket včetně všech hlaviček (Transmission Control Protocol (TCP), Internet Protocol (IP) atd.) i samotných dat (payloadu). Pakety například nesmí přesáhnout 1 500 bajtů, aby mohly být směrovány přes internet.
maximum segment size (MSS) ↗ označuje množství dat, které lze odeslat v jednom TCP datagramu. Tuto hodnotu určíte odečtením velikosti hlaviček IP a TCP od MTU, které routeru udává, jak velký může být payload. Vztahuje se na vrstvu 4 modelu OSI v síťování.
Jedním z běžných mylných představ o MSS/MTU je, že nastavení těchto hodnot negativně ovlivňuje výkon. Mírný dopad na výkon sice existuje, ale horší je tyto hodnoty nenastavit podle specifik vaší sítě.
Zapouzdření
Magic Transit využívá k doručování služeb zapouzdření. Proto je důležité chápat, proč v tomto kontextu záleží na MTU a MSS.
Zapouzdření zvětšuje paket o několik bajtů, protože Cloudflare přidává ke každému paketu novou hlavičku IP a (často) i určitou zapouzdřující hlavičku. Například v případě Generic Routing Encapsulation (GRE) pro Internet Protocol version 4 (IPv4) přidává zapouzdření 24 bajtů: 20 bajtů pro hlavičku IPv4 a 4 bajty pro tunelovou hlavičku GRE.
Síťové rozhraní, které provádí zapouzdření GRE, musí kvůli přidané režii snížit svou hodnotu MTU. Maximální velikost MTU je 1,500 bajtů, takže u IPv4 se MTU sníží na 1,476 bajtů (původních 1,500 bajtů minus 24 bajtů na zapouzdření GRE). Tato snížená hodnota MTU určuje maximální velikost paketu IP, který dokáže GRE zapouzdřit.
Fragmentace
Pokud je datový paket větší, než dokáže síťové rozhraní přijmout, musí ho síť buď zahodit, nebo rozdělit na menší pakety. Při fragmentaci Cloudflare přijímá pouze datové pakety, které dokáže kompletně znovu sestavit. Pokud některé fragmenty chybí, Cloudflare zahodí všechny přijaté fragmenty. Cloudflare nepředává neúplné pakety zákazníkovi.
Nastavení bitu do not fragment (DF) v hlavičce TCP na 1 znamená, že síť musí paket zahodit, a ne fragmentovat, pokud je větší než MTU, které dokážou přijmout mezilehlá síťová zařízení. Většina implementací TCP nastavuje bit DF na 1 a zabraňte potenciálním problémům způsobeným fragmentací.
Pokud řešíte problémy s fragmentací a nemůžete nastavit MSS clamp, Cloudflare za vás může vymazat bit DF. Po zapnutí této možnosti Cloudflare fragmentuje pakety větší než 1,500 bajtů a vaše infrastruktura je po dekapsulaci znovu sestaví. Použijte tuto možnost jen jako poslední řešení. Pro další informace kontaktujte svůj account team.
Fragmentace v Magic Transit
Uvažujme datagram UDP o velikosti 3,000 bajtů (8 bajtů pro hlavičku UDP + 2,992 bajtů pro data UDP). Aby se vešel do standardní MTU o velikosti 1,500 bajtů, byl by tento datagram UDP rozdělen do tří IP paketů následovně:
Předpokládejme, že datagram UDP má zdrojový port 389 a míří na IP adresu zákazníka Magic Transitu. Předpokládejme dále, že tento zákazník má nastavené pravidlo firewallu, které zahazuje UDP provoz se zdrojovým portem 389, společný Bezspojový protokol Lightweight Directory Access Protocol (CLDAP) ↗ vektor reflexního útoku.
Tři předchozí fragmenty paketu dorazí do Cloudflare, ale pouze první fragment obsahuje hlavičku UDP s informací o zdrojovém portu. Druhý a třetí fragment obsahují data UDP, ale neobsahují informace z hlavičky UDP.
Otázkou tedy je, které z těchto fragmentů Cloudflare zahazuje a které doručuje zákazníkovi. Pokud Cloudflare zahazuje pouze první části fragmentovaných paketů, zbývající části mohou při útoku typu Denial of Service (DoS) stále generovat velké množství provozu.
Jak Cloudflare zpracovává fragmenty
Následující diagram znázorňuje, jak tyto tři fragmenty UDP z předchozího příkladu procházejí sítí Cloudflare a Magic Transit. Hlavní poznatky jsou:
- Cloudflare zákazníkům nikdy neposílá neúplné pakety: Pokud Cloudflare nevidí všechny části paketu potřebné k jeho úplnému opětovnému sestavení, neodešle částečné datové fragmenty zákazníkovi.
- Cloudflare Network Firewall pracuje s plně sestavenými pakety, nikoli s jednotlivými fragmenty: To znamená, že filtry, které se shodují například na informacích v hlavičce UDP/TCP, se použijí na celý znovu sestavený paket, nikoli jen na počáteční fragment. Cloudflare neposkytne zákazníkům jiné než počáteční fragmenty.
- Zákazníci mohou i nadále vidět fragmentované pakety: Ve výchozím nastavení (bez
clear_dont_fragment_bitnastaveno) Cloudflare fragmentuje pakety tak, aby se vešly do nakonfigurované MTU tunelu, než data odešle zákazníkovi. Pokud je paket větší než 1,476 bajtů, Cloudflare jej fragmentuje a fragmenty odešle zákazníkovi ke sloučení.
Ve všech případech Cloudflare odesílá zákazníkovi všechny fragmenty.
omezování MSS
Maximální velikost segmentu (MSS) je nastavení TCP, které omezuje velikost TCP segmentů. Tuto hodnotu nastavují pakety SYN během třícestného handshake.
TCP endpoint ve výchozím nastavení nastavuje hodnotu MSS na základě MTU svého místního síťového rozhraní. Pokud je například u IPv4 MTU 1,500 bajtů, MSS bude 1,460 bajtů (1,500 bajtů minus 20 bajtů za hlavičku IPv4 minus 20 bajtů za hlavičku TCP).
MSS je nástroj, který můžete použít k nastavení chování velikosti paketů TCP. Pokud endpoint TCP leží za sítí se sníženou hodnotou MTU, změna hodnoty MSS tak, aby odpovídala skutečné hodnotě MTU dané cesty, donutí vzdálené endpointy odesílat pakety, které se vejdou do zadané MTU. Pokud tedy endpoint TCP IPv4 leží za tunelem GRE s MTU 1,476 bajtů, hodnota MSS v jeho paketech TCP SYN by měla být 1,436 bajtů, tedy 1,476 bajtů minus 20 bajtů za hlavičku IPv4 a minus 20 bajtů za hlavičku TCP.
Jedním ze způsobů úpravy nastavení MSS je změna MTU síťového rozhraní na WAN rozhraní routeru tak, aby odpovídalo cestovnímu MTU. Dalším způsobem úpravy MSS je použití MSS clamp, kdy nakonfigurujete zprostředkující síťové zařízení, například router, aby za provozu upravovalo TCP volbu MSS v procházejících paketech. Změna MTU na rozhraní zprostředkujícího síťového zařízení není totéž jako použití MSS clamp a hodnotu TCP MSS nemění.
Viz doporučení pro omezování MSS pro informace o tom, na jakou hodnotu nastavit MSS clamping podle typu tunelu.
MSS s Magic Transit a Direct Server Return
Asymetrické směrování ↗ je běžný scénář, zejména u Magic Transit. Příchozí provoz z internetu vstupuje do sítě Cloudflare, poté prochází tunelem GRE (MTU 1,476 bajtů), zatímco odchozí provoz z datového centra je přes internet odesílán pomocí Direct Server Return (DSR) (MTU 1,500 bajtů).
V asymetrickém scénáři musíte snížit hodnotu MSS u paketů, které uživatelé Magic Transit odesílají do internetu, abyste zmenšili velikost paketů přicházejících z internetu do jejich sítě. K tomu musíte nakonfigurovat buď koncové hostitele zákazníka, nebo MSS clamp na zprostředkujícím zařízení na odchozí cestě provozu opouštějícího jejich síť. Následující tabulka popisuje, jak hodnoty MSS ovlivňují velikost užitečného zatížení na obou směrovacích cestách.
Klíčové zjištění z předchozí tabulky: MSS clamping ovlivňuje velikost užitečného zatížení paketů TCP proudících opačným směrem, než kde se clamp uplatňuje.
Scénář tunelu v tunelu s Magic Transit
Úprava MSS (MSS clamping) ovlivňuje pouze provoz TCP. Pokud máte například webový server na svém prefixu Magic Transit, uplatní se úprava MSS na datech TCP z provozu Direct Server Return (DSR). Pro tunely uvnitř vašeho tunelu Magic Transit (scénář tunel v tunelu) je však potřeba zvolit jiný postup.
Pokud máte například nastavený tunel Magic Transit GRE a k němu běží ještě další tunel IPsec nebo GRE ze zařízení třetích stran ve vašich prostorách, MSS clamp nemá na vnější pakety zapouzdřeného provozu žádný vliv. Je to proto, že MSS clamping ovlivňuje pouze provoz TCP, zatímco zapouzdřený provoz IPsec/GRE je IP. V tomto scénáři musíte dále snížit MTU vnitřního rozhraní tunelu, a to jak pro příchozí, tak pro odchozí provoz.
doporučení pro omezování MSS
Tunely GRE jako off-ramp
Hodnota MSS závisí na uspořádání vaší sítě.
-
Pouze příchozí provoz Magic Transit (DSR):
- Na tranzitních portech vašeho hraničního routeru: Nastavte TCP MSS clamp maximálně na 1,436 bajtů.
- Na libovolných tunelech IPsec/GRE se třetími stranami na vašem prefixu Magic Transit: Nastavte MSS clamp na vnitřním rozhraní tunelu (pravděpodobně na samostatném firewallu za routerem ukončujícím GRE) tak, aby se aktuální hodnota snížila o 24 bajtů.
-
Pro provoz Magic Transit ingress + egress:
- Na vnitřním rozhraní tunelu GRE Magic Transit: Tedy tam, kudy prochází odchozí provoz Magic Transit. Vaše zařízení to po nakonfigurování tunelu mohou provést automaticky, záleží však na konkrétním zařízení. Nastavte TCP MSS clamp maximálně na 1,436 bajtů.
- Na libovolných tunelech IPsec/GRE se třetími stranami na vašem prefixu Magic Transit: Na vnitřním rozhraní tunelu (pravděpodobně na samostatném firewallu za routerem ukončujícím GRE) tak, aby se aktuální hodnota snížila o 24 bajtů.
Tunely IPsec
U tunelů IPsec závisí hodnota, kterou je třeba nastavit, na uspořádání vaší sítě. Hodnota MSS clamping je nižší než u tunelů GRE, protože fyzické rozhraní vidí provoz šifrovaný IPsec pakety ↗, nikoli TCP pakety, a MSS clamping se na ně nevztahuje.
-
Pouze příchozí provoz Magic Transit (DSR):
- Na tranzitních portech vašeho hraničního routeru: Nastavte TCP MSS clamp maximálně na 1,436 bajtů.
- Na libovolných tunelech IPsec/GRE se třetími stranami na vašem prefixu Magic Transit: Na vnitřním rozhraní tunelu (pravděpodobně na samostatném firewallu za routerem ukončujícím GRE) tak, aby se aktuální hodnota snížila o 140 bajtů.
-
Příchozí a odchozí provoz Magic Transit:
- Na vašem hraničním routeru: Nastavte to na vnitřním rozhraní vašeho IPsec tunelu Magic Transit (tedy tam, kudy prochází odchozí provoz Magic Transit). Vaše zařízení to po nakonfigurování tunelu mohou provést automaticky, záleží však na konkrétním zařízení. Nastavte TCP MSS clamp maximálně na 1,360 bajtů.
- Na libovolných tunelech IPsec/GRE se třetími stranami na vašem prefixu Magic Transit: Na vnitřním rozhraní tunelu (pravděpodobně na samostatném firewallu za zařízením ukončujícím IPsec ve vašich prostorách) tak, aby se aktuální hodnota snížila o 140 bajtů.