Как подключиться к ipv6 серверу
Как включить IPv6: настройка протокола на Windows 7 и 10
Давайте для начала разберёмся – что это такое? Как вы, наверное, уже знаете, для общения в сети любое устройство: компьютер, ноутбук, телефон или даже телевизор использует систему IP адресов. Пока в широком использовании существует именно четвертая версия IPv4. Она кодирует путём 4 байтовых цифр. 1 байт может выражать цифру от 0 до 255. Грубо говоря, адресация находится в диапазоне от 0.0.0.0 до 255.255.255.255. В итоге «ай пи» могут получить 4 294 967 296 – чуть больше 4 миллиардов адресов.
Но в 21 веке, который знаменуется «веком интернета» – как говорит практика, свободных «ИП», уже становится мало. В свое время мой провайдер, спокойно выдавал статические IP. Сейчас же эта процедура платная, хотя прошло всего несколько лет.
IPv6 – в общем это новый стандарт, который пока используется очень редко. Адрес при этом имеет размер не 32 Бита как в IPv4, а в 3 раза больше – 128 Бит. Но в скором времени компьютерная и сетевая индустрия полностью перейдут на новый формат адреса. Теперь давайте расскажу, как включить IPv6.
Включение и выключение
ПРИМЕЧАНИЕ! Если подключение идёт к роутеру, при использовании вашего провайдера шестой версии – настройки нужно производить в самом роутере.
Настройки IPv6 уже по-умолчанию установлены на большинстве сетевых устройств. При этом использование протоколов адресов, зависит от вашего провайдера и какой именно версию айпи – он использует. Если провод от провайдера идёт напрямую к вам в компьютер, то настройка достаточна простая для всех версия Windows: 7, 8, 10 и даже XP.
Если вы в автономном режиме получаете айпишник, то скорее всего у вас также в листе будут указаны DNS сервера вашего провайдера. Но можно указать проверенные ДНС от Google и Яндекс:
Как настроить на роутере
Если интернет у вас подключен к роутеру, то прописывать все данные, в том числе DNS адреса стоит в настройках маршрутизатора. Чтобы зайти в Web-интерфейс роутера, вам нужно быть подключенным к его сети. Можно подключиться по Wi-Fi или по кабелю (вставьте его в свободный LAN разъём на передатчике).
Как узнать и посмотреть адрес?
Настройка сети IPv6
IPv6 является последней версией протокола IP, который используется для подключения в сети Интернет.
Примечание: В целом словосочетание «протокол IP» не совсем правильное, поскольку IP расшифровывается как «Internet Protocol» (межсетевой протокол), однако оно будет употребляться в этой статье для простоты.
Предыдущая версия протокола, IPv4, до сих пор используется во многих уголках сети, однако адресное пространство IPv4 потребляется очень быстрыми темпами.
IPv6 должен решить все эти проблемы. Кроме общих улучшений в протоколе, наиболее очевидным преимуществом IPv6-адресов является более широкое адресное пространство. IPv4 позволяет использовать 2 32 адресов (некоторые из которых зарезервированы для отдельных целей), а адресное пространство IPv6 – 2 128 адресов, что гораздо больше IPv4.
Чаще всего на одном сервере используются оба протокола. Однако иногда возникает необходимость отключить IPv4 и полностью перейти на IPv6.
Данное руководство поможет выполнить такую настройку.
Примечание: В большинстве случаев полностью переходить на IPv6 нет необходимости.
При этом протокол IPv4 будет активен только для локального хоста, так как от него зависит работа некоторых программ.
Важно! Если вы подключены к серверу по IPv4, после отключения протокола подключение будет сброшено. После этого нужно подключиться к серверу либо по IPv6 (если его поддерживает локальная настройка), либо через консоль.
Временное отключение IPv4
Чтобы временно отключить IPv4, нужно просто отредактировать файл /etc/resolv.conf, настроить использование DNS-серверов IPv6 (если протокол IPv6 уже включен), а затем удалить правило, отвечающее за поддержку адресов IPv4. Эти изменения будут действительны до следующей перезагрузки сервера.
Чтобы отредактировать файл /etc/resolv.conf, введите:
sudo nano /etc/resolv.conf
Если параметр nameservers задаёт адреса IPv4, нужно изменить его значение на IPv6.
К примеру, чтобы настроить директивы на серверы имен IPv6 Google, отредактируйте файл следующим образом:
nameserver 2001:4860:4860::8844
nameserver 2001:4860:4860::8888
nameserver 209.244.0.3
Сохраните и закройте файл.
После этого нужно узнать префикс IPv4-адреса и маршрутизации CIDR:
Искомое значение выделено красным. После этого можно удалить его из активных сетевых соединений (замените выделенное красным значение своими полученными данными):
ip addr del 128.199.175.162/18 dev eth0
Примечание: Именно в этот момент соединение оборвётся, если сервер использует IPv4.
Полное отключение IPv4 в CentOS и Fedora
Чтобы полностью отключить работу IPv4, нужно отредактировать файлы интерфейса.
Откройте /etc/sysconfig/network. Если протокол IPv6 был включен на готовом сервере (а не при его создании), в файл нужно добавить одну строку.
sudo nano /etc/sysconfig/network
Добавьте следующую строку, если её ещё нет в файле:
NETWORKING=yes
HOSTNAME=centafter
NETWORKING_IPV6=yes
После этого нужно отредактировать /etc/sysconfig/network-scripts/ifcfg-eth0.
sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0
Закомментируйте параметры IPv4, чтобы они не использовались при запуске сервера:
#IPADDR=128.199.175.162
#NETMASK=255.255.192.0
#GATEWAY=128.199.128.1
Затем нужно добавить параметры IPv6 (если протокол IPv6 был включен на готовом сервере).
IPV6INIT=yes
IPV6ADDR=public_ipv6_address/64
IPV6_DEFAULTGW=public_ipv6_gateway
IPV6_AUTOCONF=no
Примечание: Укажите в параметрах свои данные.
Также нужно отредактировать директивы DNS и направить их на серверы имён IPv6.
DNS1=2001:4860:4860::8844
DNS2=2001:4860:4860::8888
DNS3=209.244.0.3
После этого следуйте инструкциям предыдущего раздела.
Полное отключение IPv4 в Debian и Ubuntu
В системах Debian и Ubuntu настройка выполняется аналогичным образом.
Откройте файл /etc/network/interfaces:
sudo nano /etc/network/interfaces
Если протокол IPv6 был включен в процессе создания сервера, в файле будет два раздела (если частные сети включены, разделов может оказаться больше).
Чтобы интерфейс IPv4 не был возобновлен после перезагрузки сервера, удалите или закомментируйте раздел inet для eth0. Тогда активным будет только раздел inet6.
Примечание: То же самое нужно сделать, если IPv6 был включен после создания сервер.
Потом нужно добавить настройки IPv6 в конфигурационный файл:
iface eth0 inet6 static
address public_ipv6_address
netmask 64
gateway public_ipv6_gateway
autoconf 0
dns-nameservers 2001:4860:4860::8844 2001:4860:4860::8888 209.244.0.3
Сохраните и закройте файл.
Теперь можно отключить IPv4. Инструкции можно найти в первом разделе руководства.
Заключение
Теперь сервер доступен только по IPv6.
Это может усложнить выполнение определенных процедур, но в некоторых обстоятельствах это необходимо. Вы можете легко вернуть поддержку IPv4; для этого просто замените настройки, описанные в руководстве, прежними параметрами.
IPv6 и Доступ из интернет в домашнюю сеть
Зачем?
Вы на работе, или в поездке и вам нужны файлы, которые находятся у вас дома. Вам нужно посмотреть, что происходит у вас на даче, или в гараже. Возможно, вы оставили ребёнка с няней, и хочется посмотреть, чем они занимаются. Бывает, что нужно показать клиентам как что-то работает и лучше всего устроить демонстрацию через интернет. К тому же, это может быть целый поток клиентов. Нужно, чтобы клиенты могли не только посмотреть, но и что-то изменить и сделать это без вашей помощи. Кто-то скажет, что для решения таких задач нужен другой подход. Домашняя или локальная сеть может показаться кому-то неуместной. Для таких случаев больше подошёл бы хостинг. Почти соглашусь, тем более, что внешние сервисы мы тоже будем использовать, но доступ в локальную сеть при этом всё равно может быть необходим, особенно если вы используете камеры и/или другие устройства, которые не могут быть размещены на удалённом сервере. Ну и никуда не деться от популярной в последнее время темы «Умного дома» – вы ещё в дороге, но хотите уже сейчас что-то увидеть или включить у себя дома. Ответов на вопрос «Зачем?» может быть ещё много. В нашем случае основной задачей будет предоставление контроллеру «Умного дома» i-Tone выделенного IP адреса для доступа к нему из внешней сети Интернет. Решив её, мы сможем решить и остальные задачи. Через некоторое время после того, как мы сделаем доступ извне в свою локальную сеть, мы уже не будем задаваться вопросом «Зачем?». Возможно, это будет нас смешить.
Честно говоря, задачка так себе – мало интересного. Решить её можно миллионом способов. Это так, но всё же, рассмотрим проблему, хотя бы для того, чтобы не объяснять всё в сотый раз своим друзьям и знакомым, которым это нужно (иногда они даже не знают об этом). Просто, скажем – иди почитай и если где-то не получится, я посмотрю.
Настроим всё, используя IPv6.
Почему IPv6?
Если у вас уже есть белый IPv4, который не меняется и нет никакого NAT, или IPv4 вы можете получить у провайдера, пусть даже придётся платить за этот IPv4 какие-то скромные деньги, то возможно вам будет интересно прочитать Почему я не могу подключиться к контроллеру из сети. Но в рамках статьи мы расширим задачу для себя, считая что нам мало одного IP. Нет, можно обойтись и одним, но если их много, это просто удобнее. Каждому устройству в локальной сети дадим белый IP.
Возможно, у вас ещё нет IPv4, но вы уверены, что можете его легко купить у своего провайдера рублей за 150 в месяц. Часто такая уверенность возникает со слов самого провайдера. Иногда получить IPv4 может оказаться немного сложнее чем, вы ожидали. Известен случай, когда провайдер предоставляющий интернет по всей стране, пообещал выдать постоянный IPv4 в течение 10! дней и не сделал этого до сих пор (прошло 2 месяца). Могу предложить потратить эти деньги с большей пользой – на них можно взять VPS/VDS. Хостеры часто предоставляют тестовый период, так что вы получите свой IPv4 раньше, чем успеете что-то оплатить. И ваши траты могут оказаться меньше, чем 150 руб./мес. Кроме белого IPv4 вы получите целый сервер с приличным количеством интернет-трафика. Как правило, вам могут дать при этом (возможно за символическую дополнительную плату в 1 руб./адрес) некоторое количество IPv6. Что делать с сервером – решайте сами. Ну, запустите на нём бесплатный игровой сервер Garry’s mod, или то, что вам больше понравится, если он вам совсем не нужен. Пусть подростки порадуются.
Железо.
Возможно эта информация будет для вас лишней, но я собираюсь настроить всё на древнем ноуте с Win Xp с выходом в сеть через 3G модем. Такой выбор железа гарантирует нам, что повторить наши эксперименты сможет почти каждый. К тому же такую конфигурацию можно разместить где угодно. Например, на даче (если есть перебои с электричеством, выручит аккумулятор ноута, и даже если сопрут – не жалко). В квартире, в которой идёт ремонт и надо постоянно давать ценные указюльки рабочим. При этом у нас есть ещё свои дела, и находиться там, где идёт ремонт, всё время мы не хотим. Даже в машине, если захочется. Ни что не помешает настроить это всё для Mac OS или Linux. Когда наиграемся и почувствуем себя уверенно, можно попробовать запустить всё на каком-нибудь китайском планшете с Android. Можно даже на телефоне, но у планшета экран побольше. Для «Умного дома» планшет кажется более подходящим. Про то, что можно просто и роутер настроить говорить не буду – кто хочет, пусть настраивает.
Где получить IPv6?
В общем случае начать можно со своего провайдера. Возможно, получить IPv6 можно у него. Если не получается, то есть ещё несколько способов. Все рассматривать не будем. Остановимся на туннельном брокере gogo6 ( комментарии автора: к сожалению, данный сервис прекратил свою работу с 2016 года. Так что придется поискать альтернативный сервис ;-) ) из-за удобного клиента под Windows.
Устанавливаем клиент. После установки, если вы специально не сняли галочку, клиент запустится.
Клиентская часть туннельного брокера gogo6
Скриншот сделал для тех кто еще сомневается в своих силах, там все просто – на первой странице буквально три поля, доступных для заполнения, два из которых мы заполнить не можем так, как username и password мы получим позже. Ну а сейчас используем «Connect Anonymously» и нажмём «connect». После того, как соединение установится, откроем браузер и зайдём на какой-либо сайт, который покажет нам, как у нас теперь обстоят дела с IPv6. Например, на test-ipv6.com. Кстати, там будет вкладка «Other IPv6 sites» – можете выбрать что-то, что возможно больше вам подойдёт. Делать скриншот, опять же, большого смысла нет. Внизу страницы будет надпись «Ваши результаты готовности». Должно быть 10/10. Если это не так, разбираемся почему. Подсказки получим на этом же сайте.
Запускаем cmd или powershell любым привычным для нас способом. Можно нажать win + r и ввести cmd. Вводим команду:
ping ipv6.google.com
У меня получилось среднее время пинга 329 мсек. Просто на google.com пинг получился на 100 мсек больше (436 мсек). Играть в игры с таким пингом будет не комфортно. Наш ping сейчас идёт через Монреаль (или Амстердам, у кого как получилось). И будет ещё больше, когда мы сделаем трансляцию IPv6->IPv4. Если нужен короткий ping, то придётся арендовать VDS у российского провайдера и настраивать всё через него. Если в клиенте сделать «disconnect» и пропинговать google.com, то задержка должна существенно сократиться. У меня среднее получилось 98 мсек. Тоже не мало, но учитывая, что это 3G, удивляться нечему.
Для офиса со скоростью интернета 25 Мбит/сек картинка получилась несколько иной :
Как получить статический IP
В этом случае скорость доступа у IPv6 оказалась хуже чем у IPv4, это связанно с тем что трафик по IPv6 шел через сервера gogo6.
Что мы получили?
У нас серый (т.е. меняется) IPv6, но уже нет NAT, никакого проброса портов. К нашему компьютеру уже можно подключаться извне. Если вам быстренько что-то нужно показать клиенту, то вы уже можете это сделать, сообщив ему свой IP. Конечно, при этом у клиента должна быть поддержка IPv6.
Выше скорость скачивания торрентов, за счёт пиров с IPv6.
Что-то мы уже получили, но динамический IPv6 можно было настроить просто средствами операционной системы, не заморачиваясь с какой-то регистрацией и установкой клиента на свой компьютер. Скорость при этом упала бы на несколько процентов, а не в разы.
Читайте продолжение на следующей неделе 18 ноября:
Но нам нужен постоянный IP
Получили Username и Password? Вас можно поздравить! Теперь у вас есть 56 статических IP! Не то, чтобы эта цифра поражала воображение, но на первое время должно хватить.
Можно ещё посмотреть вот это video. На всякий случай добавлю, что оно снято 3 гoда назад журналом Хакер.
Приложение.
Начнём с того, что создадим демонстрационное приложение, которое будет получать доступ к нашей камере. Затем функционал можно будет расширить под ваши конкретные задачи. Можно, например, показать на странице несколько камер, даже находящихся совершенно в разных местах. Если нужно, на разных континентах. Можно добавить панель с каким-то табло и кнопками. На табло можно вывести какую-то информацию. Например, температуру или даже показания домовых счётчиков. На кнопки можно вывести управление подключенными к компьютеру устройствами. Обычно это выключатели чего-либо, например света. Ну и обязательно нужно будет добавить авторизацию на вашем сервере, иначе каждый сможет что-то там переключать. Эта часть наиболее творческая и каждый может решить её наиболее удобным способом. Я покажу как это сделать при помощи node.js.
Идём на сайт http://nodejs.org/ и устанавливаем nodejs, если он ещё у вас не установлен. Всё очень просто. В сети полно руководств как это сделать и ещё раз описывать установку смысла большого нет, тем более, что описывать особенно нечего. Кроме самого node должен установиться и менеджер пакетов к нему – npm. Как работать с пакетами описывать тоже не буду – в сети есть хорошие описания.
cd C:/javascript/webcam
и запускаем сервер:
node server.js
В дальнейшем, через npm можно подключить модуль, который позволит нам через наше приложение управлять внешними устройствами. Обычно внешние устройства подключаются через USB, иногда Bluetooth. При этом в системе появляется один или несколько портов UART, через которые и происходит всё управление. Идём на https://www.npmjs.org/. В строке поиска набираем «uart» и выбираем модуль, который нам больше всего понравится. С его помощью реализуем то, что нам нужно.
Доменное имя.
Получаем обычным способом – нового тут ничего нет. Напомню только, что получить доменное имя можно и бесплатно. Возможно это как раз лучший вариант для такого решения как наше. Речь о dot.tk. Регистрируемся, получаем, можно несколько.
IPv6->IPv4.
Теперь осталось совсем немного. Мы настроим трансляцию IPv6->IPv4. Этот механизм будет работать не только с gogo6 (как раз там какая-то трансляция уже есть). Для этого воспользуемся Сloudflare. Нам нужно зарегистрироваться. В разделе Websites нужно добавить домен. В DNS Settings для домена нужно удалить все A-записи. Для AAAAукажем наш статический IPv6. Выглядеть должно примерно так:
Вверху видим адреса двух DNS-серверов («Your Nameservers»). Используем их для парковки своего доменного имени. Подтверждаем, что мы закончили с записямиDNS. Переходим в «CloudFlare Settings». Находим строчку «Automatic IPv6», устанавливаем в «Full». На этом всё. Убеждаемся в том, что всё работает.
Практика IPv6 — домашняя сеть
Abstract: Рассказ про некоторые возможности IPv6 на примере конфигурации сложной домашней IPv6-сети. Включает в себя описания мультикаста, подробности настройки и отладки router advertisement, stateless DHCP и т.д. Описано для linux-системы. Помимо самой конфигурации мы внимательно обсудим некоторые понятия IPv6 в теоретическом плане, а так же некоторые приёмы при работе с IPv6.
Зачем IPv6?
Вполне понятный вопрос: почему я ношусь с IPv6 сейчас, когда от него сейчас нет практически никакой пользы?
Сейчас с IPv6 можно возиться совершенно безопасно, без каких-либо негативных последствий. Можно мирно разбираться в граблях и особенностях, иметь его неработающим месяцами и nobody cares. Я не планирую в свои старшие годы становиться зашоренным коболистом-консерватором, который всю жизнь писал кобол и больше ничего, и все новинки для него «чушь и ерунда». А вот мой досточтимый воображаемый конкурент, когда IPv6 станет продакт-реальностью, будет либо мне не конкурентом, либо мучительно и в состоянии дистресса разбираться с DAD, RA, temporary dynamic addresses и прочими странными вещами, которым посвящено 30+ RFC. А что IPv6 станет основным протоколом ещё при моей жизни — это очевидно, так как альтернатив нет (даже если бы они были, их внедрение — это количество усилий бОльшее, чем завершение внедрения IPv6, то есть любая альтернатива всегда будет отставать). И что адреса таки заканчиваются видно, по тому, как процесс управления ими перешёл во вторую стадию — стадию вторичного рынка. Когда свободные резервы спекуляций и хомячаяния адресов закончится, начнётся этап суровой консолидации — то есть выкидывание всего неважного с адресов, перенос всех «на один адрес» и т.д. Примерно в это время IPv6 начнёт использоваться для реальной работы.
Впрочем, рассказ не про будущее IPv6, а про практику работы с ним. В Санкт-Петербурге есть такой провайдер — Tierа. И я их домашний пользователь. Это один из немногих провайдеров, или, может быть, единственный в городе, кто предоставляет IPv6 домашним пользователям. Пользователю выделяется один IPv6 адрес (для маршрутизатора или компьютера), плюс /64 сетка для всего остального (то есть в четыре миллиарда раз больше адресов, чем всего IPv4 адресов быть может — и всё это в одни руки). Я попробую не просто описать «как настроить IPv6», но разобрать базовые понятия протокола на практических примерах с теоретическими вставками.
У провайдера сеть 2a00:11d8:1201:32b0::/64 маршрутизируется через 2a00:11d8:1201:0:962b:18:e716:fb97 (то есть через мой компьютер). Заметим, это всё, что я получил. Никаких шлюзов и т.д. — тут начинается магия IPv6, и самое интересное. «Оно работает само».
Начнём с простого: настройка 2a00:11d8:1201:0:962b:18:e716:fb97 на eth2 для компьютера. Для удобства чтения все конфиги и имена файлов я оставлю на последнюю секцию.
Мы прописываем ipv6 адрес на интерфейсе eth2… И чудо, он начинает работать. Почему? Каким образом компьютер узнал, куда надо слать пакеты дальше? И почему /128 является валидной сетью для ipv6? Ведь /128 означает сеть размером в 1 ip-адрес и не более. Там не может быть шлюза!
Для того, чтобы понять, что происходит, нам надо взглянуть на конфигурацию сети (я вырежу всё лишнее, чтобы не пугать выводом):
# ip address show eth2 (обычно сокращают до ip a s eth2 )
Упс. А почему у нас на интерфейсе два адреса? Мы же прописывали один? Наш адрес называется ‘scope global’, но есть ещё и ‘scope link’…
Часть первая: scope
В процессе проектирования IPv6 вопрос ‘scope’ много и тщательно обсуждался, потому что исходное деление IPv4, даже с последующими дополнениями, явно не соответствовало потребностям реальных конфигураций. Например, если у вас объединяются две организации, в каждой из которых используется сеть 10.0.0.0/8, то вас ждёт множество «приятных» сюрпризов. В IPv6 решили с самого начала сделать множество градаций видимости, что позволило бы более комфортно осуществлять дальнейшие манипуляции.
Из всего этого на практике я видел использование только host/interface, link/local и global. В свете /64 и пусть никто не уйдёт обиженным, специально возиться с site-local адресами будет только параноик.
Второй важной особенностью IPv6 является официальное (на всех уровнях спецификаций) признание того, что у интерфейса может быть несколько IP-адресов. Этот вопрос в IPv4 был крайне запутан и часто приводил к ужасным последствиям (например, запрос получали на один интерфейс, а отвечали на него через другой, но с адресом первого интерфейса).
Так как в отличие от IPv4 у IPv6 может быть несколько адресов на интефрейсе, то компьютеру не нужно выбирать «какой адрес взять». Он может брать несколько адресов. В случае IPv4 сваливание на link-local адрес происходило в режиме «последней надежды», то есть по большому таймауту.
А в IPv6 мы можем легко и просто с самого первого момента, как интерфейс поднялся, сделать ему link local (и уже после этого думать о том, какие там global адреса есть).
Более того, в IPv6 есть специальная технология автоматической генерации link-local адреса, которая гарантирует отсутствие дублей. Она использует MAC-адрес компьютера для генерации второй (младшей) половинки адреса. Поскольку MAC-адреса уникальны хотя бы в пределах сегмента (иначе L2 сломан и всё прочее автоматически не работает), то использование MAC-адреса даёт нам 100% уверенность в том, что наш IPv6 адрес уникален.
Принцип довольно простой:
MAC-адрес eth2 — это 00:18:e7:16:fb:97, а локальный адрес ipv6 — F80:000218:e7ff:fe16:fb97. Да-да, именно так, как выделено жирным. Зачем было в середину всобачивать ff:fe — не знаю. Сам алгоритм называется modified EUI-64. Сам этот алгоритм очень мотивирован и полон деталей. С позиции системного администратора — пофигу. Адрес есть и есть. Интересным может быть, наверное, обратный алгоритм — из link-local узнать MAC и не более.
Итак, у нас на интерфейсе два адреса. Мы даже знаем, как появились они оба (один автоматически при подъёме интерфейса, второй прописали мы). Мы даже знаем, как система поняла, что адрес глобальный — он из «global» диапазона.
Но каким образом система узнала про то, кто его шлюз по умолчанию? И как вообще может жить /128?
Часть вторая, промежуточная: мультикасту мультикаст мультикастно мультикастит
Посмотрим на таблицу маршрутизации:
Что мы тут видим? Первое — говорит нам, что наш IPv6 адрес — это адрес нашего интерфейса eth2. Второе говорит, что у нас есть link-local сегмент в eth2. У обоих источник — это kernel.
А вот третье — это интрига. Это шлюз по умолчанию, который говорит, что весь трафик надо отправлять на fe80::768e:f8ff:fe93:21f0 на интерфейсе eth2, и источником информации о нём является некое «ra», а ещё сказано, что оно протухает через 1779 секунд.
Что? Где? Куда? Кто? За что? Почему? Зачем? Кто виноват?
Но перед ответом на эти вопросы нам придётся познакомиться с ещё одной важной вещью — multicast. В IPv4 muticast был этакой технологией «не от мира сего». Есть, но редко используется в строго ограниченных случаях. В IPv6 эта технология — центральная часть всего и вся. IPv6 не сможет работать без мультикаста. И без понимания этого многие вещи в IPv6 будут казаться странными или ломаться в неожиданных местах.
Кратко о типах трафика, возможно кто-то пропустил эту информацию, когда изучал IPv4:
Так вот, в IPv6 НЕТ БРОДКАСТОВ. Вообще. Вместо них есть мультикаст. И некоторые из мультикаст-адресов являются ключевыми для работы IPv6.
В практическом смысле это означает, что мы можем отправить бродкаст пинг всем узлам, или всем маршрутизаторам. Правда, нам для этого придётся указать имя интерфейса, в отношении которого мы интересуемся cоседями.
Мультикаст-групп (группой называют все узлы, которые слушают данный мультикаст-адрес) много. Среди них — специальная группа FF02::6A с названием «All-Snoopers». Именно этой группе и рассылаются routing advertisements. Когда мы хотим их получать — мы вступаем в соответствующую группу. Точнее не мы, а наш компьютер.
Часть третья: routing advertisements
В IPv6 придумали такую замечательную вещь — когда маршрутизатор рассылает всем желающим информацию о том, что он маршрутизатор. Рассылает периодически.
В отношении этого вопроса есть целый (всего один, что удивительно) RFC: tools.ietf.org/html/rfc4286, но нас интересует из всего этого простая вещь: маршрутизатор рассылает информацию о том, что он маршрутизатор. И, может быть, чуть-чуть ещё информации о том, что в сети происходит.
Вот откуда наш компьютер узнал маршрут. Некий маршрутизатор сказал ему «я маршрутизатор». И мы ему поверили. Почему мы выбрали именно его среди всех окружающих маршруштизаторов (см ответ на пинг на FF02::2 выше) мы обсудим чуть дальше. Пока что скажем, что этот «настоящий» маршрутизатор правильно себя анонсировал.
Таким образом, происходит следующая вещь:
У нас адрес 2a00:11d8:1201:0:962b:18:e716:fb97/128, и ещё есть link-local. Мы слышим мультикаст от роутера, верим ему, и добавляем в таблицу маршрутизации нужный нам адрес как default. С этого момента мы точно знаем, что адрес в сети. Таким образом, отправка трафика в интернет больше не проблема. Мы генерируем пакет с src=2a00:11d8:1201:0:962b:18:e716:fb97 и отправляем его на шлюз по умолчанию, который в нашем случае — fe80::768e:f8ff:fe93:21f0. Другими словами, мы отправляем трафик не своему «шлюзу» в сети, а совсем другому узлу совсем по другому маршруту. Вполне нормальная вещь как для IPv6, так и для IPv4, правда, для IPv4 это некая супер-крутая конфигурация, а для IPv6 — часть бытовой повседневности.
Въедливый читатель может спросить несколько вопросов: что значит «написано на интерфейсе»? И что значит «neighbor discovery»?
Вопросы справедливые. Для начала попробуем выяснить, какие узлы у нас есть в сети из подсети 2a00:11d8:1201::/64
Для того, чтобы посмотреть router advertisement на интерфейсе нам поднадобится программа radvdump из пакета radvd. Она позволяет печатать анонсы, проходящие на интерфейсах, в человеческом виде. Заметим, сам пакет radvd нам ещё пригодится (так как его демон — radvd позволяет настроить анонсирование со своих интерфейсах).
Итак, посмотрим, что аносирует нам Tiera:
radvdump eth2 (и подождать прилично, ибо анонсы не очень часто рассылаются)
Таким образом всё просто — адрес мы указали, маршрутизатор нам «себя» прислал, ядро маршрут обновило. Вуаля, у нас IPv6 на компьютере заработал.
Белый IPv6-адрес для каждого в домашней сети
Получить IPv6 адрес для компьютера — этого маловато будет. Хочется так, чтобы каждое мобильное устройство сидело не за позорным NAT’ом, а голой задницей с белым адресом в Интернете. Желательно ещё при этом так, чтобы злые NSA/google не могли по хвостику моего адреса (в котором закодирован MAC) отслеживать мои перемещения между разными IPv6-сетями (хотя в условиях установленного play services эта параноидальность выглядит наивной и беззащитной).
Но, в любом случае, у нас задача раздать интернет дальше.
Так как fb97 уже является адресом моего компьютера, настройка машрутизации плёвое дело:
… и у нас через пол-часика полностью отваливается IPv6 на компьютере? Почему? Кто виноват?
Оказывается, линукс не слушает routing advertisement, если сам является маршрутизатором. Что, в общем случае, правильно, потому что если два маршрутизатора будут объявлять себя маршрутизаторами и слушать маршруты друг друга, то мы быстро получим простейшую петлю из двух зацикленных друг на друга железных болванов.
Однако, в нашем случае мы всё-таки хотим слушать RA. Для этого нам надо включить RA силком.
Заметим, важно, что мы слушаем RA не всюду, а только на одном интерфейсе, с которого ожидаем анонсы.
Теперь маршрутизация работает, маршрут получается автоматически, и можно на каждом мобильном устройстве вручную прописать IPv6 адрес и вручную указать IPv6 шлюз, и вручную прописать IPv6 DNS, и вручную… э… слишком много вручную.
Если мне выдали настройки автоматом, то я так же хочу раздавать их дальше автоматом. Благо, dhcpd отлично справляется с аналогичной задачей для IPv4.
Прелесть IPv6 в том, что мы можем решить эту задачу (раздачу сетевых настроек) без каких-либо специальных сервисов и в так называемом stateless режиме. Главная особенность stateless режима состоит в том, что никто не должен напрягаться и что-то сохранять, помнить и т.д. Проблемы с DHCP в IPv4 чаще всего вызывались тем, что один и тот же адрес выдавали двум разным устройствам. А происходило это из-за того, что злой админ стирал/забывал базу данных уже выданных аренд. А ещё, если железок много и они забывают «отдать аренду», то адреса заканчиваются. Другими словами, stateful — это дополнительные требования и проблемы.
Для решения тривиальной задачи «раздать адреса» в IPv6 придумали stateless режим, который основывается на routing advertisement. Клиентскую часть мы уже видели, теперь осталось реализовать серверную, дабы накормить IPv6 планшетик.
Настройка анонсов маршрутизации (radvd)
Для настройки анонсов используется специальная программа-демон — radvd. С утилитой из её комплекта (radvdump) мы познакомились чуть выше. Прелесть утилиты в том, что она выводит не просто полученные данные, а готовый конфиг radvd для рассылки аналогичных анонсов.
Итак, настраиваем radvd:
Главное тут — префикс и указание на AdvAutonomous.
Запускаем демона, берём ближайший ноутбук (обычная бытовая убунта с обычным бытовым network-manager’ом), рррраз, и получаем…
Откуда у нас столько ipv6 мы поговорим в следующем разделе, а пока что отметим, что адреса сконфигурировались автоматически. И маршруты у нас такие:
Надеюсь, читатель уже вполне понимает, что происходит. Однако… Чего-то не хватает. У нас нет dns-resolver’а. Точнее есть, но выданный dhcpd по IPv4. А у нас пятиминутка любви к IPv6, так то ресолвер нам тоже нужен IPv6.
Тяжело расчехляя aptitude ставим dhcpv6 и прописываем опции nameserver Как бы не так!
К счастью, IPv6 очень долго продумывался и совершенствовался. Так что мы можем решить проблему без участия DHCP-сервера. Для этого нам надо добавить к анонсу маршрута ещё указание на адреса DNS-серверов.
RDNSS в RA
Описывается вся эта примудрость в RFC 6106. По сути — у нас есть возможность указать адрес рекурсивного DNS-сервера (то есть «обычного ресолвера») в анонсе, распространяемом маршрутизатором.
По большому счёту это всё, что мы хотим от DHCP, так что DHCP там тут не нужен. Компьютеры сами делают себе адреса непротиворечивым образом (то есть для исключения коллизий), знают адреса DNS-серверов. Интернетом можно пользоваться.
Для этого мы дописываем в конфиг radvd соответствующую опцию:
(полный конфиг — см. в конце статьи).
Пробуем подключиться снова — и, ура, всё работает.
google.com выбран был не случайно. Сервисы гугля (в немалой степени youtube) — это едва ли не основной источник IPv6 трафика в настоящий момент. Второй источник — торренты, где можно увидеть аж 5-10% пиров в IPv6 варианте.
На этом рассказ можно было закончить, если бы не ещё одна важная деталь — что за третий IPv6-адрес на интерфейсе ноутбука? И что это за temporary dynamic?
Privacy extension
Как я уже упомянул выше, автоматическое конфигурирование IPv6-адреса на основе MAC-адреса сетевого адаптера хорошо всем, кроме того, что создаёт практически идеальное средство для отслеживания пользователей в сети. Вы можете брать любые браузеры и операционные системы, использовать любых провайдеров (использующих IPv6, так что это всё пишется с прицелом на будущее) — но у вас будет один и тот же MAC-адрес, и любой гугуль, NSA или просто спамер смогут вас отслеживать по младшим битам вашего IPv6 адреса. Старшие будут меняться в зависимости от провайдера, а младшие сохраняться как есть.
Для решения этой проблемы были придуманы специальные расширения для IPv6, называющиеся privacy extensions (RFC 4941). Как любое RFC, его чтение — это обычно признак отчаяния, так что по сути этот стандарт описывает как с помощью шаманства и md5 генерировать случайные автоконфигурируемые адреса.
Хост, в нашем случае обычная убунта на обычном ноутбуке, генерирует штатным образом IPv6 адрес из анонса маршрутизатора. После этого она придумывает себе другой адрес, проверяет, что этот адрес не является зарезервированным (например, нам так повезло, и md5 хеш сгенерировал нам все нули — вместо того, чтобы трубить об этом на всех углах, этот изумительный md5 хеш будет выкинут и вместо него будет взят следующий), и, главное, проверяет, что такого адреса в сети нет. Для этого используется штатный механизм DAD (см ниже). Если всё ок, то на интерфейс назначается новосгенерированный случайный адрес, и именно он используется для общения с узлами Интернета. Хотя наш ноутбук с тем же успехом ответит на пинг и по основному адресу.
Этот адрес периодически меняется и он же меняется при подключении к другим IPv6-сетям (и много вы таких знаете в городе. вздох). В любом случае, даже если мы намертво обсыпаны куками и отпечатками всех браузеров, всё-таки маленький кусочек сохраняемой приватности — это лучше, чем не сохраняемый кусочек.
Duplicate Address Detection
Последняя практически важная фича IPv6 — это DAD. Во времена IPv4 на вопрос «а что делать, если адрес, назначаемый на хост, уже кем-то используется в сети» отвечали «а вы не используйте адреса повторно и всё будет хорошо».
На самом деле все вендоры реализовывали свою версию защиты от повторяющегося адреса, но работало это плохо. В частности, линукс пишет о конфликте IPv4 адресов в dmesg, Windows — в syslog… Event… Короче, забыл. В собственную версию журнала и показывает жёлтенко-тревожненький попапик в трее, мол, бида-бида. Однако, это не мешает использовать дублирующийся адрес, если он назначен статикой, и приводит к головоломным проблемам в районе ARP и времени его протухания (выглядит это так: с одного компьютера по сети по заданному адресу отвечает сервер, а с другого, по тому же адресу, допустим, залётный ноутбук, и они ролями периодически меняются).
Многие DHCP-сервера (циски, например), даже имели специальную опцию «проверять пингом» перед выдачей адреса.
Но всё это были доморощенные костыли для подпирания «а вы не нажимайте, больно и не будет».
Конфиги
Эту часть большинство пропустит не читая, ну, такова судьба конфигов — быть писанными, но не читанными.
Используется ли IPv6?
У меня обычный домашний компьютер. Чуть-чуть raid, LVM XFS, BTRFS, LUCKS, свой почтовый и веб-сервера, dns-сервер и т.д. Я подключен к обычному домашнему провайдеру с IPv6.
Вот статистика использования интернета за четыре дня. Собиралась она простым способом:
Если серьёзно, то столь значительные достижения IPv6 (только представьте себе — почти гигабайт трафика в день) большей частью объясняются ютубом и прочими сервисами гугла. Ещё небольшую долю IPv6 принёс пиринг, причём там львиная доля людей — это всякие туннели и teredo (то есть ненастоящие IPv6, использующиеся от безысходности).
С другой стороны, этот показатель почти в три раза больше моего прошлого замера (полтора года назад), когда доля IPv6 едва-едва переваливала за полтора процента.