LINUX.ORG.RU
решено ФорумAdmin

[РЕШЕНО] IPv6 Android требует ping в сторону RADVD

 , ,


0

1

Здравствуйте!

Поднял на 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 (всего исправлений: 1)

Через tcpdump снимай весь ipv6 трафик в момент подключения андроида - может он что-то проверяет и после этого отваливается

Pinkbyte ★★★★★
()
Ответ на: комментарий от Pinkbyte

РЕШЕНО

Проблема оказалась, как ни странно, в роутере. Проверил внимательно на ноутбуке под Arch, грузился с флешки свежую Xubuntu на этом же ноуте, и на другом - через Wi-Fi даже получение IPv6 адреса не работает - подключаешь проводом через Ethernet - все в порядке.

Заменил роутер на другой (билайновский SmartBox) вместо текущего (TPlink H-Ver = WR841N v8 00000000 : S-Ver = 3.16.9 Build 170210 Rel.42078n - самая свежая прошивка, англ.), и все поднялось - Android'ы получают IPv6 через RADVD, ноутбуки под разным Linux тоже, все видны на Raspberry Pi через ip -6 neigh, IPv6 адреса открываются.

Видимо, TPlink для клиентов по Wi-Fi ломает neigbour discovery, поэтому ни о каком IPv6 и речи быть не может (все firewall сбрасывал как на Android через ip6tables, так и на ноутбуках - не помогло).

На всякий случай: эти параметры добавил в nftables для разрешения icmp6-сообщений

icmpv6 type {echo-request,nd-neighbor-solicit,nd-neighbor-advert,nd-router-solicit,
             nd-router-advert,mld-listener-query,destination-unreachable,
             packet-too-big,time-exceeded,parameter-problem} accept

Вопрос закрыт!

jakushevskij
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.