пятница, 15 мая 2015 г.

IPv6 для домохозяеек. Встречайте будущее Интернета!

Я думаю все так или иначе не раз слышали про IPv6, хотя бы на уровне "да, IPv4 адреса кончаются, повсеместный NAT - это не есть хорошо, и - скоро каждая кофеварка будет иметь собственный IP адрес". Примерно на этом же уровне, к своему стыду, об IPv6 слышал и я. Ну т.е. я представлял какие-то теоретические моменты, например, формат записи IPv6 адреса, огромные количества адресов в подсетях и т.п. Но не более, практического опыта общения с IPv6 у меня не было, ну разве что изредка наблюдал в свойствах TCP/IP v6 своего сетевого адаптера в Windows 8.1 что что-то там присваивается. И тут абсолютно случайно для себя я наткнулся на замечательную статью на Хабре: MikroTik — 6in4 или IPv6 без поддержки провайдера (отдельное спасибо ChelAxe), на всякий случай я решил сохранить ее архивную копию в PDF для потомков. Так вот, в статье описывался метод позволяющий передавать IPv6 пакеты через IPv4 сеть провайдера (как раз в том случае, когда IPv6 провайдер не предоставляет). В рассматриваемом примере использовался маршрутизатор Mikrotik. Ну прямо моя ситуация, подумал я ;) У меня как раз имелся под рукой 951G-2HnD, подключенный к Ростелеком. А почему бы и не попробовать?

Скажу сразу, что в статье все очень доступно расписано и по ней можно все настроить "вслепую", за исключением нескольких моментов. Как известно, Ростелеком предоставляет подключение по PPPoE, а это налагает определенные ограничения. Именно с этой проблемой я и столкнулся, когда у меня все заработало, но по IPv6 открывались только google.com и yandex.com, при этом все остальные ресурсы пинговались на ура (сразу дам маленький намек - MTU, MSS). Но об этом чуть позже ... сначала покажу некоторые результаты (тут будет немного скриншотов и по делу и без):

Результаты теста скорости на http://ipv6-speedtest.net/
Кстати, cервисы проверки скорости соединения с поддержкой IPv6 можно найти здесь, а отличный сайт посвященный протоколу IPv6 здесь. На следующем скриншоте можно увидеть пруф от Google'а, рассказывающий о том что я вошел в будущее интернета (войти в будущее):


Кстати этот пост в блоге, я сейчас пишу именно через IPv6 ;) Для чистоты эксперимента я просто отключил протокол TCP/IP v4 в свойствах своей сетевой карты. И как говорит этот тест - http://test-ipv6.com/ - это очень смелое решение:


Например один торрент-трекер при попытке скачать с него торрент-файл выдал мне следующую ошибку:


Несмотря на то что сам ресурс доступен по IPv6 движок торрент-трекера / форума видимо не предусматривает что у пользователя физически может отсутствовать IPv4 адрес ;)) (обратите внимание, IPv4 я отключил для "чистоты эксперимента", чтобы посмотреть что будет работать с IPv6, а что нет, естественно, что полноценной работы в интернете с одним лишь IPv6 при текущем уровне его распространения не получится ... да и собственно, IPv6 у меня не от провайдера, а через туннель в IPv4).

Ну и небольшой сертификат (пока только Explorer), который я получил на https://ipv6.he.net/certification/ , ответив на несколько простых вопросов и доказав что мое IPv6 соединение работает:
Давайте теперь посмотрим как оно устроено изнутри, а именно, сейчас, когда у меня отключен IPv4 посмотрим на свойства подключения, маршрутизацию и tracert'ы:


Как видно, первым хопом в списке является мой маршрутизатор, вторым - "второй конец туннеля 6in4" у туннельного брокера (Hurricane Electric), ну а далее хопы вплоть до Google'а.

Вся настройка Mikrotik'а сводится к тому, что описано в статье, ссылка на которую приведена в начале этого поста. Т.е. регистрируемся на Hurricane Electric, выбираем оптимальный для нас сервер и создаем туннель:


Далее идем на закладку Example Configurations и экспортируем конфигурацию для Mikrotik. Это все не сложно и достаточно подробно описано в статье. Единственное, нужно будет задать еще адрес для интерфейса bridge в Mikrotik'е (по-умолчанию он называется bridge-local и служит для объединения ethernet и wlan):

/ipv6 address add address=2001:470:2e3b:5fe::1/64 advertise=yes disabled=no eui-64=no interface=bridge-local

Где 2001:470:2e3b:5fe::1/64 из Routed /64 подсети. Смысл тут очень простой. Есть туннель - sit1, у него есть IPv4 Local и Remote Address, а также Server IPv6 Address и Client IPv6 Address. Это все относится к туннелю, а Routed /64 - это ваша "локальная подсеть". Все необходимые строки конфигурации кроме этой вы можете взять с закладки Export Configurations.

Google'овские DNS, а именно 2001:4860:4860::8888 и 2001:4860:4860::8844 - я прописал в свойствах TCP/IP v6 сетевой карты ПК (в статье есть комментарий "Проблема в том что если вы захотите использовать IPv6 без IPv4 то вам понадобятся IPv6 адреса DNS-серверов. Микротик может раздавать их по ND но не может по DHCPv6 а Windows наоборот может получать их по DHCPv6 и не может по ND, что очень неудобно — приходится прописывать адреса DNS-серверов вручную."), чтобы не разбираться с этим - проще прописать их в свойства сетевого адаптера.

Однако при тестировании IPv6 обнаружилась интересная ситуация - google.com и yandex.com к примеру открывались, однако тот же https://tunnelbroker.net/ при включенном IPv6 напрочь отказывался грузиться, как и многие другие сайты с поддержкой IPv6. Хотя при этом все они пинговались. 

Например ping -6 tunnelbroker.net у меня отрабатывал на ура, а вот при попытке зайти на сайт wget.exe -6 https://tunnelbroker.net/ --no-check-certificate все повисало на моменте:

Connecting to tunnelbroker.net (tunnelbroker.net)|2001:470:0:63::2|:443... connected.

Время уже было под утро и я стал читать всякие страсти про MTU, но для нашего туннеля оно и так было выставлено в 1280 ... и тогда я наткнулся на тему I can ping IPv6 addresses over my tunnel, but I am unable to browse websites где собственно и нашлось решение:

/ipv6 firewall mangle add action=change-mss chain=forward in-interface=sit1 new-mss=1220 protocol=\ tcp tcp-flags=syn tcp-mss=1221-65535
/ipv6 firewall mangle add action=change-mss chain=forward new-mss=1220 out-interface=sit1 protocol=\ tcp tcp-flags=syn tcp-mss=1221-65535

Фикс MSS в firewall'е IPv6. Ну а суть проблемы, как я понял своим засыпающим мозгом в том что соединение у нас и так через PPPoE, а тут еще в туннель, который внутри него мы пытаемся запихнуть IPv6 пакеты. В целом чтение про MTU, MSS и т.п. на светлую голову я думаю поможет разобраться в проблеме более детально.

Ну и после этого фикса все заработало как часы ;) Единственный момент, необходимо не забывать что у Ростелеком динамические IP-адреса, а следовательно IP вашего конца туннеля будет меняться. Специально для этого случая есть Hurricane Electric IPv6 Tunnel - IPv4 Endpoint updater, скрипт для Routerboard, который как раз и будет менять этот IP на серверах Hurricane через IP и в настройках Mikrotik'а ... его можно повесить в scheduler.

Единственное, можно потратить много времени на допиливание этого скрипта, общий формат обращения к API следующий (сразу на примере WGET):

wget "http://ipv4.tunnelbroker.net/ipv4_end.php?ip=AUTO&pass=PASS&user_id=USER_ID&tid=TID"

Так вот здесь все не совсем как в мануале:
  • USER_ID берется с главной страницы личного кабинета на Hurricane Electric.
  • TID - Tunnel ID, берется со страницы созданного туннеля в ЛК.
  • PASS - а вот это самое хитрое, он находится на закладке Advanced в ЛК и окрещен как Update Key ;) Именно так ... И еще раз повторюсь, это никакая не MD5 сумма пароля и т.п. (!) ... 
Ну и пока, наверное, на этом всё (а то очень спать хочется) ;)

Полезные ссылки

1 комментарий :

  1. Спасибо. Точно такие же проблемы с MTU MSS были и решилось.

    ОтветитьУдалить