ProHoster > ΠΠ»ΠΎΠ³ > Kev tswj hwm > Ib zaj dab neeg hais txog cov pob ntawv DNS uas ploj lawm los ntawm Google Cloud technical support
Ib zaj dab neeg hais txog cov pob ntawv DNS uas ploj lawm los ntawm Google Cloud technical support
Los ntawm Google Blog Editor: Koj puas tau xav paub yuav ua li cas Google Cloud Technical Solutions (TSE) engineers tswj koj qhov kev thov txhawb nqa? TSE technical support engineers yog lub luag haujlwm rau kev txheeb xyuas thiab kho cov neeg siv qhia txog qhov teeb meem. Qee qhov teeb meem no yooj yim heev, tab sis qee zaum koj tuaj hla daim pib uas yuav tsum tau saib xyuas ntawm ntau tus engineers ib zaug. Hauv tsab xov xwm no, ib tus neeg ua haujlwm TSE yuav qhia peb txog ib qho teeb meem nyuaj heev los ntawm nws qhov kev coj ua tsis ntev los no - rooj plaub ntawm cov pob ntawv DNS uas ploj lawm. Hauv zaj dab neeg no, peb yuav pom tias cov engineers tswj tau li cas los daws qhov teeb meem no, thiab dab tsi tshiab uas lawv tau kawm thaum kho qhov yuam kev. Peb cia siab tias zaj dab neeg no tsis yog tsuas yog qhia koj txog kab mob sib sib zog nqus, tab sis kuj muab kev nkag siab rau koj txog cov txheej txheem uas nkag mus rau hauv daim ntawv them nyiaj yug nrog Google Cloud.
Kev daws teeb meem yog ob qho tib si science thiab kos duab. Nws tag nrho pib nrog kev tsim lub tswv yim hais txog qhov laj thawj rau kev coj tus cwj pwm tsis zoo ntawm lub cev, tom qab ntawd nws raug sim rau lub zog. Txawm li cas los xij, ua ntej peb tsim ib qho kev xav, peb yuav tsum qhia meej meej thiab meej tsim qhov teeb meem. Yog hais tias cov lus nug suab tsis meej, ces koj yuav tau soj ntsuam txhua yam kom zoo zoo; Qhov no yog "kos duab" ntawm kev daws teeb meem.
Raws li Google Huab, cov txheej txheem zoo li no dhau los ua qhov nyuaj dua, vim Google Cloud sim nws qhov zoo tshaj plaws los lav qhov kev ceev ntiag tug ntawm nws cov neeg siv. Vim li no, TSE engineers tsis muaj kev nkag mus rau kev hloov kho koj lub tshuab, thiab tsis muaj peev xwm saib cov kev teeb tsa dav dav li cov neeg siv ua. Yog li ntawd, txhawm rau sim ib qho ntawm peb cov kev xav, peb (cov kws tsim txuj ci) tsis tuaj yeem hloov kho sai sai.
Qhov teeb meem nws tus kheej tau qhia - DNS tsis ua haujlwm
Nws yog qhia qhov twg qhov teeb meem tshwm sim nws tus kheej - VM thiab thawv
Cov kauj ruam uas tus neeg siv tau coj los txheeb xyuas qhov teeb meem tau qhia.
Qhov kev thov tau sau npe ua "P1: Kev cuam tshuam tseem ceeb - Kev pabcuam tsis siv hauv kev tsim khoom", uas txhais tau tias kev saib xyuas tas li ntawm qhov xwm txheej 24/7 raws li "Ua raws Lub Hnub" (koj tuaj yeem nyeem ntxiv txog qhov tseem ceeb ntawm cov neeg siv kev thov), nrog nws cov kev hloov ntawm ib pab neeg txhawb nqa mus rau lwm tus nrog txhua lub sijhawm ua haujlwm. Qhov tseeb, los ntawm lub sij hawm qhov teeb meem mus txog peb pab neeg nyob rau hauv Zurich, nws twb twb ncig lub ntiaj teb no. Los ntawm lub sij hawm no, tus neeg siv tau siv kev txo qis, tab sis ntshai ntawm qhov rov ua dua ntawm qhov xwm txheej hauv kev tsim khoom, txij li lub hauv paus ua rau tseem tsis tau pom.
Thaum lub sijhawm daim pib mus txog Zurich, peb twb muaj cov ntaub ntawv hauv qab no ntawm tes:
Cov ntsiab lus /etc/hosts
Cov ntsiab lus /etc/resolv.conf
xaus iptables-save
Ua ke los ntawm pab neeg ngrep pcap ua
Nrog rau cov ntaub ntawv no, peb tau npaj los pib "kev tshawb nrhiav" thiab kev daws teeb meem.
Peb thawj kauj ruam
Ua ntej tshaj plaws, peb tau tshawb xyuas cov cav thiab cov xwm txheej ntawm metadata server thiab xyuas kom meej tias nws ua haujlwm raug. Tus neeg rau zaub mov metadata teb rau IP chaw nyob 169.254.169.254 thiab, ntawm lwm yam, yog lub luag haujlwm rau kev tswj cov npe sau npe. Peb kuj tau kuaj xyuas ob zaug tias lub firewall ua haujlwm raug nrog VM thiab tsis thaiv cov pob ntawv.
Nws yog qee yam teeb meem coj txawv txawv: nmap kos tsis lees paub peb lub ntsiab lus xav txog qhov poob ntawm UDP pob ntawv, yog li peb lub hlwb tuaj nrog ntau txoj kev xaiv thiab kev kuaj xyuas lawv:
Cov pob ntawv puas raug xaiv? => Tshawb xyuas iptables cov cai
Tsis yog nws me dhau lawm? TUS NEEG? => Tshawb xyuas cov zis ip a show
Puas yog qhov teeb meem cuam tshuam tsuas yog UDP pob ntawv lossis TCP ib yam nkaus? => Tsav tsheb mus dig +tcp
Puas yog libdns ua haujlwm raug? => Tsav tsheb mus strace txhawm rau txheeb xyuas kev sib kis ntawm cov pob ntawv hauv ob qho tib si
Ntawm no peb txiav txim siab hu rau tus neeg siv los daws teeb meem nyob.
Thaum hu peb tuaj yeem tshawb xyuas ntau yam:
Tom qab ob peb daim tshev peb cais cov cai iptables los ntawm cov npe ntawm cov laj thawj
Peb tshawb xyuas network interfaces thiab routing tables, thiab xyuas ob zaug tias MTU yog lawm
Peb nrhiav tau qhov ntawd dig +tcp google.com (TCP) ua haujlwm raws li nws yuav tsum, tab sis dig google.com (UDP) tsis ua haujlwm
Tau tsav tsheb mus tcpdump nws tseem ua haujlwm dig, peb pom tias cov pob ntawv UDP raug xa rov qab
Peb tsav tsheb mus strace dig google.com thiab peb pom li cas khawb kom raug hu sendmsg() ΠΈ recvms(), txawm li cas los xij qhov thib ob yog cuam tshuam los ntawm lub sijhawm
Hmoov tsis zoo, qhov kawg ntawm kev hloov pauv tuaj txog thiab peb raug yuam kom nce qhov teeb meem mus rau lub sijhawm tom ntej. Qhov kev thov, txawm li cas los xij, ua rau muaj kev txaus siab rau peb pab neeg, thiab cov npoj yaig qhia tias tsim cov pob DNS thawj zaug siv cov khoom siv 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())
Qhov tawg no tsim ib pob ntawv DNS thiab xa cov lus thov mus rau metadata server.
Tus neeg siv khiav cov cai, cov lus teb DNS raug xa rov qab, thiab daim ntawv thov tau txais nws, lees paub tias tsis muaj teeb meem ntawm qib network.
Tom qab lwm qhov "ib puag ncig-lub ntiaj teb mus txawv tebchaws," qhov kev thov rov qab los rau peb pab neeg, thiab kuv tau hloov tag nrho rau kuv tus kheej, xav tias nws yuav yooj yim dua rau cov neeg siv yog tias qhov kev thov nres ncig ntawm qhov chaw mus rau qhov chaw.
Nyob rau hauv lub meantime, tus neeg siv siab zoo pom zoo muab ib tug snapshot ntawm lub system duab. Qhov no yog cov xov xwm zoo heev: lub peev xwm los ntsuas qhov system kuv tus kheej ua teeb meem sai dua, vim tias kuv tsis tas yuav nug tus neeg siv los khiav cov lus txib, xa kuv cov txiaj ntsig thiab txheeb xyuas lawv, Kuv tuaj yeem ua txhua yam ntawm kuv tus kheej!
Kuv cov npoj yaig tab tom pib khib kuv me ntsis. Thaum noj su peb tham txog kev hloov dua siab tshiab, tab sis tsis muaj leej twg muaj lub tswv yim dab tsi tshwm sim. Hmoov zoo, tus neeg siv nws tus kheej twb tau ntsuas los txo qhov tshwm sim thiab tsis nrawm, yog li peb muaj sijhawm los txiav txim siab qhov teeb meem. Thiab txij li thaum peb muaj duab, peb tuaj yeem khiav txhua qhov kev sim uas peb nyiam. Zoo heev!
Coj ib kauj ruam rov qab
Ib qho ntawm cov lus nug nrov tshaj plaws hauv kev xam phaj rau cov haujlwm engineers yog: "Yuav ua li cas thaum koj ping www.google.com? Cov lus nug zoo heev, txij li tus neeg sib tw yuav tsum tau piav qhia txhua yam los ntawm lub plhaub rau cov neeg siv qhov chaw, mus rau cov kab ke system thiab tom qab ntawd mus rau lub network. Kuv luag ntxhi: qee zaum kev xam phaj cov lus nug tig tawm kom muaj txiaj ntsig hauv lub neej tiag tiag ...
Kuv txiav txim siab siv lo lus nug HR no rau qhov teeb meem tam sim no. Hais lus ntxhib, thaum koj sim txiav txim siab lub npe DNS, cov hauv qab no tshwm sim:
Daim ntawv thov hu rau lub tsev qiv ntawv zoo li libdns
libdns tshawb xyuas qhov system teeb tsa uas DNS server nws yuav tsum tiv tauj (hauv daim duab no yog 169.254.169.254, metadata server)
libdns siv lub kaw lus hu los tsim UDP qhov (SOKET_DGRAM) thiab xa UDP pob ntawv nrog cov lus nug DNS hauv ob qho tib si
Los ntawm sysctl interface koj tuaj yeem teeb tsa UDP pawg ntawm qib ntsiav
Lub kernel cuam tshuam nrog cov khoom siv kom xa cov pob ntawv hla lub network ntawm lub network interface
Lub hypervisor ntes thiab xa cov pob ntawv mus rau metadata server thaum sib cuag nrog nws
Tus neeg rau zaub mov metadata, los ntawm nws cov khawv koob, txiav txim siab lub npe DNS thiab xa cov lus teb siv tib txoj kev
Cia kuv ceeb toom rau koj tias qhov kev xav uas peb twb tau txiav txim siab:
Hypothesis: Cov tsev qiv ntawv tawg
Kuaj 1: khiav txoj kab hauv qhov system, xyuas tias khawb hu rau qhov system hu kom raug
Txhawm rau teeb tsa lub kernel ua tiav ib puag ncig, koj tuaj yeem siv cov kab lus hais kom ua (grub) lossis sysctl interface. Kuv ntsia rau hauv /etc/sysctl.conf thiab cia li xav tias, kuv nrhiav tau ob peb qhov kev cai. Xav zoo li kuv tau rub mus rau ib yam dab tsi, kuv muab pov tseg tag nrho cov chaw uas tsis yog-network lossis tsis-tcp, tshuav nrog cov chaw roob net.core. Tom qab ntawd kuv tau mus rau qhov chaw tso cai tus tswv tsev nyob hauv VM thiab pib siv cov kev teeb tsa ib qho los ntawm ib qho, ib qho tom qab, nrog VM tawg, txog thaum kuv pom tus neeg ua txhaum:
net.core.rmem_default = 2147483647
Ntawm no nws yog, DNS-tawg teeb tsa! Kuv nrhiav tau riam phom tua neeg. Tab sis yog vim li cas qhov no tshwm sim? Kuv tseem xav tau kev txhawb siab.
Qhov yooj yim DNS pob ntawv tsis loj yog teeb tsa ntawm net.core.rmem_default. Tus nqi ib txwm nyob ib puag ncig 200KiB, tab sis yog tias koj lub server tau txais ntau cov pob ntawv DNS, koj tuaj yeem xav nce qhov tsis zoo. Yog tias qhov tsis muaj puv thaum lub pob ntawv tshiab tuaj txog, piv txwv li vim tias daim ntawv thov tsis ua haujlwm sai txaus, ces koj yuav pib poob pob ntawv. Peb cov neeg siv khoom tau nce qhov tsis zoo vim nws ntshai cov ntaub ntawv poob, txij li nws tau siv daim ntawv thov sau cov metrics los ntawm cov pob ntawv DNS. Tus nqi nws teev yog qhov siab tshaj plaws tau: 231-1 (yog tias teem rau 231, lub ntsiav yuav rov qab "Kev Sib Tham Tsis Zoo").
Tam sim ntawd kuv pom tau tias yog vim li cas nmap thiab scapy ua haujlwm kom raug: lawv tau siv cov khoom siv raw! Raw sockets txawv ntawm cov qhov (socket) li niaj zaus: lawv hla iptables, thiab lawv tsis buffered!
Tab sis vim li cas "tsis loj dhau" ua rau muaj teeb meem? Nws kom meej meej tsis ua hauj lwm raws li npaj.
Ntawm no kuv tuaj yeem tsim qhov teeb meem ntawm ntau lub kernels thiab ntau qhov kev faib tawm. Qhov teeb meem twb tshwm sim ntawm 3.x ntsiav thiab tam sim no nws kuj tshwm sim ntawm 5.x kernel.
Tseeb, thaum pib
sysctl -w net.core.rmem_default=$((2**31-1))
DNS nres ua haujlwm.
Kuv pib nrhiav kev ua haujlwm tseem ceeb los ntawm kev tshawb nrhiav binary yooj yooj yim thiab pom tias lub kaw lus ua haujlwm nrog 2147481343, tab sis tus lej no yog cov lej tsis muaj txiaj ntsig rau kuv. Kuv tau hais kom tus neeg siv khoom sim tus lej no, thiab nws teb tias lub kaw lus ua haujlwm nrog google.com, tab sis tseem muab qhov yuam kev nrog lwm tus thawj, yog li kuv txuas ntxiv kuv qhov kev tshawb nrhiav.
Kuv tau nruab dropwatch, ib qho cuab yeej uas yuav tsum tau siv ua ntej: nws qhia tau hais tias qhov twg hauv cov ntsiav ib pob ntawv xaus. Tus neeg ua txhaum yog lub luag haujlwm udp_queue_rcv_skb. Kuv rub tawm cov kernel qhov chaw thiab ntxiv ob peb zogprintk taug qab qhov twg raws nraim lub pob ntawv xaus. Kuv pom qhov xwm txheej sai sai if, thiab tsuas yog ntsia nws rau qee lub sijhawm, vim tias nws yog thaum kawg txhua yam tuaj ua ke rau hauv daim duab: 231-1, tus lej tsis muaj qab hau, tsis ua haujlwm ... Nws yog ib qho ntawm cov lej hauv __udp_enqueue_schedule_skb:
if (rmem > (size + sk->sk_rcvbuf))
goto uncharge_drop;
Thov nco ntsoov:
rmem yog type int
size yog hom u16 (tsis tau kos npe kaum rau-ntsis int) thiab khaws cov pob ntawv loj
sk->sk_rcybuf yog hom int thiab khaws cia qhov loj me uas, los ntawm kev txhais, yog sib npaug rau tus nqi hauv net.core.rmem_default
Thaum sk_rcvbuf mus txog 231, suav nrog cov pob ntawv loj tuaj yeem ua rau integer overflow. Thiab txij li nws yog ib qho int, nws tus nqi yuav tsis zoo, yog li qhov xwm txheej yuav muaj tseeb thaum nws yuav tsum tsis tseeb (koj tuaj yeem nyeem ntxiv txog qhov no ntawm txuas).
Qhov yuam kev tuaj yeem raug kho nyob rau hauv txoj kev tsis tseem ceeb: los ntawm casting unsigned int. Kuv tau siv qhov kho thiab rov pib lub system thiab DNS ua haujlwm dua.
saj ntawm yeej
Kuv xa kuv qhov kev tshawb pom rau tus neeg siv khoom thiab xa mus LKML kernel thaj. Kuv txaus siab: txhua daim duab dhos ua ke haum ua ke, Kuv tuaj yeem piav qhia meej vim li cas peb tau soj ntsuam qhov peb tau pom, thiab qhov tseem ceeb tshaj, peb tuaj yeem nrhiav kev daws teeb meem ua tsaug rau peb pab pawg!
Nws yog ib qho tsim nyog lees paub tias qhov teeb meem tau tshwm sim tsis tshua muaj, thiab hmoov zoo peb tsis tshua tau txais cov kev thov nyuaj los ntawm cov neeg siv.