Адроид 13 теперь маршрутизирует ULA-адреса

Я использую grapheneos.org на моем Android-устройстве с коммерческим VPN-поставщиком, который интересно обеспечивает IPv6-соединение через все их серверные точки. Я нашел это в списке изменений страницы релизов:

возврат многих исправлений upstream для clat, включая более полный набор исправлений для проблемы совместимости, влияющей на все операционные системы Android 13, между VPN-ограничениями и определенными конфигурациями мобильных данных только с IPv6, а также исправление других проблем с этими настройками

За последние несколько дней я заметил, что bgp.he.net и другие сайты показывают соединения с моего телефона по v6.

Ранее этого не происходило, так как VPN присваивал клиентам ULA-адрес и затем делал NAT для IPv6 (для защиты конфиденциальности, чтобы все выходили с одного IP). - что раньше Android не маршрутизировал трафик через, однако, похоже, это изменилось.

Дело не в том, что Android не маршрутизирует трафик через ULA-адрес, а в том, что существует RFC, который действительно предпочтительно использует IPv4-адреса перед IPv6 ULA.

IPv6 GUA → IPv4 → IPv6 ULA

Похоже, это было изменено.

Лично я потратил много времени на поиск поддержки v6 у коммерческих VPN-поставщиков и нашел только одного, который делает это правильно, одного, кто делает это более терпимо, чем остальные, и остальных. Большинство NATит ULA пространство, что просто ужасно, оно чуть лучше, чем IPv6-черная дыра. Затем есть Azire, который NATит блок GUA, который они владеют… что, если вы собираетесь NATить, самое разумное, что можно сделать, но все равно некрасиво, поскольку NAT лучше вообще не использовать. По моему мнению, OpenVPN обрабатывает это лучше всего*. Они дают вам настоящий GUA, который маршрутизируется в интернете… конечно, есть *… они делают это только для соединений OpenVPN, для WireGuard, по умолчанию для их клиента, они снова NATят ULAs, как и большинство провайдеров, по-видимому, это связано с тем, что WireGuard не имеет возможности динамически конфигурировать адреса. В общем, можно сказать, что VPN-провайдеры в основном ужасны с v6. Честно говоря, Android не должен был менять свое поведение, так как это проблема с VPN.

Это Mullvad у коммерческого VPN? Я помню, что они используют ULA для IPv6, что непоследовательно.

Да, действительно — я мог подключиться к адресу v6, если и только если он не был двойственным по стеку, что не так во большинстве интернета.

Это не должно было измениться. VPN должен менять свои настройки, чтобы не выдавать адреса, которые не должны работать в этом использовании :confused:

Если он использует ULA, этот VPN не маршрутизирует трафик в интернет (то есть это просто частная сеть между подключенными устройствами)?

Я получаю v6 на каждом из серверных конечных точек — в моем опыте нет несоответствий.

Выдача (внутренних) хостов/сервисов ULA-адресов, а также IPv4-адресов, значит (я так понимаю?), что к ним никогда не будет обращения через ULA:

  1. ULA по RFC 6724 менее предпочтительна (значение Пререлегированности ниже) чем все IPv4 (представленный ::ffff:0:0/96 в таблице).
  2. Из-за меньшего значения Пререлегированности, если у вас включен IPv4 на хосте, он будет использовать IPv4 перед ULA.
  3. Happy Eyeballs (RFC 8305) не изменит селекцию исходного адреса на хосте. Она только изменит процесс сортировки назначения.
  4. Клиент будет исходить с трафиком с IPv4-адреса, что потребует соответствующего IPv4-адреса назначения.
  5. Пункт 4 означает, что даже при наличии DNS-записей A и AAAA, клиент выберет запись A для получения IPv4-адреса назначения.

Из недавнего сообщения в списке IETF v6ops:

Лично я считаю, что RFC6724 почти имеет правильное направление; то, что он неправильно понимает, — это то, что раздел 10.6 должен быть обязательным и автоматическим, реализуемым стеком IP, а не фактически опциональным и оставленным на ручную настройку.

Проводятся попытки изменить это:

Поведение адресации ULA, определенное [RFC6724], считается предпочтительнее в сравнение с устаревшей IPv4-адресацией, что делает развертывание ULA IPv6 практически невыполнимым в средах с двойным стеком IPv4 / IPv6. Эта поведение противоречит операционной практике GUA IPv6 на почти всех современных операционных системах, использующих модель предпочтения на базе [RFC6724].

Так и я, больше по поводу того, если это используется приложением, о чем я говорю.

Это зависит от вашей ОС; на Linux вам нужно указать gai.conf, чтобы предпочесть это: LXD: Prefer IPv6 addresses for outgoing connections