Запись IPv4 внутри IPv6
Четыре способа записи IPv4-адреса внутри IPv6 — и почему ни один из них не является «вашим IPv6-адресом».
Попробуйте 8.8.8.8, 192.168.1.1 или 127.0.0.1.
У адреса IPv4 нет эквивалента в IPv6. Адреса IPv6 назначает ваш провайдер, а не выводятся они из того, что у вас уже есть. Ниже — четыре разные записи, в которые встроен адрес IPv4, и каждая служит своей цели; ни одну из них нельзя вписать в DNS-запись и ждать, что она заработает.
IPv4-отображённый
Актуально::ffff:203.0.113.5
Так сокет с двойным стеком представляет IPv4-собеседника приложению, работающему только с IPv6. Такие записи попадаются в журналах серверов на двухстековых машинах: строка ::ffff:203.0.113.5 — это обычное IPv4-соединение, а не IPv6. Записывается также как ::ffff:cb00:7105.
IPv4-совместимый
Устарело::203.0.113.5
Ранний механизм перехода, объявленный устаревшим в RFC 4291 в 2006 году и больше не реализуемый. Приведён потому, что до сих пор встречается в старой документации и конфигурациях, где его следует считать ошибкой, а не копировать.
Префикс 6to4
Устарело2002:cb00:7105::/48
Автоматическое туннелирование, дававшее любому узлу с публичным адресом IPv4 целый /48 в пространстве IPv6. Объявлено устаревшим в RFC 7526: оно опиралось на публичные ретрансляторы, за качество которых никто не отвечал, и порождало сбои, которые пользователь не мог диагностировать.
NAT64 / общеизвестный префикс
Только внутри сети с NAT6464:ff9b::203.0.113.5
Так клиент, работающий только по IPv6, добирается до сервера, работающего только по IPv4, через шлюз NAT64. Механизм реальный и действующий, но осмысленный лишь внутри сети, где такой шлюз есть, — в открытом интернете этот адрес не значит ничего.
Сам адрес
- Десятичная запись с точками
- 203.0.113.5
- Шестнадцатеричная
- 0xCB007105
- 32-битное целое
- 3 405 803 781
- Двоичная
- 11001011.00000000.01110001.00000101
● Документация — TEST-NET (RFC 5737) — зарезервировано для примеров. Публиковать безопасно, маршрутизации не подлежит.
Исходная посылка обычно неверна, и это нормально
Большинство тех, кто ищет конвертер IPv4 в IPv6, ищет то, чего не существует: функцию, которая берёт имеющийся у них адрес и возвращает адрес IPv6, который им следует использовать. Такой функции нет. Адреса IPv6 выделяются — провайдер или хостер даёт вам блок из блока, выданного ему самому, — а не вычисляются из уже принадлежащего вам адреса IPv4.
Что действительно существует, так это несколько записей, помещающих адрес IPv4 внутрь синтаксиса IPv6, каждая придумана под свою задачу. Различать их по-настоящему полезно, ведь вы встретите их в логах и конфигурационных файлах. А вот считать любую из них «своим адресом IPv6» — нет.
Та, что вы действительно увидите
::ffff:203.0.113.5 — форма с отображением IPv4 — покрывает почти все встречи с этим в реальной жизни. Она появляется, когда программа слушает на сокете IPv6, а подключается клиент по IPv4: операционная система показывает приложению узел именно в таком виде, чтобы код имел дело с одним типом адресов.
Практические последствия кусаются в двух местах. Разбор логов, ожидающий четвёрок с точками, эти строки не распознает. А список разрешённых адресов, сравнивающий строки, не сопоставит ::ffff:203.0.113.5 с 203.0.113.5 — правило, которое выглядит верным, проходит ревью и молча не срабатывает никогда. Нормализуйте перед сравнением.
Что представляют собой остальные
IPv4-совместимая запись (::203.0.113.5) была ранней идеей перехода, объявлена устаревшей в RFC 4291 в 2006 году и не реализована ничем современным. Если вы нашли такую в конфигурации, это ошибка, а не выбор.
6to4 (2002::/16) давал любому обладателю публичного адреса IPv4 автоматический блок /48 в IPv6 через туннели к публичным ретрансляторам. Объявлен устаревшим в RFC 7526 в 2015 году: за ретрансляторы никто не отвечал, а сбои были худшего сорта — прерывистые, медленные и не поддающиеся диагностике со стороны пользователя.
NAT64 (64:ff9b::/96) актуален и используется ежедневно. Мобильные операторы, в частности, держат сети только на IPv6 и транслируют на границе, поэтому устройство с одним лишь IPv6 добирается так до сервисов с одним лишь IPv4. Это реальность, но это свойство сети, внутри которой вы находитесь, а не адрес, который можно кому-то выдать.
Почему два протокола не могут просто поговорить
Резонный вопрос — переход длится тридцать лет. Ответ в том, что IPv6 — это не IPv4 с более длинными адресами: это другой протокол с другим заголовком, и маршрутизатор, работающий с одним, не имеет способа переслать пакет другого. В заголовке IPv4 попросту негде разместить 128-битный адрес.
Поэтому на любом пути между ними нужно что-то посередине: двухстековый узел, говорящий на обоих, транслятор вроде NAT64 или прокси, завершающий одно соединение и открывающий другое. Именно поэтому переход идёт так медленно и почему практический ответ на вопрос «как поддержать IPv6?» почти всегда «поднимите двойной стек», а не «сконвертируйте что-нибудь».
Смежное
Чтобы узнать, по какому протоколу вы на самом деле выходите в интернет, проверка IP сообщает семейство адресов, которое использовало ваше соединение. Для разбиения на подсети того адреса, что у вас есть, калькулятор подсетей закрывает сторону IPv4.
Вопросы, ради которых существует эта страница
Какой адрес IPv6 соответствует моему адресу IPv4?
Никакой, и это самое важное на этой странице. Адреса IPv6 выдаёт тот, кто предоставляет вам связность: они приходят от вашего провайдера или хостера из выделенного ему блока. Вывести такой адрес из уже имеющегося у вас IPv4 невозможно — это как выводить номер телефона из почтового адреса. Записи, показанные здесь, лишь встраивают адрес IPv4 в синтаксис IPv6 для конкретных технических задач, а это совсем другое.
Почему в логе сервера видно ::ffff:203.0.113.5?
Потому что сокет слушает на IPv6, а соединение пришло по IPv4. Двухстековый сокет показывает приложению IPv4-узлы именно в такой «отображённой» форме, чтобы код имел дело с одним типом адресов. Это обычное соединение IPv4. Если вы разбираете логи или сверяете адреса со списком разрешённых, сначала снимите префикс ::ffff: — считать его отдельным адресом — распространённая причина правил, которые молча перестают срабатывать.
Стоит ли пользоваться адресом 6to4?
Нет. 6to4 был механизмом автоматического туннелирования, дававшим любому узлу с публичным адресом IPv4 блок /48 пространства IPv6 через префикс 2002::/16. В 2015 году RFC 7526 формально объявил его устаревшим: он опирался на публичные ретрансляторы, за которые никто не отвечал, и давал соединения медленные или сломанные так, что пользователь не мог это диагностировать. Нужен IPv6 — берите его у своего провайдера или у туннельного брокера с ответственным оператором.
Для чего нужен 64:ff9b::?
Это общеизвестный префикс NAT64, определённый в RFC 6052. Клиент, у которого есть только IPv6, но которому нужно достучаться до сервера с одним лишь IPv4, отправляет пакет на 64:ff9b:: с адресом IPv4, вложенным в последние тридцать два бита; шлюз NAT64 на пути выполняет трансляцию. Механизм актуален и широко развёрнут — прежде всего у мобильных операторов с сетями только на IPv6. Но смысл он имеет исключительно внутри сети, где такой шлюз работает: в открытом интернете этот адрес не маршрутизируется.
Могут ли узлы IPv4 и IPv6 общаться напрямую?
Нет. Это разные протоколы с разными форматами пакетов, и прямого взаимодействия между ними не существует — именно поэтому переход тянется тридцать лет. Связь между ними всегда требует чего-то посередине: двухстекового узла, говорящего на обоих, транслятора вроде NAT64 или прокси, который завершает одно соединение и открывает другое. Поэтому же «просто сконвертировать адрес» ничего не решает.
Последняя проверка . Заметили, что что-то устарело? Напишите нам.
