Для личных нужд я использую 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-сообщество в 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.
Cloudie
Scaleblade
Freetransit
ну и остальные, более дорогие опции.
Cloudie, на момент написания статьи, новые AS не регистрирует.
Переходим к Scaleblade. У них на выбор 3 опции:
RIPE-01 (только регистрация AS) за 27 фунтов единовременно.
RIPE-02 (AS + адреса: /44 IPv6 блок) за 29 фунтов единовременно и потом 10 фунтов в ежегодно.
RIPE-03 (только адреса) за 10 фунтов ежегодно.
Freetransit предлагает ещё дешевле:
Только ASN: за 25 евро (15 единовременно + 10 ежегодно)
ASN и PA-адреса: 25 евро (15 единовременно + 10 ежегодно)
Только PI-адреса: 75 евро (15 единовременно + 60 ежегодно)
ASN и PI-адреса: 85 евро (15 единовременно + 70 ежегодно)
Также и 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 сильно поможет.
Регистрируемся тут и указываем имя и фамилию, как в документе (будут проверять).
Потом на электропочту придёт письмо об успешной регистрации. В моём письме была ссылка на LIR Portal, где была кнопка "зарегистрировать LIR".
Обычному пользователю это не нужно (если только не Вы решили идти по пути создания LIR-а). Я по незнанию, её нажал и потом дня три объяснял RIPE, что ошибся.
Также должно быть ещё одно письмо от RIPE с ссылкой на сервис проверки документов iDenfy. Для проверки нужен документ и телефон. Документ - паспорт или ID-карта (в моём случае это была карта ВНЖ Эстонии - elamisloakaart), телефоном надо будет сосканировать QR-код, который сгенерирует iDenfy, а потом сфоткать документ с двух сторон. Через 5-10 минут документ пройдёт проверку.
Дальше, идём в базу RIPE и создаём три объекта:
MAINTAINER
PERSON
ORG
Получаем адреса и AS
Затем регистрируемся на Scaleblade. Затем, заходим и создаём проект.
Дальше нас встречает такой вот интерфейс
Ничего связанного с 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 объект.
Следующим шагом Scaleblade прислал договор с конечным пользователем (EUAA), который надо подписать в сервисе PandaDoc.
Пару минут после подписания и я получил свой блок адресов, а заодно и ссылку на верификацию ID-карты.
После верификации пришлось подождать один рабочий день пока RIPE выделит мне автономную систему.
В итоге, 5 рабочих дней и ASN с IPv6-блоком получены.
Подготовка к анонсированию блока
ROA
Из мира DN42 я знал, что для того, чтобы успешно проходить ROA проверку нужно сделать ROA-объект в базе RIPE. Для этого идём в RPKI Dashboard
Вводим туда свой ASN и Prefix (блок), а также минимальный размер блока, который разрешено анонсировать и... получаем нежданчик (в случае PI-блока такого не должно быть).
Дело в том, что AS принадлежит нам, а вот блок - нет. Блок принадлежит Scaleblade и только они могут сделать ROA-запись.
На это у меня ушло ещё 2 дня, поэтому про ROA/RPKI лучше сказать LIR-у сразу.
Route6
В отличие от ROA route6-объект создать получится. Для этого идём всё туда же в RIPE Database и выбираем "Create an Object".
указываем свой блок или его часть и нажимаем на Submit
Если что-то пошло не так, то интерфейс покажет что именно, если же всё хорошо, то увидим экран подтверждения.
Inet6num
Также, если планируется анонсировать блок частями, то для каждой части нужно создать свой inet6num-объект. Для этого идём в My Resources и нажимаем "Create assignment"
Заполняем:
inet6num - наш блок
netname - имя сети
country - страна из которой мы будем анонсировать блок (выбираем из листа)
admin-c - административный контакт. Тут надо указать
person
объект (работает поиск по имени и фамилии).tech-c - то же самое, что и admin-c, только это технический контакт.
status - ASSIGNED (выделен и используется), ещё есть AGGREGATED-BY-LIR (для объединения блоков) и ALLOCATED-BY-LIR (выделен, но не используется).
Также если нажать на "+" на любом поле, то можно добавить дополнительные поля, например, org для организации.
Если всё хорошо, как и до этого будет экран подтверждения
Также для этой части блока нужно будет создать route6
объект. Он создаётся также, как и для основного блока.
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.
Дальше Cloudflare начнёт искать существующие записи (которых, конечно, нет) и в конце выдаст имя DNS Server-ов, которые нужно будет прописать в RIPE Database.
В принципе, уже сейчас можно сделать пару записей. Например, 2a12:bec0:50b::1
должен иметь обратное имя stor.klab.sh
.
Для этого берём любой генератор обратных записей (например этот) и вставляем наш адрес.
Из результата генерации 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
Теперь можно вернуться в RIPE Database и делегировать домен. Для этого нужно будет создать объект domain
Дальше он предложит воспользоваться Wizard-ом, хотя при этом останется на этой же странице.
Заполняем форму
prefix - наш блок
nserver - первый DNS-сервер (тот, что дал нам Cloudflare при создании зоны)
nserver - второй DNS-сервер
admin-c, tech-c - то же самое, что и предыдущих случаях
zone-c - в кому обращаться по поводу зоны.
немного ждём и зона делегирована! Теперь нужно немного подождать пока эту делегацию подхватит и Cloudflare и остальные DNS.
Выбор провайдеров
На этом этапе у нас есть блок адресов, автономная система, обратная зона и все необходимые записи. Теперь надо сообщить Интернету где находится наша сеть.
Обычно когда покупаешь хостинг, то ВМке назначается IP-адрес и блока хостера и то, как и через кого он анонсируется в Интернет - это забота хостера. Мы же хотим использовать наш блок, а не блок хостера.
Есть несколько вариантов как это сделать:
BYOIP или Bring your own IP - хостер/провайдер анонсирует наш блок со своей AS или же создаёт с нами BGP-сессию, получает от наши сети и анонсирует их своим апстримам.
Мы сами ищем через кого мы будем анонсировать наши сети.
Первый вариант легче в настройке (её делает хостер/провайдер), но:
мы целиком зависим от связности хостера.
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
Комментарии (30)
aytugan
23.12.2023 00:37Отличная статья для тех, кто решил сделать лабу "как у настоящего провайдера"!
Kononvaler
23.12.2023 00:37Была бы баба девкой... Большое спасибо за статью, даже пытаться теперь не буду . VDS и WG, как вы и упоминали, действительно пока покрывают все нужды.
nickD
23.12.2023 00:37Владелец автономной системы в РФ, даже не оператор связи, в соответствии с законодательством должен чуть ли не сорм поставить, и много всяких отчетиков. По этой причине одному юрику пытались сделать решение на основе private as, ему нужен было два аплинка, но не один федерал так подключать не захотел.
gwathedhel
23.12.2023 00:37Неправда ваша. Если не оператор связи, то просто ркн возбуждается и желает добавить себя в твои пиры на bgp. И свои DNS хочет, чтобы ты поставил себе. (Никто не проверяет, что по маршрутам ходит трафик, а к днс идут обращения). Плюс шлют тебе письма постоянно с требованиями о выполнении (как было про чат-боты недавно). На этом все, по факту.
kyberorg Автор
23.12.2023 00:37Некисло у вас там зарегулировано всё. Теперь понятно почему в России так мало энтузиастов с IPv6.
none7
23.12.2023 00:37Так и для IPv4 это всё нужно. IPv6 тут умер из за VK однажды сломавшего половину Рунета. А до этого многие с IPv6 игрались.
По моему AS нужна только тем, кто хочет проблем за свои же деньги. Часто ли ядро сети провайдеров теряет связь с интернетом? Последний раз я такое видел из за ТСПУ, а не из за обрыва кабеля. А BGP тут никак не поможет. Резерв до ядра провайдера может быть L2TP-тунеллем до сервера провайдера, через LTE-модем. А если нужно сменить провайдера, то почему бы не сменить адреса? Это критично только для DNS, а фаерволлы лучше сразу настраивать на доверие только IPSec трафику, а не конкретной сети.
kyberorg Автор
23.12.2023 00:37А где можно почитать про то, как ВК сломал половину Рунета?
Пока что нашел только это https://habr.com/ru/articles/159427/
navion
23.12.2023 00:37А если нужно сменить провайдера, то почему бы не сменить адреса?
Потому что на них работают внешние сервисы, а также привязаны ACL и IPSec-туннели с партнёрами и клиентами, где согласование новых может занять несколько месяцев.
nickD
23.12.2023 00:37Кроме отказа ядра провайдера могут быть много других различных ситуаций для решения которых потребуется время.
Например ухудшение параметров доступа к важным для вашей организации ресурсам, Или клиенты из определенных мест сталкиваются с проблемами доступа к ресурсам вашей организации. Вот тогда и начинает работать другой проваедер пока вы бодаетесь по несколько дней с проблемным
vikarti
23.12.2023 00:37У меня желание экспериментировать дальше уменьшилось сильно после того как выяснилось что резервный провайдер(билайн) - в IPv6 не умеет ни в какой форме и не планирует.
При этом даже если провайдер дает статический IPv4 и дает IPv6 - это IPv6 будет динамический и это будет /64, вопросы на тему - на рекомендации RIPE про хотя бы /6 для домашних пользователей - у нас так работает, на вопросы как мне внутренние сетки городить с этой их /64 - аналогично.
А почти до нуля уменьшилось когда интернетом нормально пользоваться без постоянно активного VPN и заброски туда части трафика (список принимается по BGP) - стало невозможно. При этом часть адресов как раз ни в коем случае нельзя в туннель. Еще и IPv6-адреса вмешивать во все это - ну его нафиг.
Для своего железа живущего дома и у хостеров - проблемы с адресами я решаю:
cloudflare и их туннелями
-
проброс IPv4 с хостера (где их можно купить сравнительно дешево а кое где - единоразово но привязка к серверу)
ss-nopol
Поясните непосвящённому, зачем, если каждый хостер может выдать тебе айпишник? Из описания в начале статьи, я
нифига не понялпонял что возникли какие-то проблемы с маршрутизацией (что за "связность"???) ipv6 от одного провайдера к другому? Только из-за этого? Хотелось бы понять, что была за проблема и как собственный блок айпишников решил её.kyberorg Автор
Было:
сервер у HostHatch (IPv4 адрес+ IPv6-сеть) - адреса в AS63473
сервер у TietoKettu (тоже dual-stack) - адреса в AS8829
IPv4 трафик идёт так:
HostHatch (AS 63473) -> AS 42708 -> AS 6667 -> AS 8829 (Elmo)
Elmo (AS 8829) -> AS 47605 -> AS 42708 -> AS 63473 (HostHatch)
IPv6 трафик так: HostHatch (AS 63473) -> AS 42708 -> разрыв
Обратно тоже разрыв при прохождении AS42708.
Стало:
сервер у TietoKettu - без изменений
сервер на HostHatch - IPv4 остался так есть. IPv6-сеть от провайдера я убрал. Вместо этого сделал Wireguard-туннель между этим сервером и ВМкой на Vultr поверх текущего IPv4-соединения (пинг между серверами ~1мс).
Туннель привозит ::/0 на HostHatch-сервер, а стороне Vultr-сервера маршрутизирует подсеть 2a12:bec0:509::/48 на HostHatch-сервер.
Теперь IPv6 трафик с HostHatch-сервера идёт так: HostHatch VM (AS216311) -> wg -> Vultr VM (AS216311) -> Vultr (AS20473) -> Arelion (AS1299) -> FNE Finland (AS47605) -> Elmo (AS8829). Теперь оба хоста обмениваются пакетами по IPv6. Это и есть связность.
Antra
Очень интересно. Сохранил.
Могли бы вы еще описать, какую задачу решали? Про разыв туннеля я понял. Я не понял, зачем.
В начале статьи было про виртуалки на bare-metal сервере в Hetzner. Каждой виртуалке нужен минимум один IP. Вместо IPv4 для каждой давайте выдадим каждой виртуалке IPv6 адрес и прокинем через WG куда-то хоть по IPv4, где для IPv6 есть выход в мир. Это понятно.
Вопрос - почему не установить такой туннель до сервера, к примеру, в Oracle Cloud? Даже на always free они дают и IPv6, и IPSEC. Только /56 правда. По крайней мере я так себе домой IPv6 прокидывал поиграться. А сейчас дома в лабе IPv6 через туннель до Hurricane tunnelbroker (в дополнение к линку /64 бесплатные /48 побиты на несколько VLAN).
Что реального помимо опыта дали вот эти заморочки с собственными адресами, если все равно трафик к IPv6 виртуалкам идет через туннель с VM где-то далеко? Количество адресов? Возможность переехать к другому хостеру, сохранив IPv6 адреса?
kyberorg Автор
Мне кажется, что 1мс это не так уж далеко.
Можно и через туннельных брокеров, но я не уверен что до них будет меньше секунды пинг.
У меня получилось так, что хотелось опыта и вовремя подвернулась задача.
Antra
Да, задача интересная. Когда я смотрел в сторону AS и блока адресов, было безумно дорого. Только от вас узнал о приемлемых вариантах.
NAI
Вопрос был какую проблему решают все эти действия (желательно одним предложением)? Ну там, доступность стала больше, пинги меньше, сервер стал доступен клиентам по IPv6, хотя провайдер\хостер не дают IPv6. Вы получили свой пулл IPv6 адресов с которыми можете переезжать по миру в любой DC.
А почему нельзя было сделать WG-туннель между HostHatch-Elmo серверми и завернуть IPv6 сразу туда?
kyberorg Автор
Проблему нестабильности IPv6 соединения. После очередного обслуживания ноды не пинговался даже шлюз.
Можно было сделать и прямой туннель до Elmo, но это было не решило проблему доступа в IPv6-Интернет.
allter
Но у вас же прикладной сервис, или более сложная система?
Если прикладной, то достаточно открыть внешние сервисы на каждой точке, анонсировать IP сервисов через DNS зону с достаточно коротким времени жизни, мониторить корректность работы, в случае аномалий отключать проблемный интерфейс через DNS. Балансировать/реплицировать можно, тунеллируя между серверами через тот же IPv4 (либо через IPv6, смотря что вышибет в конкретном инциденте).
Хотя по вашей схеме вы по сути получили ещё виртуалку-арбитра для мониторингов/профилактики сплитбрейнов, и гибкость по размещению узлов в совсем не связанных точках. Но и с вышеописанной схемой с третьей виртуалкой можно было бы получить то же самое (к тому же, дополнительно еще CDN подключить, наверное, не помешает)