ProHoster > Блог > Nchịkwa > Akụkọ gbasara ngwugwu DNS na-efu site na nkwado teknụzụ Google Cloud
Akụkọ gbasara ngwugwu DNS na-efu site na nkwado teknụzụ Google Cloud
Site na nchịkọta akụkọ blọọgụ Google: Ọ dịtụla mgbe ị na-eche ka ndị injinia Google Cloud Technical Solutions (TSE) si edozi arịrịọ nkwado gị? Ndị injinia na-akwado teknụzụ TSE na-ahụ maka ịchọpụta na mezie isi mmalite nke nsogbu ndị ọrụ kọrọ. Ụfọdụ n'ime nsogbu ndị a dị nnọọ mfe, ma mgbe ụfọdụ ị na-ahụ tiketi nke chọrọ nlebara anya nke ọtụtụ ndị injinia ozugbo. N'isiokwu a, otu n'ime ndị ọrụ TSE ga-agwa anyị banyere otu nsogbu siri ike site na omume ya na nso nso a - ikpe nke ngwugwu DNS efu efu. N'akụkọ a, anyị ga-ahụ ka ndị injinia si mee ka ọnọdụ ahụ kwụsị, yana ihe ọhụrụ ha mụtara mgbe ha na-edozi njehie ahụ. Anyị na-atụ anya na akụkọ a ọ bụghị naanị na-akụziri gị maka ahụhụ dị omimi, kamakwa ọ na-enye gị nghọta na usoro ndị na-abanye n'ime ntinye akwụkwọ nkwado na Google Cloud.
Nchọpụta nsogbu bụ ma sayensị ma nka. Ihe niile na-amalite site n'ịmepụta echiche banyere ihe kpatara omume na-adịghị mma nke usoro ahụ, mgbe nke a gasịrị, a na-anwale ya maka ike. Agbanyeghị, tupu anyị ewepụta echiche, anyị ga-akọwapụta nke ọma wee chepụta nsogbu ahụ nke ọma. Ọ bụrụ na ajụjụ ahụ na-ada ụda nke ukwuu, mgbe ahụ ị ga-enyocha ihe niile nke ọma; Nke a bụ "nkà" nke nchọpụta nsogbu.
N'okpuru Google Cloud, usoro ndị dị otú ahụ na-aghọwanye mgbagwoju anya, ebe Google Cloud na-agbalị ike ya iji kwe nkwa nzuzo nke ndị ọrụ ya. N'ihi nke a, ndị injinia TSE enweghị ohere iji dezie sistemu gị, ma ọ bụ ike ịlele nhazi ka ndị ọrụ na-eme. Ya mere, iji nwalee nke ọ bụla n'ime echiche anyị, anyị (ndị injinia) enweghị ike ịmegharị usoro ngwa ngwa.
Ụfọdụ ndị ọrụ kwenyere na anyị ga-edozi ihe niile dị ka ndị na-arụ ọrụ na ọrụ ụgbọ ala, ma zitere anyị id nke igwe mebere, ebe n'eziokwu, usoro a na-ewere ọnọdụ na usoro mkparịta ụka: ịnakọta ozi, ịmepụta na ịkwado (ma ọ bụ ịgbagha) echiche, na, n'ikpeazụ, nsogbu mkpebi dabere na nkwurịta okwu na onye ahịa.
Nsogbu a na-ajụ
Taa, anyị nwere akụkọ nwere njedebe dị mma. Otu n'ime ihe kpatara mkpebi nke ọma nke ikpe a chọrọ bụ nkọwa zuru oke na nke ziri ezi nke nsogbu ahụ. N'okpuru, ị nwere ike ịhụ nnomi nke tiketi mbụ (deziri iji zoo ozi nzuzo):
Ozi a nwere ọtụtụ ozi bara uru maka anyị:
VM akọwapụtara
E gosipụtara nsogbu ahụ n'onwe ya - DNS anaghị arụ ọrụ
E gosipụtara ya ebe nsogbu ahụ gosipụtara onwe ya - VM na akpa
E gosipụtara usoro onye ọrụ mere iji chọpụta nsogbu ahụ.
Edebara aha arịrịọ ahụ dị ka "P1: Mmetụta dị oke egwu - Ọrụ adịghị arụ ọrụ na mmepụta", nke pụtara nlekota oge niile nke ọnọdụ 24/7 dịka atụmatụ "Soro Sun" (ị nwere ike ịgụkwu banyere ya). mkpa nke arịrịọ onye ọrụ), na ịnyefe ya site n'otu ndị otu nkwado teknụzụ gaa na nke ọzọ na mpaghara oge ọ bụla. N'ezie, ka ọ na-erule mgbe nsogbu ahụ ruru ndị otu anyị nọ na Zurich, ọ gbasaala gburugburu ụwa. Ka ọ na-erule oge a, onye ọrụ ahụ ewerela ihe nkwụsịtụ, ma ọ na-atụ egwu ịmegharị ọnọdụ ahụ na mmepụta, ebe ọ bụ na achọpụtabeghị ihe kpatara ya.
Ka ọ na-erule oge tiketi ahụ rutere Zurich, anyị enweelarị ozi ndị a n'aka:
Ọdịnaya /etc/hosts
Ọdịnaya /etc/resolv.conf
nkwubi iptables-save
Ndị otu gbakọtara ngrep pcap faịlụ
Site na data a, anyị dị njikere ịmalite "nyocha" na nhazi nsogbu.
Nzọụkwụ mbụ anyị
Nke mbụ, anyị nyochara ndekọ na ọkwa nke ihe nkesa metadata wee hụ na ọ na-arụ ọrụ nke ọma. Ihe nkesa metadata na-aza adreesị IP 169.254.169.254 yana, n'etiti ihe ndị ọzọ, na-ahụ maka ịchịkwa ngalaba aha. Anyị nyochakwara ugboro abụọ na firewall na-arụ ọrụ nke ọma na VM na anaghị egbochi ngwugwu.
Ọ bụ ụdị nsogbu dị iche iche: nlele nmap gọnarịrị echiche anyị bụ isi gbasara mfu nke ngwugwu UDP, yabụ anyị ji echiche wepụta ọtụtụ nhọrọ na ụzọ anyị ga-esi lelee ha:
A na-atụpụrụ ngwugwu ahọpụtara? => Lelee iwu iptables
Ọ bụghị oke obere? MTU? => Lelee mmepụta ip a show
Nsogbu a ọ na-emetụta naanị ngwugwu UDP ma ọ bụ TCP? => Gbapụ dig +tcp
A na-eweghachite ngwungwu egwu egwu? => Gbapụ tcpdump
libdn na-arụ ọrụ nke ọma? => Gbapụ strace iji lelee nnyefe nke ngwugwu n'akụkụ abụọ ahụ
N'ebe a, anyị na-ekpebi ịkpọ onye ọrụ iji dozie nsogbu ndụ.
N'oge oku a, anyị nwere ike ịlele ọtụtụ ihe:
Mgbe ọtụtụ ndenyechara, anyị na-ewepu iwu iptables na ndepụta nke ihe kpatara ya
Anyị na-elele ntanetị netwọkụ na tebụl ntụgharị, wee lelee ugboro abụọ na MTU ziri ezi
Anyị na-achọpụta nke ahụ dig +tcp google.com (TCP) na-arụ ọrụ dị ka o kwesịrị, ma dig google.com (UDP) anaghị arụ ọrụ
N'ịbụ onye chụpụrụ tcpdump ọ ka na-arụ ọrụ dig, anyị na-achọpụta na a na-eweghachi ngwugwu UDP
Anyị na-anya ụgbọ ala strace dig google.com na anyị na-ahụ otú igwu n'ụzọ ziri ezi na-akpọ sendmsg() и recvms(), Otú ọ dị, a na-akwụsị nke abụọ site na nkwụsị oge
N'ụzọ dị mwute, njedebe nke ngbanwe ahụ na-abịarute ma a na-amanye anyị ịkwalite nsogbu ahụ na mpaghara oge ọzọ. Arịrịọ ahụ, agbanyeghị, kpalitere mmasị na otu anyị, onye ọrụ ibe na-atụ aro ịmepụta ngwugwu DNS mbụ site na iji modul 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())
Iberibe a na-emepụta ngwugwu DNS wee ziga arịrịọ na sava metadata.
Onye ọrụ na-agba koodu ahụ, nzaghachi DNS laghachi azụ, ngwa ahụ na-enwetakwa ya, na-ekwenye na ọ dịghị nsogbu ọ bụla na netwọk netwọk.
Mgbe "njem gburugburu ụwa" ọzọ gasịrị, arịrịọ ahụ laghachiri n'òtù anyị, m na-ebufekwa ya n'onwe m kpamkpam, na-eche na ọ ga-adabara onye ọrụ ahụ mfe ma ọ bụrụ na arịrịọ ahụ kwụsịrị ịgagharị site n'otu ebe gaa n'ebe ọzọ.
Ka ọ dị ugbu a, onye ọrụ ejiri obiọma kwenye ịnye foto onyonyo sistemụ. Nke a bụ ozi ọma dị mma: ikike ịnwale usoro ahụ n'onwe m na-eme nchọpụta nsogbu ngwa ngwa, n'ihi na agaghịzi m arịọ onye ọrụ ka ọ gbaa iwu, zitere m nsonaazụ ma nyochaa ha, enwere m ike ịme ihe niile n'onwe m!
Ndị ọrụ ibe m na-amalite ime m anyaụfụ. N'ime nri ehihie anyị na-ekwurịta ntughari, ma ọ dịghị onye nwere echiche ọ bụla ihe na-eme. Ọ dabara nke ọma, onye ọrụ n'onwe ya ewerelarị ihe iji belata nsonaazụ ya na ọ dịghị ngwa ngwa, yabụ anyị nwere oge iji gbasaa nsogbu ahụ. Ma ebe anyị nwere ihe oyiyi, anyị nwere ike ịme ule ọ bụla na-amasị anyị. Nnukwu!
Na-ewere nzọụkwụ azụ
Otu n'ime ajụjụ ajụjụ ọnụ kacha ewu ewu maka ọnọdụ injinia sistemu bụ: “Gịnị na-eme mgbe ị na-akụ ping www.google.com? Ajụjụ a dị mma, ebe ọ bụ na onye na-achọ akwụkwọ kwesịrị ịkọwa ihe niile site na shei ruo na ohere onye ọrụ, na kernel usoro na mgbe ahụ na netwọk. M na-amụmụ ọnụ ọchị: mgbe ụfọdụ ajụjụ ajụjụ ọnụ na-apụta bara uru na ndụ n'ezie...
Ekpebiri m itinye ajụjụ HR a na nsogbu dị ugbu a. N'ikwu okwu, mgbe ị na-agbalị ịchọta aha DNS, ihe ndị a na-eme:
Ngwa a na-akpọ ọbá akwụkwọ sistemụ dịka libdns
libdns na-enyocha nhazi sistemụ nke sava DNS ọ kwesịrị ịkpọtụrụ (na eserese a bụ 169.254.169.254, sava metadata)
libdns na-eji oku sistemu mepụta oghere UDP (SOKET_DGRAM) wee ziga ngwugwu UDP nwere ajụjụ DNS n'akụkụ abụọ ahụ.
Site na interface sysctl ị nwere ike hazie nchịkọta UDP na ọkwa kernel
kernel na ngwaike na-emekọrịta ihe iji bufee ngwugwu na netwọkụ site na interface netwọkụ
Hypervisor na-ejide ma bufee ngwugwu ahụ na ihe nkesa metadata mgbe ọ na-akpọtụrụ ya
Ihe nkesa metadata, site na anwansi ya, na-ekpebi aha DNS wee weghachi nzaghachi site na iji otu usoro ahụ
Ka m chetara gị echiche echiche ndị anyị tụlerela:
Echiche: Ụlọ akwụkwọ ndị gbajiri agbaji
Nnwale 1: na-agba ọsọ strace na sistemụ, lelee na igwu oku na-akpọ usoro ziri ezi
Nsonaazụ: A na-akpọ oku sistemu ziri ezi
Nnwale 2: iji srapy lelee ma anyị nwere ike ikpebi aha gafere ọba akwụkwọ sistemụ
Nsonaazụ: anyị nwere ike
Nnwale 3: na-agba ọsọ rpm –V na ngwugwu libdns yana faịlụ ọba akwụkwọ md5sum
Nsonaazụ: koodu ọbá akwụkwọ bụ kpam kpam na koodu dị na sistemụ arụ ọrụ
Nnwale 4: bulie onyonyo sistemụ mgbọrọgwụ nke onye ọrụ na VM na-enweghị omume a, gbaa chroot, hụ ma DNS na-arụ ọrụ
Nsonaazụ: DNS na-arụ ọrụ nke ọma
Mmechi dabere na ule: nsogbu adịghị n'ụlọ akwụkwọ
Echiche: Enwere mperi na ntọala DNS
Nnwale 1: lelee tcpdump wee hụ ma ọ bụrụ na ezipụ ngwugwu DNS wee weghachite nke ọma mgbe ị gbasasịrị igwu
Nsonaazụ: A na-ebufe ngwugwu nke ọma
Nnwale 2: nlele abụọ na ihe nkesa /etc/nsswitch.conf и /etc/resolv.conf
Hypothesis: omume na-ezighi ezi nke netwọk onye ọrụ (ma ọ bụ interface netwọk hypervisor)
Nnwale 1: Lelee ntọala firewall gị
Nsonaazụ: firewall na-agafe ngwugwu DNS na ma onye ọbịa na GCP
Nnwale 2: gbochie okporo ụzọ ma nyochaa izi ezi nke nnyefe na nloghachi nke arịrịọ DNS
Nsonaazụ: tcpdump na-akwado na onye ọbịa ahụ enwetala ngwugwu nloghachi
Mmechi dabere na ule: nsogbu adịghị na netwọk
Echiche: ihe nkesa metadata anaghị arụ ọrụ
Nnwale 1: lelee ndekọ ihe nkesa metadata maka anomalies
Nsonaazụ: ọ dịghị anomalies na ndekọ
Nnwale 2: Wepụ ihe nkesa metadata site na dig @8.8.8.8
Nsonaazụ: Agbajiri mkpebi ya ọbụlagodi na iji sava metadata
Mmechi dabere na ule: nsogbu abụghị na ihe nkesa metadata
Ekwu bụ: anyị nwalere niile subsystem ma e wezụga mwube ojiri oge!
Ịba n'ime kernel Runtime Settings
Iji hazie ebe mkpochapụ kernel, ị nwere ike iji nhọrọ ahịrị iwu (grub) ma ọ bụ interface sysctl. M lere anya /etc/sysctl.conf ma chee naanị, achọpụtara m ọtụtụ ntọala omenala. N'ịche dị ka a ga-asị na m jidere ihe, atụfuru m ntọala niile na-abụghị netwọk ma ọ bụ ndị na-abụghị tcp, na-anọgide na ntọala ugwu. net.core. Mgbe ahụ, agara m ebe ikike ndị ọbịa dị na VM wee malite itinye ntọala n'otu n'otu, otu na-esote, na VM gbajiri agbaji, ruo mgbe m hụrụ onye mere mpụ:
net.core.rmem_default = 2147483647
Nke a bụ, nhazi nke na-emebi DNS! Achọtara m ngwa agha igbu mmadụ. Ma gịnị mere nke a ji eme? M ka chọrọ ebumnobi.
A na-ahazi nha ngwungwu DNS bụ isi site na net.core.rmem_default. Uru a na-ahụkarị bụ ebe gburugburu 200KiB, mana ọ bụrụ na ihe nkesa gị na-enweta ọtụtụ ngwugwu DNS, ị nwere ike ịbawanye nha nchekwa. Ọ bụrụ na nchekwa ahụ jupụtara mgbe ngwugwu ọhụrụ rutere, dịka ọmụmaatụ n'ihi na ngwa anaghị edozi ya ngwa ngwa, mgbe ahụ ị ga-amalite ịla n'iyi. Onye ahịa anyị na-abawanye nha ihe nchekwa nke ọma n'ihi na ọ na-atụ egwu mfu data, ebe ọ na-eji ngwa maka ịnakọta metrik site na ngwugwu DNS. Uru o debere bụ nke kachasị ike: 231-1 (ọ bụrụ na edobere ya na 231, kernel ga-eweghachite "AKWỤKWỌ Ụjọ Ụgha").
Na mberede achọpụtara m ihe kpatara nmap na scapy ji arụ ọrụ nke ọma: ha na-eji sọket raw! Oghere raw dị iche na sọks mgbe niile: ha na-agafe iptables, ha anaghị echekwa ya!
Mana gịnị kpatara "ihe nchekwa nke ukwuu" ji ebute nsogbu? O doro anya na ọ naghị arụ ọrụ dịka echere.
N'oge a, enwere m ike imepụtaghachi nsogbu ahụ na ọtụtụ kernels na ọtụtụ nkesa. Nsogbu a apụtalarị na kernel 3.x ma ugbu a ọ pụtakwara na kernel 5.x.
N'ezie, mgbe mmalite
sysctl -w net.core.rmem_default=$((2**31-1))
DNS kwụsịrị ịrụ ọrụ.
Amalitere m ịchọ ụkpụrụ ọrụ site na nchọta ọnụọgụ abụọ dị mfe wee chọpụta na sistemụ ahụ na-arụ ọrụ na 2147481343, mana ọnụọgụ a bụ m nọmba na-enweghị isi. M tụrụ aro ka onye ahịa ahụ nwalee nọmba a, ọ zara na sistemụ ahụ na-arụ ọrụ na google.com, mana ka na-enye njehie na ngalaba ndị ọzọ, yabụ m gara n'ihu nyocha m.
etinyere m nche elekere, ngwá ọrụ ekwesịrị iji mee ihe na mbụ: ọ na-egosi kpọmkwem ebe kernel otu ngwugwu kwụsịrị. Onye mere mpụ bụ ọrụ ahụ udp_queue_rcv_skb. M budata isi mmalite kernel wee tinye ole na ole ọrụprintk iji soro ebe kpọmkwem ngwugwu ahụ kwụsịrị. Achọpụtara m ọnọdụ dị mma ngwa ngwa if, na nanị legidere ya anya ruo oge ụfọdụ, n'ihi na ọ bụ mgbe ahụ ka ihe niile mechara gbakọta n'ime foto dum: 231-1, ọnụ ọgụgụ na-enweghị isi, ngalaba na-adịghị arụ ọrụ ... Ọ bụ mpempe koodu na __udp_enqueue_schedule_skb:
if (rmem > (size + sk->sk_rcvbuf))
goto uncharge_drop;
Biko mara:
rmem bụ ụdị int
size bụ nke ụdị u16 (anaghị edebanye aha na iri na isii-bit int) ma na-echekwa nha nke ngwugwu ahụ
sk->sk_rcybuf bụ ụdị int ma na-echekwa nha ihe nchekwa nke, site na nkọwa ya, hà nhata uru dị na ya net.core.rmem_default
Mgbe sk_rcvbuf na-eru nso 231, na-achịkọta nha nke ngwugwu nwere ike ịkpata integer njupụta. Ma ebe ọ bụ int, uru ya na-aghọ ihe na-adịghị mma, ya mere ọnọdụ ahụ na-aghọ eziokwu mgbe ọ ga-abụ ụgha (ị nwere ike ịgụkwu banyere nke a na njikọ).
Enwere ike idozi njehie ahụ n'ụzọ dị obere: site na nkedo unsigned int. Etinyere m ihe ndozi ahụ wee malitegharịa sistemụ na DNS rụkwara ọrụ ọzọ.
Ụtọ nke mmeri
E zigara m onye ahịa ihe nchoputa m wee ziga ya LKML kernel patch. Enwere m obi ụtọ: akụkụ ọ bụla nke mgbagwoju anya na-ejikọta ọnụ, enwere m ike ịkọwa kpọmkwem ihe mere anyị ji hụ ihe anyị hụrụ, na nke kachasị mkpa, anyị nwere ike ịchọta ngwọta maka nsogbu ahụ n'ihi ọrụ otu anyị!
Ọ bara uru ịmara na ikpe ahụ tụgharịrị bụrụ nke a na-adịghị ahụkebe, na ọ dabara nke ọma, anyị anaghị enweta arịrịọ mgbagwoju anya site n'aka ndị ọrụ.