Један крај вашег IPv6 тунела пингује други и увек одговара само један смер. Интерфејс је активан, рута изгледа исправно и ништа у дневнику то не објашњава. Адреса коју сте доделили је адреса subnet-router anycast, која уопште није адреса домаћина, и на вези са два краја има тачно један циљ доставе: пошиљаоца. Ниједна вредност временског ограничења то не поправља, јер адреса не ради оно што мислите да ради.

Симптом који указује на адресу

Сваки домаћин на вези одговара осим оног чији је идентификатор интерфејса саме нуле. Пакет адресиран на тај облик се по дефиницији доставља рутеру у подмрежи, па се на тунелу од тачке до тачке враћа машини која га је послала. Са даљег краја то изгледа као недоступан партнер; са ближег краја као тишина. Замените идентификатор другим из истог префикса и симптом нестаје без икакве друге промене, што је потврда коју треба добити пре него што дотакнете руте.

Идентификатор са свим нулама резервисан је као anycast

RFC 4291 задржава идентификатор интерфејса са свим нулама као адресу subnet-router anycast, па /64 као 2001:db8:4a::/64 не садржи ниједног употребљивог домаћина на 2001:db8:4a::. Резервација има своје место: router advertisements и neighbour discovery се обраћају том облику, а рутер одговара за префикс који опслужује. Додељивање те вредности крају тунела предаје улогу рутера листу, и зато се ништа не враћа. Било који други идентификатор у префиксу ради као домаћин, па је поправка обично једна цифра.

Третирајте резервацију као улогу коју са краја тунела немате право да заузмете, а не као чудност коју треба заобићи рутом.

Доделите адресе домаћина и усмерите префикс

Изаберите ::1 и ::2 за два краја, додајте један помоћу ip -6 addr add 2001:db8:4a::2/64 dev tun0 и затим усмерите удаљени префикс уместо да покушавате да га адресирате. Рута за 2001:db8:4a::/64 из тунела чини даљу страну доступном; сама адреса само подешава локални интерфејс.

За потпуни тунел постоји трећи корак, подразумевана рута за глобални unicast кроз уређај, што је IPv6 еквивалент слања свега у тунел. Ако га прескочите, IPv6 наставља да користи физичку везу док IPv4 путује унутар тунела, па домаћин пропушта управо онај саобраћај за који сте мислили да је покривен. Потврдите помоћу ip -6 route get 2001:4860:4860::8888 и прочитајте који уређај наводи уместо да претпостављате одговор.

Multicast се одбија пре усмеравања

Android проверава адресе и руте за VpnService.Builder преко LinkAddress и тај конструктор multicast одбија одмах. Ако му као руту дате multicast префикс, резултат је грешка bad LinkAddress parameters, а не рута, што је одговор провере, а не одговор мреже. Одбијање одговара медијуму: tun уређај од тачке до тачке нема link-layer multicast, па групна рута на њему нема модел доставе који би се инсталирао. Групне адресе ствара и троши сам стек, не подешавају се ручно.

IPv6 адресе all-nodes и solicited-node потпадају под исто правило. Интерфејс их носи зато што их је стек тамо ставио, а не зато што их је нека политика наменила.

Шта тунел може да пренесе уместо тога

Премештање multicast откривања кроз тунел захтева слој који разуме чланство у групи: TAP мост који представља Ethernet сегмент, relay на нивоу апликације или протокол рутирања коме је изричито речено ка којима да реплицира. Ничега од тога нема у моделу VpnService, где апликација чита и пише пакете и нема позив који придружује групу тунелу. Или додајте компоненту која разуме групе, или захтев уклоните из пројекта.

Unicast, насупрот томе, не тражи ништа више од горе наведених адреса и рута, зато се од тунела обично очекује да га пренесе, а затим се окривљује када протокол откривања не успе.

Три провере пре него што било шта доделите

Потврдите да адреса није облик anycast, потврдите да није multicast и потврдите да је префикс усмерен, а не само додељен уређају. Затим пошаљите тест на одредиште које је стварни домаћин, јер ping усмерен на anycast адресу мери пошиљаоца и не каже ништа о путу. Те три провере упишите у запис о промени да их следеће увођење не би поново откривало.

Рута коју платформа никада није инсталирала не може се отклонити дужим чекањем, а адреса која никада није била домаћин не може се поправити бољим пингом.

Повезани чланци