LINUX.ORG.RU

Сообщения jakushevskij

 

[РЕШЕНО] 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;
  };
};

 , ,

jakushevskij
()

RSS подписка на новые темы