[РЕШЕНО] IPv6 Android требует ping в сторону RADVD
Здравствуйте!
Поднял на Raspberry Pi IPv6-туннель Hurricane Electric, через Radvd раздаю в свою сеть. ПК и ноутбук на Archlinux принимают адреса, все работает. В сети есть 2 Android (7 и 8 версии), которые тоже принимают IPv6 адреса, однако, не выходят в Интернет. Пинги внутри fe80:: проходят в обе стороны - от смартфонов до RPi, до ПК и ноутбука и, разумеется, до RPi.
Долгое время бился с Android 8 (rooted), ставил адреса через adb shell - иногда IPv6 работал, иногда нет.
Затем нашел интересный факт - Android получает нормальные адреса вида 2001:470::1234, но RPi через команду ip -6 neigh видит, что адрес 2001:470:abcd:dcba::1234 находится в статусе INCOMPLETE, который затем (несколько секунд) меняется на FAILED. IPv6 Интернета на Andorid, разумеется, нет (в т.ч. и пингов, например, до IPv6-DNS адресов).
Затем, подключившись к смартфону через Adb shell (можно и просто через эмулятор терминала, но неудобно вбивать длинный адрес), запускаю ping6 в сторону внешнего IPv6 адреса 2001:470:abcd:dcba::1/64, поднятый на интерфейсе eth0 на RPi, и он пингуется.
После запуска пинга ВНЕЗАПНО на Android появляется IPv6 Интернет, а ip -6 neigh видит, что адрес 2001:470:abcd:dcba::1234 перешел в статус REACHABLE. Данный трюк работает как на Android 8 (rooted), так и на стоковой прошивке Android 7 для Xiaomi семейства Redmi. В конфиге radvd пробовал разные параметры, но результат тот же. Отключал nftables на RPi (хотя после пинга с Android все работает и с включенным nft, все настроено как следует - работают же другие ПК без проблем). Если пропинговать RPi через fe80:: c Android, то все равно ничего не заработает - необходим пинг (или tracepath6) по внешнему IPv6 адресу на интерфейсе eth0.
Буду признателен за помощь, не представляю, в чем загвоздка.
Radvd version 2.7
# radvd.conf
interface eth0 {
AdvSendAdvert on;
MinRtrAdvInterval 200;
MaxRtrAdvInterval 600;
prefix 2001:470:6d:23d::/64 {
AdvOnLink on;
AdvAutonomous on;
#AdvRouterAddr on; включал и выключал - результат один и тот же,
# без пинга с Android ничего не работает
AdvValidLifetime 86400;
AdvPreferredLifetime 86400;
};
};