Как я перестал бояться и вышел в Интернет со своей IPv6-сетью

в 16:57, , рубрики: asn, IPv6, интернет
Как я перестал бояться и вышел в Интернет со своей IPv6-сетью - 1

Для личных нужд я использую bare-metal сервер от Hetzner, порезанный на виртуалки и, с недавних времен, VPS на HostHatch для мониторинга и резервирования. Также есть маленькая ВМка у TietoKettu (для ВПН, экспериментов и прочее).

Так как IPv4-адресов мало, то хостинги обычно дают дополнительные айпишки за дополнительные деньги, а вот IPv6-сети выделяют щедро. Изначально, я объединил все виртуалки, у которых был публичный IPv4-адрес в Wireguard mesh сеть, но потом когда выяснилось, что надо бы присоединить ещё одну ВМку, пришлось переделать mesh на IPv6-адреса и тут понеслось...

Сначала выяснилось что у HostHatch нет связности с ElmoNet (TietoKettu использует их адреса), после недели-двух бодания с техподдержкой HostHatch-a связность появилась. Однако недели две назад от них приходит письмо, о техобслуживании нод, где живут мои ВМки. И что вы думаете? После обслуживания туннель до этих ВМок так и не восстановился. В итоге, оказалось что обе вмки исчезли из IPv6-интернета. На этот раз связность починили только через 3 дня, хотя я создал срочный тикет.

В итоге, я перевёл туннели обратно на IPv4 и переключился на DN42, но в один выходной мне на глаза попалась статья на Reddit и я решил воскресить идею о "своем" куске Интернета. Масла в огонь подбавил Vultr, который наглухо заблокировал доступ на свои ресурсы (даже IP calculator) с Hetzner.

Как я перестал бояться и вышел в Интернет со своей IPv6-сетью - 2

В одном из комментов, к вышеупомянутой статье, была ссылка на IPv6-сообщество в Discord. Я присоединился и стал задавать много вопросов в канале #asn-newbies.

Думаю, что кому-нибудь мой опыт и набитые шишки будет полезен. Если это так, то прошу под кат.

Disclamer: у меня весь процесс (от начала и до первого успешного пинга) занял неделю, поэтому советую, запастись терпением.
Disclamer2: я описываю свой опыт, и возможно, что-то можно было сделать быстрее/дешевле/лучше.

Итак, начнём.

AS or not AS...

Для начала стоит определиться нужна ли Вам автономная система или нет. Некоторые провайдеры, например Vultr, могут предоставить свою ASN, да и вообще для использования BYOIP (Bring your own IP) нужны только адреса (их будет анонсировать ASN провайдера/хостера), а ASN по желанию.

AS и адреса выдаёт RIR (Региональный интернет регистратор). Так как я из Эстонии, то мой RIR - это RIPE (Европа, Средняя Азия и Россия).
К сожалению, нельзя прийти напрямую в RIPE и купить/заказать ASN и адреса. На выбор есть две опции: стать LIR-ом (локальным регистратором) или получить спонсорство от существующего LIR.
Первый способ, это единоразовый платеж 2000 EUR и потом 1500EUR ежегодно, поэтому для меня это не вариант.

В моём случае AS оказалась нужна и я начал поиски. В Discord предложили на выбор три разных LIR.

  1. Cloudie

  2. Scaleblade

  3. Freetransit

ну и остальные, более дорогие опции.

Cloudie, на момент написания статьи, новые AS не регистрирует.

Переходим к Scaleblade. У них на выбор 3 опции:

  • RIPE-01 (только регистрация AS) за 27 фунтов единовременно.

  • RIPE-02 (AS + адреса: /44 IPv6 блок) за 29 фунтов единовременно и потом 10 фунтов в ежегодно.

  • RIPE-03 (только адреса) за 10 фунтов ежегодно.

Как я перестал бояться и вышел в Интернет со своей IPv6-сетью - 3

Freetransit предлагает ещё дешевле:

  • Только ASN: за 25 евро (15 единовременно + 10 ежегодно)

  • ASN и PA-адреса: 25 евро (15 единовременно + 10 ежегодно)

  • Только PI-адреса: 75 евро (15 единовременно + 60 ежегодно)

  • ASN и PI-адреса: 85 евро (15 единовременно + 70 ежегодно)

Как я перестал бояться и вышел в Интернет со своей IPv6-сетью - 4

Также и Scaleblade, и Freetransit предлагают бесплатный транзит через их AS. Это очень важно.

Типы адресов PA vs. PI

Freetransit предлагает на выбор PA или PI адреса, причём PI значительно дороже.

PI (Provider Independent) - это адресное пространство, которым владеет покупатель, и оно не завязано ни на какой конкретный LIR. Например, при можно купить его у одного LIR-a, а продлять у уже другого.

PA (Provider Aggregatable) - это адресное пространство LIR-a, часть которого он даёт Вам в аренду, и если появится надобность перейти к другому LIR-у, то адреса прийдётся менять.

Тем не менее на использование PI-адресов имеются некоторые ограничения:

  • их можно использовать только для собственных нужд организации или человека.

  • их нельзя использовать для хостинга (раздавать другим)

  • обычно выделяют малыми блоками (для блоков больше /48 нужно обоснование).

Насколько я знаю, сам RIPE берёт с LIR-ов 50 евро за регистрацию одного PI-блока, поэтому они значительно дороже.

Я решил брать RIPE-02 у Scaleblade, хотя можно было заказать у RIPE-01 и адреса бесплатно у этих ребят.

Disclamer: ip6.me не работает с людьми, которые живут в этих местах, да и форма заказа адресов у них сломанная.

Регистрация в RIPE и cоздание объектов

Для начала нам нужно будет зарегистрироваться в RIPE и создать объекты в их базе. С ними будут связаны, выданные нам ASN и адреса. Если Вы до этого имели дело с DN42, то будет значительно проще, потому что нужно будет создать плюс-минус такие же объекты, как и в DN42.
В любом случае, инструкция от Freetransit сильно поможет.

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

Как я перестал бояться и вышел в Интернет со своей IPv6-сетью - 5

Потом на электропочту придёт письмо об успешной регистрации. В моём письме была ссылка на LIR Portal, где была кнопка "зарегистрировать LIR".
Обычному пользователю это не нужно (если только не Вы решили идти по пути создания LIR-а). Я по незнанию, её нажал и потом дня три объяснял RIPE, что ошибся.

Также должно быть ещё одно письмо от RIPE с ссылкой на сервис проверки документов iDenfy. Для проверки нужен документ и телефон. Документ - паспорт или ID-карта (в моём случае это была карта ВНЖ Эстонии - elamisloakaart), телефоном надо будет сосканировать QR-код, который сгенерирует iDenfy, а потом сфоткать документ с двух сторон. Через 5-10 минут документ пройдёт проверку.

Дальше, идём в базу RIPE и создаём три объекта:

  • MAINTAINER

  • PERSON

  • ORG

Получаем адреса и AS

Затем регистрируемся на Scaleblade. Затем, заходим и создаём проект.
Дальше нас встречает такой вот интерфейс

Как я перестал бояться и вышел в Интернет со своей IPv6-сетью - 6

Ничего связанного с LIR/адресами или AS нету от слова совсем. Я сначала немного впал в ступор, но потом, спросил в Discord как мне всё-таки заказать у них RIPE-02. Ответили, что только через Support.

Добро, пишем в суппорт.

Полдня ожидания и в самом конце рабочего дня, приходит ответ, в котором есть ссылка на Google Forms. Там от нас хотят:

  • номер заявки/тикета

  • адрес электропочты, которую использовали для регистрации на Scaleblade

  • имя и фамилия, как в паспорте или в ID

  • тип конечного пользователя: компания или физлицо.

  • страна, где планируется использовать AS.
    Здесь можно указать страну своего присутствия/регистрации компании. Главное, чтобы страна была в зоне ответственности RIPE и была хоть какая-то связь с этой страной. Я указал Эстонию, хотя анонсирую свои блоки через Vultr в Stockholm-e.

  • домашний адрес

  • страна проживания

  • подтверждение возраста

  • согласие с тем, что RIPE будет проверять документы

Далее они мне прислали счёт, который я оплатил, а заодно отправил им объекты, которые сделал в RIPE.

  • mntner: KYBERORG-MNT

  • person: AM51028-RIPE

  • role: ACRO54020-RIPE

  • organisation; ORG-AM366-RIPE

Также я узнал у них их handle в RIPE (SBL-MNT), чтобы добавить его в ORG объект.

Как я перестал бояться и вышел в Интернет со своей IPv6-сетью - 7

Следующим шагом Scaleblade прислал договор с конечным пользователем (EUAA), который надо подписать в сервисе PandaDoc.
Пару минут после подписания и я получил свой блок адресов, а заодно и ссылку на верификацию ID-карты.

После верификации пришлось подождать один рабочий день пока RIPE выделит мне автономную систему.

В итоге, 5 рабочих дней и ASN с IPv6-блоком получены.

Подготовка к анонсированию блока

ROA

Из мира DN42 я знал, что для того, чтобы успешно проходить ROA проверку нужно сделать ROA-объект в базе RIPE. Для этого идём в RPKI Dashboard
Вводим туда свой ASN и Prefix (блок), а также минимальный размер блока, который разрешено анонсировать и... получаем нежданчик (в случае PI-блока такого не должно быть).

Как я перестал бояться и вышел в Интернет со своей IPv6-сетью - 8

Дело в том, что AS принадлежит нам, а вот блок - нет. Блок принадлежит Scaleblade и только они могут сделать ROA-запись.
На это у меня ушло ещё 2 дня, поэтому про ROA/RPKI лучше сказать LIR-у сразу.

Route6

В отличие от ROA route6-объект создать получится. Для этого идём всё туда же в RIPE Database и выбираем "Create an Object".

Как я перестал бояться и вышел в Интернет со своей IPv6-сетью - 9

указываем свой блок или его часть и нажимаем на Submit

Как я перестал бояться и вышел в Интернет со своей IPv6-сетью - 10

Если что-то пошло не так, то интерфейс покажет что именно, если же всё хорошо, то увидим экран подтверждения.

Как я перестал бояться и вышел в Интернет со своей IPv6-сетью - 11

Inet6num

Также, если планируется анонсировать блок частями, то для каждой части нужно создать свой inet6num-объект. Для этого идём в My Resources и нажимаем "Create assignment"

Как я перестал бояться и вышел в Интернет со своей IPv6-сетью - 12

Заполняем:

  • inet6num - наш блок

  • netname - имя сети

  • country - страна из которой мы будем анонсировать блок (выбираем из листа)

  • admin-c - административный контакт. Тут надо указать person объект (работает поиск по имени и фамилии).

  • tech-c - то же самое, что и admin-c, только это технический контакт.

  • status - ASSIGNED (выделен и используется), ещё есть AGGREGATED-BY-LIR (для объединения блоков) и ALLOCATED-BY-LIR (выделен, но не используется).

Также если нажать на "+" на любом поле, то можно добавить дополнительные поля, например, org для организации.

Как я перестал бояться и вышел в Интернет со своей IPv6-сетью - 13

Если всё хорошо, как и до этого будет экран подтверждения

Как я перестал бояться и вышел в Интернет со своей IPv6-сетью - 14

Также для этой части блока нужно будет создать route6 объект. Он создаётся также, как и для основного блока.

Как я перестал бояться и вышел в Интернет со своей IPv6-сетью - 15

rDNS

Также в RIPE Database конфигурируется rDNS ака Reserve DNS, то есть преобразование IP-адреса в имя.
Как и для обычных DNS-доменов, нужен будет DNS Server (причём только тот, где настроен DNSSEC).

Обратная запись (PTR-запись) для IPv6 должна находиться в зоне ip6.arpa и иметь специальный формат. Например, PTR-записи для блока 2a12:bec0:50b::/48 должны быть в зоне b.0.5.0.0.c.e.b.2.1.a.2.ip6.arpa.

Для этого идём на свой DNS Server и создаём эту зону. Порядок важен - Ripe Database проверяет является ли данный DNS server авторитативным для этой зоны.
Мои зоны обслуживает Cloudflare.

Как я перестал бояться и вышел в Интернет со своей IPv6-сетью - 16

Дальше Cloudflare начнёт искать существующие записи (которых, конечно, нет) и в конце выдаст имя DNS Server-ов, которые нужно будет прописать в RIPE Database.

Как я перестал бояться и вышел в Интернет со своей IPv6-сетью - 17

В принципе, уже сейчас можно сделать пару записей. Например, 2a12:bec0:50b::1 должен иметь обратное имя stor.klab.sh.

Для этого берём любой генератор обратных записей (например этот) и вставляем наш адрес.

Как я перестал бояться и вышел в Интернет со своей IPv6-сетью - 18

Из результата генерации 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.b.0.5.0.0.c.e.b.2.1.a.2.ip6.arpa убираем зону b.0.5.0.0.c.e.b.2.1.a.2.ip6.arpa и получаем 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0. Это нужно будет вставить в редактор зоны Cloudflare

Как я перестал бояться и вышел в Интернет со своей IPv6-сетью - 19

Теперь можно вернуться в RIPE Database и делегировать домен. Для этого нужно будет создать объект domain

Как я перестал бояться и вышел в Интернет со своей IPv6-сетью - 20

Дальше он предложит воспользоваться Wizard-ом, хотя при этом останется на этой же странице.

Как я перестал бояться и вышел в Интернет со своей IPv6-сетью - 21

Заполняем форму

  • prefix - наш блок

  • nserver - первый DNS-сервер (тот, что дал нам Cloudflare при создании зоны)

  • nserver - второй DNS-сервер

  • admin-c, tech-c - то же самое, что и предыдущих случаях

  • zone-c - в кому обращаться по поводу зоны.

Как я перестал бояться и вышел в Интернет со своей IPv6-сетью - 22

немного ждём и зона делегирована! Теперь нужно немного подождать пока эту делегацию подхватит и Cloudflare и остальные DNS.

Как я перестал бояться и вышел в Интернет со своей IPv6-сетью - 23

Выбор провайдеров

На этом этапе у нас есть блок адресов, автономная система, обратная зона и все необходимые записи. Теперь надо сообщить Интернету где находится наша сеть.

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

Есть несколько вариантов как это сделать:

  1. BYOIP или Bring your own IP - хостер/провайдер анонсирует наш блок со своей AS или же создаёт с нами BGP-сессию, получает от наши сети и анонсирует их своим апстримам.

  2. Мы сами ищем через кого мы будем анонсировать наши сети.

Первый вариант легче в настройке (её делает хостер/провайдер), но:

  • мы целиком зависим от связности хостера.

  • BYOIP либо не доступен вообще (как у Hetzner), либо доступен на дорогих тарифах (привет, PQ Hosting).

В моём случае, BYOIP был не вариант, так как HostHatch не умеет готовить IPv6.
Во втором случае, мы окунаемся в пучину телекома сами себе провайдер и делаем связность сами.

Немного терминологии:

  • upstream - провайдер провайдера или вышестоящий провайдер, автономная система через которую мы со своей сетью ходим в остальной Интернет.

  • downstream - это наоборот, те автономные системы которым мы раздаём Интернет (для них апстримом являемся мы).

  • peer - это сеть-сосед, которая анонсирует нам свои маршруты, а мы ей свои. В итоге, мы ходим в ту сеть напрямую, а не через другие сети.

  • IP transit - это плата за трафик/канал, которую берёт с нас upstream за то, что пропускает трафик с нашей сети.

  • PoP - point of presence - точка присутствия - чаще всего дата-центр, где находиться один или больше upstream-ов

  • IXP - Internet eXchange Point - точка обмена трафиком - тоже дата-центр, где находятся несколько автономных систем с целью peering-а, чтобы трафик шел напрямую, а не через upstream-ы.

В мире DN42 (откуда я пришёл в эти ваши интернеты Интернет) большинство (особенно поначалу) посылает соседям всё валидные маршруты и принимает тоже все. Соединение идёт через туннели поверх Интернет, поэтому большинство DN42-соединений не имеет физической связности. В Интернете не так.

Большинство upstream-ов хотят, чтобы ваш сервер находился в одной из их точек присутствия. Для меня (пока!) это не реальный сценарий, так как я завишу от хостинга, поэтому у меня был выбор между co-location своего сервера (который надо купить) и арендой ВМки, которая находится на площадке, где есть upstream-ы. Однако есть пару проектов, которые предоставляют BGP-сессии и транзит поверх существующего соединения:

  • route64 - почти дохлый проект

  • BGP Tunnel - активный проект, но весь трафик идёт через AS34927, который находится в Швейцарии (BGPTunnel бесплатный для некоммерческих проектов)

Как правило, точки присутствия у этих провайдеров находятся далеко и если через них ходить, то будет большой пинг и всё будет тормозить.

Co-location для меня пока дорого.

Остаётся вариант с виртуалкой на точке присутствия (IXP VM) - это специальные дешевые и не очень дешевые ВМки для создания BGP-сессий с другими автономками.

Есть даже список таких дешевых BGP VM.

Аннонсируем блок

На мой взгляд, одним из самых дружелюбных к BGP хостеров является Vultr. У них куча точек присутствия по всему миру и BGP-сессия, а также IP transit входят в стоимость.

С него я и начал, создал аккаунт и применил купон на 250$. Создал самую дешевую ВМку в Стокгольме и запросил BGP-сессию. Vultr попросил LOA (Letter of Authorization) - письмо с подписью, где я разрешил им анонсировать мои маршруты с их сети.

После этого я установил с ними BGP-сессию (по link-local адресам) и анонсировал маршруты, они в ответ дали full table (все маршруты Интернета). Примерно 900000 IPv4 и 800000 IPv6 маршрутов.

В этого момента мой блок стал частью Интернета. От момента запроса ASN и адресов до первого пинга прошло 7,5 дня.

Надеюсь, что мой путь будет интересен и полезен. Также я открыт к Peering-у на NorthIX или через туннели.

--- 2a12:bec0:500::1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss

Автор: Александр Муравья

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js