Пользователь
46,5
рейтинг
10 марта 2015 в 15:47

Разработка → Обход блокировки запрещенного сайта вебмастером без настроек и ПО на стороне клиента

Увидел я как-то IPv6 Teredo пиров в µTorrent под Windows, которые качали куски с довольно приличной скоростью, и тут меня осенило…

Что такое Teredo?

Teredo — технология туннелирования IPv6 через IPv4 UDP-пакеты. Она задумывалась как переходная технология, которая работает за NAT, и, в общем, более-менее выполняет возложенные на нее обязанности. Teredo позволяет получить доступ в IPv6-интернет через публичные Teredo-серверы. Интересно то, что в Windows 7, 8 и 8.1 Teredo настроен и включен по умолчанию, прямо из коробки, и использует сервер Teredo от Microsoft (teredo.ipv6.microsoft.com).

Зачем это нам?

Веб-сайты, определенные ссылки которых по тем или иным причинам оказались в реестре запрещенных сайтов, могут организовать доступ с использованием Teredo, что позволит вернуть доступ к сайту примерно 80-85% пользователям современных версий Windows без дополнительных настроек и ПО! Доступ через Teredo позволяет обойти все протестированные DPI-решения, применяемые провайдерами. Роскомнадзор не только не может внести такие страницы в реестр, но и не может получить к ним доступ (вероятно, Teredo у них не работает):
Скрытый текст
Здравствуйте
Благодарим Вас за активную гражданскую позицию, однако сообщаем, что Ваша заявка была отклонена по следующим возможным причинам:
— на момент проведения проверки экспертами, указанный в Вашем обращении адрес http://[2001:0:9d38:6ab8:30c4:d940:9469:f43e]/ был не доступен;
— указанный в Вашем обращение адрес http://[2001:0:9d38:6ab8:30c4:d940:9469:f43e]/ указан неверно, либо идет перенаправление на другой адрес;
— указанный в Вашем обращение адрес http://[2001:0:9d38:6ab8:30c4:d940:9469:f43e]/ требует обязательной регистрации/авторизации.
С уважением,
ФЕДЕРАЛЬНАЯ СЛУЖБА ПО НАДЗОРУ В СФЕРЕ СВЯЗИ, ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ И МАССОВЫХ КОММУНИКАЦИЙ.
К тому же, у Роскомнадзора нет полномочий блокировать страницы, которые перенаправляют на другие страницы, и кнопка «Актуальный Навальный» тому подтверждение.

Особенности сервера Teredo от Microsoft

Для доступа в «обычный» IPv6, в Teredo используются Relay-серверы, которые имеют полный IPv6-доступ и работают как прокси-серверы. В свою очередь, relay-серверы Teredo от Microsoft не позволяют получить доступ в «обычный» IPv6 или к другим Teredo-серверам, разрешая только связность Teredo-клиентов, настроенных на сервер Microsoft, и образуя такую большую закрытую сеть из Windows-компьютеров.

Особенности реализации DNS в Windows

Если в ОС Windows имеется только Teredo IPv6-адрес, резолвер DNS не будет даже пытаться получать AAAA-запись у доменов. Таким образом, просто так зайти на сайт по доменному имени, даже если у него есть только AAAA-запись и нет A-записи, не получится. Это можно отключить специальным параметром в реестре, но это неинтересно, т.к. требует действий на стороне клиента.

Что делать?

Выход простой и не очень элегантный — использовать домен с доступом по IPv4, который сделает HTTP-перенаправление на Teredo IPv6-адрес. Можно делать как обычное перенаправление кодом 307 или 301, так и через javascript, предварительно проверяя доступность Teredo-адреса или комбинируя с другими решениями обхода блокировки.

Как настроить?

Чтобы разместить веб-сайт в Teredo под Linux, вам необходимо использовать Teredo-клиент miredo, и обязательно настроить его на использование сервера win8.ipv6.microsoft.com. Также, чтобы у вас как можно реже менялся Teredo-адрес, рекомендую задать статический исходящий порт в конфигурационном файле miredo (/etc/miredo/miredo.conf или /etc/miredo.conf, зависит от дистрибутива), т.е. установить параметр BindPort.
Убедитесь, что ваш веб-сервер слушает IPv6-адреса. Для nginx, это параметр listen.
Мой конфиг выглядит примерно так:
Скрытый текст
server {
        server_name 5yo.panty.shot.valdikss.org.ru;
        location / {
                return 307 http://[2001:0:9d38:90d7:899:d93f:9469:f43e]/;
        }
}

server {
        listen [2001:0:9d38:90d7:899:d93f:9469:f43e]:80;
        server_name [2001:0:9d38:90d7:899:d93f:9469:f43e];

        root /usr/share/nginx/html/pantyshot/;
        index index.html index.htm;

        location / {
                try_files $uri $uri/ =404;
        }
}

Я сделал тестовую страницу, на которой вы можете послушать замечательный трек Panty Shot от Mindless Self Indulgence. Думаю, можно считать его незаконным, учитывая кучу отмененных концертов бездуховных групп.
5yo.panty.shot.valdikss.org.ru
Страница должна открываться только в том случае, если у вы используете Windows 7, 8 или 8.1 и не имеете других IPv6-подключений (нативное, 6to4, 6in4).

Заключение

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

UPD: Microsoft отключила серверы Teredo, которые использовались для Windows Vista и 7. Теперь Teredo по умолчанию работает только в Windows 8, 8.1 и Windows 10.
Влад @ValdikSS
карма
621,0
рейтинг 46,5
Реклама помогает поддерживать и развивать наши сервисы

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

Самое читаемое Разработка

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

  • +1
    Нужно успеть захать красивых ipv6 адресов чтобы прямо в hexspeak можно было адреса писать. Типа http://[DEAD::BEEF]
    • 0
      Вот рабочий пример http://[2a01:7e00:e000:31:deed:feed:dead:babe]
      • 0
        Ну, это обычный IPv6. Через Teredo так почти не получиться сделать, если только подгонять source port.
  • +1
    Windows 8.1, сайт не открывается, IPv6 не имею, Teredo включаться не хочет.

    x:\>netsh interface teredo show state
    Параметры Teredo
    — Тип: disabled
    Имя сервера: win8.ipv6.microsoft.com
    Интервал обновления клиента: 30 секунд
    Порт клиента: 34567
    Состояние: offline
    Ошибка: нет

    x:\>netsh interface teredo set state type=client
    ОК.


    Но тип всё равно остаётся disabled, может кто знает в чём может быть проблема?
    • 0
      Вот, честно говоря, не знаю. Я тестировал пару дней назад, и у некоторых людей не работало, хотя на свежих виртуалках с Windows 7 и Windows 8.1 у меня все замечательно. Быть может, у вас задан домен (который DHCP, а не Windows), и Windows отключает Teredo и пытается туннелировать через ISATAP? Что-то есть про ISATAP?
      • 0
        В ipconfig /all и в сетевых адаптерах в диспетчере устройств (включая скрытые устройства) нет никаких упоминаний ни про Teredo, ни про ISATAP. Есть только Ethernet, WiFi, VirtualBox, VMware адаптеры. Ближайшее к ISATAP есть «Tap-Windows Adapter V9».
    • 0
      Обнаружено нечто похожее на домен ActiveDirectory, в котором Teredo, если явно не сказать, не работает.

      netsh interface ipv6 set teredo enterprise client

      Только смысла в этом все равно нет. Инсайдерская информация: в документации на некоторые готовые решения для провайдерских блокировок отдельным пунктом идет инструкция по блокировке IPv6-туннелей и о недопустимости раздачи IPv6 клиентам вообще, под страхом непрохождения прокурорской проверки.
      • 0
        Э? Я нигде не видел, чтобы был Teredo заблокирован, да и провайдеров, предоставляющих IPv6, все больше и больше. Самый крупный — дом.ру.
        • 0
          Для блокировки Teredo достаточно симметричного NAT. Причем не обязательно, чтобы этим занимался провайдер — хватит и обычного «домашнего» роутера со стандартными настройками на стороне клиента.
      • 0
        Что «enterprise client», что «enterpriseclient», в обоих случаях говорит OK, при этом в show state тип остаётся disabled.
    • 0
      Проверьте может у вас IPv6 отключён в системе, самый простой способ, откройте страничку и примените оттуда фикс для включения IPv6.
      • 0
        Спасибо, применил фикс, перезагрузился, сразу же в show state «Ошибка: нет» сменилась на «Ошибка: клиент в управляемой сети». После смены типа client на enterpriseclient строка «Ошибка» исчезла, «Состояние» сменилось с offline на dormant и пинг пошёл:
        Обмен пакетами с 2001:0:9d38:90d7:899:d93f:9469:f43e по с 32 байтами данных:
        Ответ от 2001:0:9d38:90d7:899:d93f:9469:f43e: время=657мс
        Ответ от 2001:0:9d38:90d7:899:d93f:9469:f43e: время=186мс
        Ответ от 2001:0:9d38:90d7:899:d93f:9469:f43e: время=186мс

        При этом страница в хроме не открывается, теперь ошибка «ERR_NAME_NOT_RESOLVED», хотя в IE и FF всё нормально.
  • +2
    navalny.us действительно не блокировали, но зато тоже самое про «встречу на манежке» — блокировали, один из заблокированных сайтов вообще состоял только из красной кнопки с надписью «кнопка» и href на ивент в фейсбуке. То есть вообще РКН всякое может.

    А так c ipv6 РКН действительно (пока) ничего сделать не могут и находятся в неведении, так что в каких-то случаях это может помочь.
    • +4
      Вообще, РКН знает про IPv6, и заявляли, что будут блокировать и его
      rkn.gov.ru/press/publications/news23131.htm

      Я сделал страничку с картинками с гелбуры и отправлял в реестр ее адрес, надеялся, что она у них откроется и они будут сначала недоуменно смотреть, а потом бегать, ШОК, как так, IPv6 нету, а страница открылась, бегают все в панике, бумажки упали, кофе пролилось, а мне смешно! Но, к сожалению, страница у них не открылась.
      • 0
        Ну это так себе заявление, полтора года прошло, а вот тут vigruzki.rkn.gov.ru/docs/description_for_operators_actual.pdf все еще никакого упоминания ipv6. Вообще кстати можно попробовать еще всякие разные способы представления ip-адреса habrahabr.ru/post/69587/
        • 0
          хоть как его записывай но в пакете он всегда в одном формате
          • 0
            Как будто те, кто добавляют сайты в реестры, знают, в каком он там формате в пакете. Приходит им ссылка 2130706433, кликают — открывается, будут пытаться ее как домен наверное заблокировать.
            • 0
              как будто с «другими» доменами как-то по другому:

              ping 2130706433
              Обмен пакетами с 127.0.0.1
      • 0
        Интересно было бы узнать про действенную технологию блокировки IPv6
        • 0
          Teredo — не IPv6. Ну, технически он, конечно, IPv6, но то все же такая большая локалочка без выхода в IPv6, и это все же IPv6, инкапсулированный в UDP.

          Если даже каким-то образом Teredo-адрес внесут в реестр запрещенных сайтов, он все равно будет работать, как ни в чем не бывало.
          • 0
            Я в принципе спрашиваю, каким образом РКН хочет действенно блочить IPv6, раз они пишут, что обладают такой технологией.
            Какие варианты?
            • 0
              Да, в общем-то, также, как и с IPv4. Ничего особо измениться не должно.
              • 0
                Боюсь представить такой реестр ))
                • 0
                  Так его объём определяется не объёмом адресного пространства, а производительностью операторов (которые люди), так что не принципиально изменится. Пространство доступных url-ов гораздо больше ipv6, что ни чуть не смущает РКН.
                  • +1
                    Ну просто мигрировать можно чуть менее, чем бесконечно и ежесекундно)
      • +1
        Я давно думаю как только начнут банить ipv6 сделать сервер, который на каждый третий ipv6 будет отдавать «плохой» контент, а на остальных — котиков.

        Одной /64 будет достаточно, чтобы роскомнадзор прекратил вести любые конечные списки.
        • 0
          Можно вообще повесить всю /64 на один сервер и сделать ротатор адресов, скажем, каждые 5 минут. Во потеха будет!
          • +3
            Так список не будет пухнуть, либо /64 забанят.

            А так надо будет просто тупо сабмитить (с использованием краудсорсинга) новые и новые ссылки. Старые при этом работать будут продолжать.

            Как сделать… Я об этом уже думаю, вероятнее всего, связка scapy и автопрописывания запрошенного через neighbor solicitation на интерфейс. Или, в более масштабном варианте, хитрое правило iptables, которое будет делать mangle для проходящего трафика (для этого надо будет иметь routable /64) на один из двух локальных адресов (хороший и нет) с автовозвратом «предыдущего» адреса.

            Что-то типа DNAT'а.

            В этом случае «плохие» адреса будут валидны и их надо будет продолжать держать. А отправка новых будет продолжаться. Бан же /64 должен будет привести к вою о невинно замученных котятах (или какой-нибудь другой душещипательной организации, вроде «дворники Москвы за интегрируемость по контуру» (реальная организация, кстати) с привлечением тяжёлой артиллерии в форме прессы.
            • +2
              Ну и введут тогда не чёрный список, а белый.
              • 0
                Так они уже начали. Проект для бесплатного доступа к определённым сайтам (госорганы, сайты каналов из зомбоящика и ещё парочка) это уже белый список… и да, википедии в нём нет.
  • +1
    указанный в Вашем обращение адрес http://[2001:0:9d38:6ab8:30c4:d940:9469:f43e]/ требует обязательной регистрации/авторизации.


    И зацвела сакура в душе моей!
  • 0
    Я правильно понимаю, что стоит РКН сделать звонок мелкомягким и всё? )
    Или этот teredo довольно глубоко встроен в систему?
    + что делать пользователям, которые не на винде?
    • 0
      Пользователям не на винде достаточно установить miredo и настроить его на сервер Microsoft.
      Teredo встроен в систему, да.
      • +2
        1) Необходима простая инструкция, как установить и сделать, доступная для понимания домохозяйки
        2) Как глубоко встроен, критичен ли для важных функций винды? Или как уже написал — без ущерба могут вынести после настоятельной просьбы того же РКН?
        • 0
          1) Под какие ОС?
          2) Microsoft давно от него хотят отказаться, он не критичен. Я очень, очень сомневаюсь, что Microsoft будет что-то выключать по просьбе из России.
          • 0
            1) под наиболее популярные)
            Ну если хотим, чтобы люди этим пользовались.
            • 0
              Какие? OS X? Linux? На Android, думаю, можно с горем пополам, но на iOS — нельзя.
              • 0
                XP, OSX, Linux, Android.
                Пошагово, конечно же) Если делать ликбез.
                • +1
                  В XP он скорее не работает, чем работает. Ну и, серьезно, XP, в 2015 году?
                  • 0
                    Удивительно, но да )
                    Доля Windows XP увеличилась в январе 2014 года


                    Годовой давности, но не думаю, что цифры радикально изменились
                    image
                    • +2
                      Нашел посвежее, на декабрь 2014, да, уменьшилась доля, но всё равно еще довольно существенная
                      image
                      • 0
                        Забавно, что доля Вин7 выросла примерно на столько же, насколько Вин8 и Вин8.1 вместе взятые.
                        • 0
                          Ничего забавного, забудем об особенностях реализации гуя для десктопа в 8.x, но ведь там много чего поломано в ядре, начиная с дичайших тормозов при обращении к localhost и заканчивая ещё пачкой очень противных багов именно внутри ядра, которые появились в 8 и до сих пор не исправлены даже в последних патчах для 8.1.

                          До кучи из моих личных впечатлений, есть у меня планшет с 8.1 (единственное устройство откуда из-за UEFI я просто не смог её снести под корень и поставить что либо нормальное), так там течёт видео драйвер от Intel (sic!) и нет возможности отключить дисплей без перевода устройства в сон, т.е. нельзя например музыку послушать с выключенным экраном, это просто FAIL.

                          Ещё из очень противного — в 8ке под корень сломали режим совместимости для запуска старого ПО, т.е. если в 7ке что либо не работало можно было выбрать совместимость с XP и софт оживал. В 8 эти селекторы вообще ни на что влияют и софт как не работал так и не работает.

                          Вот отсюда и непопулярность.
                          • 0
                            Я это всё знаю и согласен. Я имел в виду «забавно» в плане «это ж надо было такую хрень сделать!»
                • 0
                  Дополню ValdikSS в XP проблема не в поддержке Toredo, а вообще, фактически, не работающий IPv6. Никакие дополнительные апдейты и ковыряния реестра ему не помогает, гибридный стек там просто не работает и всё и починить сие невозможно.
                  • 0
                    Да почему, там, вроде, более-менее работающий стек. По крайней мере, использовал OpenVPN с IPv6 на Windows XP.
                    • 0
                      Хм, странно, просто когда я пробовал у меня не получилось от слова совсем. Более того попытки использовать IPv6 через некоторое время приводили к полному отвалу подключений по IPv4. Возможно этой проблемы сейчас уже и нет ибо дело было в конце 2011 года.
                      • 0
                        У меня конечно XP 64 но ipv6 на нем настроил. Вырубил правда все приватные адреса. Раньше глюк был с попытками XP используя приватный ipv6 подключится к внешнему сайту.
        • 0
          Встроен неглубоко. Вынести без ущерба могут (но только для новых дистрибутивов).
  • 0
    Как быть с teredo, если перед компом роутер стоит?
    • 0
      Должно работать, только если NAT не симметричный.
      • 0
        Поменял у teredo тип клиента:
        netsh interface ipv6 set teredo enterpriseclient

        Напрямую кабель провайдера воткнул в ноут с Win 7. Teredo работает. (провайдер 1 без PPoE)
        А через роутер с OpenWRT на борту не работает. (провайдер 2 Ростелеком с PPoE)
        • 0
          А OpenWRT случаем 6to4 трафик не режет?
          • 0
            Как это проверить на OpenWRT?
          • 0
            Да нет, не должен по умолчанию. Но 6to4 нужно на нем (роутере) настраивать. Или вы имели ввиду Teredo? Teredo не режет.
            • 0
              Teredo имел ввиду конечно же, благодарю за поправку.
  • +1
    Windows 8. Ссылки не открываются. Пошёл в диспетчер задач, включил отображение скрытых устройств. Увидел Teredo, но он не работает. Пишет что адаптер не подключен и код ошибки 45.
    Скриншот

    • 0
      Странно, у меня его вообще нет в дистпетчере устройств. 8.1, правда. А ipconfig /all что говорит по этому поводу?
      • 0
        В диспетчере устройств Teredo скрытый.

        ipconfig /all показывает только isatap. Это вроде что-то другое*
        ipconfig /all

        Tunnel adapter isatap.ASUS:

        Media State...........: Media disconnected
        Connection-specific DNS Suffix.:
        Description...........: Microsoft ISATAP Adapter
        Physical Address.........: 00-00-00-00-00-00-00-E0
        DHCP Enabled...........: No
        Autoconfiguration Enabled....: Yes

        Tunnel adapter isatap.{14F00822-23E7-4468-A275-CA06299FB46E}:

        Media State...........: Media disconnected
        Connection-specific DNS Suffix.:
        Description...........: Microsoft ISATAP Adapter #2
        Physical Address.........: 00-00-00-00-00-00-00-E0
        DHCP Enabled...........: No
        Autoconfiguration Enabled....: Yes

        • 0
          Странно всё это. Проверьте на всякий случай, может у вас IPv6 отключён? Выше писал подробнее habrahabr.ru/post/252611/#comment_8324437
  • 0
    Эх пойду сейчас опять 6to4 настраивать на роутере.
    • 0
      Не заработает с ним. Нужен именно Teredo с сервером Microsoft.
      • 0
        Это немного офтопика. Просто про ipv6 напомнили. Я его пробовал через 6to4 но некоторые сайты работали через него плохо а потом и вообще поломал настройки на роутере.
  • 0
    А если у меня обычный IPv6 работает, я в пролёте?
    UPD: таки да.
    • 0
      Ну, при правильной реализации вы не будете в пролете. Моя конечная идея заключается в написании javascript-штуки, которая будет определять возможность использования teredo или ipv6 и выбирать, через что подключаться.
  • 0
    Есть и другие приличные способы получить IPv6 связность, не только тередо.
    • 0
      Конечно есть, вот только если получать доступ к сайту с Teredo, настроенным на сервер Microsoft, ничего не нужно настраивать на клиенте Win 7, 8 и 8.1 не нужно вообще.
  • 0
    > и использует сервер Teredo от Microsoft (teredo.ipv6.microsoft.com).

    А если его заблокируют?
    • 0
      Если его заблокируют, будет плохо. Но пока это, насколько я знаю, легально юридически невозможно.
      • 0
        > Но пока это, насколько я знаю, легально юридически невозможно.

        До принятия закона о блокировке анонимайзеров (который предложили принять месяц назад, см. top.rbc.ru/technology_and_media/05/02/2015/54d331379a79474a7f17c8dd ).
        (технически это не анонимайзер, но вряд ли определение анонимайзера в законе будет техническим, а не «любая штуковина, которой можно обойти блокировки»)
        • +1
          Вообще с аномайзерами всё очень плохо. В разговоре с представителем РКН я на 100% понял, что сервисы, вроде CloudFlaire это аномайзер поскольку он скрывает реальный IP сервера и это им очень сильно мешает работать ибо CloudFlaire на их филькины грамоты реагирует вяло и контактные данные владельцев ресурсов отдаёт с большой задержкой, т. е. они хотят поблочить всё, что хоть как то транслирует трафик, а под такую формулировку попадёт что угодно и прокси и кэширующие сервисы и сервисы защиты от DDoS.
        • 0
          Вот собственно сыылка на обсуждение, чтите отсюда и ниже.
  • 0
    Если у вас не открываются teredo сайты в Chrome, не спешите грешить на teredo.
    После получаса поиска проблем в teredo, я, внезапно, понял, что пинги-то идут!

    Проблема Chrome: чтобы открывать ipv6 сайты нужно запустить его с флагом --enable-ipv6
    • 0
      Это довольно странная проблема. По идее, в Chrome только DNS-резолвер настроен на игнорирование Teredo, и многие версии (последние) Chrome открывают Teredo-сайты по IP без --enable-ipv6. Как это связано — непонятно, но такое действительно имеет место быть.
      • 0
        Это не в Chrome проблема, а в Windows. Исправляется (для всех приложений) такой записью в реестре:

        reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Dnscache\Parameters /v AddrConfigControl /t REG_DWORD /d 0
        • 0
          Нет, речь не об этом. На 5yo.panty.shot.valdikss.org.ru идет перенаправление на IP Teredo (через 307), т.е. lookup совершаться не должен, и это работает для большинства пользователей хрома, но в некоторых версиях хрома это все равно сломано как-то.
  • 0
    8.1 подцепляется по v4 к роутеру, на роутере только v4 получаемый через L2TP, он v6 в-принципе не понимает (модуль в зухеле не установлен)
    Canary запускаю с ключем --enable-ipv6
    не работает
    с такой конфигурацией что-то светит вообще?
    • 0
      У вас Teredo работает? ipconfig /all проверьте.
      • 0
        Спасибо, проверил, увидел ISATAP, почистил DNS в настройках IPv4, ребут — нашёл Teredo, заработало!

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