Пользователь
0,0
рейтинг
5 марта 2009 в 14:43

Администрирование → IPv6 для P2P

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

Для большинства пользователей, действительно, пользы от IPv6 никакой. Какая разница, например, что заголовки пакетов более удобны для маршрутизатора? Но для P2P проблема NAT (за счёт чего IPv4-адреса так ещё и не закончились) реальна, т.к. для связи peer-to-peer (даже чтобы переслать файл через 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]/

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


Если вам повезло, то ваш провайдер предоставляет Native IPv6. Поздравляю, Вы — счастливчик! Остальным же остаётся передавать IPv6 пакеты, обернув их в IPv4 по «старым» сетям. Способов подключения очень много, как автоматические (такие как 6to4 и teredo) так и вручную создаваемые туннели, и работающие как при наличии статического внешнего IPv4-адреса, так и без, даже за самыми хитрыми NAT.

6to4


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

Плюс такого подключения — простота настройки. IPv6-пакеты по IPv4 при этом вам может оправлять кто угодно, вы — на ближайший гейт. 192.88.99.1 — это так называемый anycast адрес, их в сети может быть сколько угодно, и ваш провайдер отправляет их как правило к ближайшему. Обратная сторона этого — невозможно разобраться почему какой-то адрес или подсеть оказалась недоступной, т.к. реальные маршруты непредсказуемы и могут меняться во времени. Второй момент — одна машина под FreeBSD у нас при этом дважды перегрузилась по непонятным причинам за двое суток, а со статическим тоннелем — работает. С другой стороны, у нескольких знакомых на Linux такой вариант давно работает без проблем.

Teredo


Вариант автоматической настройки из-за NAT. Если у вас есть uTorrent 1.8 и выше, у него в настройках появилась кнопка «Install IPv6/Teredo» — её нажатия достаточно для настройки. Для установки вручную надо из командной строки выполнить две команды:
ipv6 install
netsh int ipv6 set teredo client
В *никс системах достаточно установить miredo например, командой:
sudo apt-get install miredo
В Vista он включен по умолчанию.

Минус такого варианта в том, что он работает не со всеми типами NAT. Если после установки у вас не открывается ipv6.google.com запустите из командной строки
netsh int ipv6 show teredo
если написано «Ошибка: клиент за симметричным NAT» — вам не повезло. В любому случае, очень желательно установить последние сервиспаки, например XP SP2 создавала адрес с префиксом 3ffe: а не 2001: В SP3 это исправлено, в SP2 можно поставить KB922819 или в regedit поправить/добавить \HKLM\System\CurrentControlSet\Services\Tcpip6\Parameters\GlobalParams\TeredoPrefix на 0x120 (288). Второй минус в том, что не смотря на кажущуюся простоту настройки, далеко не всегда всё оказывается просто. У одних всё работает только при выключенном встроенном в винду фаерволе, у кого-то — наоборот, только при включенном. И заранее описать все возможные проблемы, конфликты, и способы их решения просто невозможно.

Большой плюс (как и в случае 6to4) в том, что с теми, кто также подключен через teredo, вы будете соединяться напрямую, внешний сервер будет только помогать установить соединение посредством NAT Traversal, и возможно пускать через себя ping. Поэтому скорость будет не хуже, чем в случае прямого соединения (потери на «оборачивание» IPv6 пакетов в UDPv4-пакеты минимальные).

Hexago (go6)


Если автоматическая настройка не помогла (симметричный NAT), или вы хотите предсказуемой марштуризации пакетов, есть множество бесплатных "Туннельных Брокеров". К его выбору стоит отнестись очень внимательно, как и к выбору прокси-сервера, т.к. от этого будет зависеть и пинг, и скорость (это верно и для teredo — можно сменить сервер по умолчанию на teredo.remlab.net, к России он ближе). Основные инструменты — ping и traceroute. Посмотрите, через кого идёт зарубежные трафик вашего провайдера. Посмотрите маршрут к 192.88.99.1 (у многих он пойдёт к Hurricane Electric — .he.net).

Самый простой в установке — go6.net Достаточно скачать с их сайта программу, при желании — зарегистрироваться, установить (она будет ругаться на «неподписанный драйвер» — надо подтвердить установку), и всё. Работает со всеми типами NAT (разве что надо исходящий порт 3653 разрешить в фаерволе). Хотя проблемы тоже бывают, и со встроенным фаерволом, и из-за его отсутствия, у меня он работал только при включенном (но не работающим из-за Symmetric NAT) teredo.

Минус состоит в том, что go6 находится в Канаде, и весь трафик, насколько я понял, пропускает через себя. Из-за этого ping от 300 мс и выше, низкая скорость. Где-то попадалась информация что hexago-hexago и ayiya-ayiya могут устанавливать «прямые» тоннели друг с другом, если удаётся (NAT Traversal), но ни подтвердить, ни опровергнуть этого не могу.

Hurricane Electric


Официальный сайт — www.tunnelbroker.net Минус: предоставляют только статические туннели, т.е. требуется внешний IPv4 адрес. На сайте нужна регистрация. Плюс: у них много «точек доступа», через которые можно подключиться, во многих странах, поэтому можно выбрать достаточно близко от себя, и скорость будет практически не хуже прямого IPv4.

SixXS


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

После регистрации надо заказать AYIYA туннель. При этом дают выбрать одну из точек доступа (проверяем trace и ping; ближайшей от меня оказалась sesto в Швеции). Заказ тоже проверяют вручную (часы, дни), при этом берут за это внутренние «условные единицы», так что тип туннеля надо изначально заказывать правильный. Затем — скачать софт, и тут есть подводные камни. Tap32-драйвер и клиент скачиваются и ставятся по-отдельности. tap901 распаковать, один раз запустить addtap.bat — при каждом запуске он создаёт новый интерфейс, если случайно насоздавали лишних — deltapall.bat удаляет сразу все. Клиентов (AICCU) есть два, с GUI и без, но GUI не совместим с последней версией драйвера. Лучше скачать оба, один раз запустить GUI, ввести логин/пароль, получить настройки с сервера, и нажав иконку выбрать Save Configuration. Больше GUI не нужен. Если теперь запустить клиент из командной строки — всё должно заработать. Если повезёт, конечно. Чтобы IPv6 запускалась при загрузке компьютера нужны утилиты instsrv и srvany, позволяющие прописать этот клиент как виндовую службу (сервис). Очень подробное описание настройки есть на английском языке.

BitTorrent


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

Найти друг друга можно по DHT. Их есть 2 реализации. В Azureus своя, ни с кем больше не совместимая, но IPv6 поддерживает. В uTorrent и всех остальных — пока нет, но планируется в будущем. Зато IPv6 поддерживается PEX. Но всё это работает только на открытых трекерах, без флага private в торренте.

Лучше всего, если 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. Очень рекомендую книгу Jun-ichiro itojun Hagino «IPv6 Network Programming» как раз об этом. Самое приятное, это что практически все функции — socket, connect, listen, send, recv — IPv6 поддерживают, и их трогать вообще не придётся.

Первый основной момент — что надо отказаться от использования структуры sockaddr_in (и тем более хранения IP-адреса в int и функций типа inet_addr). Вместо неё есть универсальная структура sockaddr_storage, при желании её поле ss_family можно проверить на AF_INET и преобразовать к sockaddr_in, или, если оно равно AF_INET6 — sockaddr_in6.

Второй момент — работа с DNS и строковым представлением адресов. Его надо перевести на универсальные функции getaddrinfo и getnameinfo. При этом надо иметь в виду, что getaddrinfo может вернуть несколько адресов, серверу при этом надо слушать (bind, listen) все, клиенту — пробовать соединиться по очереди, пока не получится с одним из адресов.

В php главное, на что стоит обратить внимание — что в $_SERVER['REMOTE_ADDR'] может оказаться не только IPv4 адрес, но и IPv6, если его поддерживает ваш веб-сервер.
alex14n @alex14n
карма
87,8
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Администрирование

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

  • +2
    спасибо! очень интересно и познавательно.
  • НЛО прилетело и опубликовало эту надпись здесь
  • –1
    Так когда все таки кончатся ip4 адреса и когда ждать тотального перехода на ip6?
  • +1
    торренты способствуют продвижению ipv6? =)
    • 0
      надеюсь :)
    • +6
      По моему сейчас торренты тот локомотив, который заставляет оптимизировать и расширять сетевые каналы, использовать современные технологии для этого :)
      • 0
        +1. по идее у провайдеров сейчас нет никакой мотивации для введения IPv6, ибо на это нет спроса, и можно брать дополнительные $$ за выделение статического IPv4. а p2p и в частности торренты вполне могут создать спрос на новый протокол.
        • 0
          имхо, динамические внешние IPv4-адреса предоставляет большинство провайдеров, а для p2p статический адрес не обязателен, если не считать небольших задержек из-за того, что некоторые DSL-провайдеры раз в сутки разрывают соединение и выдают новый динамический адрес.

          а на кабельном прове у меня и вовсе неделями держался один и тот же адрес и даже рестарт или отключение модема на несколько часов не меняли адрес
          • +3
            Это DSL, в домашних сетях всё ещё практикуется NAT
            • +1
              не забываем что сейчас все АДСЛ модемы являются роутерами. В которых еще один НАТ появляется.
              • +3
                в домашнем модеме можно и порты прокинуть

                если уж разобрался, как с торрентов качать, то сможешь и маппинг портов настроить :)

                P.S. этот домашний NAT считаю большим плюсом, ведь это, по сути, свой железный файрволл, который отсекает все внешние атаки расчитанные на уязвимость ОС
                • 0
                  Я это тоже считаю плюсом, но большинство пользователей p2p сетей именно с этим и имеют больше всего проблем. Это я Вам по опыту создания DC хаба говорю.
                  • 0
                    вот для них и придумали UPnP. вот только работает через Ж
            • 0
              точно!
              у нас в студ.общаге был интернет за NAT, это и была, наверное, «домашняя» сеть :)
              и нам потом обрезали eMule :)
              но мы скинулись и на десятерых поставили обычный DSL, который раздавали через общажную «домашнюю сеть»
              • 0
                Интересно, каким образом обрезали? Мулу совершенно пофиг по каким портам работать. Разве что, если железка, заглядывающая внутрь пакетов
      • +2
        ну не только каналы.
        держу локальный веб-сервер, на котором клиенты хостят трекеры. скиллы качаются только так, столько оптимизаций было сделано, чтобы q6600 выдержал наплыв в 400 запросов в секунду. а ещё торрент-клиенты через определенный промежуток времени обновляют статистику =)
  • 0
    Спасибо старый знакомый, alex14n, за статейку :)
    • +1
      привет-привет, давно не виделись :)
  • 0
    Так и не понял чем мне поможет IPv6, если режут p2p и аську.
    • 0
      если не режут IPv6 — p2p и аську можно пустить по IPv6, хотя про аську не уверен, поддерживает ли аськин сервер IPv6
      • –2
        В прошлом году я пришел в сад за яблоками с желтым мешком v4. Меня не пустил охранник с ружьем и собаками. В этом году пойду с зеленым мешком v6. 100% пустит.
        ибо я — кулхацкер.
        • +4
          в этом году к охраннику придёт честный UDP-пакет, что в нём — чёрт знает, может DNS-запрос, а может и p2p…
          • +1
            Действительно, все пакеты UDP — одинаковые.

            Если что-то режут ради резанья, то ничего не поможет. Либо админ — вовсе не админ, а админчег.
            • +1
              Если «режут ради резанья» то настроить IPv6 туннель не получится, эту оговорку я сделал в самом начале
        • +1
          Как админ провайдера могу сказать, что идентифицировать p2p трафик это сложно и ресурсоёмко, сделать тоже самое с p2p трафиком завёрнутым в UPD в данный момент практически не реально. Ставить низкий приоритет ему тоже нельзя, ибо пострадают «игруны» и VoIP. Можно, конечно, вести список «привилегированных» портов и пускать трафик по ним с большим приоритетом, но это дополнительная работа.
          • 0
            UDP от TCP отличается дикой простотой.
            А еще: какой смысл провайдеру резать P2P если он на этом зарабатывает?

            В корпоративных сетях режут все лишнее. UDP не поможет.
            • +1
              p2p режут (точнее сказать «ограничивают», ставя минимальный приоритет) на безлимитных тарифах
            • +2
              Провайдер не запрещает p2p, он ставит ему минимальный приоритет, ибо на него не особо влияет ping/latency. Таким образом вконтакте/одноклассники у обыватеей открываются быстро и геймеры телефон саппорта не разрывают «большими пингами до сервера».

              А найти железку которая бы в реальном времени проверяла 40-50kpps UPD трафика на наличие внутри p2p, мне оино, не представляется возможным.
              • –1
                железки — это да. они всегда идут в хвосте технологий ибо почти монополия.
                с другой стороны — есть IP(хоть v4, хоть v6), без которого нет UDP.
                Фильтруй — не хочу, не заглядывая в пакет.

                ЗЫ: не понимаю — чем UDP сложнее TCP.

                Или вся проблема/дырка в текущей уязвимости ввиду недосмотра? Дык при повальном использовании быстро закроют.
                • +1
                  есть несколько разных реализаций оборачивания IPv6 пакеты в UDPv4. каждый новый «тунельный брокер» может писать свой. оборачивание у teredo, у hexago и у ayiya — разное. таким образом, «резатель» сейчас должен уметь расшифровывать содержимое как минимум 3 видов UDP-пакетов. при этом большой пакет IPv6 может резаться на куски и пересылаться в несколько маленьких UDPv4, поэтому «резателю» нужно иметь большой буфер и уметь склеивать оригинальные пакеты для анализа. завтра напишут новый метод IPv6-in-IPv4, и «резатель» нужно будет срочно обновлять. небанально, тем более в реальном времени.
                • +4
                  Проблема не в UDP а в том, что внутри IP лежит UDP, внутри UDP лежит IPv6, внутри IPv6 уже лежит TCP или UDP, а вот тут то может лежать p2p трафик.
                  В общем «игла в яйце, яйцо в утке, утка в зайце, заяц админ в шоке»
            • +6
              >какой смысл провайдеру резать P2P если он на этом зарабатывает?

              Провайдер (читай, провайдер «последней мили») зарабатывает на «oversubscription» :-( Покупает 30 метров полосы и продает ее 300-м пользователям по 3 метра каждому. С вебом и почтой эта бизнес модель работала. С p2p (качает постоянно, даже когда никого нет дома) этот номер уже не проходит. Отсюда и такая нелюбовь к протоколу.
  • НЛО прилетело и опубликовало эту надпись здесь
    • 0
      в uTorrent 1.9, который находится в альфа-версии, это будет. но работает далеко не со всеми типами NAT, мой (который teredo обзывает «Symmetric NAT») — не умеет, а через IPv6 через туннель входящие соединения есть.
    • +1
      По моему опыту, провайдеры у которых не хватает денег на Juniper / Cisco обычно делают NAT на BSD шлюзе используя pf, просто и ооооочень производительно, одной командой:
      nat on tl0 from 192.168.1.0/24 to any -> 24.5.0.5

      А это к сожалению Symmetric NAT =(

      У pf есть опция static-port, но её, как я понимаю, не рекомендуется использовать при большом кол-ве человек за одним IP.
  • 0
    не так уж и критично для торрентов наличие прямого адреса или проброса. из-за ната оно тоже неплохо работает, может медленее, но работает. нужно просто улучшить этот механизм.
    • +3
      на крупных раздачах, где много народа — да, а бывает что на раздаче всего 1-2 сида, и оба за NAT
  • +1
    Давно использую go6.net. IPv6 использую на треккере TPB и в irc-сети freenode. Ну и радует возможность достучаться через нат до любой машины в офисе. Еще радует, что могу выдать «белый» ip любому девайся в квартире :)
  • 0
    сижу за нат, ipv6 не дают, но статья хорошая, добавлю в фэйворитс до лучших времен =)
    спасибо
    • +4
      В этом-то и смысл статьи, что не надо получать IPv6 у провайдера. Нужно лишь зарегистрироваться на одном из сервисов и получить свой IPv6 адрес со всеми открытыми портами, даже если вы за NAT
  • 0
    а как сделать себе статический ipv6 адрес?
    • +1
      все тунельные брокеры дают статический адрес, не зависимо от метода подключения,
      go6 даже с красивым реверс-днс вида username.broker.freenet6.net
  • 0
    А что это за ошибка у меня?
    >netsh int ipv6 show teredo
    Параметры Teredo
    — Тип: client
    Имя сервера: teredo.remlab.net
    Интервал обновления клиента: default
    Порт клиента: default
    Состояние: offline
    Ошибка: клиент в управляемой сети
    • +1
      м… если честно — не сталкивался с таким, но гугл подсказывает: If it says “Client is in a managed Network” it means teredo has detected that you are in a corperate environment. If that is the case you need to set the Teredo type to Enterprise client
      netsh int ter set state enterpriseclient
  • 0
    Спасибо за статью и за каменты.
  • 0
    А что нужно от провайдера чтобы раздавать клиентам IPv6?
    • 0
      это выходит за рамки статьи, и у меня нет такого опыта, но гугл это очень хорошо знает
      • 0
        Не поделитесь запросом, в таком случае?
        • +1
          ключевые слова ipv6 subnet clients configure
          ну и стоит хорошо покопаться на сайтах sixxs и ураганных электриков, там много полезного
  • 0
    Добавьте, что подефолту включив teredo пропинговать ipv6.google.com (ping ipv6.google.com) не получится (особенность режима teredo). Придется указать протокол явно — ping -6 ipv6.google.com. По этой же причине никакие сайты «ipv6 only» открыться не получится (браузеру пока никак не укажешь использовать ipv6 явно). Чтобы это заработало надо в реестре сделать изменения. Какие написано тут superuser.com/questions/259188/how-can-i-get-firefox-chrome-to-reach-ipv6-websites

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

Интересные публикации