O se tala e uiga i le misi o pepa DNS mai Google Cloud lagolago faʻapitoa

Mai le Google Blog Editor: Na e mafaufau ea pe fa'afefea ona fa'aogaina e inisinia a Google Cloud Technical Solutions (TSE) au talosaga lagolago? TSE Technical Support Engineers e nafa ma le faailoaina ma le faasa'oina o puna'oa o faafitauli ua lipotia mai e tagata. O nisi o nei faʻafitauli e fai si faigofie, ae o nisi taimi e te maua ai se tiketi e manaʻomia ai le gauai atu o nisi inisinia i le taimi e tasi. I lenei tusiga, o le a taʻu mai e se tasi o tagata faigaluega a le TSE ia i matou se tasi o faʻafitauli faigata mai lana faʻataʻitaʻiga talu ai nei - tulaga o le misi o pepa DNS. I lenei tala, o le a tatou vaʻavaʻai pe na faʻafefea e inisinia ona foia le tulaga, ma o a mea fou na latou aʻoaʻoina aʻo faʻaleleia le mea sese. Matou te faʻamoemoe o lenei tala e le gata ina aʻoaʻoina oe e uiga i se pusa loloto, ae e tuʻuina atu ai foi ia te oe le malamalama i faiga e alu i le failaina o se pepa lagolago ile Google Cloud.

O se tala e uiga i le misi o pepa DNS mai Google Cloud lagolago faʻapitoa

Fa'afitauli ose fa'asaienisi ma se faatufugaga. E amata uma i le fausiaina o se manatu e uiga i le mafuaʻaga o le amio le masani a le faiga, a maeʻa ona tofotofoina mo le malosi. Ae ui i lea, ae tatou te leʻi faia se manatu, e tatau ona tatou faʻamalamalama manino ma faʻamalamalama saʻo le faʻafitauli. Afai o le fesili e foliga mai e le mautonu, e tatau ona e suʻesuʻeina ma le totoa mea uma; O le "ata" lea o le fofoina o faafitauli.

I lalo o le Google Cloud, o ia faiga e faʻateleina le lavelave, ona o Google Cloud e taumafai i le mea sili e faʻamautinoa ai le le faalauaiteleina o ona tagata faʻaoga. Ona o lea mea, e le maua e inisinia TSE le avanoa e fa'asa'o ai au faiga, po'o le mafai fo'i ona va'ai fa'aopoopo fa'alaua'itele e pei ona faia e tagata fa'aoga. O le mea lea, e faʻataʻitaʻi ai soʻo se tasi oa matou manatu, matou (inisinia) e le mafai ona vave faʻaleleia le faiga.

O nisi tagata faʻaoga e talitonu o le a matou faʻaleleia mea uma e pei o masini i totonu o se taavale, ma naʻo le auina mai ia i matou o le id o se masini masini, ae o le mea moni o le faagasologa e faia i se talanoaga: aoina o faʻamatalaga, faʻavaeina ma faʻamaonia (pe faʻamaonia) manatu, ma, i le faaiuga, o se fa'afitauli fa'ai'uga e fa'avae ile feso'ota'iga ma le kalani.

Fa'afitauli o lo'o fesiligia

O le asō ua i ai sa tatou tala ma se faaiuga lelei. O se tasi o mafuaaga mo le manuia o le fofo o le mataupu o loʻo tuʻuina atu o se faʻamatalaga auiliili ma saʻo o le faʻafitauli. I lalo e mafai ona e vaʻai i se kopi o le pepa muamua (faʻasaʻo e nana faʻamatalaga faʻalilolilo):
O se tala e uiga i le misi o pepa DNS mai Google Cloud lagolago faʻapitoa
O lenei savali o loʻo i ai le tele o faʻamatalaga aoga mo i matou:

  • VM faʻapitoa faʻapitoa
  • O le faʻafitauli lava ia o loʻo faʻaalia - DNS e le aoga
  • O loʻo faʻaalia le mea e faʻaalia ai le faʻafitauli - VM ma pusa
  • O laasaga na faia e le tagata faʻaoga e iloa ai le faʻafitauli o loʻo faʻaalia.

O le talosaga na resitalaina o le "P1: Critical Impact - Service Unusable in production", o lona uiga o le mataʻituina pea o le tulaga 24/7 e tusa ai ma le polokalame "Follow the Sun" (e mafai ona e faitau atili e uiga i fa'amuamua o talosaga a tagata fa'aoga), fa'atasi ai ma lona fesiitaiga mai le tasi 'au lagolago fa'atekinisi i le isi i taimi ta'itasi sifi. O le mea moni, i le taimi na oʻo mai ai le faʻafitauli i la matou 'au i Zurich, ua uma ona taʻamilo i le kelope. I le taimi lea, ua faia e le tagata faʻaoga ni faiga faʻaitiitia, ae na fefe i le toe faia o le tulaga i le gaosiga, talu ai e leʻi maua le mafuaʻaga.

E oo atu i le taimi na taunuu ai le tiketi i Zurich, ua uma ona matou maua faamatalaga nei i lima:

  • Anotusi /etc/hosts
  • Anotusi /etc/resolv.conf
  • iʻuga iptables-save
  • Fa'apotopotoina e le 'au ngrep pcap faila

Faatasi ai ma lenei faʻamatalaga, ua matou sauni e amata le "suʻesuʻega" ma le faʻafitauli.

O tatou laasaga muamua

Muamua, na matou siakiina ogalaau ma le tulaga o le metadata server ma faʻamautinoa o loʻo galue saʻo. Ole metadata server e tali atu ile tuatusi IP 169.254.169.254 ma, faatasi ai ma isi mea, e nafa ma le puleaina o igoa ole igoa. Na matou faʻalua foʻi le siakiina o le firewall o loʻo galue saʻo ma le VM ma e le poloka ai pepa.

O se ituaiga o faʻafitauli uiga ese: o le siaki a le nmap na faʻamaonia ai lo matou manatu autu e uiga i le leiloa o pusa UDP, o lea na matou maua ai le mafaufau ma le tele o isi filifiliga ma auala e siaki ai:

  • Po'o fa'atu'u fa'atasi ia afifi? => Siaki tulafono iptables
  • E le itiiti tele ea? TAGATA? => Siaki galuega faatino ip a show
  • O le fa'afitauli e a'afia ai na'o pusa UDP po'o TCP fo'i? => Aveese ese dig +tcp
  • Po'o toe fa'afo'i mai pepa na gaosia? => Aveese ese tcpdump
  • O galue sa'o le libdns? => Aveese ese strace e siaki le felauaiga o afifi i itu uma e lua

O iinei matou te filifili ai e valaʻau le tagata faʻaoga e foʻia faʻafitauli ola.

I le taimi o le telefoni e mafai ona tatou siakiina ni nai mea:

  • A maeʻa nisi siaki matou te le aofia ai tulafono iptables mai le lisi o mafuaʻaga
  • Matou te siakiina fesoʻotaʻiga fesoʻotaʻiga ma laulau taʻavale, ma siaki faʻalua pe saʻo le MTU
  • Matou te iloa lena mea dig +tcp google.com (TCP) galue e pei ona tatau ai, ae dig google.com (UDP) e le aoga
  • Ua tuliesea tcpdump o lo'o galue pea dig, matou te iloa o loʻo toe faʻafoʻi mai pusa UDP
  • Matou te tietie ese strace dig google.com ma ua tatou vaai i le eli sa'o le valaau sendmsg() и recvms(), peita'i o le lona lua ua fa'alavelaveina e se taimi e fa'agata

Ae paga lea, ua oo mai le faaiuga o le sifi ma ua faamalosia i matou e faalautele le faafitauli i le isi sone taimi. Ae ui i lea, o le talosaga, na faaosofia ai le fiafia i la matou 'au, ma o se paaga na fautuaina le fatuina o le uluai pusa DNS e faʻaaoga ai le Python module 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())

O lenei vaega e fausia ai se pusa DNS ma auina atu le talosaga i le metadata server.

E faʻaogaina e le tagata faʻaoga le code, o le DNS e toe faʻafoʻi mai, ma o le talosaga e mauaina, faʻamaonia e leai se faʻafitauli i le tulaga o fesoʻotaiga.

A maeʻa se isi "malaga i le lalolagi," e toe foʻi mai le talosaga i la matou 'au, ma ou te tuʻuina atu ia te aʻu lava, ma le manatu o le a sili atu ona faigofie mo le tagata faʻaoga pe a taofi le taʻavale mai lea nofoaga i lea nofoaga.

I le taimi nei, e malie le tagata faʻaoga e tuʻuina atu se ata o le ata o le faiga. O se tala lelei tele lenei: o le mafai ona faʻataʻitaʻiina le polokalama aʻu lava ia e sili atu le vave faʻafitauli, aua ou te le toe fai atu i le tagata faʻaoga e faʻatonu tulafono, auina mai ia te aʻu iʻuga ma auʻiliʻili, e mafai ona ou faia mea uma lava!

Ua amata ona matau'a teisi a'u uo ia te au. I le taumafataga o le aoauli matou te talanoaina ai le liua, ae leai se tasi e iloa le mea o loʻo tupu. O le mea e lelei ai, o le tagata faʻaoga lava ia ua uma ona faia ni faiga e faʻaitiitia ai aʻafiaga ma e leʻo faanatinati, o lea e iai le taimi e faʻasalalau ai le faʻafitauli. Ma talu ai e iai sa matou ata, e mafai ona matou faia soʻo se suʻega e fiafia i ai i matou. Matagofie!

Toe laa i tua

O se tasi o fesili fa'atalanoaga sili ona ta'uta'ua mo tulaga inisinia faiga o le: “O le a le mea e tupu pe a e ping www.google.com? O le fesili e sili, talu ai e manaʻomia e le sui faatu ona faʻamatalaina mea uma mai le atigi i le avanoa e faʻaoga ai, i le kernel system ona sosoo ai lea ma le fesoʻotaʻiga. Ou te ataata: o nisi taimi o fesili faatalanoaga e aoga i le olaga moni...

Ou te filifili e faʻaoga lenei fesili HR i se faʻafitauli o loʻo iai nei. I le tautala faʻapitoa, pe a e taumafai e fuafua se igoa DNS, o mea nei e tupu:

  1. O le talosaga e taʻua se faletusi faʻapitoa e pei ole libdns
  2. libdns siaki le faʻatulagaina o le faʻaogaina o le DNS server e tatau ona faʻafesoʻotaʻi (i le ata o le 169.254.169.254, metadata server)
  3. libdns fa'aoga telefoni feavea'i e fatu ai se socket UDP (SOKET_DGRAM) ma auina atu pepa UDP ma se fesili DNS i itu uma e lua
  4. E ala i le sysctl interface e mafai ona e faʻapipiʻi le UDP stack i le kernel level
  5. O le fatu e fegalegaleai ma meafaigaluega e faʻafeiloaʻi ai afifi i luga o le fesoʻotaʻiga e ala i le fesoʻotaʻiga fesoʻotaʻiga
  6. E pu'e e le hypervisor ma fa'asalalau atu le pepa i le metadata server pe a fa'afeso'ota'i i ai
  7. O le metadata server, e ala i ana togafiti, e fuafua ai le igoa DNS ma toe faafoi mai se tali e faʻaaoga ai le auala lava e tasi

O se tala e uiga i le misi o pepa DNS mai Google Cloud lagolago faʻapitoa
Sei ou faamanatu atu ia te oe ni manatu ua uma ona tatou iloiloina:

Manatu: Faletusi malepe

  • Su'ega 1: fa'agasolo strace i totonu o le faiga, siaki pe o le eli e vala'au le sa'o o le telefoni
  • I'uga: Ua vala'au sa'o vala'au
  • Su'ega 2: fa'aaoga le srapy e siaki ai pe mafai ona matou fa'ailoa igoa e ala i faletusi faiga
  • I'uga: matou te mafaia
  • Su'ega 3: fa'agasolo rpm –V i luga ole pusa libdns ma faila faletusi md5sum
  • I'uga: o le fa'ailoga faletusi e tutusa lelei ma le fa'ailoga o lo'o i totonu o le faiga fa'aogaina
  • Suʻega 4: faʻapipiʻi le ata o le aʻa a le tagata faʻaoga i luga o se VM e aunoa ma lenei amio, taʻavale chroot, vaʻai pe galue DNS
  • I'uga: DNS e sa'o lelei

Fa'ai'uga e fa'atatau i su'ega: o le faafitauli e le oi totonu o faletusi

Manatu: O loʻo i ai se mea sese ile DNS settings

  • Su'ega 1: siaki le tcpdump ma va'ai pe lafo mai pusa DNS ma toe fa'afo'i sa'o pe a uma ona eli
  • I'uga: o lo'o sa'o le felauaiga o afifi
  • Su'ega 2: siaki fa'alua ile server /etc/nsswitch.conf и /etc/resolv.conf
  • I'uga: e sa'o mea uma

Fa'ai'uga e fa'atatau i su'ega: o le faʻafitauli e le o le faʻatulagaina DNS

Manatu: ua faaleagaina le tino

  • Su'ega: fa'apipi'i fatu fou, siaki saini, toe amata
  • I'uga: amio tutusa

Fa'ai'uga e fa'atatau i su'ega: e le afaina le fatu

Manatu: amio le sa'o a le tagata fa'aoga (po'o le hypervisor network interface)

  • Su'ega 1: Siaki le tulaga o lau pa puipui
  • I'uga: e pasi atu e le pa puipui DNS i luga uma o le talimalo ma le GCP
  • Su'ega 2: fa'alavelave feoaiga ma mata'ituina le sa'o o le fa'asalalauina ma le toe fa'afo'i mai o talosaga DNS
  • I'uga: ua fa'amaonia e le tcpdump ua maua e le tagata talimalo ia pusa toe faafoi

Fa'ai'uga e fa'atatau i su'ega: o le faafitauli e le oi totonu o le upega tafailagi

Manatu: e le o galue le metadata server

  • Su'ega 1: siaki ogalaau metadata server mo fa'aletonu
  • I'uga: e leai ni fa'aletonu i ogalaau
  • Su'ega 2: Ta'alo le metadata server e ala i dig @8.8.8.8
  • I'uga: E malepe le iuga e aunoa ma le fa'aogaina o se metadata server

Fa'ai'uga e fa'atatau i su'ega: o le faafitauli e le o le metadata server

laina pito i lalo: sa matou fa'ata'ita'iina so'o fa'atonuga uma vagana ai fa'atulagaina taimi ta'avale!

Su'e ile Kernel Runtime Settings

Ina ia faʻapipiʻi le siosiomaga faʻatinoina o le kernel, e mafai ona e faʻaogaina filifiliga laina laina (grub) poʻo le sysctl interface. Sa ou tilotilo i totonu /etc/sysctl.conf ma na'o le mafaufau, na ou mauaina le tele o tulaga masani. Na ou lagona e pei na ou uuina i luga o se mea, na ou lafoaʻia uma tulaga e le o fesoʻotaʻiga poʻo le le tcp, ma totoe i tulaga mauga. net.core. Ona ou alu lea i le mea o loʻo i ai faʻatagaga a le talimalo i le VM ma amata ona faʻaogaina tulaga taʻitasi, tasi ma le isi, faʻatasi ai ma le VM malepe, seia ou maua le tagata solitulafono:

net.core.rmem_default = 2147483647

O le mea lea, o se DNS-breaking configuration! Na ou mauaina le auupega fasioti tagata. Ae aiseā ua tupu ai lenei mea? Sa ou manaomia pea se mafuaaga.

Ole lapo'a pa'u pa'u fa'avae DNS e fa'atulagaina e ala ile net.core.rmem_default. O se tau masani e tusa ma le 200KiB, ae afai e maua e lau 'auʻaunaga le tele o faʻamaumauga DNS, atonu e te manaʻo e faʻateleina le paʻu. Afai e tumu le pa'u pe a o'o mai se pepa fou, mo se fa'ata'ita'iga ona e le'o vave le fa'agaioiina e le talosaga, ona amata loa lea ona e leiloa pepa. Ua sa'o lava le fa'atupuina e le matou tagata o tausia le lapo'a aua sa fefe i le leiloa o fa'amaumauga, talu ai sa ia fa'aaogaina se talosaga mo le aoina mai o fua fa'atatau e ala i pepa DNS. O le tau na ia setiina o le maualuga lea e mafai ai: 231-1 (afai e seti i le 231, o le fatu o le a toe faafoi mai le "FALIGAGA INVALID").

Na faafuasei lava ona ou iloa pe aisea na galue saʻo ai le nmap ma le scapy: sa latou faʻaaogaina socket mata! O socket mata e ese mai socket masani: latou te pasia iptables, ma e le faʻafefe!

Ae aiseā e faʻalavelave ai le "faʻapipiʻi tele"? E manino lava e le aoga e pei ona fuafuaina.

I le taimi nei e mafai ona ou toe faia le faʻafitauli i luga o le tele o fatu ma le tele o tufatufaga. O le faafitauli ua uma ona aliali mai i luga o le 3.x kernel ma o lea ua aliali mai foi i luga o le 5.x kernel.

Ioe, i le amataga

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

DNS ua le toe galue.

Na amata ona ou suʻeina galuega faʻatatau e ala i se suʻesuʻega faigofie algorithm ma iloa ai o le faiga na galue i le 2147481343, ae o lenei numera o se seti leai se uiga o numera ia te aʻu. Na ou fautuaina le tagata o tausia e taumafai lenei numera, ma na ia tali mai o le polokalama na galue ma google.com, ae na tuʻuina atu pea se mea sese i isi vaega, o lea na ou faʻaauau ai laʻu suʻesuʻega.

Ua ou faapipiiina uati mata'u, o se meafaigaluega sa tatau ona faʻaaogaina muamua: o loʻo faʻaalia tonu le mea o loʻo i totonu o le fatu e muta ai se afifi. O le tagata solitulafono o le galuega udp_queue_rcv_skb. Na ou sii maia le fatu puna ma faaopoopo i ai ni nai mea galuega tauave printk e su'e po'o fea tonu e o'o i ai le afifi. Na vave ona ou mauaina le tulaga sa'o if, ma na o le sioa i ai mo sina taimi, aua o le taimi lena na iu ai ina tuufaatasia mea uma i se ata atoa: 231-1, o se numera leai se uiga, o se vaega e le o galue ... O se fasi code i totonu. __udp_enqueue_schedule_skb:

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

Faamolemole ia matau:

  • rmem o le ituaiga int
  • size o le ituaiga u16 (e le'i fa'ailogaina sefuluono-bit int) ma teu le tele o le pepa
  • sk->sk_rcybuf o le ituaiga int ma teu le tele o le pa puipui lea, i lona faauigaina, e tutusa ma le tau i totonu net.core.rmem_default

Pe a sk_rcvbuf e latalata i le 231, o le fa'atumauina o le lapo'a o le afifi e ono maua ai taumasuasua atoa. Ma talu ai o se int, o lona tau e le lelei, o lea e moni ai le tulaga pe a tatau ona sese (e mafai ona e faitau atili e uiga i lenei mea i fesoʻotaʻiga).

E mafai ona faʻasaʻo le mea sese i se auala le taua: e ala i le lafo unsigned int. Na ou faʻaogaina le faʻaleleia ma toe amata le faiga ma toe galue DNS.

Tofo o le manumalo

Na ou tuʻuina atu au suʻesuʻega i le kalani ma auina atu LKML pusa fatu. Ou te fiafia: o vaega uma o le paso e fetaui lelei, e mafai ona ou faʻamatalaina saʻo pe aisea na matou matauina ai mea na matou matauina, ma o le mea e sili ona taua, na mafai ona matou maua se fofo i le faʻafitauli faʻafetai i la matou 'au!

E taua le iloaina o le mataupu na seasea, ma o le mea e lelei ai, e seasea maua ni talosaga faigata mai tagata faʻaoga.

O se tala e uiga i le misi o pepa DNS mai Google Cloud lagolago faʻapitoa


puna: www.habr.com

Faaopoopo i ai se faamatalaga