Teie marsruudirida tuleb tagasi tagasilükatuna ja leitud nõuanne ütleb, et lubage IP-edastus. Need kaks asja on probleemi eri etappides. Edastus otsustab, kas host võib pakette liideste vahel liigutada; sellel pole arvamust, kas teie sisestatud sihtkoht on kehtiv võrk. Parandage kõigepealt prefiks, sest edastus ei päästa aadressi ja maski, mis ei klapi.

Mille üle parser tegelikult kaebab

Aadressi pluss maskina kirjutatud sihtkoht peab kirjeldama võrku ja võrk algab nullitud hostibittidega. Kui antud aadress kannab endiselt väärtust hostiosas, on paar sisemiselt vastuoluline: 172.20.130.0 näeb korrektne välja, sest lõpeb nulliga, aga null neljandas oktetis pole ainus, mis loeb. Just kolmas oktet hoiab siin ekslevaid bitte.

Tööriistad käsitlevad seda vastuolu erinevalt. Rangad parserid keelduvad reast ja nimetavad hostibitte. Leebed parserid maskeerivad aadressi ja paigaldavad midagi, mida te ei küsinud, mis on hullem, sest konfiguratsioon suunab nüüd vahemikku, mida te kunagi ei kavatsenud. Pythoni ipaddress-moodul pakub valikut otse: range võrgu parsimine tekitab vea ja strict=False maskeerib hostibitid välja. Teie klient võib versioonide vahel olla range, leebe või ebajärjekindel, seega lugege sõnumit, mitte ärge usaldage harjumust.

Töötage näide käsitsi läbi

Võtke tunnel, mis peab jõudma aadressile 172.20.130.0 maskiga /20. /20 laenab kolmandast oktetist neli bitti, seega loetakse seda oktetti ainult sammuga 16: 0, 16, 32 ja edasi kuni 240. Väärtus 130 jääb 128 ja 143 vahele, mis tähendab, et ümbritsev võrk algab aadressil 172.20.128.0, mitte aadressil 172.20.130.0, kus viimane oktet on nullitud.

Kirja panduna ulatub plokk 172.20.128.0 kuni 172.20.143.255 ja sisaldab 4,096 aadressi. Samade väärtuste andmine mitterangele parserile näitab asendust, mille see teie eest teeks:

$ 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

Otsustage, millist sihtkohta te tegelikult mõtlesite

Tagasilükatud rida peidab tavaliselt ühte kolmest kavatsusest ja valida saate ainult teie. Kui tunnel vajab kogu plokki, kirjutage 172.20.128.0/20, kanooniline võrguaadress. Kui tunnel vajab ainult segmenti 130, oli mask vale ja 172.20.130.0/24 on aus vorm. Kui sihtmärgiks on üks masin, on IPv4 hosti marsruut /32 ja mingit maskiaritmeetikat ei kaasata.

Igaüks neist lubab erinevat liikluse hulka ja see on tõeline põhjus, miks mitte maski laiendada, kuni kaebus lakkab. /16 võtab rea vastu peaaegu kõikjal ja saadab liiklust sihtkohtadesse, mida te kunagi ei kavatsenud tunnelist läbi suunata. Kirjutage kitsaim kavatsusele vastav prefiks ja kinnitage see siis järgmise hüppe vastu, mida ootate, mitte parseri vaikuse vastu.

Miks edastus polnud kunagi lahendus

Tagasilükatud marsruut ei jõua kunagi edastusteekonda, seega net.ipv4.ip_forward ümberlülitamine ei saa tulemust muuta. See säte loeb hiljem, kui host peab pakette liideste vahel edasi andma, ja selle sisselülitamine enne tabeli korrasolekut muudab ainult seda, milline etapp järgmisena ebaõnnestub.

Sageli süüdistatakse samas kohas veel kahte asja. Marsruut võidakse vastu võtta ja see võib ikkagi kaotada täpsemale marsruudile, ning tulemüürireegel võib õige otsingu järel liikluse maha visata. Hoidke etapid eraldi: süntaks, paigaldus, valik, filtreerimine. Vale etapiga tegelemine tundub produktiivne, sest iga muudatus taaskäivitab midagi.

Kontrollige paigaldatud marsruuti ja teed, mille see võidab

Kui klient on rea vastu võtnud, vaadake, mida see paigaldas ja millise marsruudi tuum ploki sees oleva esindava aadressi jaoks valib. Kui paigaldatud prefiks erineb kirjutatust, tegutses teie eest normaliseerija.

Pärige liikmeaadressi ja ka üht väljaspool plokki, et võrdlus oleks mõttekas, mitte ainult üks rahustav rida:

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

Kolmas päring peaks langema väljapoole tunnelit, kui teie prefiks on õige, ja kui ei lange, on ehitatud marsruut laiem, kui arvate. Kirjutage üles, mida prefiks pidi katma, enne kui järgmist sätet puudutate, sest parsitav marsruut ja töötav tee jäävad eraldi tähelepanekuteks.

Seotud artiklid