Ipv6 Для P2P

IPv6 обычно связывают с проблемой нехватки IPv4-адресов, о которой любит писать «желтая» пресса.

Что со дня на день свободных адресов не останется и переход на IPv6 будет неизбежен.

Скептики считают, что проблема столь же преувеличена, как «ошибка 2000 года» в свое время, когда все боялись, что после 1999 года наступит 1900 год и произойдет техногенная катастрофа.

Для большинства пользователей IPv6 действительно не приносит никакой пользы.

Какая разница, например, в том, что заголовки пакетов более удобны для маршрутизатора? А вот для P2P проблема NAT (из-за которой IPv4-адреса еще не закончились) реальна, т.к.

для одноранговой связи (даже для отправки файла через Jabber или ICQ) должен быть доступен хотя бы один из участников извне, т.е.

имел реальный IP-адрес или хотя бы пробрасывал порт. Некоторые провайдеры предоставляют внешний адрес за плату, некоторые нет, и именно для страдающих NAT использование IPv6 будет наиболее полезным.

Это также будет полезно тем, у кого провайдер режет p2p-трафик.

В России это (пока?) не так часто, но и за рубежом далеко не редкость.

IPv6-трафик (точнее, завернутый в обычные UDP-пакеты) ими не режется.

Это также может помочь в ситуации, когда p2p-трафик блокируется корпоративным межсетевым экраном, но настроить IPv6 можно через туннель.

На уровне пользователя основное отличие состоит в том, что IP-адрес состоит не из 4 байтов и записывается не в десятичном формате с точками, а из 16 байтов, которые записываются в шестнадцатеричном формате с 4 цифрами (2 байта) и разделяются двоеточием.

Нули в начале чисел можно опустить, а самую длинную цепочку :0:0:0:0: в адресе можно заменить просто двумя двоеточиями.

В данном случае :: — это обычный IPv6-адрес, полностью состоящий из нулей.

В браузере, если нужно задать числовой адрес сайта, он помещается в квадратные скобки, например http://[2001:4860:a003::68]/



Способы подключения

Если вам повезет, ваш интернет-провайдер предоставляет собственный IPv6. Поздравляем, вы счастливчик! Остальные могут только передавать пакеты IPv6, заворачивая их в IPv4 по «старым» сетям.

Способов подключения очень много, как автоматических (типа 6to4 и teredo), так и созданных вручную туннелей, работающих как со статическим внешним IPv4-адресом, так и без него, даже за самым хитрым NAT.

6to4

Самый простой способ — если у вас есть внешний IPv4. Поднимите интерфейс 6to4 (stf в BSD, сидите в Linux), настройте себе IPv6-адрес, например 2002:xxyy:zztt: где xx.yy.zz.tt — ваш IPv4-адрес в шестнадцатеричном формате, и отправляйте все исходящие пакеты на адрес 192.88. 99.1. Я не пишу конкретные действия для конкретных систем; В Гугле их полно( пример ).

Преимущество такого подключения – простота настройки.

В этом случае любой может отправить вам пакеты IPv6 через IPv4, вы можете отправить их до ближайшего шлюза.

192.88.99.1 — это так называемый произвольный адрес; их в сети может быть сколько угодно, и ваш провайдер обычно отправляет их в ближайший.

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

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

С другой стороны, у нескольких друзей Linux этот вариант уже давно работает без проблем.



Тередо

Возможность автоматической настройки благодаря NAT. Если у вас uTorrent 1.8 и выше, в его настройках теперь есть кнопка «Установить IPv6/Teredo» — нажатия на нее достаточно для настройки.

Для установки вручную необходимо запустить две команды из командной строки:

 ipv6 install
 netsh int ipv6 set teredo client
В *Nix системах достаточно установить miredo, например, командой:
 sudo apt-get install miredo
В Vista он включен по умолчанию.

Недостаток этого варианта в том, что он работает не со всеми типами NAT. Если после установки у вас не открывается ipv6.google.com запустить из командной строки

 netsh int ipv6 show teredo
если там написано «Ошибка: клиент за симметричным NAT» — вам не повезло.

В любом случае очень желательно ставить последние сервис паки, например XP SP2 создала адрес с префиксом 3ffe: а не 2001: В SP3 это исправлено, в SP2 можно установить КБ922819 или в regedit исправьте/добавьте \HKLM\System\CurrentControlSet\Services\Tcpip6\Parameters\GlobalParams\TeredoPrefix до 0x120 (288).

Второй минус – несмотря на кажущуюся простоту настройки, не всегда все просто.

У некоторых все работает только при выключенном встроенном в Windows брандмауэре, у других, наоборот, только при его включении.

И просто невозможно заранее описать все возможные проблемы, конфликты и способы их решения.

Большим плюсом (как и в случае с 6to4) является то, что вы будете напрямую связываться с теми, кто также подключен через teredo; внешний сервер поможет только установить соединение через NAT Traversal, а пинги можно отправлять через себя.

Поэтому скорость будет не хуже, чем в случае прямого подключения (потери при «обертке» пакетов IPv6 в пакеты UDPv4 минимальны).



Шестиугольник (go6)

Если автоматическая настройка не помогает (симметричный NAT) или вы хотите предсказуемую маршрутизацию пакетов, есть много бесплатных " Туннельные брокеры "Следует быть очень осторожным с выбором, как и с выбором прокси-сервера, так как от этого будет зависеть и пинг, и скорость (это справедливо и для teredo - можно сменить сервер по умолчанию на teredo.remlab.net) , он ближе к России).

Основные инструменты - ping и трассировка.

Посмотрите через кого проходит зарубежный трафик вашего провайдера.

Посмотрите маршрут на 192.88.99.1 (у многих он пойдет на Hurricane Electric - .

he.net).

Самый простой в установке - go6.net Вам останется только скачать программу с их сайта, при желании зарегистрироваться, установить (будет жаловаться на "неподписанный драйвер" - нужно подтвердить установку) и все.

Работает со всеми типами NAT (если вам не нужно разрешить исходящий порт 3653 в брандмауэре).

Хотя тоже есть проблемы, как со встроенным фаерволом, так и из-за его отсутствия, у меня он работал только с включенным тередо (но не работал из-за симметричного NAT).

Минус в том, что go6 находится в Канаде и, насколько я понимаю, весь трафик проходит через себя.

Из-за этого пинг 300 мс и выше, низкая скорость.

Где-то я встречал информацию о том, что гексаго-гексаго и айия-айия могут устанавливать друг с другом «прямые» туннели, если это возможно (NAT Traversal), но я не могу ни подтвердить, ни опровергнуть это.



Ураган Электрический

Официальный сайт - www.tunnelbroker.net Недостаток: они предоставляют только статические туннели, т.е.

требуется внешний IPv4-адрес.

Требуется регистрация на сайте.

Плюс: у них есть множество «точек доступа», через которые вы можете подключиться, во многих странах, так что вы можете выбрать одну достаточно близкую к вам, и скорость будет почти такой же хорошей, как у прямого IPv4.

СиксXS

Официальный сайт: www.sixxs.net У них самая сложная регистрация (данные проверяются вручную, от нескольких часов до дней), но и самый широкий набор возможных способов подключения, и точки доступа , поэтому существует высокая вероятность найти его в пределах 10 «прыжков» (по трассировке) от вас.

Я остановился на этом варианте и рекомендую его.

После регистрации вам необходимо заказать туннель AYIYA. При этом позволяют выбрать одну из точек доступа (проверяем трассировку и пинг, ближайшей ко мне была sesto в Швеции).

Заказ также проверяется вручную (часы, дни), и за это взимаются внутренние «условные единицы», поэтому правильный тип туннеля необходимо заказывать изначально.

Затем - загрузить программное обеспечение , и здесь есть подводные камни.

Драйвер и клиент Tap32 загружаются и устанавливаются отдельно.

Tap901 распаковать, запустить addtap.bat один раз - каждый раз при запуске создаёт новый интерфейс, если вы случайно создали лишние - deltapall.bat удаляет всё сразу.

Существует два клиента (AICCU) с графическим интерфейсом пользователя и без него, но графический интерфейс несовместим с последней версией драйвера.

Лучше скачать оба, один раз запустить графический интерфейс, ввести логин/пароль, получить настройки с сервера и щелкнуть по значку, чтобы выбрать «Сохранить конфигурацию».

Больше не нужен графический интерфейс.

Если теперь запустить клиент из командной строки, все должно работать.

Если повезет, конечно.

Чтобы IPv6 запускался при загрузке компьютера, нужны утилиты instsrv и srvany, позволяющие зарегистрировать этот клиент как службу (службу) Windows. Там очень подробное описание настроек по-английски .



БитТоррент

Чтобы подключиться к кому-либо через IPv6, вам необходимо знать его адрес.

Естественно, торрент-клиент должен поддерживать IPv6. Это uTorrent начиная с 1.8 (и соответствующая версия официального BitTorrent), Azureus начиная с 4.1.0.0 (старые жаловались на «ошибку 16»), Transmission с версии 1.50, как другие не знаю.

Вы можете найти друг друга с помощью DHT. Есть 2 реализации.

Azureus есть свой, ни с кем не совместимый, но поддерживающий IPv6. В uTorrent и всех остальных - пока нет, но планируется в будущем.

Но IPv6 поддерживается PEX. Но все это работает только на открытых трекерах, без приватного флага в торренте.

Лучше всего, если трекер поддерживает IPv6. В соответствии с документация , для этого в протокол ответа было добавлено поле Peers6 («компактный», на который перешли почти все), где в двоичном виде передается список адресов по 18 байт каждый (16 — адрес, 2 — порт).

форма.

Кроме того, клиент может передавать параметр &ipv6= и, в принципе, трекер может передавать клиентам IPv6-адреса друг друга, даже если сам не может принимать IPv6-соединения.

Минус такого подхода в том, что через этот параметр можно передавать «левые» адреса, засоряя тем самым трекер.

Если сам трекер доступен по IPv6, то он увидит реальные адреса обращающегося к нему человека.

Но если в доменном имени трекера есть и запись A, и AAAA, то клиенты будут подключаться только по IPv6, и трекер не будет знать их IPv4-адреса (аргументы &ip= и &ipv4= тоже допускают «мусор», а на самом деле никто передает их, uTorrent — единственный, который передает &ipv6=).

Получается, что в идеале в торрент-файл должно быть внесено 2 адреса для обоих протоколов.



Трекеры

Трекеров с поддержкой IPv6 пока мало.

Есть www.sixxs.net/tools/tracker/catalog но там практически ничего нет, это больше для тестов и демонстрации.

The Pirate Bay объявила о поддержке IPv6 в январе (только трекер, сам их сайт недоступен через IPv6).

В Рунете в феврале появилась поддержка IPv6. ipv6.nnm-club.ru (регистрация там иногда открывается или закрывается только по инвайту, но при входе по IPv6 она всегда открыта).

Но чтобы все это имело смысл, должно быть достаточное количество клиентов.

На главной странице TPB в последний раз была статистика по количеству пиров, согласно которой только 0,12% были IPv6 (на данный момент почему-то ноль).

Это примерно соответствует моему личному опыту — на сотню пиров в лучшем случае 1-2 по IPv6. По статистике nnm-club, 14% клиентов передают &ipv6= или подключаются по IPv6 к трекеру.

Реально некоторые из них передают «локальные» адреса fe80: т.е.

у них не настроен IPv6, но около 12% имеют реальный адрес.



Программирование

И несколько слов о программировании, а точнее портировании готовых приложений на IPv6. Я очень рекомендую книгу «Сетевое программирование IPv6» Дзюнъитиро Итодзюна Хагино, которая именно об этом.

Самое приятное то, что почти все функции — сокет, подключение, прослушивание, отправка, прием — поддерживают IPv6, и их вообще не придется трогать.

Первый основной момент — нам нужно перестать использовать структуру sockaddr_in (и тем более хранить IP-адрес в int и функциях типа inet_addr).

Вместо этого существует универсальная структура sockaddr_storage; при желании его поле ss_family можно проверить на наличие AF_INET и преобразовать в sockaddr_in или, если оно равно AF_INET6, в sockaddr_in6. Второй момент — работа с DNS и строковым представлением адресов.

Его необходимо перевести в универсальные функции getaddrinfo и getnameinfo. При этом нужно иметь в виду, что getaddrinfo может возвращать несколько адресов, серверу нужно все прослушивать (привязывать, прослушивать), клиенту нужно пытаться подключиться по очереди, пока не получится с одним из адресов.

В php главное, на что стоит обратить внимание, это то, что $_SERVER['REMOTE_ADDR'] может содержать не только адрес IPv4, но и IPv6, если ваш веб-сервер его поддерживает. Теги: #Децентрализованные сети #P2P #ipv6 #torrent

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.