Máte dva uplinky a ip -6 route show vypisuje rovnaký ďalší skok na oboch: default via fe80::1 dev uplink0 a default via fe80::1 dev uplink1. To nie je konflikt duplicitnej adresy a skopírovanie samotného ďalšieho skoku fe80::1 do tabuľky politiky nepovie jadru, ktoré prepojenie ste mysleli. Skutočná otázka je užšia, než naznačuje príznak: potrebuje druhá tabuľka jedno prepojenie alebo obe, a čo udrží tie trasy nažive po reštarte. Tri podmienky overené v poradí vyriešia väčšinu.

Rovnaký fe80::1 sú dvaja rôzni susedia

Adresy lokálne pre prepojenie platia len v jednom prepojení, takže fe80::1 nie je jedna adresa vypísaná dvakrát; sú to dvaja susedia, ktorí náhodou zdieľajú príponu. Index zóny je spôsob, akým hostiteľ hovorí, ktorý myslí, takže fe80::1%uplink0 a fe80::1%uplink1 sú pre jadro rôzne ciele a tá prípona nikdy neputuje k vzdialenému smerovaču. RFC 4007 opisuje model zóny, ktorý za tým stojí, a preto tabuľka politiky musí niesť zariadenie pri každom ďalšom skoku lokálnom pre prepojenie.

Generátor konfigurácie VPN, ktorý kopíruje číselné ID zóny z jedného hostiteľa do šablóny, zaobchádza s lokálnym kontextom, akoby bol súčasťou adresy, a ním zapísaný súbor je nesprávny na každom stroji s inými názvami alebo indexmi rozhraní. Tabuľka politiky ani nezlúči dva uplinky do jedného: smerovaný VPN prenáša pakety medzi sieťami, ale neprenáša lokálnu identitu vzdialeného ethernetového suseda cez tunel, takže lokálna premávka zostáva na svojom prepojení.

Odstráňte zariadenie a trasa sa stane nezapísateľnou. ip -6 route add default via fe80::1 table 200 nedokáže vyriešiť bránu a iproute2 to odmietne s Error: Nexthop has invalid gateway. chybou. Pridajte dev uplink0 a príkaz uspeje, pretože práve zariadenie pripína ďalší skok k jednému z tých dvoch susedov. Čo zariadenie povedať nedokáže, je to, či uplink0 je správne prepojenie pre túto tabuľku, a trasa skopírovaná z iného hostiteľa prináša so sebou názvy rozhraní toho hostiteľa, a odtiaľ pochádzajú skutočné chyby.

Podmienka prvá: jedno prepojenie alebo dve v tabuľke

Začnite tým, na čo je druhý uplink. Ak obe prepojenia nesú rovnakú premávku a jedno je záložné, alternatívna tabuľka má obsahovať obe brány s odlišnými metrikami: rovnaké ciele, jedna preferovaná cesta, jedna zjavná druhá voľba. Ak uplinky existujú preto, že rôzna premávka musí odchádzať cez rôznych poskytovateľov, alebo preto, že ide o rozdelený tunel, v ktorom časť premávky obchádza VPN a zvyšok zostáva vnútri, tie dve prepojenia vôbec nepatria do jednej tabuľky. Patria do dvoch tabuliek, ktoré vyberá pravidlo, a pravidlo vyberá tabuľku, nie tunel: obchádzajúca premávka sa označí pred smerovaním a práve značka ju pošle do druhej tabuľky.

V druhom prípade pravidlo rozhoduje, kedy sa tabuľka použije, a trasa rozhoduje, kam paket pôjde po jej výbere:

ip -6 rule add fwmark 0x2 table 201
ip -6 route add default via fe80::1 dev uplink1 metric 100 table 201
ip -6 route add 2001:db8:100::/48 dev uplink1 metric 100 table 201
ip -6 route show table 201

Žiadny objekt nenahrádza druhý a tabuľka len s predvolenou trasou môže stále zlyhať pri riešení svojej brány. Ak je pridanie odmietnuté alebo trasa existuje, ale je nepoužiteľná, vložte pripojený prefix toho rozhrania do tej istej tabuľky alebo označte skok ako onlink , keď sa ten prefix smeruje inde. V bloku vyššie 2001:db8:100::/48 označuje práve ten pripojený prefix na uplink1, nie ľubovoľný cieľ. Pravidlo fwmark spotrebúva iba značku, ktorú musí nastaviť niečo iné, z pravidla nftables alebo iptables na ceste preposielania alebo z SO_MARK v sockete, takže skopírovaný blok bez zdroja značky nič nezhodí.

Podmienka druhá: metriky nezachytia mŕtveho poskytovateľa

Metrika je preferencia medzi existujúcimi trasami, nie kontrola stavu. Keď operátor vypadne, jadro odstráni trasy na tom zariadení a prevezme druhá predvolená. Keď kábel zostane zapojený a poskytovateľ za ním zomrie, v tabuľke sa nič nezmení: preferovaná trasa je nainštalovaná, sused je dostupný vo vrstve 2 a pakety odchádzajú do čiernej diery. Ak je tento rozdiel pre vaše nastavenie dôležitý, prepínanie pri zlyhaní musí prísť z niečoho, čo skúma cestu a odstraňuje trasu, či už je to smerovací démon alebo malý skript, ktorý záznam zmaže a znova nainštaluje.

Voľbu overte po zostavení tabuľky a overte ju tak, ako ju uvidí jadro. ip -6 route get 2001:db8:100::1 vypíše trasu, ktorá by sa použila, vrátane zariadenia a zvolenej zdrojovej adresy, a rešpektuje pravidlá politiky. Zdrojová adresa patriaca nesprávnemu uplinku je zvyčajným znakom toho, že pravidlo sa zhodilo skôr, než ste čakali.

Podmienka tretia: rozhodnite, kto vlastní trvalosť

Trasa pridaná cez ip -6 route add prežije do reštartu alebo kým ju niečo nevyčistí. Predvolená trasa naučená z oznámení smerovača nesie čas života a smerovač ju môže stiahnuť, kým ručne pridaná predvolená nikdy sama nevyprší. Miešanie oboch v jednej tabuľke je spôsob, akým zastaraná trvalá trasa začne prevažovať nad čerstvo oznámenou, dávno po tom, ako uplink, ktorý opisovala, prestal existovať.

Pre každú tabuľku vyberte jedného vlastníka. Ak správca siete alebo smerovací démon už spravuje rozhranie, opíšte trasu politiky tam a jadro nechajte na pokoji. Ak to robíte skriptom, urobte ho idempotentným a demontáž napíšte v rovnakom čase, pretože ju budete potrebovať pri prvej zlej zmene:

ip -6 route flush table 201
ip -6 rule del fwmark 0x2 table 201

Na smerovači, ktorý preposiela za iných hostiteľov, pred obviňovaním tabuľky skontrolujte net.ipv6.conf.all.forwarding . Keď je preposielanie vypnuté, pakety adresované inej sieti sa zahodia, nech je tabuľka 201 akokoľvek správna.

Zapíšte návrh, aby ho ďalší človek mohol auditovať

Inventár, ktorý ukladá len fe80::1 , zahadzuje polia, na ktorých záleží. Zapisujte cieľ, ďalší skok, zariadenie, tabuľku a metriku spolu, a tiež odkiaľ každá trasa prišla: oznámená, vygenerovaná správcom alebo statická. Keď sa neskôr niekto opýta, či druhý uplink skutočne nesie premávku, ten záznam odpovie bez hádania.

Predtým než tabuľku vyhlásite za hotovú, potvrďte suseda cez ip -6 neigh show dev uplink0 , znova prečítajte ip -6 rule show kvôli nehodám v poradí a otestujte premávkou, ktorá zodpovedá pravidlu, nie pingom, ktorý si vezme predvolenú trasu. Potom úmyselne vypnite jeden uplink a sledujte, na ktorú trasu sa jadro vráti; odpoveď by mala zodpovedať tej, ktorú ste zapísali.

Súvisiace články