Π˜ΡΡ‚ΠΎΡ€ΠΈΡ ΠΎ ΠΏΡ€ΠΎΠΏΠ°Π²ΡˆΠΈΡ… DNS-ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ… ΠΎΡ‚ Ρ‚Π΅Ρ…ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Google Cloud

ΠžΡ‚ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° Π±Π»ΠΎΠ³Π° Google: Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠΎΠ²Π°Π»ΠΈΡΡŒ Π»ΠΈ Π²Ρ‹ ΠΊΠΎΠ³Π΄Π°-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Ρ‹ Google Cloud Technical Solutions (TSE) Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‚ΡΡ вашими обращСниями Π² Ρ‚Π΅Ρ…ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ? Π’ сфСрС отвСтствСнности ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΎΠ² тСхничСской ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ TSE Π»Π΅ΠΆΠΈΡ‚ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ ΠΈ устранСниС ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ источников ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ. НСкоторыС ΠΈΠ· этих ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ довольно просты, Π½ΠΎ ΠΈΠ½ΠΎΠ³Π΄Π° попадаСтся ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰Π΅Π΅ внимания сразу Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΎΠ². Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· сотрудников TSE расскаТСт Π½Π°ΠΌ ΠΏΡ€ΠΎ ΠΎΠ΄Π½Ρƒ ΠΎΡ‡Π΅Π½ΡŒ Π·Π°ΠΊΠΎΠ²Ρ‹Ρ€ΠΈΡΡ‚ΡƒΡŽ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΈΠ· своСй Π½Π΅Π΄Π°Π²Π½Π΅ΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ β€” случай с ΠΏΡ€ΠΎΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΌΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Π°ΠΌΠΈ DNS. Π’ Ρ…ΠΎΠ΄Π΅ этого рассказа ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π°ΠΌ ΡƒΠ΄Π°Π»ΠΎΡΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, ΠΈ Ρ‡Ρ‚ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ½ΠΈ ΡƒΠ·Π½Π°Π»ΠΈ Π² Ρ…ΠΎΠ΄Π΅ устранСния ошибки. ΠœΡ‹ надССмся, Ρ‡Ρ‚ΠΎ эта история Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ расскаТСт Π²Π°ΠΌ ΠΎ Π³Π»ΡƒΠ±ΠΎΠΊΠΎ ΡƒΠΊΠΎΡ€Π΅Π½ΠΈΠ²ΡˆΠ΅ΠΌΡΡ Π±Π°Π³Π΅, Π½ΠΎ ΠΈ даст ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ процСссов, проходящих ΠΏΡ€ΠΈ ΠΏΠΎΠ΄Π°Ρ‡Π΅ обращСния Π² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ Google Cloud.

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ ΠΎ ΠΏΡ€ΠΎΠΏΠ°Π²ΡˆΠΈΡ… DNS-ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ… ΠΎΡ‚ Ρ‚Π΅Ρ…ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Google Cloud

УстранСниС Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΎΠΊ это ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΈ Π½Π°ΡƒΠΊΠ°, ΠΈ искусство. ВсС начинаСтся с построСния Π³ΠΈΠΏΠΎΡ‚Π΅Π·Ρ‹ ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ нСстандартного повСдСния систСмы, послС Ρ‡Π΅Π³ΠΎ ΠΎΠ½Π° провСряСтся Π½Π° ΠΏΡ€ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒ. Однако, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΡΡ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π³ΠΈΠΏΠΎΡ‚Π΅Π·Ρƒ, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΈ Ρ‚ΠΎΡ‡Π½ΠΎ ΡΡ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ. Если вопрос Π·Π²ΡƒΡ‡ΠΈΡ‚ слишком расплывчато Ρ‚ΠΎ Π²Π°ΠΌ придСтся ΠΊΠ°ΠΊ слСдуСт всС ΠΏΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ; Π² этом ΠΈ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ «искусство» устранСния Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΎΠΊ.

Π’ условиях Google Cloud ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ процСссы ΡƒΡΠ»ΠΎΠΆΠ½ΡΡŽΡ‚ΡΡ Π² Ρ€Π°Π·Ρ‹, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Google Cloud ΠΈΠ·ΠΎ всСх сил стараСтся Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ своих ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ. Из-Π·Π° этого Ρƒ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€ΠΎΠ² TSE Π½Π΅Ρ‚ Π½ΠΈ доступа ΠΊ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ Π²Π°ΡˆΠΈΡ… систСм, Π½ΠΈ возмоТности Ρ‚Π°ΠΊ ΠΆΠ΅ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΎΠ±ΠΎΠ·Ρ€Π΅Π²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ, ΠΊΠ°ΠΊ это Π΄Π΅Π»Π°ΡŽΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΊΠ°ΠΊΠΎΠΉ Π»ΠΈΠ±ΠΎ ΠΈΠ· Π½Π°ΡˆΠΈΡ… Π³ΠΈΠΏΠΎΡ‚Π΅Π· ΠΌΡ‹ (ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Ρ‹) Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ быстро ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ систСму.

НСкоторыС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ исправим всС Π±ΡƒΠ΄Ρ‚ΠΎ ΠΌΠ΅Ρ…Π°Π½ΠΈΠΊΠΈ Π² автосСрвисС, ΠΈ попросту Π²Ρ‹ΡΡ‹Π»Π°ΡŽΡ‚ Π½Π°ΠΌ id Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ процСсс ΠΏΡ€ΠΎΡ‚Π΅ΠΊΠ°Π΅Ρ‚ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ Ρ€Π°Π·Π³ΠΎΠ²ΠΎΡ€Π°: сбор ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ (Π»ΠΈΠ±ΠΎ ΠΎΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΆΠ΅Π½ΠΈΠ΅) Π³ΠΈΠΏΠΎΡ‚Π΅Π·, ΠΈ, Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ строится Π½Π° ΠΎΠ±Ρ‰Π΅Π½ΠΈΠΈ с ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ.

РассматриваСмая ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°

БСгодня ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°ΠΌΠΈ история с Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ ΠΊΠΎΠ½Ρ†ΠΎΠΌ. Одна ΠΈΠ· ΠΏΡ€ΠΈΡ‡ΠΈΠ½ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ кСйса Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² ΠΎΡ‡Π΅Π½ΡŒ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΠΌ ΠΈ Ρ‚ΠΎΡ‡Π½ΠΎΠΌ описании ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹. НиТС ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ копию ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΊΠ΅Ρ‚Π° (ΠΎΡ‚Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ, с Ρ†Π΅Π»ΡŒΡŽ ΡΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ):
Π˜ΡΡ‚ΠΎΡ€ΠΈΡ ΠΎ ΠΏΡ€ΠΎΠΏΠ°Π²ΡˆΠΈΡ… DNS-ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ… ΠΎΡ‚ Ρ‚Π΅Ρ…ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Google Cloud
Π’ этом сообщСнии ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ для нас ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ:

  • Π£ΠΊΠ°Π·Π°Π½Π° конкрСтная VM
  • Π£ΠΊΠ°Π·Π°Π½Π° сама ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° β€” Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ DNS
  • Π£ΠΊΠ°Π·Π°Π½ΠΎ Π³Π΄Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° сСбя проявляСт β€” VM ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€
  • Π£ΠΊΠ°Π·Π°Π½Ρ‹ шаги, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠΈΠ» ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ для опрСдСлСния ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹

ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ Π±Ρ‹Π»ΠΎ зарСгистрировано ΠΊΠ°ΠΊ Β«P1: Critical Impact β€” Service Unusable in productionΒ», Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ постоянный ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ ситуации 24/7 ΠΏΠΎ схСмС Β«Follow the SunΒ» (ΠΏΠΎ ссылкС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ), с ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ΠΉ Π΅Π΅ ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ‚Π΅Ρ…ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ сдвигС часовых поясов. По сути, ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° дошла Π΄ΠΎ нашСй ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² Π¦ΡŽΡ€ΠΈΡ…Π΅, ΠΎΠ½Π° успСла ΠΎΠ±ΠΎΠ³Π½ΡƒΡ‚ΡŒ Π·Π΅ΠΌΠ½ΠΎΠΉ ΡˆΠ°Ρ€. К этому Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ принял ΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎ сниТСнию послСдствий, ΠΎΠ΄Π½Π°ΠΊΠΎ опасался повторСния ситуации Π½Π° ΠΏΡ€ΠΎΠ΄Π°ΠΊΡˆΠ½Π΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ основная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° всС Π΅Ρ‰Π΅ Π½Π΅ Π±Ρ‹Π»Π° ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π°.

К ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ, ΠΊΠΎΠ³Π΄Π° Ρ‚ΠΈΠΊΠ΅Ρ‚ дошСл Π΄ΠΎ Π¦ΡŽΡ€ΠΈΡ…Π°, Ρƒ нас Π½Π° Ρ€ΡƒΠΊΠ°Ρ… ΡƒΠΆΠ΅ Π±Ρ‹Π»Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ информация:

  • Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ /etc/hosts
  • Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ /etc/resolv.conf
  • Π’Ρ‹Π²ΠΎΠ΄ iptables-save
  • Π‘ΠΎΠ±Ρ€Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ ngrep Ρ„Π°ΠΉΠ» pcap

Π‘ этими Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΡ‹ Π±Ρ‹Π»ΠΈ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ этапу «расслСдования» ΠΈ устранСния Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΎΠΊ.

Наши ΠΏΠ΅Ρ€Π²Ρ‹Π΅ шаги

Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΌΡ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ»ΠΈ Π»ΠΎΠ³ΠΈ ΠΈ статус сСрвСра ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ ΡƒΠ±Π΅Π΄ΠΈΠ»ΠΈΡΡŒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ. Π‘Π΅Ρ€Π²Π΅Ρ€ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ IP адрСсу 169.254.169.254 ΠΈ, ΠΊΡ€ΠΎΠΌΠ΅ всСго ΠΏΡ€ΠΎΡ‡Π΅Π³ΠΎ, ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ Π΄ΠΎΠΌΠ΅Π½ΠΎΠ². ΠœΡ‹ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ΅Ρ€Π²ΠΎΠ» ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с VM ΠΈ Π½Π΅ Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹.

Π­Ρ‚ΠΎ Π±Ρ‹Π»Π° какая-Ρ‚ΠΎ странная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°: ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° nmap ΠΎΠΏΡ€ΠΎΠ²Π΅Ρ€Π³Π»Π° Π½Π°ΡˆΡƒ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π³ΠΈΠΏΠΎΡ‚Π΅Π·Ρƒ ΠΎ ΠΏΠΎΡ‚Π΅Ρ€Π΅ UDP ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², поэтому ΠΌΡ‹ мыслСнно Π²Ρ‹Π²Π΅Π»ΠΈ Π΅Ρ‰Π΅ нСсколько Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΈ способов ΠΈΡ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ:

  • ΠŸΡ€ΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π»ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π²Ρ‹Π±ΠΎΡ€ΠΎΡ‡Π½ΠΎ? => ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π° iptables
  • НС слишком Π»ΠΈ ΠΌΠ°Π» MTU? => ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ ip a show
  • Π—Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π΅Ρ‚ Π»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ UDP-ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΈ TCP? => ΠŸΡ€ΠΎΠ³Π½Π°Ρ‚ΡŒ dig +tcp
  • Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ Π»ΠΈ сгСнСрированныС dig ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹? => ΠŸΡ€ΠΎΠ³Π½Π°Ρ‚ΡŒ tcpdump
  • ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π»ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ libdns? => ΠŸΡ€ΠΎΠ³Π½Π°Ρ‚ΡŒ strace для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² Π² ΠΎΠ±Π΅ стороны

Π’ΡƒΡ‚ ΠΌΡ‹ Ρ€Π΅ΡˆΠ°Π΅ΠΌ ΡΠΎΠ·Π²ΠΎΠ½ΠΈΡ‚ΡŒΡΡ с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ для устранСния Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΎΠΊ Π²ΠΆΠΈΠ²ΡƒΡŽ.

Π’ Ρ…ΠΎΠ΄Π΅ Π·Π²ΠΎΠ½ΠΊΠ° Π½Π°ΠΌ удаСтся ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ нСсколько Π²Π΅Ρ‰Π΅ΠΉ:

  • ПослС Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΎΠΊ ΠΌΡ‹ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ ΠΏΡ€Π°Π²ΠΈΠ»Π° iptables ΠΈΠ· списка ΠΏΡ€ΠΈΡ‡ΠΈΠ½
  • ΠœΡ‹ провСряСм интСрфСйсы сСти ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΈ пСрСпровСряСм ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ MTU
  • ΠœΡ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅ΠΌ Ρ‡Ρ‚ΠΎ dig +tcp google.com (TCP) Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠ°ΠΊ Π½Π°Π΄ΠΎ, Π½ΠΎ Π²ΠΎΡ‚ dig google.com (UDP) Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚
  • ΠŸΡ€ΠΎΠ³Π½Π°Π² tcpdump ΠΏΠΎΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ dig, ΠΌΡ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ²Π°Π΅ΠΌ Ρ‡Ρ‚ΠΎ UDP ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ
  • ΠœΡ‹ прогоняСм strace dig google.com ΠΈ Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ dig ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ sendmsg() ΠΈ recvms(), ΠΎΠ΄Π½Π°ΠΊΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ прСрываСтся ΠΏΠΎ Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚Ρƒ

К Π½Π΅ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, наступаСт ΠΊΠΎΠ½Π΅Ρ† смСны ΠΈ ΠΌΡ‹ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π·ΠΎΠ½Ρƒ. ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π²Ρ‹Π·Π²Π°Π»ΠΎ Π² нашСй ΠΊΠΎΠΌΠ°Π½Π΄Π΅ интСрСс, ΠΈ ΠΊΠΎΠ»Π»Π΅Π³Π° ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ исходный DNS ΠΏΠ°ΠΊΠ΅Ρ‚ питоновским ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ scrapy.

from scapy.all import *

answer = sr1(IP(dst="169.254.169.254")/UDP(dport=53)/DNS(rd=1,qd=DNSQR(qname="google.com")),verbose=0)
print ("169.254.169.254", answer[DNS].summary())

Π­Ρ‚ΠΎΡ‚ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ создаСт DNS ΠΏΠ°ΠΊΠ΅Ρ‚ ΠΈ отправляСт запросу сСрвСру ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ запускаСт ΠΊΠΎΠ΄, DNS ΠΎΡ‚Π²Π΅Ρ‚ возвращаСтся, ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΅Π³ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅Ρ‚ отсутствиС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ сСти.

ПослС ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ «кругосвСтного ΠΏΡƒΡ‚Π΅ΡˆΠ΅ΡΡ‚Π²ΠΈΡΒ» ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ возвращаСтся ΠΊ нашСй ΠΊΠΎΠΌΠ°Π½Π΄Π΅, ΠΈ я ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠΆΡƒ Π΅Π³ΠΎ Π½Π° сСбя, посчитав, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅, Ссли ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ пСрСстанСт ΠΊΡ€ΡƒΠΆΠΈΡ‚ΡŒ с мСста Π½Π° мСсто.

Π’Π΅ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ, ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ любСзно ΡΠΎΠ³Π»Π°ΡˆΠ°Π΅Ρ‚ΡΡ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ снимок ΠΎΠ±Ρ€Π°Π·Π° систСмы. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠ΅ новости: Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ самому Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ систСму Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ускоряСт устранСниС Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΎΠΊ, вСдь большС Π½Π΅ Π½Π°Π΄ΠΎ ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹, Π²Ρ‹ΡΡ‹Π»Π°Ρ‚ΡŒ ΠΌΠ½Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΠΈ Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ…, я ΠΌΠΎΠ³Ρƒ всС ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ сам!

КоллСги Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ ΠΌΠ½Π΅ ΠΏΠΎΠ½Π΅ΠΌΠ½ΠΎΠ³Ρƒ Π·Π°Π²ΠΈΠ΄ΠΎΠ²Π°Ρ‚ΡŒ. Π—Π° ΠΎΠ±Π΅Π΄ΠΎΠΌ ΠΌΡ‹ обсуТдаСм ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½ΠΈ Ρƒ ΠΊΠΎΠ³ΠΎ Π½Π΅Ρ‚ ΠΈΠ΄Π΅ΠΉ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΆΠ΅ происходит. К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, сам ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΡƒΠΆΠ΅ принял ΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎ ΡΠΌΡΠ³Ρ‡Π΅Π½ΠΈΡŽ послСдствий ΠΈ Π½ΠΈΠΊΡƒΠ΄Π° Π½Π΅ ΡΠΏΠ΅ΡˆΠΈΡ‚, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Ρƒ нас Π΅ΡΡ‚ΡŒ врСмя ΠΏΡ€Π΅ΠΏΠ°Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ. И Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π·, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ провСсти Π»ΡŽΠ±Ρ‹Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΠ΅ нас тСсты. ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ!

Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡΡΡŒ Π½Π° шаг Π½Π°Π·Π°Π΄

Один ΠΈΠ· самых популярных вопросов Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽ Π½Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎΡΡ‚ΡŒ систСмного ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π° Π·Π²ΡƒΡ‡ΠΈΡ‚ Ρ‚Π°ΠΊ: Β«Π§Ρ‚ΠΎ происходит, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΠΈΠ½Π³ΡƒΠ΅Ρ‚Π΅ www.google.com?Β» Вопрос ΡˆΠΈΠΊΠ°Ρ€Π½Ρ‹ΠΉ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ‚Ρƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΡƒΡΡ‚ΡŒ ΠΎΡ‚ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ Π΄ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ пространства, Π΄ΠΎ ядра систСмы ΠΈ Π΄Π°Π»Π΅Π΅ ΠΊ сСти. Π― ΡƒΠ»Ρ‹Π±Π°ΡŽΡΡŒ: ΠΈΠ½ΠΎΠ³Π΄Π° вопросы с ΠΈΠ½Ρ‚Π΅Ρ€Π²ΡŒΡŽ ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ ΠΈ Π² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠΉ Тизни…

Π― Ρ€Π΅ΡˆΠ°ΡŽ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ этот эйчарский вопрос ΠΊ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅. Π“Ρ€ΡƒΠ±ΠΎ говоря, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ DNS имя, происходит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

  1. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΡΠΈΡΡ‚Π΅ΠΌΠ½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ libdns
  2. libdns провСряСт ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ систСмы ΠΊ ΠΊΠ°ΠΊΠΎΠΌΡƒ DNS сСрвСру Π΅ΠΉ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ (Π½Π° Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ΅ это 169.254.169.254, сСрвСр ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…)
  3. libdns ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ систСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹ для создания UDP сокСта (SOKET_DGRAM) ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ UDP ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² с DNS запросом Π² ΠΎΠ±Π΅ стороны
  4. Π§Π΅Ρ€Π΅Π· интСрфСйс sysctl ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ UDP стСк Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ядра
  5. Π―Π΄Ρ€ΠΎ взаимодСйствуСт с ΠΆΠ΅Π»Π΅Π·ΠΎΠΌ для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΏΠΎ сСти Ρ‡Π΅Ρ€Π΅Π· сСтСвой интСрфСйс
  6. Π“ΠΈΠΏΠ΅Ρ€Π²ΠΈΠ·ΠΎΡ€ Π»ΠΎΠ²ΠΈΡ‚ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚ сСрвСру ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π΅ с Π½ΠΈΠΌ
  7. Π‘Π΅Ρ€Π²Π΅Ρ€ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… своим колдунством опрСдСляСт DNS имя ΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΡ‚Π²Π΅Ρ‚

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ ΠΎ ΠΏΡ€ΠΎΠΏΠ°Π²ΡˆΠΈΡ… DNS-ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ… ΠΎΡ‚ Ρ‚Π΅Ρ…ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Google Cloud
Напомню, ΠΊΠ°ΠΊΠΈΠ΅ Π³ΠΈΠΏΠΎΡ‚Π΅Π·Ρ‹ ΠΌΡ‹ ΡƒΠΆΠ΅ успСли Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ:

Π“ΠΈΠΏΠΎΡ‚Π΅Π·Π°: Π‘Π»ΠΎΠΌΠ°Π½Ρ‹ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ

  • ВСст 1: ΠΏΡ€ΠΎΠ³Π½Π°Ρ‚ΡŒ Π² систСмС strace, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ dig Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Π΅ систСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹
  • Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: Π²Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹Π΅ систСмныС Π²Ρ‹Π·ΠΎΠ²Ρ‹
  • ВСст 2: Ρ‡Π΅Ρ€Π΅Π· srapy ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΌΠΎΠΆΠ΅ΠΌ Π»ΠΈ ΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΈΠΌΠ΅Π½Π° Π² ΠΎΠ±Ρ…ΠΎΠ΄ систСмных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ
  • Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: ΠΌΠΎΠΆΠ΅ΠΌ
  • ВСст 3: ΠΏΡ€ΠΎΠ³Π½Π°Ρ‚ΡŒ rpm –V Π½Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π΅ libdns ΠΈ md5sum Ρ„Π°ΠΉΠ»Π°Ρ… Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ
  • Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: ΠΊΠΎΠ΄ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π΅Π½ ΠΊΠΎΠ΄Ρƒ Π² Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС
  • ВСст 4: ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π· ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ систСмы ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π° VM Π±Π΅Π· ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ повСдСния, ΠΏΡ€ΠΎΠ³Π½Π°Ρ‚ΡŒ chroot, ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π»ΠΈ DNS
  • Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: DNS Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ

Π’Ρ‹Π²ΠΎΠ΄ Π½Π° основС тСстов: ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π½Π΅ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ…

Π“ΠΈΠΏΠΎΡ‚Π΅Π·Π°: ΠŸΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΠ΅Ρ‚ ошибка Π² настройках DNS

  • ВСст 1: ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ tcpdump ΠΈ ΠΏΡ€ΠΎΠ½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ Π»ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ DNS ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ послС запуска dig
  • Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ
  • ВСст 2: ΠΏΠ΅Ρ€Π΅ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π° сСрвСрС /etc/nsswitch.conf ΠΈ /etc/resolv.conf
  • Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: всС ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ

Π’Ρ‹Π²ΠΎΠ΄ Π½Π° основС тСстов: ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π½Π΅ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ DNS

Π“ΠΈΠΏΠΎΡ‚Π΅Π·Π°: ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΎ ядро

  • ВСст: ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ ядро, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ подпись, ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ
  • Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅

Π’Ρ‹Π²ΠΎΠ΄ Π½Π° основС тСстов: ядро Π½Π΅ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΎ

Π“ΠΈΠΏΠΎΡ‚Π΅Π·Π°: Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΉ сСти (Π»ΠΈΠ±ΠΎ интСрфСйса сСти Π³ΠΈΠΏΠ΅Ρ€Π²ΠΈΠ·ΠΎΡ€Π°)

  • ВСст 1: ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ настройки Ρ„Π°ΠΉΠ΅Ρ€Π²ΠΎΠ»Π°
  • Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: Ρ„Π°ΠΉΠ΅Ρ€Π²ΠΎΠ» пропускаСт DNS ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ ΠΈ Π½Π° хостС, ΠΈ Π½Π° GCP
  • ВСст 2: ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ ΠΈ ΠΎΡ‚ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° DNS запросов
  • Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: tcpdump ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² хостом

Π’Ρ‹Π²ΠΎΠ΄ Π½Π° основС тСстов: ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π½Π΅ Π² сСти

Π“ΠΈΠΏΠΎΡ‚Π΅Π·Π°: Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ сСрвСр ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…

  • ВСст 1: ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π»ΠΎΠ³ΠΈΠΈ сСрвСра ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΈ
  • Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: Π² Π»ΠΎΠ³Π°Ρ… Π°Π½ΠΎΠΌΠ°Π»ΠΈΠΉ Π½Π΅Ρ‚
  • ВСст 2: ΠΎΠ±ΠΎΠΉΡ‚ΠΈ сСрвСр ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· dig @8.8.8.8
  • Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚: Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π°Ρ€ΡƒΡˆΠ°Π΅Ρ‚ΡΡ Π΄Π°ΠΆΠ΅ Π±Π΅Π· использования сСрвСра ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…

Π’Ρ‹Π²ΠΎΠ΄ Π½Π° основС тСстов: ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π½Π΅ Π² сСрвСрС ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Ρ…

Π˜Ρ‚ΠΎΠ³: ΠΌΡ‹ протСстировали всС подсистСмы ΠΊΡ€ΠΎΠΌΠ΅ настроСк срСды выполнСния!

ΠŸΠΎΠ³Ρ€ΡƒΠΆΠ°ΡΡΡŒ Π² настройки срСды выполнСния ядра

Для настройки срСды исполнСния ядра Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ опциями ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки (grub) Π»ΠΈΠ±ΠΎ интСрфСйсом sysctl. Π― заглянул Π² /etc/sysctl.conf ΠΈ ΠΏΠΎΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ, ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ» нСсколько кастомных настроСк. Чувствуя Π±ΡƒΠ΄Ρ‚ΠΎ я ухватился Π·Π° Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ, я ΠΎΡ‚ΠΌΠ΅Π» всС нСсСтСвыС ΠΈΠ»ΠΈ Π½Π΅-tcp настройки, ΠΎΡΡ‚Π°Π²ΡˆΠΈΡΡŒ с горской настроСк net.core. Π—Π°Ρ‚Π΅ΠΌ я обратился Ρ‚ΡƒΠ΄Π°, Π³Π΄Π΅ Ρƒ VM Π»Π΅ΠΆΠ°Ρ‚ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ хоста ΠΈ Π½Π°Ρ‡Π°Π» ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ Π·Π° Π΄Ρ€ΡƒΠΆΠΊΠΎΠΉ, ΠΎΠ΄Π½Π° Π·Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ настройки со сломанной VM, ΠΏΠΎΠΊΠ° Π½Π΅ Π²Ρ‹ΡˆΠ΅Π» Π½Π° прСступника:

net.core.rmem_default = 2147483647

Π’ΠΎΡ‚ ΠΎΠ½Π°, Π»ΠΎΠΌΠ°ΡŽΡ‰Π°Ρ DNS конфигурация! Π― нашСл ΠΎΡ€ΡƒΠ΄ΠΈΠ΅ прСступлСния. Но ΠΏΠΎΡ‡Π΅ΠΌΡƒ это происходит? МнС всС Π΅Ρ‰Π΅ Π½ΡƒΠΆΠ΅Π½ Π±Ρ‹Π» ΠΌΠΎΡ‚ΠΈΠ².

Настройка Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π±ΡƒΡ„Π΅Ρ€Π° DNS ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² происходит Ρ‡Π΅Ρ€Π΅Π· net.core.rmem_default. Π’ΠΈΠΏΠΈΡ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π²Π°Ρ€ΡŒΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Π³Π΄Π΅-Ρ‚ΠΎ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… 200ΠšΠΈΠ‘, ΠΎΠ΄Π½Π°ΠΊΠΎ Ссли ваш сСрвСр ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ DNS ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±ΡƒΡ„Π΅Ρ€Π°. Если Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ поступлСния Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠ°ΠΊΠ΅Ρ‚Π° Π±ΡƒΡ„Π΅Ρ€ ΠΏΠΎΠ»ΠΎΠ½, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ нСдостаточно быстро Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚, Ρ‚ΠΎ Π²Ρ‹ Π½Π°Ρ‡Π½Π΅Ρ‚Π΅ Ρ‚Π΅Ρ€ΡΡ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹. Наш ΠΊΠ»ΠΈΠ΅Π½Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ» Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±ΡƒΡ„Π΅Ρ€Π° Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ опасался ΠΏΠΎΡ‚Π΅Ρ€ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ пользовался ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ сбору ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ Ρ‡Π΅Ρ€Π΅Π· DNS ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ½ выставил, Π±Ρ‹Π»ΠΎ максимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ: 231-1 (Ссли Π²Ρ‹ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ 231, ядро Π²Π΅Ρ€Π½Π΅Ρ‚ Β«INVALID ARGUMENTΒ»).

Π’Π½Π΅Π·Π°ΠΏΠ½ΠΎ я осознал ΠΏΠΎΡ‡Π΅ΠΌΡƒ nmap ΠΈ scapy Ρ€Π°Π±ΠΎΡ‚Π°Π»ΠΈ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ: ΠΎΠ½ΠΈ использовали сырыС сокСты! Π‘Ρ‹Ρ€Ρ‹Π΅ сокСты ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ…: ΠΎΠ½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π² ΠΎΠ±Ρ…ΠΎΠ΄ iptables, ΠΈ ΠΎΠ½ΠΈ Π½Π΅ Π±ΡƒΡ„Π΅Ρ€ΠΈΠ·ΡƒΡŽΡ‚ΡΡ!

Но ΠΏΠΎΡ‡Π΅ΠΌΡƒ «слишком большой Π±ΡƒΡ„Π΅Ρ€Β» Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹? Он явно Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π΅ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π·Π°Π΄ΡƒΠΌΠ°Π½ΠΎ.

К этому ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ я ΠΌΠΎΠ³ воспроизвСсти ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ядрах ΠΈ мноТСствС дистрибутивов. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° ΡƒΠΆΠ΅ ΠΏΡ€ΠΎΡΠ²Π»ΡΠ»Π°ΡΡŒ Π½Π° ядрС 3.Ρ… ΠΈ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΏΡ€ΠΎΡΠ²Π»ΡΠ»Π°ΡΡŒ Π½Π° ядрС 5.Ρ….

Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΏΡ€ΠΈ запускС

sysctl -w net.core.rmem_default=$((2**31-1))

DNS пСрСставал Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ.

Π― принялся ΠΈΡΠΊΠ°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ значСния Ρ‡Π΅Ρ€Π΅Π· простой Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ поиска ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ» Ρ‡Ρ‚ΠΎ с 2147481343 систСма Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, ΠΎΠ΄Π½Π°ΠΊΠΎ это число Π±Ρ‹Π»ΠΎ для мСня бСссмыслСнным Π½Π°Π±ΠΎΡ€ΠΎΠΌ Ρ†ΠΈΡ„Ρ€. Π― ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠΈΠ» ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ ΠΏΠΎΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Ρ‚ΡŒ это число, ΠΈ ΠΎΠ½ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠ» Ρ‡Ρ‚ΠΎ систСма Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π»Π° с google.com, Π½ΠΎ всС Π΅Ρ‰Π΅ Π²Ρ‹Π΄Π°Π²Π°Π»Π° ΠΎΡˆΠΈΠ±ΠΊΡƒ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π΄ΠΎΠΌΠ΅Π½Π°ΠΌΠΈ, поэтому я ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠ» ΠΌΠΎΠ΅ расслСдованиС.

Π― установил dropwatch, инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ стоило Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ€Π°Π½ΡŒΡˆΠ΅: ΠΎΠ½ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΊΡƒΠ΄Π° ΠΈΠΌΠ΅Π½Π½ΠΎ Π² ядрС ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚. Π’ΠΈΠ½ΠΎΠ²Π½ΠΎΠΉ оказалась функция udp_queue_rcv_skb. Π― скачал исходники ядра ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΠ» нСсколько Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ printk Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ ΠΊΡƒΠ΄Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ ΠΏΠ°ΠΊΠ΅Ρ‚. Π― быстро ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ» Π½ΡƒΠΆΠ½ΠΎΠ΅ условиС if, ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя попросту пялился Π½Π° Π½Π΅Π³ΠΎ, вСдь ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ‚ΠΎΠ³Π΄Π° всС Π½Π°ΠΊΠΎΠ½Π΅Ρ† сошлось Π² Ρ†Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρƒ: 231-1, бСссмыслСнноС число, Π½Π΅Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ домСн… Π”Π΅Π»ΠΎ Π±Ρ‹Π»ΠΎ Π² кускС ΠΊΠΎΠ΄Π° Π² __udp_enqueue_schedule_skb:

if (rmem > (size + sk->sk_rcvbuf))
		goto uncharge_drop;

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅:

  • rmem ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ int
  • size ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ u16 (нСподписанный ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚ΠΈΠ±ΠΈΡ‚Π½Ρ‹ΠΉ int) ΠΈ Ρ…Ρ€Π°Π½ΠΈΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΠ°ΠΊΠ΅Ρ‚Π°
  • sk->sk_rcybuf ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ int ΠΈ Ρ…Ρ€Π°Π½ΠΈΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π±ΡƒΡ„Π΅Ρ€Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ Ρ€Π°Π²Π΅Π½ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π² net.core.rmem_default

Когда sk_rcvbuf приблиТаСтся ΠΊ 231, суммированиС Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΏΠ°ΠΊΠ΅Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ цСлочислСнному ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ. И Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это int, Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ становится ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ условиС становится истинным ΠΊΠΎΠ³Π΄Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π»ΠΎΠΆΠ½Ρ‹ΠΌ (большС ΠΎΠ± этом ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ·Π½Π°Ρ‚ΡŒ ΠΏΠΎ ссылкС).

Ошибка исправляСтся Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΊ unsigned int. Π― ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠ» исправлСниС ΠΈ пСрСзапустил систСму, послС Ρ‡Π΅Π³ΠΎ DNS вновь Π·Π°Ρ€Π°Π±ΠΎΡ‚Π°Π».

Вкус ΠΏΠΎΠ±Π΅Π΄Ρ‹

Π― пСрСслал ΠΌΠΎΠΈ Π½Π°Ρ…ΠΎΠ΄ΠΊΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρƒ ΠΈ выслал LKML ΠΏΠ°Ρ‚Ρ‡ ядра. Π― Π΄ΠΎΠ²ΠΎΠ»Π΅Π½: ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ кусочСк Π³ΠΎΠ»ΠΎΠ²ΠΎΠ»ΠΎΠΌΠΊΠΈ сошСлся Π² Π΅Π΄ΠΈΠ½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅, я ΠΌΠΎΠ³Ρƒ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΌΡ‹ наблюдали Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ наблюдали, ΠΈ Ρ‡Ρ‚ΠΎ самоС Π³Π»Π°Π²Π½ΠΎΠ΅, ΠΌΡ‹ смогли Π½Π°ΠΉΡ‚ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ благодаря совмСстной Ρ€Π°Π±ΠΎΡ‚Π΅!

Π‘Ρ‚ΠΎΠΈΡ‚ ΠΏΡ€ΠΈΠ·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ случай оказался Ρ€Π΅Π΄ΠΊΠΈΠΌ, ΠΈ ΠΊ ΡΡ‡Π°ΡΡ‚ΡŒΡŽ ΠΊ Π½Π°ΠΌ ΠΎΡ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Ρ€Π΅Π΄ΠΊΠΎ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ слоТныС обращСния.

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ ΠΎ ΠΏΡ€ΠΎΠΏΠ°Π²ΡˆΠΈΡ… DNS-ΠΏΠ°ΠΊΠ΅Ρ‚Π°Ρ… ΠΎΡ‚ Ρ‚Π΅Ρ…ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Google Cloud


Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com