Dopyt na databázu visí cez IPsec: preusporiadanie UDP alebo TCP?
Dopyt, ktorý visí po čistom handshake, ukazuje dovnútra cesty tunela. Tri podmienky rozhodujú, či cestu opraviť, alebo sa vrátiť k TCP na 443.
Dopyt, ktorý visí po TCP handshake, nie je problém smerovania. Chyby trasy pokazia handshake, takže relácia, ktorá sa nadviaže a potom stíchne, ukazuje dovnútra cesty: inšpekcia, MTU alebo spôsob, akým prichádzajú UDP pakety tunela. Rozhodnutie pred vami je, či túto cestu opraviť alebo tunel presunúť na TCP. Rozhodujú o tom tri podmienky a žiadna z nich nie je o databáze.
Zaraďte zaseknutie, skôr než obviníte tunel
Štyri výsledky vyzerajú pre používateľa rovnako a pre inžiniera znamenajú úplne odlišné veci.
| What the client sees | What it rules out |
|---|---|
| Connection refused | Nothing is listening on the address and port the client reached |
| Timeout before the handshake | A filter, a missing route, or the wrong address |
| Handshake completes, query hangs | The session exists, so look at inspection, MTU and packet order |
| Stalls that recover on retry | Often reordering, or a state table entry expiring |
Čas na tuneli ospravedlňujú len posledné dva riadky. Odmietnuté spojenie cez VPN býva databáza, ktorá počúva len na loopback, čo je problém poslucháča, a časový limit pred handshake je filter alebo trasa. Ani jedno sa nezlepší zmenou zapuzdrenia.
Najprv zapíšte klasifikáciu do tiketu. Je to najlacnejší krok a odstráni väčšinu priestoru hľadania.
Tri podmienky, ktoré rozhodujú medzi UDP a TCP
Zapuzdrená prevádzka IPsec ide cez UDP a UDP dáva ceste voľnosť preusporiadať a zahodiť bez toho, aby to niekomu povedala. Keď preusporiadanie vytlačí pakety mimo okna proti opakovaniu tunela, sú ticho zahodené a vnútorná TCP relácia jednoducho čaká. To je mechanizmus za úspešným handshake a dopytom, ktorý sa nikdy nevráti.
Oprava cesty alebo návrat k TCP závisí od troch vecí. Po prvé, je na ceste skutočná strata paketov, alebo len preusporiadanie? Po druhé, môžete zmeniť, kde prebieha inšpekcia, alebo vylúčiť tento tunel z komponentu, ktorý preusporadúva? Po tretie, je zaťaženie citlivé na vzor zaseknutí, napríklad mnoho multiplexovaných relácií zdieľajúcich jedno spojenie?
Ak prvá odpoveď je strata a druhá nie,TCP na 443 je pragmatická záloha. Ak je druhá odpoveď áno, opravte cestu a ponechajte UDP.
Čítajte záznam firewallu, nie chybu aplikácie
Aplikácia hlási časový limit, čo o príčine nič nehovorí. Vlastný log firewallu je miesto, kde sa objaví zahodenie alebo blokovanie, preto filtrujte podľa adries databázy a aplikácie a hľadajte zahodenia aj prijatia.Moduly prevencie hrozieb môžu zahodiť pakety bez vytvorenia chyby na úrovni aplikácie, a to je presne podoba dopytu, ktorý visí. Ticho v logu je tiež údaj: ukazuje na niečo, čo neloguje, napríklad preusporiadanie.
Skontrolujte aj klaster. Nesprávne nakonfigurovaný klaster môže držať reláciu v tabuľke stavov na jednom člene, kým pakety idú cestou iného člena, takže odpovede dorazia tam, kde žiadny stav neexistuje. Takéto zaseknutia vyzerajú náhodne a nekorelujú so zaťažením.
Porovnajte oba konce, skôr než čokoľvek zmeníte, a porovnávajte poradie príchodu, nie počty paketov:
tcpdump -ni any udp port 4500 -w /tmp/encap.pcap
tcpdump -ni any tcp port 5432 -w /tmp/inner.pcapČo vás TCP na 443 skutočne stojí
Presun tunela na TCP odstráni príznak preusporiadania, pretože middlebox teraz vidí usporiadaný tok. Vytvára však aj TCP-over-TCP. Vonkajšie spojenie prenáša znova to, čo vnútorné už prenieslo, a jediná strata môže naraz zastaviť všetky multiplexované relácie. Na čistej ceste je to neviditeľné. Na ceste so stratami je liek horší ako príznak.
Výmena je prijateľná, keď je alternatívou žiadne spojenie, a má sa zdokumentovať ako výnimka s vlastníkom, nie prijať ako normál.
Zapíšte transport, port, ukážkový dopyt a nameraný výsledok plus dátum. Bez tohto záznamu ďalší inžinier zopakuje experiment a výnimka sa ticho stane architektúrou.
Udržte rozhodnutie revidovateľné
Diagnóza cesty rýchlo starne. Middlebox sa vymení, konfigurácia modulu sa zmení, spojenie sa vylepší a dôvod pre TCP na 443 zmizne, zatiaľ čo konfigurácia zostane. Dajte výnimke dátum revízie a pomenujte podmienku, ktorá by vám umožnila vrátiť sa k UDP.
Otestujte oba transporty malým dopytom a veľkou sadou výsledkov. Preusporiadanie sa prejaví ako zaseknutia závislé od veľkosti, kým porucha poslucháča zastaví obe veľkosti rovnako.