Урок 9. IPv6: что это и зачем
Адресов IPv4 всего около 4,3 миллиарда, а устройств в интернете давно больше. Свободные адреса IPv4 у региональных регистраторов закончились ещё в 2010-х годах, и сети держатся на NAT (урок NAT и проброс портов). IPv6 решает задачу по-другому: адресов в нём столько, что хватит каждому устройству — без общего адреса на всю квартиру.
Сколько адресов
Адрес IPv6 длиной 128 бит вместо 32. Это 2 в степени 128 — число с 39 цифрами. Даже одна обычная сеть IPv6 (/64) вмещает в 4,3 миллиарда раз больше адресов, чем весь IPv4:
print(2 ** 32)
print(2 ** 64)
print(2 ** 128)4294967296
18446744073709551616
340282366920938463463374607431768211456Как записывается адрес
Восемь групп по четыре шестнадцатеричные цифры (0–9 и a–f) через двоеточие:
2001:0db8:0000:0000:0000:ff00:0042:8329Длинно, поэтому есть два правила сокращения:
- Нули в начале группы можно не писать:
0db8→db8,0042→42,0000→0. - Одну подряд идущую цепочку нулевых групп можно заменить на
::. Только одну — иначе непонятно, сколько нулей где пропущено.
Так адрес выше превращается в 2001:db8::ff00:42:8329. Модуль ipaddress в Python делает это сам и умеет развернуть адрес обратно:
import ipaddress
addr = ipaddress.ip_address("2001:0db8:0000:0000:0000:ff00:0042:8329")
print(addr)
print(addr.exploded)
print(ipaddress.ip_address("fe80::1").is_link_local)
print(ipaddress.ip_address("::1").is_loopback)2001:db8::ff00:42:8329
2001:0db8:0000:0000:0000:ff00:0042:8329
True
TrueАдреса, которые начинаются с 2001:db8:, выделены для примеров в книгах и документации — в настоящих сетях их нет.
Маска пишется так же, как в IPv4, через косую черту: 2001:db8:1:2::/64. В адресе сайта адрес IPv6 берут в квадратные скобки, чтобы двоеточия не спутались с портом: http://[2001:db8::10]:8080/.
Виды адресов
| Начало | Что это |
|---|---|
2… или 3… | глобальный адрес: виден в интернете, как публичный IPv4 |
fe80: | локальный адрес канала (link-local): есть у каждого интерфейса всегда, работает только в своём сегменте сети — роутер его дальше не передаёт |
fd… | уникальный локальный адрес (ULA): для своей сети, как 192.168.x.x в IPv4 |
::1 | сам компьютер, как 127.0.0.1 |
Поэтому у компьютера в сети с IPv6 сразу несколько адресов — это нормально.
Как устройство получает адрес
В IPv6 устройство обычно придумывает адрес само (SLAAC — автонастройка без сервера):
- Роутер время от времени объявляет в сети её префикс — первую половину адреса, например
2001:db8:1:2::/64. - Устройство дописывает к префиксу вторую половину, придуманную само, и проверяет, что такой адрес ещё никто не занял.
Бывает и DHCPv6 — раздача адресов сервером, как в IPv4. Провайдер выдаёт домашнему роутеру не один адрес, а целый префикс — например /56 или /64, — и роутер делит его на свои сети.
Телефоны и компьютеры заводят ещё и временные адреса, которые регулярно меняются: так сайтам труднее следить за устройством по его адресу. Для исходящих подключений система обычно берёт временный адрес, поэтому адрес, который видят сайты, со временем меняется.
NAT не нужен, брандмауэр — нужен
У каждого устройства в IPv6 свой глобальный адрес, и NAT обычно нет. Это значит, что подключение из интернета технически может дойти до устройства напрямую. Не пускает его брандмауэр роутера: по умолчанию он должен пропускать внутрь только ответы на соединения, начатые изнутри.
Вместо проброса порта в IPv6 делают правило брандмауэра роутера: «разрешить входящие на такой-то порт такого-то адреса». Учтите, что префикс от провайдера может меняться, а временные адреса меняются всегда, — разрешайте доступ к постоянному адресу устройства.
Проверьте, что брандмауэр IPv6 на роутере включён. Если он выключен, все устройства с глобальными адресами доступны из интернета напрямую — со всеми их открытыми портами.
Двойной стек
Почти везде IPv4 и IPv6 работают одновременно — это двойной стек (dual stack). Если у сайта есть запись AAAA (урок DNS) и IPv6 работает, браузер обычно идёт по IPv6, а если не получается — быстро переключается на IPv4. Если провайдер IPv6 не даёт, ничего не ломается: всё работает по IPv4.
Как проверить, есть ли IPv6
В Windows — ipconfig: строки с адресами IPv6 есть у каждого подключения. Если есть только адрес на fe80:, глобального IPv6 у вас нет. В Linux:
ip -6 addr
ip -6 route show defaultЕсть ли у сайта адрес IPv6, покажет запрос записи AAAA, и затем можно проверить связь с ним:
nslookup -type=AAAA glif.by
ping -6 glif.byЕсли у сайта нет записи AAAA, он работает только по IPv4, и ping -6 до него не дойдёт — это не поломка. Ключ -6 у ping есть и в Windows, и в Linux. Проверить, видят ли вас сайты по IPv6, можно и на сайтах проверки IPv6.
Коротко
- IPv6 — адреса длиной 128 бит: хватит на все устройства без NAT.
- Запись — восемь групп через двоеточие; нули в начале группы опускают, одну цепочку нулевых групп заменяют
::. fe80:— локальный адрес канала,fd…— локальный для своей сети,::1— сам компьютер,2…— глобальный.- Устройства придумывают адреса сами по префиксу от роутера (SLAAC) и заводят временные адреса.
- Защиту в IPv6 даёт брандмауэр роутера, а вместо проброса порта делают разрешающее правило.