IPv6 туннелінің бір ұшы екіншісіне ping жібереді, және әрқашан тек бір бағыт қана жауап береді. Интерфейс қосулы, маршрут дұрыс көрінеді, журналда оны түсіндіретін ештеңе жоқ. Сіз тағайындаған мекенжай — ішкі желі маршрутизаторының anycast мекенжайы, ол мүлде хост мекенжайы емес, және екі ұшты байланыста оның дәл бір жеткізу мақсаты бар: жіберуші. Таймауттың ешбір мәні мұны түзетпейді, себебі мекенжай сіз ойлаған істі жасамайды.

Мекенжайды нұсқайтын белгі

Байланыстағы әрбір хост жауап береді, тек интерфейс идентификаторы түгел нөл болған хост қана жауап бермейді. Бұл пішінге адрестелген пакет анықтама бойынша ішкі желідегі маршрутизаторға жеткізіледі, сондықтан нүкте-нүкте туннелінде ол өзін жіберген машинаға қайтады. Алыс ұшынан бұл қол жетпейтін серіктес ретінде оқылады; жақын ұшынан тыныштық ретінде. Сол префикстің басқа идентификаторын қойыңыз — басқа ешбір өзгеріссіз белгі жоғалады, және маршруттарға тиюден бұрын алу керек дәлел осы.

Түгел нөлдік идентификатор anycast ретінде қорғалған

RFC 4291 түгел нөлдік интерфейс идентификаторын ішкі желі маршрутизаторының anycast мекенжайы ретінде сақтайды, сондықтан /64 сияқты 2001:db8:4a::/64 ішінде 2001:db8:4a:: мекенжайында пайдалы хост жоқ. Бұл қорғау өз орнын ақтайды: маршрутизатор хабарламалары мен көршілерді табу осы пішінді мекендейді, ал маршрутизатор өзі қызмет көрсететін префикс үшін жауап береді. Бұл мәнді туннель ұшына тағайындау жапыраққа маршрутизатор рөлін береді, сондықтан ештеңе қайтпайды. Префикстегі кез келген басқа идентификатор хост ретінде жұмыс істейді, сондықтан түзету әдетте бір сан.

Бұл қорғауды туннель ұшынан алуға құқығыңыз жоқ рөл ретінде қараңыз, маршрутпен айналып өтетін біртүрлілік ретінде емес.

Хост мекенжайларын тағайындаңыз және префиксті маршруттаңыз

Екі ұш үшін ::1 және ::2 таңдаңыз, біреуін мына командамен қосыңыз: ip -6 addr add 2001:db8:4a::2/64 dev tun0, содан кейін алыс префиксті мекендеуге тырысудың орнына оны маршруттаңыз. 2001:db8:4a::/64 үшін туннель арқылы шығатын маршрут алыс жақты қолжетімді етеді; мекенжайдың өзі тек жергілікті интерфейсті конфигурациялайды.

Толық туннель үшін үшінші қадам бар: құрылғы арқылы ғаламдық unicast үшін әдепкі маршрут, бұл бәрін туннельге жіберудің IPv6 баламасы. Оны өткізіп жіберсеңіз, IPv4 туннель ішінде жүріп жатқанда IPv6 физикалық байланысты пайдалана береді, сондықтан хост сіз жабылған деп ойлаған трафикті дәл сол ағызады. Мынамен растаңыз: ip -6 route get 2001:4860:4860::8888 және жауапты болжаудың орнына қай құрылғыны атағанын оқыңыз.

multicast маршруттаудан бұрын қабылданбайды

Android VpnService.Builder үшін мекенжайлар мен маршруттарды LinkAddress арқылы тексереді, және бұл конструктор multicast-ты бірден қабылдамайды. Оған маршрут ретінде multicast префиксін берсеңіз, нәтиже маршрут емес, нашар LinkAddress параметрлерінің сәтсіздігі болады, бұл желі емес, валидация жауабы. Бас тарту тасымалдаушыға сай: нүкте-нүкте tun құрылғысында байланыс деңгейінің multicast-ы жоқ, сондықтан оның үстіндегі топтық маршруттың орнатылатын жеткізу моделі жоқ. Топтық мекенжайларды қолмен конфигурациялаудың орнына стектің өзі жасайды және тұтынады.

IPv6 all-nodes және solicited-node мекенжайлары сол ережеге жатады. Интерфейс оларды стек сол жерге қойғандықтан алып жүреді, қандай да бір саясат оларды көздегендіктен емес.

Туннель оның орнына нені тасымалдай алады

туннель арқылы multicast іздеу үшін топ мүшелігін түсінетін қабат керек: Ethernet сегментін ұсынатын TAP көпірі, қолданба деңгейіндегі реле немесе қай серіктестерге көшіру керектігі анық айтылатын маршруттау протоколы. VpnService моделінде бұлардың ешқайсысы жоқ, онда қолданба пакеттерді оқып-жазады және туннель үшін топқа қосылатын шақыруы жоқ. Не топтарды түсінетін құрамдасты қосыңыз, не талапты дизайннан алып тастаңыз.

Unicast, керісінше, жоғарыдағы мекенжайлар мен маршруттардан басқа ештеңе қажет етпейді, сондықтан туннельдер оны тасымалдайды деп күтіледі, ал іздеу протоколы сәтсіз болғанда олар кінәланады.

Бірдеңе тағайындамас бұрын үш тексеру

Мекенжай anycast пішіні емес екеніне, ол multicast емес екеніне және префикстің құрылғыға ғана тағайындалып қоймай, маршрутталғанына көз жеткізіңіз. Содан кейін сынағыңызды нақты хост болып табылатын межеге жіберіңіз, себебі anycast мекенжайына бағытталған ping жіберушіні өлшейді және жол туралы ештеңе айтпайды. Осы үш тексеруді өзгерістер жазбасында ұстаңыз, келесі орналастыру оларды қайта ашпасын.

Платформа ешқашан орнатпаған маршрутты ұзағырақ күтумен жөндеу мүмкін емес, ал ешқашан хост болмаған мекенжайды жақсырақ ping-мен түзету мүмкін емес.

Қатысты мақалалар