VXLAN NSX-V-s — lahendame underlay

Tere! Alustuseks natuke luulet. Kartan vahel oma kaugtööd tegevate kolleegide kadedust – see on ju imeline, et on vĂ”imalus töötada ĂŒkskĂ”ik millisest Interneti-ĂŒhendusega maailma nurgast, puhata igal ajal, kanda vastutust projektide ja tĂ€htaegade eest, mitte viibida kontoris kell 8-17. Minu ametikoht ja tĂ¶Ă¶ĂŒlesanded praktiliselt vĂ€listavad pikaajalise puudumise andmekeskusest. Siiski – aeg-ajalt juhtuvad huvitavad juhtumid, nagu allpool kirjeldatud – ja ma saan aru, et on vĂ€he ametikohti, kus on nii palju ruumi oma sisemise troubleshooter’i loova vĂ€ljendamise jaoks.

Veidi sissejuhatust – artikli kirjutamise ajal ei ole juhtum tĂ€ielikult lahendatud, kuid arvestades tarnijate vastuse kiirus, vĂ”ib tĂ€ielik lahendus vĂ”tta veel kuid, ja ma tahan jagada oma mĂ”tteid juba praegu. Loodan, et austatud lugejad, te saateandeks mu kiirustamise. Aga nĂŒĂŒd, piisavalt juttu – mis on selle juhtumiga?

Esiteks, lĂŒhidalt: on olemas firma (kus ma töötan vĂ”rguinsenerina), mis majutab kliendilahendusi privaatsetes VMWare pilvedes. Enamik uusi lahendusi ĂŒhendatakse VXLAN-segmentidega, mida haldab NSX-V — ma ei hakka hindama, kui palju aega see lahendus mulle sÀÀstis, öeldes lĂŒhidalt — palju. Olen isegi suutnud Ă”petada kolleege NSX ESG seadistama ning vĂ€iksed kliendilahendused kĂ€ivitatakse ilma minu osaluseta. Oluline mĂ€rkida — meie control plane töötab unicast-replikeerimisega. HĂŒpperviisorid on ĂŒhendatud ĂŒleliigselt kaheliidesega erinevatesse fĂŒĂŒsilistesse Juniper QFX5100 lĂŒlititesse (kokku pandud Virtuaalsesse Chassisse) ja marsruutimise poliitikas kasutatakse originating virtual port'i pĂ”hjal baseeruvat ajastust — selleks, et anda tĂ€ielik ĂŒlevaade.

Kliendilahendused on vĂ€ga erinevad: alates Windows IIS-st, kus kĂ”ik veebiserveri komponendid on ĂŒhel masinal, kuni ĂŒsna suurte lahendusteni — nĂ€iteks tasakaalustatud Apache veebifrontide + LB MariaDB Galera + failiserverite, mis on sĂŒnkroniseeritud GlusterFS abil. Praktikas tuleb iga serverit eraldi jĂ€lgida ning avalikke aadresse ei ole kĂ”igil komponentidel — kui olete selle probleemiga silmitsi seisnud ja teil on elegantsem lahendus, oleksin tĂ€nulik nĂ”uande eest.
Minu seirelahendus koosneb igas sisevĂ”rgus (Fortigate'i tulemĂŒĂŒriga) â€žĂŒhendamise“ protsessist (+SNAT ja muidugi rangest lubatud liikluse piiramisest) ning siseaadresside jĂ€lgimisest — nii saavutatakse teatud ĂŒhtsus ja seire lihtsustus. Seire toimub PRTG serveriklastri kaudu. Seire skeem on enam-vĂ€hem jĂ€rgmine:

VXLAN NSX-V-s — lahendame underlay

Kuni, kui tegelesime ainult VLAN-iga, töötas kĂ”ik tĂ€iesti tavaliselt ja ennustatult, just nagu kell. PĂ€rast NSX-V ja VXLAN rakendamist tekkis kĂŒsimus – kas saame jĂ€lgimist jĂ€tkata vanaviisi? Selles etapis oli kĂ”ige "kiirem" lahendus NSX ESG kĂ€ivitamine ja VXLAN trunk-interfÀÀsi ĂŒhendamine VTEP-vĂ”rku. "Kiire" sisseĂŒkkega – kuna GUI kasutamine kliendisĂŒsteemide, SNAT ja tulemĂŒĂŒrireeglite seadistamiseks vĂ”ib kĂŒll ĂŒhtlustada haldust ĂŒhes vSphere'i liideses, kuid minu arvates on see ĂŒsna kohmakas ja piirab tĂ”rkeotsingu tööriistade kogumit. Need, kes on kasutanud NSX ESG-d kui asendust "pĂ€ris" tulemĂŒĂŒri jaoks, arvan, et nĂ”ustuvad. Kuigi selline lahendus oleks vĂ”ib-olla stabiilsem – sest kĂ”ik toimub ĂŒhe mĂŒĂŒja raames.

Teine lahendus on kasutada NSX DLR-i sildreĆŸiimis VLAN-i ja VXLAN-i vahel. Siin on kĂ”ik arusaadav — lihtsustatult kaob VXLAN-i kasutamise eelised, kuna tuleb ikkagi tuua VLAN jĂ€lgimisinstalleerimise juurde. Muide, selle lahenduse töötlemise kĂ€igus kohtusin probleemiga, kus DLR-sild ei saatnud pakette virtuaalmasinale, millega ta oli ĂŒksikul hostil. Ma tean, tean — NSX-V raamatutes ja juhendites öeldakse otse, et NSX Edge'ile peab olema eraldatud eraldi klaster, aga need on raamatud
 Kuid igal juhul, pĂ€rast mĂ”neaastast koostööd toega me probleemi ei lahendanud. Praktiliselt mĂ”istsin tegevuse loogikat — hĂŒperviisori sĂŒdamike moodul, mis vastutab VXLAN-i kapseldamise eest, ei aktiveeritud, kui DLR ja jĂ€lgitav server asusid ĂŒhel hostil, kuna liiklus ei lahkunud hostist ja loogika kohaselt pidi olema ĂŒhendatud VXLAN-segmendiga — kapseldamine ei olnud vajalik. Toega lĂ”petasime virtuaalsel liidesel vdrPort, mis loogiliselt ĂŒhendab ĂŒlesĂŒlesande ja just see viib lĂ€bi sildamise/kapseldamise — seal mĂ€rgati sissetulevas liikluses mittevastavust, mida ma vĂ”tsin kĂ€sitleda praeguses juhtumis. Kuid nagu öeldud, ei viinud ma seda juhtumit lĂ”puni, kuna mind suunati teisele projektile ja algne haru oli sisuliselt surnud ning ei olnud erilisi soove selle arendamiseks. Kui ma nĂŒĂŒd ei eksi, ilmnes probleem versioonides NSX ja 6.1.4 ja 6.2.

Ja siin — bingo! Fortinet kuulutab vĂ€lja natiivse VXLANi toe. Ja mitte lihtsalt point-to-point vĂ”i VXLAN-over-IPSec, mitte VLAN-VXLAN tarkvara sillamine — seda hakati rakendama juba versioonist 5.4 (ja see on esitatud ka teistel tootjatel), vaid tĂ”eline unicast control plane'i toetus. Lahendust rakendades kokku puutusin veel ĂŒhe probleemiga — jĂ€lgitud serverid kadusid perioodiliselt jĂ€lgimisse ja ilmusid tagasi, kuigi virtuaalmasin elas. PĂ”hjuseks selgus, et olin unustanud lubada Ping VXLAN-liidesel. Klastrite ĂŒmberjaotamise kĂ€igus liikusid virtuaalmasinad, ja Pinguga lĂ”petati vMotion, et tĂ€histada uut ESXi hosti, kuhu masin kolis. Minu rumalus, aga see probleem ÔÔnestas veel kord usaldust tootja, seekord Fortineti, toe vastu. Ma ei rÀÀgi juba sellest, et iga VXLANiga seotud juhtum algab kĂŒsimusega: „Kus on teie seadistustes softswitch VLAN-VXLAN?“ Seekord soovitati mul muuta MTU — see on Pingile, mis on 32 baiti. Siis „mĂ€ngi“ tcp-send-mss ja tcp-receive-mss politsiaga — VXLANi jaoks, mis kapseldatakse UDP-s. Uuh, vabandage — on loobunud. ÜhesĂ”naga, selle probleemi lahendasin oma jĂ”ududega.

Testliiklus edukalt tagasi vĂ”tmiseks otsustati see lahendus rakendada. Ja tootmises selgus, et pĂ€rast pĂ€eva-kahte hakkavad jĂ€rk-jĂ€rgult kaduma kĂ”ik, mis on VXLAN kaudu jĂ€lgitav. Liidese deaktiveerimine/aktiveerimine aitas, kuid ainult ajutiselt. Meeles pidades tootja toe aeglasust, hakkasin ise tĂ”rkeotsingut tegema — lĂ”puks on minu ettevĂ”te, minu lĂ€hivĂ”rk — minu vastutus.

TĂ”rkeotsingu kĂ€ik peidetud. Kes on tĂ€hetest ja ĂŒleolekust vĂ€sinud — jĂ€tke vahele ja liikuge postanalĂŒĂŒsile.

TĂ”rkeotsingu kĂ€ikAitĂ€h, et lugemist jĂ€tkasite — jĂ€tkame!

Nii, jĂ€lgimine töötab mĂ”nda aega, siis lakkab see iseenesest toimimast. Seega on tulemĂŒĂŒrĂŒ poliitikates tĂ”enĂ€oliselt probleeme. Kuid kuna olen kokku puutunud Fortigate versioonide 5.6+ probleemiga, kus sĂŒsteemiprotsessid hanguvad, vaatame kĂ”igepealt "diagnose debug flow" — ootuspĂ€raselt lubatakse liiklus ja see lĂ€heb liideselt vĂ€lja ning ootuspĂ€raselt ei tule midagi vastuseks. Seega kaevame edasi. Kahjuks tuleb peita adresse, olgu need isegi RFC1918, kuid loodan protsessi piisava kirjeldusega varustada, et mĂ”ista. Server VXLAN-i sees on aadress x.x.x.15, Fortigate'i liides x.x.x.254, kĂ”ik ĂŒlejÀÀnud aadressid kuuluvad VTEP-vĂ”rku.

VXLAN-i kapseldatud pakettide edukaks edastamiseks on vajalik Ă”ige teave mitmetes tabelites. Overlay jaoks on see ARP ja OVSDB, underlay jaoks on see ARP ja CAM. Fortigate'i puhul on VXLAN FDB ja OVSDB ĂŒks ja sama. Seal alustame:

 fortigate (root) #diag sys vxlan fdb list vxlan-LS
mac=00:50:56:8f:3f:5a state=0x0002 flags=0x00 remote_ip=y.y.y.47 port=4789 vni=5008 ifindex=7

Siin on kĂ”ik ĂŒsna lihtne — virtuaalmasina MAC-aadress peab asuma VTEP-aadressil u.u.u.47. Vaadates ESXI klastrisse, leian, et virtuaalmasina MAC on Ă”ige, samuti VTEP-aadress. Kontrollin CAM/ARP tabelit Fortigate'is — kĂ”ik vastab ESXI hosti seadistustele:

fortigate (root) #get sys arp | grep u.u.u.47
u.u.u.47 0 00:50:56:65:f6:2c dmz

Tabelid on Ă”iged ja liiklus vĂ€ljub — vĂ”ib-olla probleem ei ole Fortigate'is? Olen tahtlikult jĂ€tnud vĂ€lja liikluse vahepingutuse analĂŒĂŒsi Juniper'is — loogiliselt peaks jĂ€rgmine tĂ”rkeotsing kĂ€ima seal, kuid minu vĂ”rk on lihtne — vaid ĂŒks VLAN VTEP jaoks ja kĂ”ik komponendid on otse ĂŒhendatud. Peale selle meenutan juhtumit DLR-silla, VDR ja kadunud liiklusega — lĂ€hen sniffima ESXI hostis, samal ajal loon juba juhtumi VMWare'ile. Allpool olev MAC „97:6e“ kuulub Fortigate'ile, vmnic1 — see on liides, mis omab VTEP-i aadressiga u.u.u.47, snifime mĂ”lemas suunas "—dir 2":

pktcap-uw --uplink vmnic1 --vni 5008  --mac 90:6c:ac:a9:97:6e --dir 2 -o /tmp/monitor.pcap

VXLAN NSX-V-s — lahendame underlay

Progress — nĂ€en sniffis ARP-pĂ€ringu ja tuleva vastuse. Toon vĂ€lja ainult ARP vastuse ja seal on kĂ”ik Ă”ige. Ma ei maininud, aga kogu selle aja server jĂ€lgib aadressi x.x.x.15 — kus on ICMP liiklus? Meenutan, et mul on kaks uplinki. Siin vĂ”ib vaielda ja öelda, et virtuaalne allika port on sama (minu teaming policy), st sama vNIC jaoks peaks valima sama uplinki, kuid kuna ma olen hostis, ei ole probleemi kontrollida teist uplinki:

pktcap-uw --uplink vmnic4 --vni 5008 --mac 90:6c:ac:a9:97:6e --dir 2 -o /tmp/monitor.pcap

VXLAN NSX-V-s — lahendame underlay

Fortigate'ilt tulevad pĂ€ringud, aga vastust ei ole. Seega ei ole probleem Fortigate'is. No kĂ”ik — mĂ”tlen ma — jĂ€lle see sama probleem kadunud liiklusega VDR-is, jĂ€lle paar kuud juhtumiga Ă”igesse suunda suunata. Paari pĂ€eva pĂ€rast jahtun, ja mitte soovides lepida jÀÀknavigatsiooniga, otsustasin koguda veel sniffing'uid support'ile, et protsessi kiirendada. Ja siis mu pilk „juhuslikult“ jÀÀb Etherneti kapseldumisele underlay. TĂ”eline ei ole tĂ”eline ja VTEP MAC-aadress ei ĂŒhti tema IP-ga. Nullin, sniffin, kaevan — tĂ”esti, et ei ole Ă”ige. Toodan ARP-tabeli kĂ”rvale, et oleks mugavam vĂ”rrelda. Pange tĂ€hele, et esimene Etherneti kapseldumine pildil ĂŒlal:

fortigate (root) #get sys arp | grep u.u.u.47
u.u.u.47 0 00:50:56:65:f6:2c dmz
fortigate (root) #get sys arp | grep u.u.u.42
u.u.u.42 0 00:50:56:6a:78:86 dmz

Seega, mis meil lĂ”puks on — pĂ€rast virtuaalmasina migreerimist proovib Fortigate suunata liiklust VTEP-ile (korrektse) VXLAN FDB-st, kuid kasutab vale DST MAC-i ja liiklus lĂŒkatakse ootuspĂ€raselt tagasi hyperviisori vastuvĂ”tva liidese poolt. Lisaks juhtus ĂŒhes neljast juhusest, et see MAC kuulus algsele hyperviisorile, millega masin migreeriti.

Eile sain Fortineti klienditoelt kirja — minu juhtumi puhul avati viga 615586. Ma ei tea, kas rÔÔmustada vĂ”i kurvastada: ĂŒhelt poolt — probleem ei ole seadetes, teisest kĂŒljest — parandamine tuleb alles koos jĂ€rgmise pĂŒsivara uuendusega. Minu enesetunne tĂ”useb samuti veel ĂŒhe vea tĂ”ttu, mille avastasin eelmisel kuul, kuigi seekord HTML5 GUI vSphere'is. TĂ”eliselt kohalik QA osakond tarnijatele...

Julgen oletada jÀrgmist:

1 — multicast kontrollplaan ei ole tĂ”enĂ€oliselt kirjeldatud probleemile vastuvĂ”tlik — MAC-aadressid VTEP-ile saadakse grupi IP-aadressist, millele liides on tellitud.

2 — tĂ”enĂ€oliselt on probleem Fortigate'i sessioonide vĂ€ljalĂŒlitamisega Network Processor'is (umbes sarnane CEF-ile) — kui lasta iga pakett lĂ€bi CPU, kasutatakse tabeleid, mis sisaldavad Ă”iget — vĂ€idetavalt visuaalselt — teavet. Selle oletuse toetuseks rÀÀgib see, et aitab liidest sulgeda/avaneda vĂ”i oodata natuke aega — rohkem kui 5 minutit.

3 — teaming policy muutmine, nĂ€iteks explicit failover, vĂ”i LAG rakendamine ei lahenda probleemi, kuna tĂ€heldati, et MAC jÀÀb kinni lĂ€hte hĂŒperviisoris inkapsuleeritud pakettides.

Selle valguses saan jagada, et avastasin hiljuti blogi, kus ĂŒhes artiklis vĂ€ideti, et stateful tulemĂŒĂŒrid ja vahemĂ€luga andmete edastusmeetodid on toetavad lahendused. Noh, ma ei ole IT-s nii kogenud, et sellist asja vĂ€ita, ja ma ei nĂ”ustu kohe kĂ”igi artikli vĂ€idetega. Kuid midagi ĂŒtleb mulle, et Ivanil on oma sĂ”nades tĂ”de.

AitĂ€h tĂ€helepanu eest! Olen rÔÔmus, kui saan vastata kĂŒsimustele ja kuulda konstruktiivset kriitikat.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster