Kontuz lan txandak ekartzen dituzten ahultasunekin. 1. zatia: FragmentSmack/SegmentSmack

Kontuz lan txandak ekartzen dituzten ahultasunekin. 1. zatia: FragmentSmack/SegmentSmack

Kaixo guztioi! Nire izena Dmitry Samsonov da, Odnoklassniki-n sistema administratzaile nagusi gisa lan egiten dut. 7 mila zerbitzari fisiko baino gehiago ditugu, 11 mila edukiontzi gure hodeian eta 200 aplikazio, hainbat konfiguraziotan 700 kluster ezberdin osatzen dituztenak. Zerbitzari gehienek CentOS 7 exekutatzen dute.
14ko abuztuaren 2018an, FragmentSmack ahultasunari buruzko informazioa argitaratu zen
(CVE-2018-5391) eta SegmentSmack (CVE-2018-5390). Sare-eraso-bektorea eta nahiko puntuazio altua (7.5) dituzten ahultasunak dira, baliabideak agortzeagatik (CPU) zerbitzuaren ukapena (DoS) mehatxatzen dutenak. FragmentSmack-erako nukleoaren konponketarik ez zen proposatu garai hartan; gainera, ahultasunari buruzko informazioa argitaratu baino askoz beranduago atera zen. SegmentSmack kentzeko, nukleoa eguneratzea proposatu zen. Egun berean eguneratze paketea bera kaleratu zen, instalatzea besterik ez zen geratzen.
Ez, ez gaude inola ere nukleoa eguneratzearen aurka! Hala ere, badira Γ±abardurak...

Nukleoa nola eguneratzen dugun ekoizpenean

Oro har, ez dago ezer konplikatua:

  1. Deskargatu paketeak;
  2. Instalatu hainbat zerbitzaritan (gure hodeia hartzen duten zerbitzarietan barne);
  3. Ziurtatu ezer hautsi ez dela;
  4. Ziurtatu nukleoaren ezarpen estandar guztiak errorerik gabe aplikatzen direla;
  5. Itxaron egun batzuk;
  6. Egiaztatu zerbitzariaren errendimendua;
  7. Aldatu zerbitzari berrien hedapena nukleo berrira;
  8. Eguneratu zerbitzari guztiak datu-zentroaren arabera (datu-zentro bat aldi berean erabiltzaileengan eragina gutxitzeko arazoak izanez gero);
  9. Berrabiarazi zerbitzari guztiak.

Errepikatu ditugun nukleoen adar guztietan. Momentu honetan hauxe da:

  • Stock CentOS 7 3.10 - zerbitzari arrunt gehienentzat;
  • Banila 4.19 - guretzat hodei bakarreko hodeiak, BFQ, BBR eta abar behar ditugulako;
  • Elrepo kernel-ml 5.2 - for karga handiko banatzaileak, 4.19 portaera ezegonkorra zelako, baina ezaugarri berdinak behar dira.

Asmatuko zenuten bezala, milaka zerbitzari berrabiarazi behar da denbora gehien. Ahultasun guztiak zerbitzari guztientzat kritikoak ez direnez, Internetetik zuzenean eskura daitezkeenak soilik berrabiaraziko ditugu. Hodeian, malgutasuna ez mugatzeko, ez ditugu kanpotik eskura daitezkeen edukiontziak nukleo berri batekin zerbitzari indibidualetara lotzen, baizik eta ostalari guztiak berrabiarazi salbuespenik gabe. Zorionez, han prozedura zerbitzari arruntekin baino sinpleagoa da. Adibidez, estaturik gabeko edukiontziak beste zerbitzari batera mugi daitezke berrabiarazi bitartean.

Hala ere, lan asko dago oraindik, eta hainbat aste iraun ditzake, eta bertsio berriarekin arazorik izanez gero, hilabete batzuk arte. Erasotzaileek oso ondo ulertzen dute hori, beraz, B plan bat behar dute.

FragmentSmack/SegmentSmack. Konponbidea

Zorionez, ahultasun batzuetarako B plan bat existitzen da, eta Workaround deitzen da. Gehienetan, kernel/aplikazioen ezarpenen aldaketa bat da, izan daitezkeen efektuak minimizatzeko edo ahultasunen ustiapena erabat ezabatzeko.

FragmentSmack/SegmentSmack-en kasuan proposatu zen Konponbide hau:

Β«4MB eta 3MB balio lehenetsiak net.ipv4.ipfrag_high_thresh eta net.ipv4.ipfrag_low_thresh-en alda ditzakezu (eta haien parekoak ipv6 net.ipv6.ipfrag_high_thresh eta net.ipv6.ipfrag_low_thresh-en) 256 kB eta hurrenez hurren. baxuagoa. Testek PUZaren erabileran beherakada txikia edo nabarmena erakusten dute eraso batean hardwarearen, ezarpenen eta baldintzen arabera. Dena den, baliteke errendimenduaren eragina izatea ipfrag_high_thresh=192 byte-ren ondorioz, aldi berean 262144K-ko bi zati bakarrik sartzen baitira berriro muntaketa-ilaran. Adibidez, arriskua dago UDP pakete handiekin lan egiten duten aplikazioak apurtzeko'.

Parametroak berak nukleoaren dokumentazioan honela deskribatzen da:

ipfrag_high_thresh - LONG INTEGER
    Maximum memory used to reassemble IP fragments.

ipfrag_low_thresh - LONG INTEGER
    Maximum memory used to reassemble IP fragments before the kernel
    begins to remove incomplete fragment queues to free up resources.
    The kernel still accepts new fragments for defragmentation.

Ez dugu UDP handirik ekoizpen zerbitzuetan. LANean ez dago trafiko zatikaturik; WANen trafiko zatikatua dago, baina ez da esanguratsua. Ez dago seinalerik - Konponbidea zabaldu dezakezu!

FragmentSmack/SegmentSmack. Lehenengo odola

Topatu genuen lehen arazoa hodeiko edukiontziak batzuetan ezarpen berriak partzialki bakarrik aplikatzen zituela izan zen (ipfrag_low_thresh bakarrik), eta batzuetan ez zituztela batere aplikatzen - hasieran huts egiten zuten. Ezin izan da arazoa modu egonkorrean erreproduzitu (ezarpen guztiak eskuz aplikatu dira arazorik gabe). Hasieran edukiontzia zergatik huts egiten duen ulertzea ere ez da hain erraza: ez da akatsik aurkitu. Gauza bat ziur zegoen: ezarpenak atzera botatzeak edukiontzien hutsegiteen arazoa konpontzen du.

Zergatik ez da nahikoa Sysctl ostalarian aplikatzea? Edukiontzia bere sare dedikatuan bizi da Namespace, behintzat sareko Sysctl parametroen parte edukiontzian ostalaritik desberdina izan daiteke.

Nola aplikatzen dira zehazki Sysctl ezarpenak edukiontzian? Gure edukiontziak pribilegiorik gabekoak direnez, ezin izango duzu Sysctl ezarpenik aldatu edukiontzian bertan sartuta; besterik gabe, ez duzu eskubide nahikorik. Ontziak exekutatzeko, garai hartan gure hodeiak Docker erabiltzen zuen (orain podman). Edukiontzi berriaren parametroak APIaren bidez Dockerrera pasatu ziren, beharrezko Sysctl ezarpenak barne.
Bertsioetan bilatzean, Docker APIak akats guztiak ez zituela itzuli ikusi zen (1.10 bertsioan behintzat). Edukiontzia "docker run" bidez abiarazten saiatu ginenean, azkenean zerbait ikusi genuen gutxienez:

write /proc/sys/net/ipv4/ipfrag_high_thresh: invalid argument docker: Error response from daemon: Cannot start container <...>: [9] System error: could not synchronise with container process.

Parametroaren balioa ez da baliozkoa. Baina zergatik? Eta zergatik ez du balio batzuetan bakarrik? Kontuan izan da Docker-ek ez duela bermatzen Sysctl parametroak aplikatzen diren ordena (probatutako azken bertsioa 1.13.1 da), beraz, batzuetan ipfrag_high_thresh 256K-n ezartzen saiatu zen ipfrag_low_thresh oraindik 3M zenean, hau da, goiko muga baxuagoa zen. beheko muga baino, eta horrek akatsa ekarri zuen.

Garai hartan, dagoeneko gure mekanismo propioa erabiltzen genuen edukiontzia hasi ondoren birkonfiguratzeko (ontzia izoztu ondoren taldeko izozkailua eta komandoak exekutatzen edukiontziaren izen-espazioan bidez ip netns), eta Sysctl parametroak idazteko ere gehitu genion zati honi. Arazoa konpondu zen.

FragmentSmack/SegmentSmack. Lehen odola 2

Hodeian Workaround-en erabilera ulertzeko denbora izan baino lehen, erabiltzaileen lehen kexa arraroak iristen hasi ziren. Garai hartan, hainbat aste igaro ziren lehen zerbitzarietan Workaround erabiltzen hasi zenetik. Hasierako ikerketak frogatu zuen banakako zerbitzuen aurkako kexak jaso zirela, eta ez zerbitzu horien zerbitzari guztien aurka. Arazoa berriz ere oso zalantzazkoa bihurtu da.

Lehenik eta behin, Sysctl ezarpenak atzera egiten saiatu ginen, noski, baina horrek ez zuen eraginik izan. Zerbitzariaren eta aplikazioaren ezarpenekin egindako manipulazio ezberdinek ere ez zuten lagundu. Berrabiaraztea lagundu du. Linux berrabiaraztea Windows-entzat ohikoa zen bezain ez-naturala da. Hala ere, lagundu egin zuen, eta "kernel-akatsa" bat ezarri genuen Sysctl-en ezarpen berriak aplikatzean. Zein zentzugabea zen...

Hiru aste geroago arazoa errepikatu zen. Zerbitzari hauen konfigurazioa nahiko erraza zen: Nginx proxy/orekatzaile moduan. Trafiko handirik ez. Sarrerako ohar berria: bezeroen 504 akatsen kopurua egunero handitzen ari da (Pasabidearen denbora-muga). Grafikoak zerbitzu honen eguneko 504 errore kopurua erakusten du:

Kontuz lan txandak ekartzen dituzten ahultasunekin. 1. zatia: FragmentSmack/SegmentSmack

Akats guztiak backend berekoak dira, hodeian dagoenaren ingurukoak. Backend honetako pakete zatien memoria-kontsumoaren grafikoa honelakoa zen:

Kontuz lan txandak ekartzen dituzten ahultasunekin. 1. zatia: FragmentSmack/SegmentSmack

Hau da sistema eragilearen grafikoen arazoaren adierazpen nabarienetako bat. Hodeian, aldi berean, QoS (Trafiko Kontrola) ezarpenekin sareko beste arazo bat konpondu zen. Pakete zatien memoria-kontsumoaren grafikoan, itxura berdina zuen:

Kontuz lan txandak ekartzen dituzten ahultasunekin. 1. zatia: FragmentSmack/SegmentSmack

Suposizioa sinplea zen: grafikoetan itxura berdina badute, arrazoi bera dute. Gainera, oroimen mota honekin edozein arazo arraroa da.

Arazo konponduaren funtsa fq paketeen programatzailea QoS-en ezarpen lehenetsiekin erabili genuela izan zen. Lehenespenez, konexio baterako, ilaran 100 pakete gehitzeko aukera ematen du, eta konexio batzuk, kanal eskaseko egoeretan, ilararen edukiera estutzen hasi ziren. Kasu honetan, paketeak kentzen dira. Tc estatistiketan (tc -s qdisc) honela ikus daiteke:

qdisc fq 2c6c: parent 1:2c6c limit 10000p flow_limit 100p buckets 1024 orphan_mask 1023 quantum 3028 initial_quantum 15140 refill_delay 40.0ms
 Sent 454701676345 bytes 491683359 pkt (dropped 464545, overlimits 0 requeues 0)
 backlog 0b 0p requeues 0
  1024 flows (1021 inactive, 0 throttled)
  0 gc, 0 highprio, 0 throttled, 464545 flows_plimit

"464545 flows_plimit" konexio baten ilararen muga gainditzeagatik eroritako paketeak da, eta "dropped 464545" programatzaile honen eroritako pakete guztien batura da. Ilararen luzera 1 milara handitu eta edukiontziak berrabiarazi ondoren, arazoa gelditu zen. Eser zaitezke eta smoothie bat edan dezakezu.

FragmentSmack/SegmentSmack. Azken odola

Lehenik eta behin, nukleoan ahultasunen berri eman zenetik hilabete batzuetara, azkenean FragmentSmack-en konponketa bat agertu zen (gogora dezagun abuztuko iragarpenarekin batera SegmentSmack-erako soilik konponketa bat kaleratu zela), eta horrek Workaround uzteko aukera eman zigun, horrek arazo dezente sortu zigun. Denbora horretan, jada lortu genuen zerbitzarietako batzuk kernel berrira eramatea, eta orain hasieratik hasi behar genuen. Zergatik eguneratu dugu nukleoa FragmentSmack konponketaren zain egon gabe? Izan ere, ahultasun hauen aurka babesteko prozesua CentOS bera eguneratzeko prozesuarekin bat egin (eta bat egin zuen) (nukleoa soilik eguneratzeak baino denbora gehiago behar du). Horrez gain, SegmentSmack ahultasun arriskutsuagoa da, eta berehala agertu zen konponketa, beraz, zentzuzkoa zen hala ere. Hala ere, ezin izan dugu CentOS-en nukleoa eguneratu besterik gabe, CentOS 7.5-en agertu zen FragmentSmack ahultasuna 7.6 bertsioan bakarrik konpondu zelako, beraz, 7.5-era eguneratzea gelditu behar izan genuen eta berriro hasi 7.6-rako eguneratzearekin. Eta hau ere gertatzen da.

Bigarrenik, erabiltzaileen arazoei buruzko kexa arraroak itzuli zaizkigu. Orain ziur badakigu guztiak bezeroetatik gure zerbitzari batzuetara fitxategiak kargatzearekin lotuta daudela. Gainera, masa osoaren karga kopuru oso txikia zerbitzari hauetatik igaro zen.

Goiko istorioan gogoratzen dugunez, Sysctl atzera botatzeak ez zuen lagundu. Berrabiarazteak lagundu du, baina aldi baterako.
Sysctl-i buruzko susmoak ez ziren kendu, baina oraingoan ahalik eta informazio gehien biltzea beharrezkoa izan zen. Bezeroan igoeraren arazoa erreproduzitzeko gaitasun falta ere handia zegoen, gertatzen ari zena zehatzago aztertzeko.

Eskuragarri dauden estatistika eta erregistro guztien analisiak ez gaitu hurbildu zer gertatzen ari zen ulertzera. Arazoa erreproduzitzeko gaitasun falta akutua zegoen, konexio zehatz bat "sentitzeko". Azkenik, garatzaileek, aplikazioaren bertsio berezi bat erabiliz, probako gailu batean arazoen erreprodukzio egonkorra lortzea lortu zuten Wi-Fi bidez konektatzean. Hau aurrerapauso bat izan zen ikerketan. Bezeroa Nginx-era konektatu zen, gure Java aplikazioa zen backend-era proxy-a.

Kontuz lan txandak ekartzen dituzten ahultasunekin. 1. zatia: FragmentSmack/SegmentSmack

Arazoetarako elkarrizketa honelakoa zen (Nginx proxy aldean konponduta):

  1. Bezeroa: fitxategi bat deskargatzeari buruzko informazioa jasotzeko eskaera.
  2. Java zerbitzaria: erantzuna.
  3. Bezeroa: POST fitxategiarekin.
  4. Java zerbitzaria: errorea.

Aldi berean, Java zerbitzariak erregistroan idazten du bezeroarengandik 0 byte datu jaso zirela, eta Nginx proxyak eskaerak 30 segundo baino gehiago behar izan zituela idazten du (30 segundo bezeroaren aplikazioaren denbora-muga da). Zergatik denbora-muga eta zergatik 0 byte? HTTP ikuspegitik, dena behar bezala funtzionatzen du, baina fitxategia duen POST-a saretik desagertzen dela dirudi. Gainera, bezeroaren eta Nginx-en artean desagertzen da. Tcpdump-ekin armatzeko garaia da! Baina lehenik sarearen konfigurazioa ulertu behar duzu. Nginx proxy L3 orekatzailearen atzean dago NFware. Tunneling L3 orekatzailetik zerbitzarira paketeak bidaltzeko erabiltzen da, eta horrek bere goiburuak gehitzen ditu paketeei:

Kontuz lan txandak ekartzen dituzten ahultasunekin. 1. zatia: FragmentSmack/SegmentSmack

Kasu honetan, sarea zerbitzari honetara iristen da Vlan-en etiketatutako trafiko moduan, eta horrek bere eremuak ere gehitzen ditu paketeei:

Kontuz lan txandak ekartzen dituzten ahultasunekin. 1. zatia: FragmentSmack/SegmentSmack

Eta trafiko hori ere zatikatu egin daiteke (Workaround-en arriskuak ebaluatzean hitz egin genuen sarrerako trafiko zatikatuaren ehuneko txiki hori), eta horrek goiburuen edukia ere aldatzen du:

Kontuz lan txandak ekartzen dituzten ahultasunekin. 1. zatia: FragmentSmack/SegmentSmack

Berriro ere: paketeak Vlan etiketa batekin kapsulatzen dira, tunel batekin kapsulatzen dira, zatituta. Hau nola gertatzen den hobeto ulertzeko, egin dezagun paketeen ibilbidea bezerotik Nginx proxyra.

  1. Paketea L3 orekatzailera iristen da. Datu-zentroan bideratze zuzena izateko, paketea tunel batean kapsulatzen da eta sare-txartelera bidaltzen da.
  2. Pakete + tunel goiburuak MTUn sartzen ez direnez, paketea zatitan mozten da eta sarera bidaltzen da.
  3. L3 orekatzailearen ondorengo etengailuak, pakete bat jasotzean, Vlan etiketa bat gehitzen dio eta bidaltzen du.
  4. Nginx proxy-aren aurrean dagoen etengailuak zerbitzariak Vlan-en kapsulatutako pakete bat espero duela ikusten du (portuaren ezarpenetan oinarrituta), beraz, dagoen bezala bidaltzen du, Vlan etiketa kendu gabe.
  5. Linux-ek pakete indibidualen zatiak hartzen ditu eta pakete handi batean batzen ditu.
  6. Ondoren, paketea Vlan interfazera iristen da, non bertatik lehen geruza kentzen den - Vlan enkapsulazioa.
  7. Ondoren, Linux-ek Tunnel interfazera bidaltzen du, non bertatik beste geruza bat kentzen den - Tunnel encapsulation.

Hori guztia tcpdump-era parametro gisa pasatzea da zailtasuna.
Has gaitezen amaieratik: ba al daude bezeroen IP pakete garbiak (alferrikako goibururik gabe), vlan eta tunel enkapsulazioa kenduta?

tcpdump host <ip ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π°>

Ez, ez zegoen horrelako paketerik zerbitzarian. Beraz, arazoa lehenago egon behar da. Ba al dago paketerik Vlan enkapsulazioa bakarrik kenduta?

tcpdump ip[32:4]=0xx390x2xx

0xx390x2xx bezeroaren IP helbidea da hex formatuan.
32:4 β€” Tunnel paketean SCR IP idazten den eremuaren helbidea eta luzera.

Eremu helbidea indar gordinaz hautatu behar zen, Interneten 40, 44, 50, 54 inguru idazten baitituzte, baina han ez zegoen IP helbiderik. Hex-eko paketeetako bat ere begiratu dezakezu (-xx edo -XX parametroa tcpdump-en) eta ezagutzen duzun IP helbidea kalkula dezakezu.

Ba al dira pakete zatiak Vlan eta Tunnel enkapsulatu gabe kendu?

tcpdump ((ip[6:2] > 0) and (not ip[6] = 64))

Magia honek zati guztiak erakutsiko dizkigu, azkena barne. Seguruenik, gauza bera IP bidez iragazi daiteke, baina ez naiz saiatu, ez baitaude horrelako pakete asko, eta behar ditudanak erraz aurkitzen dira fluxu orokorrean. Hona hemen:

14:02:58.471063 In 00:de:ff:1a:94:11 ethertype IPv4 (0x0800), length 1516: (tos 0x0, ttl 63, id 53652, offset 0, flags [+], proto IPIP (4), length 1500)
    11.11.11.11 > 22.22.22.22: truncated-ip - 20 bytes missing! (tos 0x0, ttl 50, id 57750, offset 0, flags [DF], proto TCP (6), length 1500)
    33.33.33.33.33333 > 44.44.44.44.80: Flags [.], seq 0:1448, ack 1, win 343, options [nop,nop,TS val 11660691 ecr 2998165860], length 1448
        0x0000: 0000 0001 0006 00de fb1a 9441 0000 0800 ...........A....
        0x0010: 4500 05dc d194 2000 3f09 d5fb 0a66 387d E.......?....f8}
        0x0020: 1x67 7899 4500 06xx e198 4000 3206 6xx4 [email protected].
        0x0030: b291 x9xx x345 2541 83b9 0050 9740 0x04 .......A...P.@..
        0x0040: 6444 4939 8010 0257 8c3c 0000 0101 080x dDI9...W.......
        0x0050: 00b1 ed93 b2b4 6964 xxd8 ffe1 006a 4578 ......ad.....jEx
        0x0060: 6966 0000 4x4d 002a 0500 0008 0004 0100 if..MM.*........

14:02:58.471103 In 00:de:ff:1a:94:11 ethertype IPv4 (0x0800), length 62: (tos 0x0, ttl 63, id 53652, offset 1480, flags [none], proto IPIP (4), length 40)
    11.11.11.11 > 22.22.22.22: ip-proto-4
        0x0000: 0000 0001 0006 00de fb1a 9441 0000 0800 ...........A....
        0x0010: 4500 0028 d194 00b9 3f04 faf6 2x76 385x E..(....?....f8}
        0x0020: 1x76 6545 xxxx 1x11 2d2c 0c21 8016 8e43 .faE...D-,.!...C
        0x0030: x978 e91d x9b0 d608 0000 0000 0000 7c31 .x............|Q
        0x0040: 881d c4b6 0000 0000 0000 0000 0000 ..............

Pakete bateko bi zati dira (ID 53652 bera) argazki batekin (Exif hitza ikusgai dago lehen paketean). Maila honetan paketeak daudelako, baina ez zabortegietan bateratutako forman, arazoa argi eta garbi muntaia da. Azkenean badago horren froga dokumentala!

Pakete deskodetzaileak ez zuen eraikuntza eragozten zuen arazorik agertu. Probatu hemen: hpd.gasmi.net. Hasieran, bertan zerbait betetzen saiatzen zarenean, deskodetzaileari ez zaio pakete formatua gustatzen. Sortu zen Srcmac eta Ethertype artean bi zortzikote gehigarri batzuk zeudela (ez dago zatiaren informazioarekin lotuta). Horiek kendu ondoren, deskodetzailea lanean hasi zen. Hala ere, ez zuen arazorik erakutsi.
Zer esanik ez, Sysctl horiek izan ezik beste ezer ez zen aurkitu. Arazo zerbitzariak identifikatzeko modu bat aurkitzea besterik ez zen geratzen, eskala ulertzeko eta ekintza gehiago erabakitzeko. Beharrezko kontagailua nahikoa azkar aurkitu da:

netstat -s | grep "packet reassembles failed”

snmpd-n ere badago OID=1.3.6.1.2.1.4.31.1.1.16.1 (ipSystemStatsReasmFails).

"IP berriro muntatzeko algoritmoak detektatu dituen hutsegite kopurua (edozein arrazoi dela medio: denbora-muga, akatsak, etab.)."

Arazoa aztertu den zerbitzari taldeen artean, bitan kontagailu hori azkarrago handitu zen, bitan astiroago eta beste bitan ez zen batere handitu. Kontagailu honen dinamika Java zerbitzariko HTTP akatsen dinamikarekin alderatuz gero, korrelazio bat agertu zen. Hau da, neurgailuaren jarraipena egin liteke.

Arazoen adierazle fidagarri bat edukitzea oso garrantzitsua da Sysctl atzera egiteak laguntzen duen ala ez zehaztasunez zehaztu ahal izateko, aurreko istoriotik badakigu aplikaziotik ezin dela berehala ulertu. Adierazle honek produkzioko arazo-eremu guztiak identifikatzea ahalbidetuko liguke erabiltzaileek ezagutu aurretik.
Sysctl atzera bota ondoren, monitorizazio akatsak gelditu ziren, eta, beraz, arazoen kausa frogatu zen, baita atzera egiteak laguntzen duela ere.

Zatikatze-ezarpenak atzera egin genituen beste zerbitzari batzuetan, non monitorizazio berria sartu zen jokoan, eta nonbait lehen lehenetsitakoa baino memoria gehiago esleitu genion zatiei (hau UDP estatistikak ziren, eta horien galera partziala ez zen atzealde orokorrean nabaritzen). .

Galdera garrantzitsuenak

Zergatik zatitzen dira paketeak gure L3 balantzailean? Erabiltzaileetatik orekatzaileetara iristen diren pakete gehienak SYN eta ACK dira. Pakete hauen tamaina txikiak dira. Baina horrelako paketeen kuota oso handia denez, haien atzealdean ez dugu nabaritu zatitzen hasi ziren pakete handien presentzia.

Arrazoia hautsitako konfigurazio script bat izan zen advmss Vlan interfazeak dituzten zerbitzarietan (garai hartan etiketatutako trafikoa zuten zerbitzari gutxi zeuden ekoizpenean). Advmss-k bezeroari gure norabidean paketeek tamaina txikiagoa izan behar duten informazioa helarazteko aukera ematen digu, tunel-goiburuak erantsi ondoren zatikatu behar ez daitezen.

Zergatik ez zuen Sysctl-en desbideratzeak lagundu, baina berrabiarazteak bai? Sysctl atzera botatzean paketeak bateratzeko erabilgarri dagoen memoria kopurua aldatu du. Aldi berean, itxuraz, zatien memoria gainezkatzeak berak konexioak moteltzea ekarri zuen, eta horrek zatiak ilaran denbora luzez atzeratzea ekarri zuen. Hau da, prozesua zikloka joan zen.
Berrabiarazteak memoria garbitu zuen eta dena ordenara itzuli zen.

Konponbiderik gabe egitea posible al zen? Bai, baina erasoa gertatuz gero erabiltzaileak zerbitzurik gabe uzteko arrisku handia dago. Noski, Workaround erabiltzeak hainbat arazo eragin zituen, besteak beste, erabiltzaileentzako zerbitzuren bat moteltzea, baina hala ere ekintzak justifikatuta zeudela uste dugu.

Mila esker Andrey Timofeev-i (atimofeyev) ikerketa egiteko laguntzagatik, baita Alexey Krenev-i ere (gailux) - zerbitzarietan Centos eta nukleoak eguneratzeko lan titanikoarengatik. Kasu honetan hainbat aldiz hasieratik hasi behar izan den prozesua, eta horregatik luzatu zen hilabete askotan.

Iturria: www.habr.com

Gehitu iruzkin berria