Сейчас на слуху переход на IPv6 и связанные с ним проблемы. Мы в РНКБ недавно испытали это на себе – внедряли IPv6 для мобильных приложений. Задача оказалась нетривиальная, поэтому мы решили рассказать и другим хабравчанам, почему у нас не всё пошло гладко и с чем мы столкнулись. В других банках РФ, в т. ч. из топ-10, по нашим сведениям, IPv6 пока не поддерживается.

А зачем нам IPv6?

Клиенты финтеха всё больше пользуются услугами онлайн, поэтому банки внимательно следят за доступностью и удобством своих мобильных приложений, финансируют собственные разработки и стараются всячески клиентский опыт улучшать. Мы в РНКБ тоже к своему интернет-хозяйству относились всегда крайне серьёзно, в том числе к интернет-связности: у нас есть собственные AS (автономная система) и блоки IP-адресов, которые позволяют гибко управлять распространением в Интернете маршрутов к ресурсам Банка. Поэтому, когда мы стали получать обратную связь от клиентов наподобие «ваше приложение не работает, хотя интернет есть – Гугл же открывается», то стали разбираться в причинах.

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

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

Не все провайдеры умеют готовить IPv6

Вообще-то нашей автономной системе уже давно был присвоен блок адресов IPv6, просто руки не доходили его использовать. Так что, когда мы решили, что внедрить IPv6 всё-таки нужно, то в первую очередь пришлось заняться IPv6-связностью на аплинках нашей AS. Это оказалось не так просто: мы не сразу смогли добиться от вышестоящих провайдеров работоспособности IPv6, а некоторые из них и вовсе не сумели это сделать. Нам даже стало казаться, что в крупных провайдерах все толковые инженеры и грамотные менеджеры заняты в межоператорских подразделениях, тогда как на долю клиентов – юридических лиц остаются специалисты, которые хоть как-то разбираются только в DHCP и статическом присвоении IPv4. По крайней мере, когда мы попытались выяснить, могут ли нам предоставить IPv6-связности по BGP, нас попросту не понимали. До того дошло, что с одним провайдером мы переписывались по этому вопросу больше года!

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

Выбираем оптимальное решение

Итак, у нас было мобильное приложение, которое работало по IPv4, а FQDN ресурсов описывались A-записями на DNS-серверах. “Белые” IPv4-адреса транслировались (NAT/PAT) на сетевом оборудовании периметра нашей сети в «серые» (RFC1918) адреса прокси-серверов Nginx. У этих прокси-серверов несколько сетевых интерфейсов, и они выполняли первичную обработку https-запросов и балансировку по серверам приложений. Предстояло как-то внедрить в эту схему IPv6.

Схема "как было"
Схема "как было"

Первое, что пришло нам на ум, – это добавить в DNS AAAA-запись и трансляцию адресов 6-to-4 NAT на сетевом оборудовании. Но, обдумав этот вариант, мы всё же признали его неудачным. Тому было немало причин, самой важной из которых была невозможность вести учёт IPv6-адресов клиентов на Nginx. Такой учёт реализован в РНКБ в уже существующих решениях и нужен в некоторых случаях. В частности, при противодействии DDoS-атакам.

Затем мы задумались над вариантом сделать специальный Nginx c IPv6-интерфейсом в сторону Интернета и традиционным IPv4-интерфейсами в сторону серверов приложений. Но и у этой версии был существенный недостаток: «выставлять» сервер «белым» IPv6-адресом в Интернет – довольно опасно. Так что мы «спрятали» его за NAT, в нашем случае – destination nat 6-to-6. Да, мы знаем, что это решение многим покажется спорным: всё-таки лучшие практики по безопасности, да и не только они не рекомендуют использовать NAT подобным образом. Но такая практика у нас распространена и хорошо себя зарекомендовала.

Окончательное решение выглядело так: AAAA-записи, 6-to-6 NAT и прокси-сервера с двойной связностью, IPv6 и IPv4.

Схема "как стало"
Схема "как стало"

Тестирование и «подводные камни» смартфонов

Чтобы протестировать получившееся решение, нам пришлось развернуть Wi-Fi-сеть для мобильных устройств, сеть доступа с IPv6-связностью, но без IPv4. Для достижения цели мы применили маршрутизатор MikroTik, изначально с аплинком на сотовом модеме. На кэширующем DNS в маршрутизаторе настроили нужные AAAA-записи и приступили к тестам.

Первые результаты удручали: приложение не стало работать стабильнее, зато в наличии были всевозможные глюки: при подключении смартфонов, пингах, при DNS-запросах и т. д. Тогда мы попытались улучшить ситуацию и организовали наземный аплинк стенда с IPv6-связностью. Но и это не помогло: на наземном канале тоже случались разные глюки. В чём же дело? Стали выяснять – и нашли причину. Виновны оказались… сами смартфоны.

Изначально настройки и первые проверки мы выполняли с ноутбука, и только позже в дело вступали разные смартфоны. В деталях процесс был такой: мы настраивали роутер, затем подключались к его SSID тем же ноутбуком и проверяли доступность фронтенда curl-ом либо браузером. Затем к этому SSID подключали смартфоны с установленным банковским приложением и уже полностью проверяли работоспособность. Если приложение не работало, то проверяли пинги и корректность разрешения имён DNS. При необходимости снимали дампы средствами MikroTik или на аплинке стенда.

IPv6 предполагает 2 различных механизма автоконфигурации клиента: DHCPv6 и ND (Neighbor Discovery). Кроме этого, есть ещё ряд неочевидных настроек (подробнее можно ознакомиться здесь: https://wiki.mikrotik.com/wiki/Manual:IPv6). Так вот: разные модели смартфонов по-разному определяют работоспособность Интернета через Wi-Fi: кому-то из них достаточно только IPv6 Neighbor Discovery, кто-то предпочитает DHCPv6, а некоторые вообще не хотят считать Wi-Fi-сеть рабочей без стандартного DHCP (v4).

Нам пришлось ещё раз доработать своё решение, чтобы устранить и эту проблему. Итоговая конфигурация включала в себя ND и раздачу IPv4-адресов в Wi-Fi по DHCP, но без IPv4-адреса на uplink-интерфейсе маршрутизатора. Работоспособной оказалась примерно такая конфигурация MikroTik в части IPv6:

<MT-config>
 …

/ipv6 pool

add name=poolipv6 prefix=xxxx:xxxx:xxxx:xxxx::/xx prefix-length=xx

...

/ip dns static

add address=xxxx:xxxx:0:xxxx::xx name=service.rncb.ru type=AAAA
 …

/ipv6 route

add disabled=no distance=1 dst-address=::/0 gateway=xxxx:xxxx:xxxx:xxxx::x \

    routing-table=main scope=30 target-scope=10

/ipv6 address

add address=xxxx:xxxx:xxxx:xxxx::x/xx advertise=no interface=XXXX

add address=::1 from-pool=poolipv6 interface=XXXX

/ipv6 nd

set [ find default=yes ] disabled=yes

add dns=xxxx:xxxx:xxxx:xxxx::1, xxxx:xxxx:xxxx:xxxx::1 interface=XXXX\

    ra-interval=20s-1m ra-lifetime=13m20s

Тестирование с этой версией конфигурации на стенде показало, что мобильное приложение подключается и работает стабильно уже со всех смартфонов и планшетов – по крайней мере тех, которые оказались в нашем распоряжении.

Дальнейшее тестирование обошлось уже без каких-либо стоящих упоминания деталей. Выявили ещё несколько ошибок в настройках и логике приложений применительно к IPv6-клиентам и исправили их.

Ну и результат наших экспериментов уже на практике: после проделанной работы клиенты перестали жаловаться на проблемы с приложением при работающем мобильном Интернете и связи только по IPv6. Успех.

Итоги

Стоила ли задача потраченных усилий? Смотря с какой стороны посмотреть. Например, клиенты довольны, и это важно! Но, когда после запуска в продакшн мы изучили долю трафика IPv6 в общем объёме запросов к сервису, оказалось, что она невелика, – около 10%. Вероятно, потому, что протокол IPv6 пока ещё мало распространён на сетях мобильных операторов и Wi-Fi.

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

А если вы, как и мы, уже столкнулись с IPv6 в своей работе и тоже нашли подводные камни или полезные решения, пишите в комментариях.

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


  1. rzerda
    04.04.2023 16:48
    +9

    «выставлять» сервер «белым» IPv6-адресом в Интернет – довольно опасно

    Чем опасно?

    Upd. Даже так: кого вам не удалось уговорить, сетевиков или безопасников?


    1. OlegY1611
      04.04.2023 16:48

      Опасность, в основном, в уязвимостях, в т.ч. 0day. Уговаривать было некому, сетевики и безопасники оказались заодно. Сделали по образу и подобию существующих IPv4-решений.


      1. v0rdych
        04.04.2023 16:48

        Так вы NAT66 делаете только для 443 порта?

        А чем это отличается от FW, фильтрующего все, кроме 443 порта на хосте?


        1. OlegY1611
          04.04.2023 16:48

          На самом хосте, в общем случае, открыты ещё какие-то порты и протоколы. Да и сам FW (напр., netfilter) может быть подвержен каким-то уязвимостям. Рекомендации вроде NIST SP 800-215, наряду с прочими мерами, предлагают фильтровать трафик на 1st hop router-е либо на оборудовании доступа.


  1. vanxant
    04.04.2023 16:48
    +1

    А подскажите ради интереса примерный % соединений по ipv6?


    1. MedicusAmicus
      04.04.2023 16:48
      +1

      И подскажите провайдера, который выдает IPv6 only адреса. Или хотя бы просто поддерживает IPv6.
      Отдельное спасибо, если регион укажете.


      1. vabka
        04.04.2023 16:48

        С поддержкой ipv6 есть, например, Планета (для физлиц) aka Miralogic (для юрлиц). Чтобы появился ipv6 нужно в кабинете галку нажать.
        Свердловская область.


      1. ugenk
        04.04.2023 16:48

        Бывает, что ipv4 отгнивает у оператора из-за каких-то проблем, а v6 работает


        1. grossws
          04.04.2023 16:48

          Равно как и наоборот. У mgts/mts home такое встречал. Роутер шлёт ra+dhcpv6, всё ок, настоящий белый человеческий ipv6. А потом вжух, и 30% udp&icmp loss исключительно по v6


      1. MedicusAmicus
        04.04.2023 16:48

        Немного проясню свой вопрос.
        Интересно предоставление IPv6 мобильными операторами в контексте географической привязки к основному региону обслуживания банка.


        1. OlegY1611
          04.04.2023 16:48
          +1

          По-умолчанию, ipv6 предоставляет только МТС, в т.ч. и в роуминге на полуострове.


        1. gothpanda
          04.04.2023 16:48

          У меня крымская симка МТС с 2014, оператор поддерживает IPv6.


      1. Sadok
        04.04.2023 16:48

        СПб, бывший Interzet. Сразу выдает /64. Правда только на pppoe почему-то. А вот какой-нить TimeWeb (хостер) выдает только в РФ и Польше. В Голландии уже ой.


      1. FSA
        04.04.2023 16:48

        Ростелеком. Но, говорят не во всех областях. Я проверял только в Свердловской и Новосибирской. Могут быть проблемы с входящими соединениями (торренты не будут работать, Wireguard и всё, что использует UDP), но тоже, говорят у кого-то всё нормально работает. У Дом.ру было, но ходит слухи, что они там что-то переделывают и у кого-то пропал IPv6.

        Из сотовых - МТС и Мегафон.
        А вообще, есть такой список провайдеров: https://version6.ru/isp


        1. slonopotamus
          04.04.2023 16:48

          И Мегафон

          Сижу на Мегафоне, Москва и область. Никакого IPv6 не ощущаю. Вы уверены что он есть?


          1. OlegY1611
            04.04.2023 16:48

            На Мегафоне ipv6 включается по запросу (см. Использование IPv6 в мобильных сетях России - 4PDA )


            1. slonopotamus
              04.04.2023 16:48

              По вашей ссылке в разделе "Как подключить" отправляют на сайт Мегафона на страницу услуги "Открытый IPv6". Так вот, там 404. И в кабинете такой услуги тоже нет.


            1. MaxSoniX
              04.04.2023 16:48

              Ощущение IPv6 от МегаФон

              Дело не в запросах (если вы про услугу "открытый IPv6", может быть такое что услугу включите, а IPv6 всё равно не появится).
              1) Запустили с ноября по регионам, но не во всех (к примеру есть в СФО).
              2) Работает не на всех смартфонах (есть предположение связано модулем LTE и настроек со стороны Мегафона, т.к. с МТС работает)
              3) Сам же оператор МегаФон не раскрывает технических подробностей, даже про "Открытый IPv6" люди узнали окольными путями, что это аналог услуги у МТС "IPv6+" - открыть порты 0-1023 по IPv6.


              1. OlegY1611
                04.04.2023 16:48

                Интересно.. Возможно, оно просто ещё в стадии внедрения у МФ.


    1. OlegY1611
      04.04.2023 16:48
      +1

      Около 10% запросов, см. 1й абзац заключительного раздела статьи.


  1. StanleyShilow
    04.04.2023 16:48

    Упячная заваруха, конечно...

    Вот только формулировка "учет клиентских адресов... " звучит странно. Здесь повествование хотелось бы уточнить. Первое что приходит на ум, так это связь одного пользователя с одним адресом/ми, что вероятно, задача одного из микросервисов и напрягать NGINX этим делом нужно только на проверку. Вместе с этим, инафа пугающая. NGINX, если мне не изменяет память, должен спокойно работать как с 32-битным адресным пространством, так и с "новой технологией" - 128-битными шестнадцатеричными адресами, которые юзают с 1999 года.

    PS. Иногда возникает ощущение (только ощущение, это слово надо подчеркнуть с целью не обижать и самому не обижаться), что дорогие devops'ы и разработчики разъехались по разным лагерям и постепенно разучиваются контачить между собой. Спасибо, за историю) Надеюсь пригодится)


    1. OlegY1611
      04.04.2023 16:48
      +1

      "учёт клиентских адресов" - в основном, как один из рубежей DDoS защиты. Для уникального адреса настраивается лимит подключений за определённый период времени. В некоторых случаях также применяются black-листы по ip-адресам/префиксам


  1. AleksandrBelov332
    04.04.2023 16:48

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


    1. OlegY1611
      04.04.2023 16:48
      +1

      Действительно, BGP Full View бурно растёт, см. BGP Reports (potaroo.net). И если макс. размер IPv4-таблиц теоретически ограничен числом возможных подсетей /24, то макс. размер таблиц IPv6 - больше на порядки. Современные маршрутизаторы могут держать миллионы записей в FIB, скоро потребуются миллиарды :)


      1. FSA
        04.04.2023 16:48

        При разработке IPv6 учитывалось, что таблицы могут расти. Поэтому блоки IPv6 выделяются с достаточно большим запасом, чтобы потом не получилось множество отдельных сегментов и чтобы потом заниматься агрегацией маршрутов, если это возможно. Так что если сейчас таблица маршрутизации для IPv6 и растёт, то в будущем этот рост значительно замедлится. Там, где провайдеру нужны десятки, а то и сотни записей в таблице IPv4 для каждого мелкого блока, в IPv6 достаточно одной записи, которая не только покрывает все эти же потребности, но и имеет значительный запас на будущее. В одной сети /32 IPv6 содержится столько стандартных сетей /64, сколько всего адресов в IPv4. А у нас провайдеры ещё и экономные. Они дают клиентам не /48, а /56. Т.е. из 32 бит они себе забирают 24. Много ли вы видели провайдеров с /8? А IPv6 легко сеть такого размера получить и даже больше. А пользователям даже NAT не нужно использовать, потому что у них достаточно адресов.


        1. OlegY1611
          04.04.2023 16:48

          Совершенно верно, IPv6-адреса выдаются провайдерам крупными блоками, чтоб исключить запросы дополнительной адресной ёмкости. Однако, кроме огромного числа даже таких крупных блоков, на рост таблиц будет влиять ещё фрагментация этих блоков самими провайдерами. Часто провайдеры анонсируют more specific -префиксы, чтоб гибко управлять нагрузкой на межоператорских стыках.


  1. MaxSoniX
    04.04.2023 16:48
    +2

    Заинтересовало:
    1) FQDN банка сайта не имеет AAAA записи
    2) Какой мобильный оператор выдаёт адреса v6only?
    По статье интересный опыт внедрения v6 банком, при условии что действительно будет похоже первым на территории РФ.


    1. OlegY1611
      04.04.2023 16:48

      1) AAAA -записи появляются в DNS по мере запуска соответствующих ресурсов на IPv6-адресах. Для ресурсов на адресах IPv4 соответствующие A-записи естественно есть.
      2) Таких нам неизвестно, все кто предоставляют IPv6-связность, также дают и IPv4.
      Спасибо, мы старались :)


      1. MaxSoniX
        04.04.2023 16:48

        1) Жаль что основной сайт банка не является соответствующим ресурсом :)
        2)

        Например, мы не раз замечали, что сотовые провайдеры иногда «выдавали»
        мобильным устройствам адреса IPv6, не назначив адреса IPv4.

        Тогда хотелось бы раскрыть более подробный пример такого случая.


        1. OlegY1611
          04.04.2023 16:48

          1) Со временем, возможно, и веб-сайт Банка станет доступен по IPv6. Пока такого решения не принято, целесообразность доработки неочевидна.
          2) Это были эпизодические непродолжительные случаи, связанные с некорректной работой смартфона или сети. Выглядело так, что смартфон при wifi-sharing-е не выдавал DHCPv4, только IPv6


  1. aim
    04.04.2023 16:48

    "«выставлять» сервер «белым» IPv6-адресом в Интернет – довольно опасно." — после этой фразы читать дальше не хочется. :(


    1. OlegY1611
      04.04.2023 16:48

      К сожалению, ресурсы Банка привлекают повышенное внимание злонамеренных пользователей. Убрать сервер за NAT - вполне рабочее решение.


      1. aim
        04.04.2023 16:48

        то есть просто Firewall настроить недостаточно? в чём повышение "безопасности" конкретного сервера, в случае если

        а) имеется Firewall (как бы вроде бы требование регулятора, ЕМНИП)
        б) открыты публично только "клиентский порты" (443 и что там ещё нужно для работы клиентов)
        в) остальные порты (например управление ssh и что там ещё надо) — также на firewall отруливается и доступ разрешён только с доверенных адресов (ну там офиса, или с конечной точки vpn или ещё каким-то образом как вам нужно, ну в общем не публично)

        так чем NAT лучше? что он добавляет в эту схему (которая ДОЛЖНА быть уже)?


        1. OlegY1611
          04.04.2023 16:48

          Да, корректная настройка Firewall обеспечивает вполне достаточный уровень защиты. Однако, NAT не хуже. Кроме того, у нас были ещё некоторые причины применения NAT, но подробности выходят далеко за тематику статьи.


      1. Sadok
        04.04.2023 16:48

        Убрать сервер за NAT - вполне рабочее решение

        надеюсь, админы банка знают с пеленок, что NAT - это вообще (от слова "совсем") не фаервол? иначе мне жаль вкладчиков.


        1. OlegY1611
          04.04.2023 16:48

          Разумеется, кроме NAT есть ещё защитные меры, в т.ч. и Firewall-ы