Некоторые вещи непонятны нам не потому, что мы не можем их понять, а потому что они не входят в круг наших понятий.
(с) К. Прутков

Если верить Вики - ipv6 появился раньше, чем я научился соединять два компьютера в сеть, но за всё эти годы, несмотря на всё, нигде, никогда на практике я с ним не сталкивался.
Ну да, есть иногда на интерфейсах какие-то странные длинные адреса, на какая от них польза и зачем они вообще - совершенно непонятно.

И вот в обсуждениях очередной статьи - очередное "никто почему-то не хочет использовать ipv6" - так может быть, пора попробовать?

Сразу дисклеймер: тут на Хабре уже есть хорошая техническая статья именно по ipv6, лучше я точно не напишу, но зато напишу, так сказать, с бытовой точки зрения: что мне это может дать и зачем.

Но сначала - небольшое лирическое отсупление (см. про "круг понятий" - многим это наверняка после вуза ни в зуб не впилось. Но тут оно пригодится)

Что такое обычный, "традиционный" ip-адрес, он же ipv4?
Это 4 байта, или лучше сказать, октета, которые традиционно записываются в виде 4 десятичных чисел, разделенных точками: 192.168.1.1, например.
Или в hex-виде C0 A8 01 01 (но так не пишут).

В паре к адресу идет "маска подсети", например /24 - что означает "первые 24 бита неизменяемые, остальные можно менять".
В октете 8 бит, то есть 24 бита это ровно 3 октета, значит, в адресах подсети 192.168.1.0/24 первые 3 октета неизменны (192.168.1), а последний может принимать значения от 0 до FF, итого 256 значений.
Причем 0 и FF - адреса хостам давать нельзя, остается 254 адреса.

Технически никто вам не запрещает в своей локальной сети использовать любые адреса и любые маски, хоть /13 или /2 - что дает намного большее количество возможных адресов, всё будет работать, но когда вы попробуете выйти "во внешние сети" - а фиг, там уже всё поделено, правила расписаны, сети нарезаны и выделены, и вот там - адресов на всех не хватает.
Вам разрешено делать свои "серые сети", адреса которых запрещены в глобальном интернете, либо придется выпрашивать у кого-то доступную реальную подсеть, с глобальными адресами.
Выпрашивание дефицитного ресурса обычно стоит денег.

Для выхода из "серой" сети в глобальную придумали NAT - для исходящих он подменяет ваши внутренние адреса на адрес NAT-шлюза, для входящих - подменяет обратно на запомненные внутренние.
В общем случае, без спроса, снаружи внутрь на конкретный заданный хост попасть нельзя - NAT просто не знает куда именно перенаправить пакет.
Особенно, если за одним NATом (сеть провайдера) стоит второй (локальный), а то и третий. Потому что адресов не хватает, Карл!
Но вот такой нехитрый костыль позволяет всему этому колхозу работать...

Так вот, для чего придумали ipv6 - в нем 128 бит, то есть целых 16 октетов. вместо 4!
А всего возможных адресов - 2^128, что, мягко говоря, много. Автоматически ресурс перестает быть дефицитным, и его можно раздавать мешками.
Минимальная рекомендумемая подсеть - /64, то есть остается еще 64 бита адресов только одному пользователю - бери, и ни в чем себе не отказывай! Не нужен больше NAT, всему можно назначить свой адрес, и не один, и менять его можно намного чаще чем носки...

Записывать 16 октетов десятичными цифрами негуманно, их стали записывать парами в hex:
2001:0123:dead:beef:0000:0000:0000:0001
А потом - пропускать лидирующие нули, и сокращать последовательности нулей:
2001:123:dead:beef::1 - это тот же самый адрес

Не забываем, что маска применяется к октетам, то есть маска подсети /56 - это 7 октетов, и в данном случае соответсвует (20)(01):(01)(23):(de)(ad):(be)..:....:....:....:...., или запишем так: 2001:123:dead:be00::/56
Что оставляет нам для экспериментов еще 128 - 56 = 72, 2^72 вариантов адресов.

Осталась мелочь: очередную подсеть, уже ipv6, тоже кто-то должен вам выделить. Традиционно это должен делать провайдер, но традиционно же провайдер тоже не знает, "зачем ему ipv6?" и поэтому никому ничего не выдаёт.
Во всяком случае, из наблюдаемых местных провайдеров (6 проводных, 3 сотовых) ipv6-адрес выдал только МТС на мобильном.
Нет подсети ipv6 - вы не пользуетесь ipv6, а если вы все не пользуетесь - никто и не пользуется.

Но не всё так плохо. Во-первых, сетевые интерфейсы уже автоматически получают свои ipv6 адреса из специальной подсети fe80::

ip addr
...
eth0 ...
 ....
 inet6 fe80::3485:73ff:fe4f:bbbb/64 scope link
 ....

Они связаны с MAC-адресами интерфейсов, не маршрутизируются наружу, но если на одном линке (сегменте сети) есть два интерфейса с подобными адресами - то можно с одного компьютера связаться с другим, чисто по вот этому адресу, указав еще дополнительно интерфейс, через который его искать:

A: eth0 fe80::3485:73ff:fe4f:bbbb/64
B: end0 fe80::a01:2d/64

A:
ping6 fe80::a01:2d/64%eth0

То есть, что-то вроде "серой сети" на уровне сегмента сети, без сервера и DHCP.
Уже это можно использовать.

Во-вторых, есть ULA-адреса, fd00::/8, они применяются для настройки соединения через туннели.
Можно создать туннель, и присвоить ему такие адреса для обмена по ipv6, вместо или вместе с ipv4

И наконец, бывают "туннельные брокеры" - провайдеры подсетей ipv6, раздающие эти подсети через туннель.
Принцип примерно такой:
- создается туннель между двумя ipv4 адресами (провайдера и наш)
- поднимается связь по ipv6 через него
- провайдер настраивает маршрутизацию выданной сети через туннель к нам
- мы настраиваем маршрутизацию наружу по ipv6 через провайдера
- раздаем адреса у себя локально.

Но, как обычно, есть нюанс: туннель к брокеру требует реального фиксированного IP, а у меня его как раз и нет.
Зато есть свой VDS, у которого есть реальный адрес. Его и буду использовать.

Процесс выбора брокера и регистрации на нем аккаунта пропустим: это можно найти в интернете.
Брокер выделяет подсеть, скажем, 2001:123:4567:5600::/56, дает свой IP 123.45.67.89, и два адреса для туннеля, 2001:11:ff::1 со своей стороны, и 2001:11:ff::2 для клиента.
Тип туннеля - GRE
Адрес моего сервера - пусть 89.23.45.22

Настраиваем на сервере:

ip tunnel add mytunnel mode gre remote 123.45.67.89 local 89.23.45.22 ttl 255
ip link set mytunnel up
ip -6 addr add 2001:11:ff::2/64 dev mytunnel

Проверка соединения:

ping6 2001:11:ff::1

если пинги пошли - ок, туннель установлен.
Добавляем маршрут в него и включаем форвардинг пакетов:

ip -6 route add default via 2001:11:ff::1
sysctl net.ipv6.conf.all.forwarding=1

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

Выдана подсеть /56 (7 октетов), ее можно поделить на 256 сетей /64 (8 октетов), и всё еще не нарушить рекомендации по выделению минимум /64 сетей.
А можно было поделить и на 2 сети /57 - необязательно же по октетам выравнивать? Ну да ладно.

Пусть подсеть 2001:123:4567:5600::/64 отвечает за тоннель к LAN, а 2001:123:4567:5601::/64 будет внутри LAN.

Тут потребуется еще один туннель, от шлюза в LAN к серверу (и есть разные варианты его создания, слово из трех букв).
Допустим, он называется tun0:

ip -6 addr add 2001:123:4567:5600::1/64 dev tun0

На другой стороне, на шлюзе, соответственно, так:

ip -6 addr add 2001:123:4567:5600::2/64 dev tun0

(а может, можно было использовать как раз туннельные ULA-адреса? попробую потом)
Проверка с сервера:

ping6 2001:123:4567:5600::2

Работает, настраиваем машруты на сервере:

ip -6 route add 2001:123:4567:5601::/64 via 2001:123:4567:5600::2

И на шлюзе, не забывая включить форвардинг и там:

ip -6 route add default via 2001:123:4567:5600::1
sysctl net.ipv6.conf.all.forwarding=1

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

Осталось последнее: раздать адреса в сети.
В случае ipv6 это делается не через обычный dhcp, а немного иначе:

apt install radvd

vim /etc/radvd.conf

interface end0 {
    AdvSendAdvert on;
    AdvManagedFlag off;
    AdvOtherConfigFlag on;

    prefix 2001:123:4567:5601::/64 {
        AdvOnLink on;
        AdvAutonomous on;
        AdvRouterAddr on;
    };

    RDNSS 2001:4860:4860::8888 2001:4860:4860::8844 {
        AdvRDNSSLifetime 3600;
    };

    route ::/0 {
        AdvRoutePreference medium;
        AdvRouteLifetime 1800;
    };
};

/etc/init.d/radvd restart

То есть, в сети, подключенной к интерфейсу end0, будут раздаваться адреса из заданной подсети, а вместе с ними машины получат адреса DNS-серверов Google.

Теперь на компьютерах в локальной сети появляются реальные глобальные ipv6 адреса.
В общем цель достигнута, ipv6 работает, и к каждому устройству можно обратиться снаружи по его адресу.
(Можно было бы их и статически прописать, конечно)

Проверка: https://testmyconnection.net

А минусы какие? Скажем так, образно:

Вот представьте, что живете вы в типичном загородном дачном доме, с забором из профлиста. Внутри у вас хорошо, а что снаружи - не видно, да и снаружи не видно что внутри.

Наслушавшись продвинутых и осознанных - решаете забор убрать, чтобы не портил вид, чтобы цивилизация была.
Первые часы всё хорошо: чисто, красиво, забор глаза не мозолит, клумбы там у дома, газон подстрижен.

А потом замечаете прохожего, который решил, что ваша бензопила возле гаража ему нужнее, и решил ее позаимствовать - ну а что, вот же она лежит на виду!
Другой прохожий решил, что нести пакет с мусором до мусорного бака далеко, и положил рядом с вашим, всё равно же выбрасывать.
Третьего очень заинтересовали занавески в доме, он так заглядывает в окна, как будто хочет такие же купить.
В общем, ходют тут всякие!
А у вас и гараж не запирается, и решеток на окнах не было никогда, забор же был

Короче говоря, пришлось забор восстанавливать: запрещать на шлюзе все входящие соединения.
То есть, если будет надо - открыть конкретный порт на конкретном адресе можно, а оставлять так - больше нельзя, теперь тут проходной двор.

А наутро пришло письмо от провайдера сети: "в вашей сети завелась какая-то кака, заблокируйте ее, или заблокируем мы сами!"
Оказалось - и правда, в одном из купленных в магазине девайсов в прошивке давно живет троян. Увидев ipv6 сеть - он обрадовался, и полез на свои сервера, ботнет строить. Ботнет довольно известный, Grandoreiro (интересно сколько таких девайсов в работе, и что еще кроме этого ботнета они умеют делать, сидя в юзерских сетях?).

Причем в отличии от ipv4 так просто, по ip-адресу, его заблокировать нельзя, адреса у девайса динамические и меняются.
Пришлось изыскивать способы заблокировать исходящие по MAC-адресу (и планировать вскрытие с перепрошивкой).

И вот что мне это всё напоминает:

Если кто не помнит - еще в конце позапрошлого века умные люди создали язык эсперанто (не программирования, а человеческий).
Типа, у традиционных языков масса недостатков, сотни правил, исключений, нечитаемые буквы (enought Renault) - давайте сделаем простой, понятный язык! Esperanto - la lingua por ni!

Энтузиасты создавали кружки, изучали язык, его пытались сделать рабочим языком ООН.
У него масса достоинств, в нем исправлены недостатки. Он не слишком сложен, интуитивно понятен, и т.д. и т.п.

Вот только при всех своих достоинствах, при наличии большой группы поддержки, официального признания - он не используется реально примерно нигде.
Потому что на плохих естественных языках вы всё-таки можете разговаривать с бОльшим количеством людей, чем на хорошем языке, который почти никто не знает.

И тут то же самое: вроде хорошо, вроде интересно - но что это сейчас дает, кроме излишней прозрачности?
Какие практические преимущества с точки зрения использования?
Ну, могу сделать еще один ipv6-only сайт с картинкой и лозунгом "Давайте все!" - но те, кто его достанет через ipv6 - и так уже в ipv6, а остальным оно недоступно и не надо.
Несмотря на то, что действительно, могут все - и даже написал как.

Древние костыли NAT давно стали удобным инструментом.

ЗЫ: а теперь представьте, что всё это сделано не в собственной сети у себя дома, а в сети какой-нибудь организации - снова "убрали забор", и только охранник в своей будке ждет предьявления пропусков...

Комментарии (2)


  1. shanker
    07.11.2025 09:54

    Мой провейдер давно поддерживает IPv6. Поэтому по смоему опыту скажу о плюсах и минусах IPv6.
    Плюсы:
    1. работает независимо от IPv4. В торрентах периодически быстрей идёт скачка (кол-во источников файла увеличивается -помимо участников IPv4 взаимодействуешь и с IPv6). Некоторые сайты, имеющие IPv4 и IPv6 - иногда недоступны по IPv4. В этот же момент прекрасно грузятся по IPv6. Одно время само наличие IPv6 позволяло обходить блокировки без VPN. Сейчас - не всё так хорошо.
    Минусы:
    Настроил в локалке правила firewall IPv4? Теперь нужно делать то же самое и по IPv6. И с этим бывают проблемы. Например, из-за регулярной смены адреса IPv6 у одного и того же устройства (и не всегда можно заставить устройство получать один и тот же адрес). Адреса по IPv6 доступны из интернета напрямую - нужно это учитывать (либо принять как данность, либо настроить firewall). К слову, IPv6 может доставить проблем в безопасности локалки - даже если устройства не получили адрес для работы с интернетом: речь про Link-Local адреса


  1. mibori
    07.11.2025 09:54

    del