Usmerjanje politik IPv6, ko si dva uplinka delita fe80::1
Dva uplinka lahko prikažeta isti naslednji skok fe80::1 na različnih povezavah. Izberi eno tabelo na politiko, upravljaj življenjske dobe in preveri s poizvedbo poti.
Imaš dva uplinka, in ip -6 route show izpiše isti naslednji skok na obeh: default via fe80::1 dev uplink0 in default via fe80::1 dev uplink1. To ni konflikt podvojenih naslovov, in kopiranje golega naslednjega skoka fe80::1 v tabelo politik jedru ne pove, na katero povezavo si mislil. Pravo vprašanje je ožje, kot nakazuje simptom: ali druga tabela potrebuje eno povezavo ali obe, in kaj te poti drži pri življenju po ponovnem zagonu. Trije pogoji, preverjeni po vrsti, rešijo večino.
Isti fe80::1 sta dva različna soseda
Naslovi link-local so omejeni na eno povezavo, zato fe80::1 ni en naslov, izpisan dvakrat; to sta dva soseda, ki si slučajno delita pripono. Conski indeks je način, kako gostitelj pove, katerega misli, zato fe80::1%uplink0 in fe80::1%uplink1 sta za jedro različna cilja, in ta pripona nikoli ne potuje do oddaljenega usmerjevalnika. RFC 4007 opisuje conski model za tem, in zato mora tabela politik nositi napravo z vsakim link-local naslednjim skokom.
Generator konfiguracije VPN, ki kopira numerični conski ID z enega gostitelja v predlogo, obravnava lokalni kontekst, kot da je del naslova, in datoteka, ki jo zapiše, je napačna na vsakem stroju, katerega imena ali indeksi vmesnikov se razlikujejo. Tudi tabela politik ne združi dveh povezav v eno: usmerjeni VPN prenaša pakete med omrežji, a ne prenaša link-local identitete oddaljenega Ethernet soseda skozi tunel, zato link-local promet ostane na svoji povezavi.
Odstrani napravo in pot postane nezapisana. ip -6 route add default via fe80::1 table 200 ne more razrešiti prehoda, in iproute2 ga zavrne z Error: Nexthop has invalid gateway. Dodaj dev uplink0 in ukaz uspe, ker naprava je tista, ki pripne naslednji skok na enega od teh dveh sosedov. Česa naprava ne more povedati, je, ali je uplink0 prava povezava za to tabelo, in pot, kopirana z drugega gostitelja, prinese imena vmesnikov tega gostitelja, in od tam prihajajo prave napake.
Pogoj ena: ena povezava ali dve v tabeli
Začni s tem, čemu je namenjen drugi uplink. Če obe povezavi nosita isti promet in je ena rezerva, mora alternativna tabela vsebovati oba prehoda z različnimi metrikami: ista cilja, ena prednostna pot, ena očitna druga izbira. Če uplinka obstajata zato, ker mora različen promet oditi skozi različne ponudnike, ali zato, ker je to split tunel, v katerem del prometa obide VPN, medtem ko ostali ostane znotraj, dve povezavi sploh ne spadata v eno tabelo. Spadata v dve tabeli, izbrani s pravilom, in pravilo izbere tabelo, ne tunela: promet, ki obide, se označi, preden se usmeri, in oznaka je tista, ki ga pošlje v drugo tabelo.
V tem drugem primeru pravilo odloči, kdaj se tabela posvetuje, pot pa odloči, kam gre paket, ko se to zgodi:
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 201Nobeden od objektov ne nadomesti drugega, in tabela, ki vsebuje samo privzeto pot, lahko še vedno ne razreši svojega prehoda. Če je add zavrnjen, ali pot obstaja, a je neuporabna, vstavi povezano predpono tega vmesnika v isto tabelo, ali označi skok kot onlink ko se ta predpona usmerja drugje. V zgornjem bloku 2001:db8:100::/48 predstavlja to povezano predpono na uplink1, ne poljubnega cilja. Pravilo fwmark porabi samo oznako, ki jo mora nastaviti nekaj drugega, iz pravila nftables ali iptables na poti posredovanja ali iz SO_MARK na vtičnici, zato blok, kopiran brez vira oznake, ne ustreza ničemur.
Pogoj dva: metrike ne zaznajo mrtvega ponudnika
Metrika je prednost med potmi, ki obstajajo, ne preverjanje zdravja. Ko operater pade, jedro odstrani poti na tej napravi in druga privzeta pot prevzame. Ko kabel ostane gor, ponudnik za njim pa umre, se v tabeli ne spremeni nič: prednostna pot je nameščena, sosed je dosegljiv na plasti 2, in paketi odidejo v črno luknjo. Če je ta razlika pomembna za tvojo nastavitev, mora failover priti od nečesa, kar preiskuje pot in odstrani pot, bodisi da je to usmerjevalni demon ali majhen skript, ki izbriše in znova namesti vnos.
Preveri izbiro, potem ko je tabela zgrajena, in jo preveri tako, kot jo bo videlo jedro. ip -6 route get 2001:db8:100::1 izpiše pot, ki bi bila uporabljena, vključno z napravo in izbranim izvornim naslovom, in spoštuje pravila politik. Izvorni naslov, ki pripada napačnemu uplinku, je običajen znak, da je pravilo ujelo prej, kot si pričakoval.
Pogoj tri: odloči, kdo ima trajnost
Pot, dodana z ip -6 route add preživi do ponovnega zagona ali dokler je nekaj ne izbriše. Privzeta pot, naučena iz oglasov usmerjevalnika, ima življenjsko dobo in usmerjevalnik jo lahko umakne, medtem ko ročno dodana privzeta pot nikoli ne poteče sama od sebe. Mešanje obojega v eni tabeli je način, kako zastarela trajna pot prehiti sveže oglašeno, dolgo po tem, ko povezava, ki jo je opisovala, ni več obstajala.
Izberi enega lastnika na tabelo. Če omrežni upravitelj ali usmerjevalni demon že upravlja vmesnik, opiši pot politike tam in pusti jedro pri miru. Če to skriptiraš, naredi skript idempotenten in istočasno napiši teardown, ker ga boš potreboval ob prvi slabi spremembi:
ip -6 route flush table 201
ip -6 rule del fwmark 0x2 table 201Na usmerjevalniku, ki posreduje za druge gostitelje, preveri net.ipv6.conf.all.forwarding preden okriviš tabelo. Z izključenim posredovanjem se paketi, naslovljeni na drugo omrežje, zavržejo, ne glede na to, kako pravilna je tabela 201.
Zapiši zasnovo, da jo bo naslednja oseba lahko revidirala
Popis, ki shranjuje samo fe80::1 zavrže polja, ki so pomembna. Zapiši cilj, naslednji skok, napravo, tabelo in metriko skupaj, poleg tega, od kod je vsaka pot prišla, ali je oglašena, ustvarjena s strani upravitelja ali statična. Ko se nekdo pozneje vpraša, ali drugi uplink res nosi promet, ta zapis odgovori brez ugibanja.
Preden tabelo razglasiš za končano, potrdi soseda z ip -6 neigh show dev uplink0, znova preberi ip -6 rule show zaradi nezgod z vrstnim redom, in preizkusi s prometom, ki ustreza pravilu, namesto s pingom, ki vzame privzeto pot. Nato namerno spusti en uplink in opazuj, na katero pot se jedro vrne; odgovor bi se moral ujemati s tistim, ki si ga zapisal.