Ṣọra fun awọn ailagbara ti o mu awọn iyipo iṣẹ wa. Apá 1: FragmentSmack/SegmentSmack

Ṣọra fun awọn ailagbara ti o mu awọn iyipo iṣẹ wa. Apá 1: FragmentSmack/SegmentSmack

Bawo ni gbogbo eniyan! Orukọ mi ni Dmitry Samsonov, Mo ṣiṣẹ bi oludari eto eto ni Odnoklassniki. A ni diẹ sii ju 7 ẹgbẹrun awọn olupin ti ara, 11 ẹgbẹrun awọn apoti ninu awọsanma wa ati awọn ohun elo 200, eyiti o wa ni awọn atunto pupọ ṣe awọn akojọpọ oriṣiriṣi 700. Pupọ julọ ti awọn olupin nṣiṣẹ CentOS 7.
Ni Oṣu Kẹjọ Ọjọ 14, Ọdun 2018, alaye nipa ailagbara FragmentSmack ni a tẹjade
(CVE-2018-5391) ati SegmentSmack (CVE-2018-5390). Iwọnyi jẹ awọn ailagbara pẹlu fekito ikọlu nẹtiwọọki ati Dimegilio ti o ga julọ (7.5), eyiti o halẹ kiko iṣẹ (DoS) nitori ailagbara awọn orisun (CPU). Atunṣe ekuro fun FragmentSmack ko dabaa ni akoko yẹn; pẹlupẹlu, o jade pupọ nigbamii ju titẹjade alaye nipa ailagbara naa. Lati yọ SegmentSmack kuro, o daba lati ṣe imudojuiwọn ekuro naa. Apo imudojuiwọn funrararẹ ni idasilẹ ni ọjọ kanna, gbogbo ohun ti o ku ni lati fi sii.
Rara, a ko lodi si mimu dojuiwọn kernel rara! Sibẹsibẹ, awọn nuances wa ...

Bii a ṣe ṣe imudojuiwọn ekuro lori iṣelọpọ

Ni gbogbogbo, ko si ohun idiju:

  1. Ṣe igbasilẹ awọn akopọ;
  2. Fi wọn sori nọmba awọn olupin (pẹlu awọn olupin ti n gbalejo awọsanma wa);
  3. Rii daju pe ko si nkan ti o fọ;
  4. Rii daju pe gbogbo awọn eto ekuro boṣewa lo laisi awọn aṣiṣe;
  5. Duro kan diẹ ọjọ;
  6. Ṣayẹwo iṣẹ olupin;
  7. Yipada imuṣiṣẹ ti awọn olupin titun si ekuro tuntun;
  8. Ṣe imudojuiwọn gbogbo awọn olupin nipasẹ ile-iṣẹ data (ile-iṣẹ data kan ni akoko kan lati dinku ipa lori awọn olumulo ni ọran awọn iṣoro);
  9. Atunbere gbogbo awọn olupin.

Tun fun gbogbo awọn ẹka ti awọn kernels ti a ni. Ni akoko o jẹ:

  • Iṣura CentOS 7 3.10 - fun ọpọlọpọ awọn olupin deede;
  • Fanila 4.19 - fun tiwa ọkan-awọsanma, nitori a nilo BFQ, BBR, ati bẹbẹ lọ;
  • Elrepo ekuro-ml 5.2 - fun gíga kojọpọ awọn alaba pin, nitori 4.19 lo lati huwa riru, ṣugbọn awọn ẹya kanna ni a nilo.

Bi o ṣe le ti gboju, atunbere ẹgbẹẹgbẹrun awọn olupin n gba akoko to gunjulo. Niwọn bi kii ṣe gbogbo awọn ailagbara ṣe pataki fun gbogbo awọn olupin, a tun bẹrẹ awọn ti o wa taara lati Intanẹẹti. Ninu awọsanma, ni ibere ki o ma ṣe idinwo irọrun, a ko di awọn apoti ti o wa ni ita si awọn olupin kọọkan pẹlu ekuro tuntun, ṣugbọn tun atunbere gbogbo awọn ọmọ-ogun laisi iyatọ. O da, ilana ti o wa nibẹ rọrun ju pẹlu awọn olupin deede. Fun apẹẹrẹ, awọn apoti ti ko ni ipinlẹ le lọ si olupin miiran nirọrun lakoko atunbere.

Sibẹsibẹ, ọpọlọpọ iṣẹ tun wa, ati pe o le gba awọn ọsẹ pupọ, ati pe ti awọn iṣoro eyikeyi ba wa pẹlu ẹya tuntun, to awọn oṣu pupọ. Awọn ikọlu loye eyi daradara, nitorinaa wọn nilo ero B.

FragmentSmack/SegmentSmack. Ṣiṣẹda

O da, fun diẹ ninu awọn ailagbara iru ero B wa, ati pe o pe ni Workaround. Ni ọpọlọpọ igba, eyi jẹ iyipada ninu ekuro/awọn eto ohun elo ti o le dinku ipa ti o ṣeeṣe tabi yọkuro ilokulo awọn ailagbara patapata.

Ninu ọran ti FragmentSmack/SegmentSmack ti a dabaa Ṣiṣẹ bi eleyi:

«O le yi awọn iye aiyipada ti 4MB ati 3MB pada ni net.ipv4.ipfrag_high_thresh ati net.ipv4.ipfrag_low_thresh (ati awọn ẹlẹgbẹ wọn fun ipv6 net.ipv6.ipfrag_high_thresh ati net.ipv6.ipfrag_low_thresh) si 256 kB tabi 192 kB. isalẹ. Awọn idanwo fihan kekere si awọn isunmi pataki ni lilo Sipiyu lakoko ikọlu ti o da lori ohun elo, eto, ati awọn ipo. Bibẹẹkọ, ipa iṣẹ diẹ le wa nitori ipfrag_high_thresh=262144 awọn baiti, niwọn igba ti awọn ajẹkù 64K meji nikan le wọ inu isinyi atunto ni akoko kan. Fun apẹẹrẹ, ewu kan wa pe awọn ohun elo ti o ṣiṣẹ pẹlu awọn apo-iwe UDP nla yoo fọ».

Awọn paramita ara wọn ninu awọn kernel iwe ṣe apejuwe bi atẹle:

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.

A ko ni awọn UDP nla lori awọn iṣẹ iṣelọpọ. Ko si ijabọ pipin lori LAN; ijabọ pipin wa lori WAN, ṣugbọn kii ṣe pataki. Ko si awọn ami - o le yipo Workaround!

FragmentSmack/SegmentSmack. Ẹjẹ akọkọ

Iṣoro akọkọ ti a ba pade ni pe awọn apoti awọsanma nigbakan lo awọn eto tuntun nikan ni apakan (ipfrag_low_thresh nikan), ati nigba miiran ko lo wọn rara - wọn kan kọlu ni ibẹrẹ. Ko ṣee ṣe lati ṣe ẹda iṣoro naa ni iduroṣinṣin (gbogbo awọn eto ni a lo pẹlu ọwọ laisi awọn iṣoro eyikeyi). Lílóye idi ti eiyan naa fi ṣubu ni ibẹrẹ ko tun rọrun: ko si awọn aṣiṣe ti a rii. Ohun kan jẹ idaniloju: yiyi awọn eto ṣe yanju iṣoro naa pẹlu awọn ipadanu eiyan.

Kini idi ti ko to lati lo Sysctl lori agbalejo naa? Eiyan naa n gbe ni Nẹtiwọọki iyasọtọ ti ara rẹ Namespace, nitorinaa o kere ju apakan ti awọn paramita Sysctl nẹtiwọki ni eiyan le yato lati ogun.

Bawo ni deede ṣe lo awọn eto Sysctl ninu apo eiyan naa? Niwọn bi awọn apoti wa ko ni anfani, iwọ kii yoo ni anfani lati yi eto Sysctl eyikeyi pada nipa lilọ sinu eiyan funrararẹ - o kan ko ni awọn ẹtọ to. Lati ṣiṣẹ awọn apoti, awọsanma wa ni akoko yẹn lo Docker (bayi podman). Awọn paramita ti eiyan tuntun ti kọja si Docker nipasẹ API, pẹlu awọn eto Sysctl pataki.
Lakoko wiwa nipasẹ awọn ẹya, o wa ni pe Docker API ko da gbogbo awọn aṣiṣe pada (o kere ju ni ẹya 1.10). Nigba ti a gbiyanju lati bẹrẹ eiyan nipasẹ “ṣiṣe docker”, a nikẹhin ri o kere ju ohunkan:

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.

Iye paramita ko wulo. Ṣugbọn kilode? Ati idi ti ko wulo nikan nigba miiran? O wa ni jade pe Docker ko ṣe iṣeduro aṣẹ ninu eyiti a lo awọn aye Sysctl (ẹya idanwo tuntun jẹ 1.13.1), nitorinaa nigbakan ipfrag_high_thresh gbiyanju lati ṣeto si 256K nigbati ipfrag_low_thresh tun jẹ 3M, iyẹn ni, opin oke wa ni isalẹ. ju iwọn kekere lọ, eyiti o yori si aṣiṣe.

Ni akoko yẹn, a ti lo ẹrọ tiwa tẹlẹ fun atunto eiyan lẹhin ibẹrẹ (didi eiyan naa lẹhin firisa ẹgbẹ ati ṣiṣe awọn aṣẹ ni aaye orukọ ti eiyan nipasẹ ip nẹtiwọki), ati pe a tun ṣafikun kikọ Sysctl si apakan yii. A ti yanju iṣoro naa.

FragmentSmack/SegmentSmack. Ẹjẹ akọkọ 2

Ṣaaju ki a to ni akoko lati loye lilo Workaround ninu awọsanma, awọn ẹdun ọkan toje akọkọ lati ọdọ awọn olumulo bẹrẹ lati de. Ni akoko yẹn, awọn ọsẹ pupọ ti kọja lati ibẹrẹ lilo Workaround lori awọn olupin akọkọ. Iwadi akọkọ fihan pe a gba awọn ẹdun ọkan lodi si awọn iṣẹ kọọkan, kii ṣe gbogbo awọn olupin ti awọn iṣẹ wọnyi. Iṣoro naa ti tun di aidaniloju pupọ.

Ni akọkọ, a, dajudaju, gbiyanju lati yi awọn eto Sysctl pada, ṣugbọn eyi ko ni ipa eyikeyi. Awọn ifọwọyi oriṣiriṣi pẹlu olupin ati awọn eto ohun elo ko ṣe iranlọwọ boya. Atunbere iranwo. Atunbere Lainos jẹ aibikita bi o ti jẹ deede fun Windows ni awọn ọjọ atijọ. Sibẹsibẹ, o ṣe iranlọwọ, ati pe a sọ di “glitch ekuro” nigba lilo awọn eto tuntun ni Sysctl. Bawo ni frivolous o jẹ...

Ni ọsẹ mẹta lẹhinna iṣoro naa tun waye. Iṣeto ni awọn olupin wọnyi jẹ ohun rọrun: Nginx ni ipo aṣoju / iwọntunwọnsi. Ko Elo ijabọ. Akọsilẹ tuntun: nọmba awọn aṣiṣe 504 lori awọn alabara n pọ si ni gbogbo ọjọ (Akoko Ibode). Aworan naa fihan nọmba awọn aṣiṣe 504 fun ọjọ kan fun iṣẹ yii:

Ṣọra fun awọn ailagbara ti o mu awọn iyipo iṣẹ wa. Apá 1: FragmentSmack/SegmentSmack

Gbogbo awọn aṣiṣe jẹ nipa ẹhin kanna - nipa ọkan ti o wa ninu awọsanma. Aya agbara iranti fun awọn ajẹkù package lori ẹhin yii dabi eyi:

Ṣọra fun awọn ailagbara ti o mu awọn iyipo iṣẹ wa. Apá 1: FragmentSmack/SegmentSmack

Eyi jẹ ọkan ninu awọn ifarahan ti o han gedegbe ti iṣoro naa ni awọn aworan eto iṣẹ. Ninu awọsanma, ni akoko kanna, iṣoro nẹtiwọọki miiran pẹlu awọn eto QoS (Iṣakoso ijabọ) ti wa titi. Lori aworan ti agbara iranti fun awọn ajẹkù apo, o dabi deede kanna:

Ṣọra fun awọn ailagbara ti o mu awọn iyipo iṣẹ wa. Apá 1: FragmentSmack/SegmentSmack

Aronu jẹ rọrun: ti wọn ba wo kanna lori awọn aworan, lẹhinna wọn ni idi kanna. Pẹlupẹlu, awọn iṣoro eyikeyi pẹlu iru iranti yii jẹ toje pupọ.

Ohun pataki ti iṣoro ti o wa titi ni pe a lo oluṣeto apo fq pẹlu awọn eto aiyipada ni QoS. Nipa aiyipada, fun asopọ kan, o fun ọ laaye lati ṣafikun awọn apo-iwe 100 si isinyi, ati diẹ ninu awọn asopọ, ni awọn ipo ti aito ikanni, bẹrẹ lati di isinyi si agbara. Ni idi eyi, awọn apo-iwe ti wa ni silẹ. Ninu awọn iṣiro tc (tc -s qdisc) o le rii bi eleyi:

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

"464545flows_plimit" ti wa ni awọn apo-iwe silẹ nitori a koja awọn ti isinyi iye to ti ọkan asopọ, ati "silẹ 464545" ni apao ti gbogbo silẹ awọn apo-iwe ti yi iṣeto. Lẹhin ti o pọ si ipari isinyi si 1 ẹgbẹrun ati tun bẹrẹ awọn apoti, iṣoro naa duro lati ṣẹlẹ. O le joko sẹhin ki o mu smoothie kan.

FragmentSmack/SegmentSmack. Ẹjẹ ikẹhin

Ni akọkọ, ọpọlọpọ awọn oṣu lẹhin ikede ti awọn ailagbara ninu ekuro, atunṣe kan fun FragmentSmack han nikẹhin (jẹ ki n leti pe pẹlu ikede ni Oṣu Kẹjọ, atunṣe nikan fun SegmentSmack ti tu silẹ), eyiti o fun wa ni aye lati kọ Workaround silẹ, tí ó fa ìdààmú púpọ̀ fún wa. Lakoko yii, a ti ṣakoso tẹlẹ lati gbe diẹ ninu awọn olupin si ekuro tuntun, ati ni bayi a ni lati bẹrẹ lati ibẹrẹ. Kini idi ti a ṣe imudojuiwọn ekuro laisi iduro fun atunṣe FragmentSmack? Otitọ ni pe ilana ti aabo lodi si awọn ailagbara wọnyi ni ibamu (ati dapọ) pẹlu ilana ti imudojuiwọn CentOS funrararẹ (eyiti o gba paapaa akoko diẹ sii ju mimu dojuiwọn ekuro nikan). Ni afikun, SegmentSmack jẹ ailagbara ti o lewu diẹ sii, ati pe atunṣe kan han lẹsẹkẹsẹ, nitorinaa o ni oye lonakona. Sibẹsibẹ, a ko le ṣe imudojuiwọn ekuro nirọrun lori CentOS nitori ailagbara FragmentSmack, eyiti o han lakoko CentOS 7.5, ti wa titi ni ẹya 7.6 nikan, nitorinaa a ni lati da imudojuiwọn naa duro si 7.5 ati bẹrẹ ni gbogbo igba pẹlu imudojuiwọn si 7.6. Ati pe eyi tun ṣẹlẹ.

Ni ẹẹkeji, awọn ẹdun olumulo to ṣọwọn nipa awọn iṣoro ti pada si wa. Bayi a ti mọ daju pe gbogbo wọn ni ibatan si ikojọpọ awọn faili lati ọdọ awọn alabara si diẹ ninu awọn olupin wa. Pẹlupẹlu, nọmba kekere ti awọn ikojọpọ lati ibi-apapọ lapapọ lọ nipasẹ awọn olupin wọnyi.

Bi a ṣe ranti lati itan ti o wa loke, yiyi Sysctl pada ko ṣe iranlọwọ. Atunbere ṣe iranlọwọ, ṣugbọn fun igba diẹ.
Awọn ifura nipa Sysctl ko yọkuro, ṣugbọn ni akoko yii o jẹ dandan lati gba alaye pupọ bi o ti ṣee. Aini agbara nla tun wa lati ṣe ẹda iṣoro ikojọpọ sori alabara lati le ṣe iwadi ni pato ohun ti n ṣẹlẹ.

Itupalẹ ti gbogbo awọn iṣiro ti o wa ati awọn akọọlẹ ko mu wa sunmọ ni oye ohun ti n ṣẹlẹ. Aini agbara nla kan wa lati ṣe ẹda iṣoro naa lati “lero” asopọ kan pato. Lakotan, awọn olupilẹṣẹ, ni lilo ẹya pataki ti ohun elo, ṣakoso lati ṣaṣeyọri ẹda iduroṣinṣin ti awọn iṣoro lori ẹrọ idanwo nigbati o sopọ nipasẹ Wi-Fi. Eyi jẹ aṣeyọri ninu iwadii naa. Onibara ti sopọ si Nginx, eyiti o jẹ aṣoju si ẹhin, eyiti o jẹ ohun elo Java wa.

Ṣọra fun awọn ailagbara ti o mu awọn iyipo iṣẹ wa. Apá 1: FragmentSmack/SegmentSmack

Ọrọ sisọ fun awọn iṣoro jẹ bii eyi (ti o wa titi ni ẹgbẹ aṣoju Nginx):

  1. Onibara: beere lati gba alaye nipa gbigba faili kan wọle.
  2. Java server: idahun.
  3. Onibara: POST pẹlu faili.
  4. Java server: aṣiṣe.

Ni akoko kanna, olupin Java kọwe si log pe awọn baiti 0 ti data ti gba lati ọdọ alabara, ati pe aṣoju Nginx kọwe pe ibeere naa gba diẹ sii ju awọn aaya 30 (awọn aaya 30 jẹ akoko ipari ti ohun elo alabara). Kini idi ti akoko ipari ati idi ti 0 baiti? Lati irisi HTTP, ohun gbogbo n ṣiṣẹ bi o ti yẹ, ṣugbọn POST pẹlu faili dabi pe o farasin lati nẹtiwọọki. Pẹlupẹlu, o padanu laarin alabara ati Nginx. O to akoko lati di ara rẹ ni ihamọra pẹlu Tcpdump! Sugbon akọkọ o nilo lati ni oye awọn nẹtiwọki iṣeto ni. Aṣoju Nginx wa lẹhin iwọntunwọnsi L3 NFware. Tunneling ni a lo lati fi awọn apo-iwe ranṣẹ lati iwọntunwọnsi L3 si olupin naa, eyiti o ṣafikun awọn akọle rẹ si awọn apo-iwe:

Ṣọra fun awọn ailagbara ti o mu awọn iyipo iṣẹ wa. Apá 1: FragmentSmack/SegmentSmack

Ni ọran yii, nẹtiwọọki wa si olupin yii ni irisi ijabọ Vlan-tagged, eyiti o tun ṣafikun awọn aaye tirẹ si awọn apo-iwe:

Ṣọra fun awọn ailagbara ti o mu awọn iyipo iṣẹ wa. Apá 1: FragmentSmack/SegmentSmack

Ati pe ijabọ yii tun le jẹ pipin (ipin kekere kanna ti ijabọ pipin ti nwọle ti a ti sọrọ nipa nigbati a ṣe ayẹwo awọn ewu lati Workaround), eyiti o tun yi akoonu ti awọn akọle pada:

Ṣọra fun awọn ailagbara ti o mu awọn iyipo iṣẹ wa. Apá 1: FragmentSmack/SegmentSmack

Lẹẹkansi: awọn apo-iwe ti wa ni afikun pẹlu aami Vlan, ti a fi sinu eefin kan, ti a pin. Lati ni oye daradara bi eyi ṣe ṣẹlẹ, jẹ ki a wa ipa-ọna soso lati ọdọ alabara si aṣoju Nginx.

  1. Soso naa de iwọntunwọnsi L3. Fun ipa-ọna ti o tọ laarin ile-iṣẹ data, apo-iwe naa ti wa ni inu eefin kan ati firanṣẹ si kaadi nẹtiwọki.
  2. Niwọn igba ti apo-iwe + awọn akọle oju eefin ko baamu si MTU, apo-iwe naa ti ge sinu awọn ajẹkù ati firanṣẹ si nẹtiwọọki naa.
  3. Yipada lẹhin iwọntunwọnsi L3, nigbati o ba gba soso kan, ṣafikun aami Vlan kan ati firanṣẹ si.
  4. Yipada ni iwaju aṣoju Nginx wo (da lori awọn eto ibudo) pe olupin n reti apo-iwe Vlan-encapsulated, nitorinaa o firanṣẹ bi o ṣe jẹ, laisi yiyọ tag Vlan kuro.
  5. Lainos gba awọn ajẹkù ti awọn idii ọkọọkan ati dapọ wọn sinu package nla kan.
  6. Nigbamii ti, apo-iwe naa de ọdọ wiwo Vlan, nibiti a ti yọ Layer akọkọ kuro ninu rẹ - Vlan encapsulation.
  7. Lainos lẹhinna firanṣẹ si wiwo Tunnel, nibiti a ti yọ Layer miiran kuro ninu rẹ - Tunnel encapsulation.

Iṣoro naa ni lati kọja gbogbo eyi bi awọn paramita si tcpdump.
Jẹ ki a bẹrẹ lati opin: Njẹ o mọ (laisi awọn akọle ti ko wulo) awọn apo-iwe IP lati ọdọ awọn alabara, pẹlu vlan ati encapsulation eefin kuro?

tcpdump host <ip клиента>

Rara, ko si iru awọn idii lori olupin naa. Nitorina iṣoro naa gbọdọ wa ni iṣaaju. O wa nibẹ eyikeyi awọn apo-iwe pẹlu nikan Vlan encapsulation kuro?

tcpdump ip[32:4]=0xx390x2xx

0xx390x2xx jẹ adiresi IP onibara ni ọna kika hex.
32:4 - adirẹsi ati ipari aaye ti a ti kọ SCR IP sinu apo eefin.

Adirẹsi aaye ni lati yan nipasẹ agbara irokuro, nitori lori Intanẹẹti wọn kọ nipa 40, 44, 50, 54, ṣugbọn ko si adiresi IP nibẹ. O tun le wo ọkan ninu awọn apo-iwe ni hex (parameter -xx tabi -XX ni tcpdump) ati ṣe iṣiro adiresi IP ti o mọ.

Ṣe awọn ajẹkù soso laisi Vlan ati eefin eefin kuro bi?

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

Idan yii yoo fihan wa gbogbo awọn ajẹkù, pẹlu eyi ti o kẹhin. Boya, ohun kanna ni a le ṣe atunṣe nipasẹ IP, ṣugbọn Emi ko gbiyanju, nitori pe ko si pupọ iru awọn apo-iwe bẹ, ati awọn ti mo nilo ni a ri ni irọrun ni ṣiṣan gbogbogbo. Nibi wọn wa:

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 ..............

Iwọnyi jẹ awọn ajẹkù meji ti package kan (ID 53652 kanna) pẹlu aworan kan (ọrọ Exif han ninu package akọkọ). Nitori otitọ pe awọn idii wa ni ipele yii, ṣugbọn kii ṣe ni fọọmu ti a dapọ ni awọn idalẹnu, iṣoro naa jẹ kedere pẹlu apejọ. Níkẹyìn nibẹ ni iwe eri ti yi!

Oluyipada apo-iwe ko ṣe afihan awọn iṣoro eyikeyi ti yoo ṣe idiwọ kikọ naa. Gbiyanju o nibi: hpd.gasmi.net. Ni akọkọ, nigbati o ba gbiyanju lati nkan nkan nibẹ, oluyipada ko fẹran ọna kika apo. O wa ni jade wipe nibẹ wà diẹ ninu awọn afikun meji octets laarin Srcmac ati Ethertype (ko jẹmọ si ajẹkù alaye). Lẹhin yiyọ wọn kuro, oluyipada bẹrẹ ṣiṣẹ. Sibẹsibẹ, ko fihan awọn iṣoro.
Ohunkohun ti ẹnikan le sọ, ko si ohun miiran ti a ri ayafi Sysctl wọnyẹn. Gbogbo ohun ti o ku ni lati wa ọna lati ṣe idanimọ awọn olupin iṣoro lati le loye iwọn ati pinnu lori awọn iṣe siwaju. A ti ri counter ti a beere ni kiakia to:

netstat -s | grep "packet reassembles failed”

O tun wa ni snmpd labẹ OID=1.3.6.1.2.1.4.31.1.1.16.1 (ipSystemStatsReasmFails).

“Nọmba awọn ikuna ti a rii nipasẹ algoridimu atunto IP (fun eyikeyi idi: ti akoko, awọn aṣiṣe, ati bẹbẹ lọ).”

Lara ẹgbẹ ti awọn olupin lori eyiti a ṣe iwadi iṣoro naa, lori meji counter yii pọ si ni iyara, lori meji diẹ sii laiyara, ati lori meji diẹ sii ko pọ si rara. Ifiwera awọn agbara ti counter yii pẹlu awọn agbara ti awọn aṣiṣe HTTP lori olupin Java ṣe afihan ibaramu kan. Iyẹn ni, mita naa le ṣe abojuto.

Nini itọkasi igbẹkẹle ti awọn iṣoro jẹ pataki pupọ ki o le pinnu ni deede boya yiyi Sysctl ṣe iranlọwọ, nitori lati itan iṣaaju a mọ pe eyi ko le loye lẹsẹkẹsẹ lati ohun elo naa. Atọka yii yoo gba wa laaye lati ṣe idanimọ gbogbo awọn agbegbe iṣoro ni iṣelọpọ ṣaaju awọn olumulo ṣe iwari.
Lẹhin ti yiyi pada Sysctl, awọn aṣiṣe ibojuwo duro, nitorinaa a fihan idi ti awọn iṣoro naa, bakanna bi otitọ pe rollback ṣe iranlọwọ.

A ti yiyi awọn eto pipin pada lori awọn olupin miiran, nibiti ibojuwo tuntun ti wa sinu ere, ati ni ibikan ti a pin paapaa iranti diẹ sii fun awọn ajẹkù ju ti iṣaaju lọ (eyi ni awọn iṣiro UDP, ipadanu apakan eyiti ko ṣe akiyesi lodi si ipilẹ gbogbogbo) .

Awọn ibeere pataki julọ

Kini idi ti awọn apo-iwe ti pin lori iwọntunwọnsi L3 wa? Pupọ julọ awọn apo-iwe ti o de lati ọdọ awọn olumulo si awọn iwọntunwọnsi jẹ SYN ati ACK. Awọn iwọn ti awọn idii wọnyi jẹ kekere. Ṣugbọn niwọn igba ti ipin ti iru awọn apo-iwe bẹ tobi pupọ, ni ilodi si ẹhin wọn a ko ṣe akiyesi niwaju awọn apo-iwe nla ti o bẹrẹ si ajẹkù.

Idi naa jẹ iwe afọwọkọ iṣeto ti bajẹ advmss lori awọn olupin pẹlu awọn atọkun Vlan (awọn olupin pupọ wa pẹlu ijabọ ti a samisi ni iṣelọpọ ni akoko yẹn). Advmss gba wa laaye lati sọ fun alabara alaye ti awọn apo-iwe ni itọsọna wa yẹ ki o kere si ni iwọn ki lẹhin ti o so awọn akọle oju eefin mọ wọn wọn ko ni lati pin.

Kini idi ti Sysctl rollback ko ṣe iranlọwọ, ṣugbọn atunbere ṣe? Yiyi pada Sysctl yipada iye iranti ti o wa fun awọn idii ti o dapọ. Ni akoko kanna, o han gedegbe otitọ pupọ ti iranti apọju fun awọn ajẹkù yori si idinku awọn asopọ, eyiti o yori si awọn ajẹkù ni idaduro fun igba pipẹ ninu isinyi. Iyẹn ni, ilana naa lọ ni awọn iyipo.
Atunbere nu iranti ati ohun gbogbo pada si ibere.

Ṣe o ṣee ṣe lati ṣe laisi Workaround? Bẹẹni, ṣugbọn eewu giga wa ti fifi awọn olumulo silẹ laisi iṣẹ ni iṣẹlẹ ti ikọlu. Nitoribẹẹ, lilo Workaround yorisi ọpọlọpọ awọn iṣoro, pẹlu idinku ti ọkan ninu awọn iṣẹ fun awọn olumulo, ṣugbọn sibẹsibẹ a gbagbọ pe awọn iṣe naa jẹ idalare.

Ọpọlọpọ ọpẹ si Andrey Timofeev (atimofeyev) fun iranlọwọ ni ṣiṣe iwadi, bakannaa Alexey Krenev (ẹrọx) - fun iṣẹ titanic ti imudojuiwọn Centos ati awọn kernels lori olupin. Ilana ti o wa ninu ọran yii ni lati bẹrẹ lati ibẹrẹ ni ọpọlọpọ igba, eyiti o jẹ idi ti o fi fa fun ọpọlọpọ awọn osu.

orisun: www.habr.com

Fi ọrọìwòye kun