Váš riadok trasy sa vracia odmietnutý a rada, ktorú nájdete, hovorí zapnúť presmerovanie IP. Tieto dve veci sú v rôznych fázach problému. Presmerovanie rozhoduje, či hostiteľ môže presúvať pakety medzi rozhraniami; nemá názor na to, či je zadaný cieľ platnou sieťou. Najprv opravte prefix, pretože presmerovanie nezachráni adresu a masku, ktoré si odporujú.

Na čo sa parser vlastne sťažuje

Cieľ zapísaný ako adresa plus maska musí opisovať sieť a sieť začína vynulovanými bitmi hostiteľa. Keď zadaná adresa stále nesie hodnotu v časti hostiteľa, dvojica je vnútorne nekonzistentná: 172.20.130.0 vyzerá upravene, pretože končí nulou, ale nula vo štvrtom oktete nie je jediná dôležitá vec. Práve tretí oktet tu drží zvyšné bity.

Nástroje riešia túto nekonzistenciu rôzne. Prísne parsery riadok odmietnu a pomenujú bity hostiteľa. Mierne parsery adresu maskujú a nainštalujú niečo, o čo ste nežiadali, čo je horšie, pretože konfigurácia teraz smeruje rozsah, ktorý ste nikdy nezamýšľali. Modul ipaddress v Pythone ponúka voľbu priamo: prísne parsovanie siete vyvolá chybu a strict=False maskuje bity hostiteľa. Váš klient môže byť prísny, mierny alebo nekonzistentný medzi verziami, preto čítajte správu, namiesto aby ste dôverovali zvyku.

Prejdite príklad ručne

Vezmite tunel, ktorý musí dosiahnuť 172.20.130.0 s maskou /20. /20 si požičiava štyri bity z tretieho oktetu, takže tento oktet sa počíta len v krokoch po 16: 0, 16, 32 a ďalej až do 240. Hodnota 130 leží medzi 128 a 143, čo znamená, že obklopujúca sieť začína na 172.20.128.0, nie na 172.20.130.0 s vynulovaným posledným oktetom.

Zapísané, blok ide od 172.20.128.0 do 172.20.143.255 a obsahuje 4,096 adries. Podanie rovnakých hodnôt neprísnemu parseru ukáže zámenu, ktorú by vykonal vo vašom mene:

$ python3 -c "import ipaddress; n=ipaddress.ip_network('172.20.130.0/20', strict=False); print(n, n.num_addresses)"
172.20.128.0/20 4096

Rozhodnite, ktorý cieľ ste vlastne mysleli

Odmietnutý riadok zvyčajne skrýva jeden z troch zámerov a vybrať môžete len vy. Ak tunel potrebuje celý blok, napíšte 172.20.128.0/20, kanonickú sieťovú adresu. Ak tunel potrebuje len segment 130, maska bola nesprávna a 172.20.130.0/24 je čestná forma. Ak je cieľom jediný stroj, trasa k hostiteľovi IPv4 je /32 a nezapája sa žiadna aritmetika masiek.

Každá z nich povoľuje iné množstvo prevádzky, a to je skutočný dôvod nerozširovať masku, kým sťažnosť neprestane. /16 prijme riadok takmer všade a posiela prevádzku k cieľom, ktoré ste nikdy nechceli smerovať tunelom. Napíšte najužší prefix, ktorý zodpovedá zámeru, a potom ho potvrďte voči ďalšiemu skoku, ktorý očakávate, nie voči mlčaniu parsera.

Prečo presmerovanie nikdy nebolo riešením

Odmietnutá trasa sa nikdy nedostane na cestu presmerovania, takže prepnutie net.ipv4.ip_forward nemôže zmeniť výsledok. Toto nastavenie je dôležité neskôr, keď hostiteľ musí prepúšťať pakety medzi rozhraniami, a zapnutie predtým, než je tabuľka správna, mení len to, ktorá fáza zlyhá nabudúce.

Na tom istom mieste sa často obviňujú dve ďalšie veci. Trasa môže byť prijatá a predsa prehrať s konkrétnejšou trasou a pravidlo firewallu môže zahodiť prevádzku po správnom vyhľadaní. Držte fázy oddelene: syntax, inštalácia, výber, filtrovanie. Práca v nesprávnej fáze pôsobí produktívne, pretože každá zmena niečo reštartuje.

Skontrolujte nainštalovanú trasu a cestu, ktorú vyhrá

Keď klient riadok prijme, pozrite sa, čo nainštaloval a ktorú trasu jadro vyberie pre reprezentatívnu adresu v bloku. Ak sa nainštalovaný prefix líši od napísaného, konal za vás normalizér.

Opýtajte sa na adresu člena aj na jednu mimo bloku, aby porovnanie bolo zmysluplné a nie len jeden upokojujúci riadok:

ip -4 route show 172.20.128.0/20
ip -4 route get 172.20.140.10
ip -4 route get 172.20.200.10

Tretí dopyt by mal padnúť mimo tunela, ak je váš prefix správny, a keď nie, trasa, ktorú ste postavili, je širšia, než si myslíte. Zaznamenajte, čo mal prefix pokrývať, skôr než sa dotknete ďalšieho nastavenia, pretože trasa, ktorá sa parsuje, a cesta, ktorá funguje, zostávajú oddelené pozorovania.

Súvisiace články