Вашата линија на маршрута се враќа одбиена, а советот што го наоѓате вели вклучете IP проследување. Овие две работи се на различни фази од проблемот. Проследувањето одлучува дали хостот може да пренесува пакети меѓу интерфејси; нема мислење дали дестинацијата што ја внесовте е валидна мрежа. Прво поправете го префиксот, зашто проследувањето нема да спаси адреса и маска што не се совпаѓаат.

За што всушност се жали парсерот

Дестинација напишана како адреса плус маска мора да опишува мрежа, а мрежата започнува со нулирани хост-битови. Кога адресата што ја давате сѐ уште носи вредност во делот за хост, парот е внатрешно противречен: 172.20.130.0 изгледа уредно затоа што завршува со нула, но нулата во четвртиот октет не е единственото нешто што е важно. Токму третиот октет тука ги држи залутаните битови.

Алатките ја решаваат таа противречност различно. Строгите парсери ја одбиваат линијата и ги именуваат хост-битовите. Благите парсери ја маскираат адресата и инсталираат нешто што не сте го побарале, што е полошо, зашто конфигурацијата сега рутира опсег што никогаш не сте го намериле. Модулот ipaddress на Python го нуди изборот директно: строгото мрежно парсирање фрла грешка, а strict=False ги маскира хост-битовите. Вашиот клиент може да биде строг, благ или недоследен меѓу верзиите, затоа читајте ја пораката наместо да верувате на навика.

Поминете го примерот рачно

Земете тунел што треба да стигне до 172.20.130.0 со маска /20. /20 позајмува четири бита од третиот октет, па тој октет се брои само во чекори од 16: 0, 16, 32 и понатаму до 240. Вредноста 130 паѓа меѓу 128 и 143, што значи дека мрежата што го опфаќа започнува на 172.20.128.0, а не на 172.20.130.0 со нулиран последен октет.

Напишано, блокот оди од 172.20.128.0 до 172.20.143.255 и содржи 4,096 адреси. Давањето исти вредности на нестрог парсер ја покажува замената што би ја направил наместо вас:

$ 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

Одлучете која дестинација всушност сте ја мислеле

Одбиената линија обично крие една од три намери, а само вие можете да изберете. Ако на тунелот му треба целиот блок, напишете 172.20.128.0/20, канонската мрежна адреса. Ако на тунелот му треба само сегментот 130, маската била погрешна и 172.20.130.0/24 е чесната форма. Ако целта е една машина, IPv4 хост-маршрутата е /32 и не е вклучена никаква маскена аритметика.

Секоја од нив дозволува различно количество сообраќај, и тоа е вистинската причина да не ја шириме маската додека поплаката не престане. /16 ја прифаќа линијата речиси секаде и испраќа сообраќај кон дестинации низ кои никогаш не сте сакале да рутирате низ тунелот. Напишете го најтесниот префикс што одговара на намерата, потоа потврдете го спрема следниот хоп што го очекувате, а не спрема молкот на парсерот.

Зошто проследувањето никогаш не беше решението

Одбиената маршрута никогаш не стигнува до патеката на проследување, па вклучувањето или исклучувањето на net.ipv4.ip_forward не може да го промени резултатот. Таа постапка е важна подоцна, кога хостот мора да пренесува пакети меѓу интерфејси, а нејзиното вклучување пред табелата да биде точна само менува која фаза следна ќе падне.

На истата точка често се обвинуваат уште две работи. Маршрутата може да биде прифатена и сепак да загуби од поспецифична маршрута, а firewall правило може да го отфрли сообраќајот по точно пребарување. Држете ги фазите одвоени: синтакса, инсталација, избор, филтрирање. Работата на погрешна фаза изгледа продуктивна зашто секоја промена рестартира нешто.

Проверете ја инсталираната маршрута и патеката што ја добива

Штом клиентот ја прифати линијата, погледнете што инсталирал и која маршрута јадрото ја избира за претставничка адреса во блокот. Ако инсталираниот префикс се разликува од напишаното, нормализатор дејствувал наместо вас.

Прашајте членска адреса, како и една надвор од блокот, за споредбата да биде значајна, а не само една смирувачка линија:

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

Третото прашање треба да падне надвор од тунелот ако вашиот префикс е точен, а кога не паѓа, маршрутата што сте ја изградиле е поширока отколку што мислите. Запишете што требало префиксот да покрие пред да го допрете следното поставување, зашто маршрута што се парсира и патека што работи остануваат одделни набљудувања.

Поврзани статии