Маршрут хост биттеріне байланысты қабылданбады ма? Көздеген префиксті табыңыз
Қабылданбаған маршрут жолы әдетте хост биттерінен болады, қайта жіберу мәселесі емес. Масканы кеңейтудің орнына көздеген префиксті анықтаңыз.
Маршрут жолыңыз қабылданбай қайтады, ал тапқан кеңесіңіз IP қайта жіберуді қосуды айтады. Бұл екі нәрсе мәселенің әртүрлі кезеңдерінде. Қайта жіберу хосттың интерфейстер арасында пакеттерді жылжыта алатынын шешеді; оның терген тағайындалымның жарамды желі екендігі туралы пікірі жоқ. Алдымен префиксті түзетіңіз, себебі қайта жіберу бір-біріне сәйкес келмейтін мекенжай мен масканы құтқармайды.
Талдағыш шын мәнінде неден шағымданады
Мекенжай қосу маска түрінде жазылған тағайындалым желіні сипаттауы керек, ал желі нөлденген хост биттерінен басталады. Берілген мекенжайда әлі де хост бөлігінде мән болса, жұп іштей қайшы: 172.20.130.0 ретті көрінеді, себебі нөлмен аяқталады, бірақ төртінші октеттегі нөл жалғыз маңызды нәрсе емес. Мұнда артық биттерді дәл үшінші октет ұстап тұр.
Құралдар бұл қайшылықты әрқалай шешеді. Қатаң талдағыштар жолды қабылдамайды және хост биттерін атайды. Жұмсақ талдағыштар мекенжайды маскалап, сіз сұрамаған нәрсені орнатады, бұл нашар, себебі конфигурация енді ешқашан көздемеген ауқымды маршруттайды. Python-ның ipaddress модулі таңдауды тікелей ұсынады: қатаң желілік талдау қате шығарады, ал 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Үшінші сұрау префиксіңіз дұрыс болса туннельден тыс түсуі керек, ал түспесе, салған маршрутыңыз ойлағаныңыздан кеңірек. Келесі параметрге қол тигізбей тұрып, префикс нені қамтуы керек екенін жазып қойыңыз, себебі талданатын маршрут пен жұмыс істейтін жол бөлек бақылау болып қалады.