Ruta odbijena zbog bitova hosta? Pronađite namjeravani prefiks
Odbijena linija rute obično je zbog bitova hosta, a ne problema s prosljeđivanjem. Odredite prefiks koji ste namjeravali umjesto da širite masku dok se ne prihvati.
Vaša linija rute se vraća odbijena, a savjet koji nalazite kaže da omogućite IP prosljeđivanje. Te dvije stvari stoje u različitim fazama problema. Prosljeđivanje odlučuje može li host prenositi pakete između interfejsa; ono nema mišljenje o tome je li odredište koje ste upisali valjana mreža. Prvo popravite prefiks, jer prosljeđivanje neće spasiti adresu i masku koje se ne slažu.
Na šta se parser zapravo žali
Odredište napisano kao adresa plus maska mora opisivati mrežu, a mreža počinje nulama host-bita. Kada adresa koju dajete još nosi vrijednost u dijelu za host, par je interno nedosljedan: 172.20.130.0 izgleda uredno jer završava nulom, ali nula u četvrtom oktetu nije jedina stvar koja je važna. Treći oktet je onaj koji ovdje drži zalutale bitove.
Alati tu nedosljednost rješavaju različito. Strogi parseri odbijaju liniju i imenuju bitove hosta. Blagi parseri maskiraju adresu i instaliraju nešto što niste tražili, što je gore, jer konfiguracija sada usmjerava raspon koji nikada niste namjeravali. Pythonov modul ipaddress nudi izbor direktno: strogo parsiranje mreže diže grešku, a strict=False maskira bitove hosta. Vaš klijent može biti strog, blag ili nedosljedan između verzija, pa čitajte poruku umjesto da vjerujete navici.
Prođite primjer ručno
Uzmite tunel koji treba dosegnuti 172.20.130.0 s maskom /20. /20 posuđuje četiri bita iz trećeg okteta, pa se taj oktet broji samo u koracima od 16: 0, 16, 32 i dalje do 240. Vrijednost 130 pada između 128 i 143, što znači da obuhvatna mreža počinje na 172.20.128.0, a ne na 172.20.130.0 s obrisanim zadnjim oktetom.
Zapisano, blok ide od 172.20.128.0 do 172.20.143.255 i drži 4,096 adresa. Slanje istih vrijednosti nestrogom parseru pokazuje zamjenu koju bi on izvršio u vaše ime:
$ 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 4096Odlučite koje odredište ste zapravo namjeravali
Odbijena linija obično krije jednu od tri namjere, a samo vi možete izabrati. Ako tunelu treba cijeli blok, upišite 172.20.128.0/20, kanonsku mrežnu adresu. Ako tunelu treba samo segment 130, maska je bila pogrešna i 172.20.130.0/24 je iskren oblik. Ako je cilj jedna mašina, ruta do IPv4 hosta je /32 i nikakva aritmetika maske nije uključena.
Svaka od njih odobrava različitu količinu saobraćaja, i to je pravi razlog da ne širite masku dok se žalba ne zaustavi. /16 prihvata liniju gotovo svuda i šalje saobraćaj prema odredištima kroz koja nikada niste namjeravali usmjeravati kroz tunel. Napišite najuži prefiks koji odgovara namjeri, pa ga potvrdite prema sljedećem hopu koji očekujete, a ne prema parserovoj tišini.
Zašto prosljeđivanje nikada nije bilo rješenje
Odbijena ruta nikada ne stiže do puta prosljeđivanja, pa prebacivanje net.ipv4.ip_forward ne može promijeniti ishod. Ta postavka je važna kasnije, kada host mora propuštati pakete između interfejsa, a njeno uključivanje prije nego što tabela bude ispravna mijenja samo to koja će faza sljedeća pasti.
Dvije druge stvari često budu okrivljene na istoj tački. Ruta može biti prihvaćena i ipak izgubiti od specifičnije rute, a firewall pravilo može odbaciti saobraćaj nakon ispravne pretrage. Držite faze odvojenim: sintaksa, instalacija, odabir, filtriranje. Rad na pogrešnoj fazi izgleda produktivno jer svaka promjena ponovo pokreće nešto.
Provjerite instaliranu rutu i put koji ona dobija
Kada klijent prihvati liniju, pogledajte šta je instalirao i koju rutu kernel bira za reprezentativnu adresu unutar bloka. Ako se instalirani prefiks razlikuje od napisanog, normalizator je djelovao u vaše ime.
Upitajte adresu člana kao i jednu izvan bloka, da poređenje bude smisleno umjesto jedne umirujuće linije:
ip -4 route show 172.20.128.0/20
ip -4 route get 172.20.140.10
ip -4 route get 172.20.200.10Treći upit treba pasti izvan tunela ako je vaš prefiks ispravan, a kada ne padne, ruta koju ste izgradili šira je nego što mislite. Zabilježite šta je prefiks trebao pokrivati prije nego dotaknete sljedeću postavku, jer ruta koja se parsira i put koji radi ostaju odvojena zapažanja.