He korero mo te ngaro o nga paakete DNS mai i te tautoko hangarau a Google Cloud

Mai i Google Blog Editor: Kua whakaaro koe me pehea te whakahaere a nga miihini a Google Cloud Technical Solutions (TSE) i o tono tautoko? Ko nga miihini tautoko hangarau a TSE te kawenga mo te tautuhi me te whakatika i nga puna korero a nga kaiwhakamahi mo nga raru. Ko etahi o enei raru he maamaa noa, engari i etahi wa ka kite koe i tetahi tikiti e hiahia ana kia aro mai etahi miihini i te wa kotahi. I roto i tenei tuhinga, ka korero mai tetahi o nga kaimahi TSE mo tetahi raruraru tino uaua mai i tana mahi tata nei - te take o te ngaro o nga paatete DNS. I roto i tenei korero, ka kite tatou i pehea te whakahaere a nga miihini ki te whakatau i te ahuatanga, me nga mea hou i akohia e ratou i te wa e whakatika ana i te hapa. Ko te tumanako kaore tenei korero e ako noa i a koe mo tetahi pepeke hohonu, engari ka mohio koe ki nga tikanga e uru ana ki te tuku tikiti tautoko ki a Google Cloud.

He korero mo te ngaro o nga paakete DNS mai i te tautoko hangarau a Google Cloud

He pūtaiao me te toi te rapu raru. Ka tiimata katoa ma te hanga i tetahi whakapae mo te take o te whanonga kore-paerewa o te punaha, ka mutu ka whakamatauhia mo te kaha. Heoi, i mua i te whakatakoto whakaaro, me ata whakamarama me te whakatakoto tika i te rapanga. Mēnā he rangirua rawa te pātai, me āta tātari e koe ngā mea katoa; Koinei te "toi" o te rapu raruraru.

I raro i a Google Cloud, ka kaha ake nga mahi penei, i te mea e ngana ana a Google Cloud ki te whakapumau i te noho muna o ona kaiwhakamahi. Na tenei, kaore nga miihini TSE e whai waahi ki te whakatika i o punaha, me te kaha ki te tiro i nga whirihoranga kia rite ki nga kaiwhakamahi. Na reira, ki te whakamatautau i tetahi o o maatau whakapae, kaore e taea e matou (nga miihini) te whakarereke tere i te punaha.

Ko etahi o nga kaiwhakamahi e whakapono ana ka whakatikahia e matou nga mea katoa penei i nga miihini i roto i te ratonga motuka, me te tuku noa mai i te id o te miihini mariko, engari ko te tikanga ka puta te mahi i roto i te whakatakotoranga korero: te kohikohi korero, te hanga me te whakapumau (te whakakore ranei) nga whakapae, a, i te mutunga, ko nga raruraru whakatau e ahu mai ana i runga i te whakawhitiwhiti korero me te kaihoko.

Raruraru e patai ana

I tenei ra he korero he pai te mutunga. Ko tetahi o nga take mo te whakatau angitu o te keehi e whakaarohia ana ko te tino korero me te tika o te korero mo te raruraru. Kei raro ka kite koe i te kape o te tiiti tuatahi (kua whakatikahia hei huna i nga korero matatapu):
He korero mo te ngaro o nga paakete DNS mai i te tautoko hangarau a Google Cloud
He maha nga korero whai hua mo tatou i tenei karere:

  • VM motuhake kua tohua
  • Ko te raruraru ake e tohuhia ana - kaore te DNS e mahi
  • Ka tohuhia te waahi ka puta te raru - VM me te ipu
  • Ko nga huarahi i mahia e te kaiwhakamahi ki te tautuhi i te raru ka tohua.

I rehitatia te tono hei "P1: Critical Impact - Service Unusable in production", ko te tikanga ko te aroturuki tonu i te ahuatanga 24/7 e ai ki te kaupapa "Whaia te Ra" (ka taea e koe te panui atu mo kaupapa matua o nga tono a nga kaiwhakamahi), me tana whakawhiti mai i tetahi roopu tautoko hangarau ki tetahi atu me ia huringa rohe waahi. Inaa, i te wa i tae mai ai te raru ki to taatau roopu i Zurich, kua huri ke i te ao. I tenei wa, kua mahia e te kaiwhakamahi nga tikanga whakaheke, engari i mataku ki te whakahoki ano i te ahuatanga o te mahi, na te mea kaore ano kia kitea te take pakiaka.

I te wa i tae atu ai te tikiti ki Zurich, kei a matou nga korero e whai ake nei:

  • Ihirangi /etc/hosts
  • Ihirangi /etc/resolv.conf
  • mutunga iptables-save
  • I whakaemihia e te kapa ngrep pcap kōnae

Na enei raraunga, kua reri matou ki te timata i te "whakatewhatewha" me te wahanga raruraru.

Ko o maatau taahiraa tuatahi

Tuatahi, i tirohia e matou nga raarangi me te mana o te tūmau metadata me te mohio kei te mahi tika. Ka whakautu te tūmau metadata ki te wāhitau IP 169.254.169.254 a, i roto i era atu mea, ko te kawenga mo te whakahaere i nga ingoa rohe. I tirohia ano e matou he pai te mahi a te paahi ahi me te VM me te kore e aukati i nga paatete.

He momo raruraru kee: i whakahē te taki nmap i ta matou whakapae matua mo te ngaronga o nga paatete UDP, no reira i puta ake i te hinengaro etahi atu whiringa me nga huarahi ki te tirotiro i a raatau:

  • Kua takatakahia nga paakete? => Tirohia nga ture iptables
  • Ehara i te mea iti rawa? TANGATA? => Tirohia te putanga ip a show
  • Ka pa te raru ki nga paatete UDP, TCP ranei? => Peia atu dig +tcp
  • Kua whakahokia mai nga paakete i keri? => Peia atu tcpdump
  • Kei te tika te mahi a libdns? => Peia atu strace ki te tirotiro i te tukunga o nga paatete ki nga taha e rua

I konei ka whakatau matou ki te waea atu ki te kaiwhakamahi ki te rapu raru raru.

I te wa o te waea ka taea e matou te tirotiro i nga mea maha:

  • Whai muri i te maha o nga tirotiro ka whakakorehia e matou nga ture iptables mai i te rarangi take
  • Ka tirohia e matou nga atanga whatunga me nga ripanga ararere, me te tirotiro-rua kei te tika te MTU
  • Ka kitea e matou tera dig +tcp google.com (TCP) mahi pera me te tika, engari dig google.com (UDP) kare e mahi
  • Kua peia atu tcpdump kei te mahi tonu dig, ka kite matou kei te whakahokia mai nga paatete UDP
  • Ka peia atu e matou strace dig google.com a ka kite tatou i te tika o nga waea keri sendmsg() и recvms(), heoi ka haukotia te tuarua e te wa mutunga

Kia aroha mai, kua tae mai te mutunga o te nekehanga, a ka kaha taatau ki te whakanui ake i te raru ki te rohe wa e whai ake nei. Ko te tono, i whakaohooho i te hiahia ki ta maatau roopu, a ka kii tetahi hoa mahi ki te hanga i te kete DNS tuatahi ma te whakamahi i te waahanga Python 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())

Ka hangaia e tenei kongakonga he putea DNS ka tukuna te tono ki te tūmau metadata.

Ka whakahaerehia e te kaiwhakamahi te waehere, ka whakahokia mai te whakautu DNS, ka whakawhiwhia e te tono, me te whakapumau kaore he raruraru i te taumata whatunga.

Whai muri i tetahi atu "haerenga huri noa i te ao," ka hoki mai te tono ki to taatau roopu, a ka tukuna katoatia e au ki a au ano, me te whakaaro ka pai ake mo te kaiwhakamahi mena ka mutu te porowhita o te tono mai i tetahi waahi ki tera waahi.

I tenei wa, ka whakaae te kaiwhakamahi ki te tuku whakaahua o te ahua o te punaha. He korero tino pai tenei: ko te kaha ki te whakamatautau i te punaha ka tere ake te raru, na te mea kaore au e tono ki te kaiwhakamahi ki te whakahaere whakahau, tukuna mai nga hua me te tātari, ka taea e au nga mea katoa!

Kua timata aku hoa mahi te hae iti ki ahau. I te tina ka matapakihia te hurihanga, engari karekau tetahi e mohio he aha nga mahi. Waimarie, ko te kaiwhakamahi ake kua whai tikanga ki te whakaiti i nga hua karekau e tere, na reira ka whai wa taatau ki te wehe i te raru. Na i te mea he ahua taatau, ka taea e taatau te whakahaere i nga whakamatautau e pai ana ki a maatau. Rawe!

Ka hoki whakamuri

Ko tetahi o nga patai uiui rongonui mo nga tuunga miihini punaha ko: "He aha te mea ka pa ana koe www.google.com? He rawe te patai, na te mea me whakamaarama e te kaitono nga mea katoa mai i te anga ki te waahi kaiwhakamahi, ki te pata o te punaha katahi ka ki te whatunga. Ka kata ahau: i etahi wa ka puta nga patai uiui ka whai hua i roto i te ao pono...

Ka whakatau ahau ki te tono i tenei patai HR ki tetahi raru o naianei. Ko te korero, ka ngana koe ki te whakatau i tetahi ingoa DNS, ka puta nga mea e whai ake nei:

  1. Ka karangahia e te tono he whare pukapuka punaha penei i te libdns
  2. Ka taki a libdns i te whirihoranga punaha me whakapiri atu ki te tūmau DNS (kei te hoahoa ko 169.254.169.254, tūmau metadata)
  3. Ka whakamahi a libdns i nga waea punaha ki te hanga i tetahi turanga UDP (SOKET_DGRAM) me te tuku i nga paatete UDP me te patai DNS ki nga taha e rua.
  4. Ma te atanga sysctl ka taea e koe te whirihora i te puranga UDP i te taumata kernel
  5. Ka mahi tahi te kernel me te taputapu ki te tuku i nga paatete ki runga i te whatunga ma te atanga whatunga
  6. Ka mau te hypervisor me te tuku i te kete ki te tūmau metadata ina whakapā atu ki a ia
  7. Ko te tūmau metadata, na roto i tana makutu, ka whakatau i te ingoa DNS me te whakahoki i tetahi whakautu ma te whakamahi i te tikanga ano

He korero mo te ngaro o nga paakete DNS mai i te tautoko hangarau a Google Cloud
Me whakamahara ahau ki a koe he aha nga whakapae kua whakaarohia e matou:

Whakaaro: Nga whare pukapuka pakaru

  • Whakamātautau 1: rere strace i roto i te pūnaha, tirohia e karanga keri nga waea pūnaha tika
  • Hua: Ka karangahia nga waea punaha tika
  • Whakamātautau 2: te whakamahi i te srapy ki te tirotiro mena ka taea e taatau te whakatau ingoa maataki i nga whare pukapuka punaha
  • Hua: ka taea e tatou
  • Whakamātautau 3: whakahaere rpm –V i runga i te mōkihi libdns me ngā kōnae whare pukapuka md5sum
  • Hua: he tino rite te waehere whare pukapuka ki te waehere kei roto i te punaha whakahaere mahi
  • Whakamātautau 4: whakairihia te ahua o te punaha pakiaka o te kaiwhakamahi ki runga i te VM kaore he whanonga, rere chroot, tirohia mena kei te mahi a DNS
  • Hua: Ka mahi tika a DNS

Te whakatau i runga i nga whakamatautau: karekau te raruraru i roto i nga whare pukapuka

Whakaaro: He hapa kei roto i nga tautuhinga DNS

  • Whakamātautau 1: tirohia te tcpdump ka tirohia mena ka tukuna nga paatete DNS ka whakahokia tika mai i muri i te keri
  • Hua: he tika te tuku o nga paakete
  • Whakamātautau 2: taki rua i runga i te tūmau /etc/nsswitch.conf и /etc/resolv.conf
  • Hua: he tika nga mea katoa

Te whakatau i runga i nga whakamatautau: ko te raruraru ehara i te whirihoranga DNS

Te whakapae: kua pakaru te matua

  • Whakamatau: whakauruhia he kakano hou, tirohia te hainatanga, whakaara ano
  • Hua: rite te whanonga

Te whakatau i runga i nga whakamatautau: kare te kakano i pakaru

Te whakapae: te whanonga hē o te whatunga kaiwhakamahi (te atanga whatunga kaitirotiro ranei)

  • Whakamātautau 1: Tirohia ō tautuhinga pātūahi
  • Hua: ka tukuna e te papangaahi nga paatete DNS ki te kaihautu me te GCP
  • Whakamātautau 2: haukoti i nga waka me te aro turuki i te tika o te tuku me te whakahoki mai o nga tono DNS
  • Hua: tcpdump whakau kua whiwhi te kaihautu i nga putea whakahoki

Te whakatau i runga i nga whakamatautau: ko te raruraru kaore i te whatunga

Whakaaro: kaore te tūmau metadata i te mahi

  • Whakamātautau 1: tirohia ngā rākau tūmau metadata mō ngā kōhikohiko
  • Hua: karekau he heetanga kei roto i nga raarangi
  • Whakamātautau 2: Haerehia te tūmau metadata mā dig @8.8.8.8
  • Hua: Ka pakaru te Whakatau ahakoa me te kore whakamahi i te tūmau metadata

Te whakatau i runga i nga whakamatautau: ko te raruraru ehara i te tūmau metadata

raina raro: i whakamatauria e matou nga punaha iti katoa engari Tautuhinga wa whakahaere!

Te ruku ki roto i nga Tautuhinga Wā Whakahaere Kernel

Hei whirihora i te taiao mahi kernel, ka taea e koe te whakamahi i nga whiringa raina whakahau (grub) te atanga sysctl ranei. I titiro ahau ki roto /etc/sysctl.conf a whakaaro noa, i kitea e au etahi ritenga ritenga. I te ahua kua mau ahau ki tetahi mea, ka whakarerea e ahau nga tautuhinga kore-whatunga, kore-tcp ranei, ka noho tonu ki nga tautuhinga maunga net.core. Na ka haere ahau ki te waahi kei roto nga whakaaetanga kaihautu i roto i te VM ka tiimata ki te whakamahi i nga tautuhinga takitahi, tetahi ki tetahi, me te VM pakaru, tae noa ki taku kitenga i te tangata hara:

net.core.rmem_default = 2147483647

Anei, he whirihoranga pakaru DNS! I kitea e ahau te patu kohuru. Engari he aha i penei ai? I hiahia tonu ahau ki tetahi kaupapa.

Ka whirihorahia te rahi o te paatete paatete DNS ma net.core.rmem_default. Ko te uara angamaheni kei te tata ki te 200KiB, engari mena ka whiwhi to kaimau i te maha o nga paatete DNS, ka hiahia pea koe ki te whakanui ake i te rahi. Mēnā kua kī te pūreirei ina tae mai he pākete hōu, hei tauira nā te mea karekau i te tere te tukatuka i te tono, katahi ka timata te ngaro o nga paakete. I tika te whakanui ake o ta maatau kaihoko i te rahi o te papare na te mea i mataku ia mo te ngaronga raraunga, i te mea kei te whakamahi ia i tetahi tono mo te kohi inenga ma nga paatete DNS. Ko te uara i whakaritea e ia ko te morahi e taea ana: 231-1 (mehemea ka tautuhia ki te 231, ka hoki mai te kernel ki te "TOTOONGOHANGA KAUPAPA").

Inamata ka mohio ahau he aha te mahi tika o te nmap me te scapy: kei te whakamahi ratou i nga turanga mata! He rereke nga turanga mata ki nga turanga tuuturu: ka hipa atu i nga iptables, karekau e parea!

Engari he aha te take ka raru ai te "whakapapa nui rawa"? Te reira mārama e kore e mahi rite whakaaro.

I tenei wa ka taea e au te whakaputa i te raru i runga i nga kakano maha me nga tohatoha maha. Kua puta kee te raru i runga i te pata 3.x a inaianei kua puta ano i runga i te pata 5.x.

Ae, i te tiimatanga

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

Ka mutu te mahi a DNS.

I tiimata ahau ki te rapu i nga uara mahi na roto i te rapu algorithm ngawari ka kitea i mahi te punaha me te 2147481343, engari ko tenei nama he huinga tau koretake ki ahau. I kii ahau ki te kaihoko ki te whakamatau i tenei nama, a ka whakahoki mai ia i mahi tahi te punaha me google.com, engari i tukuna tonu he hapa ki etahi atu rohe, na ka haere tonu taku tirotiro.

Kua whakauruhia e ahau takataka, he taputapu e tika ana kia whakamahia i mua ake nei: e whakaatu ana i te waahi kei roto i te kernel ka mutu te kete. Ko te tangata hara ko te mahi udp_queue_rcv_skb. I tangohia e ahau nga puna kernel me te taapiri i etahi mahi printk ki te whai i te waahi ka mutu te kete. I kitea tere e ahau te ahua tika if, me te titiro noa ki a ia mo etahi wa, no te mea i reira ka hui katoa nga mea katoa ki te pikitia katoa: 231-1, he tau kore, he rohe kore mahi... He waahanga waehere i roto __udp_enqueue_schedule_skb:

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

Me mōhio:

  • rmem he momo int
  • size he momo u16 (kaore i hainatia tekau ma ono-bit int) me te penapena i te rahi o te kete
  • sk->sk_rcybuf he momo int me te penapena i te rahi o te putunga, ma te whakamaramatanga, he rite ki te uara kei roto net.core.rmem_default

Ahea sk_rcvbuf ka tata ki te 231, ka hua mai pea te rahi o te kete waipuke tauoti. A, i te mea he int, ka kino tona uara, no reira ka pono te ahuatanga ina he teka (ka taea e koe te panui atu mo tenei i hono).

Ka taea te whakatika i te hapa i tetahi huarahi iti: ma te maka unsigned int. I tono ahau i te whakatika me te whakaara ano i te punaha ka mahi ano a DNS.

Te reka o te wikitoria

I tukuna e au aku kitenga ki te kaihoko ka tukuna LKML papaki kakano. E harikoa ana ahau: he pai nga wahanga katoa o te panga, ka taea e au te whakamarama he aha i mataki ai matou i nga mea i kitea e matou, ko te mea nui, i taea e matou te kimi otinga mo te raru na to matou mahi tahi!

He mea tika kia mohio he onge noa te keehi, a ko te waimarie he iti noa te whiwhi tono uaua mai i nga kaiwhakamahi.

He korero mo te ngaro o nga paakete DNS mai i te tautoko hangarau a Google Cloud


Source: will.com

Tāpiri i te kōrero