Как известно, в 2007 году кроме того, что деревья были выше, а трава зеленей, еще и в Интернете не было особых ограничений - можно было открыть почти любой сайт и наслаждаться им. До ковровых блокировок Telegram оставалось ещё 10 лет... К сожалению, в наше время такой возможности уже нет. Причины тут всем известны, в частности, некоторые компании уже не предоставляют своих услуг в России.

Хорошо, что существует возможность в рамках домашней сети восстановить свободный Интернет таким, каким он был в 2007-м. Именно этим мы и займемся. Стоит отметить, что в 2007 году довольно часто можно было встретить подключения на скорости 64-128 Кб/с, а то и вовсе dial-up; Wi-Fi был редкостью, а мобильная связь - довольно дорогим удовольствием. Однако, эти особенности того времени мы постараемся не воспроизводить.

Представляю вашему вниманию Freeroute - простой маршрутизатор, который позволяет направлять трафик на разные шлюзы в зависимости от домена назначения. Free в названии, как водится, означает свободный, а не бесплатный.

Справедливости ради отмечу, что закон об ограничении доступа к сайтам, нарушающим авторские права, был принят в 2006 году. Но очень уж хотелось написать и про деревья, и про траву, и про 2007 год.

Github проекта

Откуда идея

Помню, как я сделал себе первый VPN-сервер. Это было как раз во времена блокировок Telegram. Тогда я поехал в незнакомый для меня город, а Яндекс карты и Google Maps отказались работать - я не мог найти нужный мне адрес. В тот же вечер я сделал себе VPN-сервер, чтобы такое больше не повторялось.

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

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

Последней каплей стало то, что перестал работать GitHub Copilot - и мне пришлось постоянно сидеть с VPN. Поэтому я решил, что настало время воплотить мою идею в жизнь.

Как это работает

Я создал Freeroute. Это простой сервис на Python с небольшой админкой на React. Github проекта.

Freeroute устанавливается на отдельную машину с Linux в домашней сети (подойдёт также виртуальная машина в режиме моста). Адрес этой машины устанавливается на клиентах или на DHCP-сервере в качестве шлюза по умолчанию и DNS сервера. Freeroute резолвит DNS-запросы клиентов, получает IP-адреса запрашиваемых доменов и перенаправляет трафик на соответствующие IP-адреса через нужный шлюз согласно спискам доменов. Перенаправление трафика реализовано с помощью команды ip route add.

Списки доменов можно настраивать в админке. На самом деле они включают суффиксы. Т.е., если в списке есть bbc.com, запросы на www.bbc.com тоже будут перенаправляться в соответствующий шлюз.

Также по умолчанию Freeroute раз в час будет скачивать списки заблокированных сайтов с https://antifilter.download/, спасибо коллегам за их замечательный сервис.

Возникает вопрос, почему не используется список IP-адресов заблокированных ресурсов с того же сайта? Для этого сразу несколько причин. Во-первых, этот список не решает проблему с Copilot и другими сервисами, которые не работают в России по собственному желанию. Во-вторых, данный список не совсем точный, например, в нем есть некоторые адреса youtube, что приводит к тому, что youtube берет местоположение VPN. В-третьих, списки IP-адресов сложнее редактировать, чем списки доменов, ну и IP-адреса, бывает, меняются. Ещё такой подход помогает бороться с замедлениями трафика, это полезно, например, для Twitter, который не заблокирован полностью, а поэтому его нет в списках заблокированных доменов, но он замедлен до той степени, что им невозможно пользоваться.

То же самое можно было бы сделать с помощью связки dnsmasq + nftables. Но такое решение имеет фатальный недостаток (если вы понимаете, о чём я), да и редактировать списки доменов там не так удобно. Пришлось бы что-то придумывать с автоматическим обновлением списков antifilter.

Установка и настройка

В каталоге с релизом есть скрипт install.sh, который установит Freeroute и настроит его. Этот же скрипт установит и настроит OpenVPN клиент.

Предполагается, что Freeroute будет развернут на чистой Debian 11 или 12. В итоге сервис будет работать от имени непривилегированного пользователя, а перенаправление трафика будет происходить с помощью команды sudo ip route. DNS-сервер будет работать на порту 5553, поэтому скрипт также настроит nftables, чтобы трафик с 53 порта перенаправлялся на 5553.

Запускается Freeroute от имени обычного пользователя с sudo-правами.

Для установки Freeroute, выполните следующие шаги:

  1. Скачайте последний релиз отсюда

  2. Распакуйте архив tar -xzf freeroute.tar.gz

  3. Запустите скрипт установки:

sudo ./install.sh <network interface> <openVPN config file>
-- или --
sudo ./install.sh <network interface> <openVPN config file> -u <username> -p <password>

где:

  • <network interface> это основной сетевой интерфейс машины (например, eth0), через который она подключена к интернету;

  • <openVPN config file> это конфигурационный файл OpenVPN;

  • <username> и <password> это имя пользователя и пароль для VPN. Это опционально и заполняется, только если VPN требует аутентификации.

Настройка клиентов

В настройках DHCP домашнего роутера укажите адрес Freeroute в качестве шлюза по умолчанию и DNS сервера. Например, для своего Keenetic я сделал такие настройки:

Настройки DHCP
Настройки DHCP

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

Файл конфигурации

В файле config.yaml находится конфигурация Freeroute. В нём можно настроить следующие параметры:

  • списки VPN подключений (по умолчанию будет одно, которое было задано при установке), но может быть полезно, если нужно подключаться к разным VPN, например, перенаправить трафик Steam через Казахстанский VPN;

  • списки доменов, которые нужно перенаправлять через VPN;

  • автообновление списков доменов и периодичность их загрузки;

  • на каком порту будет работать DNS-сервер;

  • на каком порту будет работать админка;

  • уровни логирования.

Списки доменов сохраняются в каталоге вместе с конфигом, и имеют имя вида list_<domain list name>.txt.

Ручные списки доменов применяются в том порядке, в котором они указаны в конфиге, затем применяются списки, загружаемые автоматически.

Существует особый список force_default, содержащий домены, которые всегда будут направлены по прямому соединению. Это нужно для того, чтобы была возможность переопределить поведение автоматически загружаемых списков. Например, это решает проблему с youtube - она существует и для доменов тоже, а не только для IP.

Админка

Админка доступна по адресу http://<ip адрес>:8080/index.html. Здесь можно настроить списки доменов, а также посмотреть логи - какой адрес разрезолвился в какие IP-адреса и в какой шлюз трафик был направлен. Внешний вид админки представлен на скриншоте:

Внешний вид админки
Внешний вид админки

Дальнейшие планы

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

Вот список того, что можно ещё сделать:

  • сделать контейнер Docker;

  • сделать админку более красивой и удобной;

  • написать тесты;

  • переписать сервис на C, чтобы проект можно было запускать прямо на слабых роутерах (возможна интеграция с https://github.com/karen07/antiblock);

  • улучшить работу DNS сервера, сейчас он резолвит только записи A и CNAME;

  • добавить поддержку IPv6;

  • добавить возможность подключаться к вышестоящему DNS серверу через DoH или DoT (сейчас это можно сделать на роутере).

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


  1. nipper
    09.07.2023 18:03
    +4

    Чем это решение лучше Pi-hole, например?


    1. Actaeon
      09.07.2023 18:03
      -2

      Ну тем, что на ozone, например оно стоит от 10 до 20 килорублей.Когда аналогичный ноутбук в ломбарде обойдется в 5-8, причем у него уже есть, дисплей и аккумуляторы способные продержаться минут 20 ...
      Не говоря уже о том, что он и в тумбочке может лежать.


      1. MiraclePtr
        09.07.2023 18:03
        +14

        Что, простите? Pi-Hole бесплатный, опенсорсный, его можно установить в том числе и на старый ноутбук, про который вы говорите, он работает везде где работает Linux.


        1. serafims
          09.07.2023 18:03

          Человек про железо имел в виду...


          1. MiraclePtr
            09.07.2023 18:03
            +8

            Так а про железо в изначальном комментарии речь и не шла.


    1. hrad
      09.07.2023 18:03
      +9

      Тем, что pi-hole нацелен в первую очередь на блокировку рекламы и трекеров, а это в первую очередь средство обхода блокировок сайтов.

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


      1. nitro80
        09.07.2023 18:03
        +3

        Их скрестить и вообще будет радость) Обход блокировок и резалка рекламы.


        1. L11R
          09.07.2023 18:03
          +1

          Я на микротике настроил обход через BGP+Wireguard + выделенный сервер с AdGuard Home, Mikrotik нынче DoH поддерживает.


  1. nikhotmsk
    09.07.2023 18:03
    -4

    Добавить кеширование содержимого страниц и доделать наконец децентрализованный интернет...


    1. ugenk
      09.07.2023 18:03
      +8

      Вы наверное имели ввиду гипертекстовый фидонет :-)


      1. nikhotmsk
        09.07.2023 18:03

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


        1. nitro80
          09.07.2023 18:03

          Скорость наверно дико упадёт


        1. Nikita_Sergeevich
          09.07.2023 18:03
          +1

          Это актуально для web1.0 статичного контента. Но что делать с web2.0, где контент динамический, есть авторизация для выдачи ролей и т.д.? Или по вашей задумке узлы будут кэшировать и бэкэнд часть в зашифрованном виде?


  1. Actaeon
    09.07.2023 18:03
    +2

    В принципе хорошо. Только есть вопросы : DNS у вас ресолвится через vpn по умолчанию ??


    1. admitrievsky Автор
      09.07.2023 18:03
      +4

      DNS на клиентах резловится через Freeroute. Сам Freeroute использует DNS, который настроен на машине, где он установлен. Я немного писал, что на роутере можно настроить DoH или DoT, и сделать так, чтобы Freeroute использовал DNS роутера. Тогда провайдер не сможет иметь доступ к DNS трафику.

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


  1. IgorPie
    09.07.2023 18:03
    +5

    Были проекты и под роутеры (Router OS, Open WRT), которые делали примерно то же самое.

    Что-то вроде такого: https://habr.com/ru/articles/467471/ , https://habr.com/ru/articles/549282/ и так далее.



  1. LuigiVampa
    09.07.2023 18:03
    +11

    Добрый вечер. Интересный проект, спасибо за статью!

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

    Я делал себе в своё время похожую систему основанную на policy based routing, настроил клиентское vpn-соединение, получил новый сетевой интерфейс в дополнение к основному, и теперь я вроде как могу управлять тем какой куда трафик отправлять с помощью ipset. Мне не нужны были обходы блокировок абсолютно всего что заблокировано, и всего списка antifilter, только некоторых сайтов. Основной загвоздкой было вот что - ipset управляет именно адресами, но не доменами и не сессиями в браузере, о браузерах, приложениях и других прикладных штуках он вообще ничего не знает. Постараюсь пояснить:

    1) Допустим я открываю сайт, например условный инстаграм, вижу что он заблокирован. Я могу добавить домен инстаграма в список перенаправляемого в туннель, однако помимо основного домена там подгружается ещё целая куча всего, разные домены s3 хранилищ, какие-то укороченные домены, плюс всякие интеграции и т.д. Многие из них не входят в вайлдкард и не являются субдоменами основного домена. Поэтому приходится кропотливо забивать их руками, пока сайт не загрузится, после чего ещё забивать руками все вторичные домены, пока сайт не просто загрузится, но ещё и станет исправно работать. Некоторые ресурсы начинают сходить с ума когда часть контента загрузилась через WAN, а часть через TUN. Домены могут переименовываться, добавляться и удаляться. Постоянно обновлять этот список - кропотливая работа, которая со временем жутко надоедает. Я не знаю как можно удобно решить эту проблему. Вы с таким сталкивались? Как получилось решить эту проблему?

    2) Далее, допустим я добавил правила для перенаправления всех доменов. Список для ipset и таблица маршрутизации составляется в момент запуска сервиса, для каждого из доменов резолвятся его IP адреса, после чего сервис запоминает их и начинает работать. Многие ресурсы крупных компаний хостятся через cloudflare (блок IPv4 адресов 104/8 и ещё несколько), там на ресурсах может часто происходить ротация IP адресов. Или другая ситуация round-robin отдал сначала один адрес, а через некоторое время другой. Получается что policy-based-routing запомнил определённые адреса, но спустя какое-то время запрос на тот же самый ресурс будет выполнен уже к фактически другому IP адресу, и не попадёт в туннель, а пойдёт в обычный WAN. Для того чтобы всё починить нужно вручную перезапустить сервис policy-based-routing, что, разумеется, неудобно и неприятно и опять требует отвлечения внимания от текущих задач. При этом наглухо зароутить в туннель весь блок 104/8 тоже нельзя, потому что на нём хостится очень много разных ресурсов, включая российские и они начнут сходить с ума и неадекватно работать, либо будет постоянно бросаться капча и т.д. В результате хотел выборочно обойти блокировки, а по итогу - только сам себе заблокировал доступ к целой горе незаблокированных ресурсов. У вас как-нибудь получилось решить такую проблему?

    3) Допустим я хочу забить в ipset чисто IP адреса, без оглядки на домены. Т.е. получить все возможные адреса компании, строго забить их и забыть про все неудобства связанные с доменами. Тут опять облом, потому что получить полностью все адреса не всегда легко. Не везде эту информацию можно легко найти, не так просто их взять и собрать, плюс опять же проблема с блоками cloudflare - адреса могут постоянно плавать в них и ротироваться. Этот подход ещё менее надёжный чем с управлением доменами. Как всё-таки вы поступаете - работаете с доменами или с адресами?

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

    Спасибо!


    1. VADemon
      09.07.2023 18:03
      +2

      Я очень хочу пользоваться чем-нибудь подобным, что решает задачу выборочного обхода блокировок

      Wireguard позволяет поднять тунель VPN внутри отдельного network namespace. Получается есть default net NS, в котором обычный трафик до провайдера, а рядом VPN NS, который шлет через VPN. После этого легким движением руки... легким движением руки... отдельный браузер/профиль браузера запускается в другом namespace и через него ходится через VPN.

      Проблема с этим есть, использование. Во-первых, обычный xdg-open не знает этих ваших тонкостей и пошлет ссылку из программы в стандартный ИЛИ последний браузер. Более того, запущенный мульти-процесс может оказаться не в том пространстве имён, где вы его ждали. Как себя поведет дальше браузер?

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


      1. LuigiVampa
        09.07.2023 18:03

        Добрый день, спасибо за ответ.

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


        1. VADemon
          09.07.2023 18:03
          +1

          Если в сторону легковесности, то только силами самого браузера. По-моему было какое-то расширение от антиблокировщиков, которое автоматом прокси выбирало. Но теперь вроде этот же функционал реализован у Mozilla на уровне tab containers, для интеграции "Mozilla VPN" - типа каждому контейнеру свой прокси сервер. Не знаю, можно ли приспособить под себя.


    1. MountainGoat
      09.07.2023 18:03

      *.ru - напрямую. Остальное - в тоннель.


    1. admitrievsky Автор
      09.07.2023 18:03
      +2

      Проблема №1 решается тем что, у проекта есть админка и хорошо видно, какие домены разрезолвились в последнее время, после чего их можно добавить в соответствующие списки (напомню, что записи в списках являются суффиксами, что позволяет не добавлять поддомены). Для моих целей хватило antifilter и ручного заполнения списков до момента, пока я не сделал админку, сижу с такой конфигурацией пару месяцов, списки менял пару раз.

      Не до конца понял проблему №2. Мы перехватываем каждый DNS запрос, и все разрезовленные адреса добавляем в таблицу маршрутизации с помощью `ip add`. Если при разных запросах к одному домены возвращаются разные адреса, то мы всё равно все эти адреса перехватим и поместим куда на надо.

      По проблеме №3. Я тоже сначала отталкивался от IP адресов, у antifilter даже список есть, но это оказалось менее удобно, чем если отталкиваться от доменных имён.


      1. LuigiVampa
        09.07.2023 18:03

        Спасибо за ответ.

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

        По второму - я имел ввиду то, что у вас не возникает проблемы с "кэшем" dns? Т.е. когда адреса фактически сменились, но утилита занимающаяся маршрутизацией ещё отправляет в туннель старые адреса, в то время как фактически уже используются новые?


        1. admitrievsky Автор
          09.07.2023 18:03
          +1

          1. Да, именно так работает админка.

          2. Можно сделать, чтобы перенаправление отменялось, когда истекает TTL у записей, но мне этот функционал не потребовался, и перенаправление сейчас делается навечно. Для популярных сервисов этого достаточно. Исключение сделано для админки - если домен попадает в другой список, то таблица маршрутизации обновляется для всех ip, когда-либо полученных для этого домена.


    1. solver
      09.07.2023 18:03

      Не знаю какой у вас роутер и где вообще вы это настраиваете.
      Но например, тот же AdguardHome умеет работать с ipset и обновлять его полученными адресами для доменов.
      При этом работают и сабдомены. Т.е. указав в списке dom.com, вы автоматом получаете все домены *.dom.com.
      Вариант настройки для кинетка. 100% проблем это конечно же не решает, но работа с сабдоменами уже убирает кучу возни. Плюс фильтр рекламы срау.
      https://forum.keenetic.com/topic/16441-adguard-home-для-выборочного-обхода-блокировок/


  1. Wesha
    09.07.2023 18:03
    +10

    Возвращаем 2007 год, или делаем Интернет без блокировок

    Эх, кто б мне 1998-й вернул — чтобы ещё и без спама, с работающим SMTP.


    1. breninsul
      09.07.2023 18:03

      а в 2007 не работал smtp?


      1. Wesha
        09.07.2023 18:03
        +3

        В 2007 ещё работал. А сейчас — чёрта с два найдёшь хоть один open relay. Более того, многие сервера (некоторых частных компаний) вообще закуклились — не принимают прямое соединение вообще — только от монстров а-ля gmail.


        1. anonymous
          09.07.2023 18:03

          НЛО прилетело и опубликовало эту надпись здесь


          1. Wesha
            09.07.2023 18:03

            Не знаю, в 1994 всё летало со свистом. Особо прифигевали, когда писали знакомому в какой-нибудь MIT и получали ответ через минуту.


            1. anonymous
              09.07.2023 18:03

              НЛО прилетело и опубликовало эту надпись здесь


  1. Enverest
    09.07.2023 18:03
    +3

    Вроде так же работает АнтиЗапрет.


  1. L11R
    09.07.2023 18:03
    +11

    Я недавно тоже решал эту проблему. Мне Антизапрет показался не очень стабильным + требует специальный сервер. Мне показалось интересным решить проблему иначе. У китайцев есть крутые инструменты, которые позволяют выборочно проксировать необходимые IP и домены с помощью правил. Очевидно прописать сотни тысяч правил в конфиге не вариант, поэтому я создал генератор баз geoip и geosite: https://github.com/L11R/antizapret-sing-box-geo

    Плюс в том, что вам достаточно любого прокси в качестве транспорта. Будь это обычный SOCKS, Shadowsocks или что-то извращенное типа XTLS-Reality.

    Итоговый конфиг для sing-box может выглядеть так, будет работать на Linux или Android:

    {
      "log": {
        "level": "warn"
      },
      "dns": {
        "servers": [
          {
            "tag": "adguard-home-dns",
            "address": "https://REDACTED/dns-query/singbox",
            "address_resolver": "yandex-dns",
            "detour": "direct-out"
          },
          {
            "tag": "yandex-dns",
            "address": "77.88.8.8",
            "detour": "direct-out"
          }
        ]
      },
      "inbounds": [
        {
          "type": "tun",
          "inet4_address": "172.16.0.1/30",
          "auto_route": true,
          "sniff": true
        }
      ],
      "outbounds": [
        {
          "type": "direct",
          "tag": "direct-out"
        },
        {
          "type": "wireguard",
          "tag": "wireguard-out",
          "server": "REDACTED",
          "server_port": 51820,
          "system_interface": true,
          "local_address": [
            "10.252.0.1/32",
            "2600:xxxx:xxxx:cafe::1/128"
          ],
          "private_key": "REDACTED",
          "peer_public_key": "REDACTED",
          "pre_shared_key": "REDACTED"
        },
        {
          "type": "dns",
          "tag": "dns-out"
        }
      ],
      "route": {
        "rules": [
          {
            "geoip": "antizapret",
            "geosite": "antizapret",
            "outbound": "wireguard-out"
          },
          {
            "protocol": "dns",
            "outbound": "dns-out"
          }
        ],
        "geoip": {
          "download_url": "https://github.com/L11R/antizapret-sing-geosite/releases/latest/download/geoip.db"
        },
        "geosite": {
          "download_url": "https://github.com/L11R/antizapret-sing-geosite/releases/latest/download/geosite.db"
        },
        "auto_detect_interface": true
      }
    }
    


    1. L11R
      09.07.2023 18:03
      +2

      @MiraclePtr, учитывая твой цикл статей, тебе наверно такое решение было бы интересным)


    1. XRay108
      09.07.2023 18:03
      +4

      Боже, наконец-то нашёл то, что давно искал. Спасибо тебе за труды)


  1. serafims
    09.07.2023 18:03
    +1

    Видится решение ещё в неком анализе на основе тест-запросов, когда идёт первый запрос на ранее невбитый адрес: смотрим, если нет ответа, то пробуем через vpn.

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


    1. vadimk91
      09.07.2023 18:03
      +1

      Вот кстати, с ответом-заглушкой столкнулся недавно, и это... поиск на гугле. У меня по умолчанию для ipv6 на роутере туннель до HE (провайдер не поддерживает ipv6). Так вот, с начала июля при поиске получаю ошибку 403 на любом устройстве, любом браузере, по ipv4 всё работает. Как это починить, пока не сообразил.


      1. slonopotamus
        09.07.2023 18:03

        О, такая же фигня. Пинганите плиз если разберётесь как это исправить.


      1. ZlobniyShurik
        09.07.2023 18:03

        Хм, а я, наивный, думал, что это только конкретно мне так не повезло. Тоже IPv6 через HE и, соответственно, 403 от гуглопоиска с недавних пор.


  1. Neykem
    09.07.2023 18:03
    +5

    Ну в 2007 конечно не вернешься, но юзинг впн в снг уже постоянный и принципе его выключать уже-то и смысла нет, разве что ради какого нибудь ютуба и тп, но с учетом тенденций это тоже временно)))


    1. DennisP
      09.07.2023 18:03

      Не все сайты работают через ВПН (а точнее, с ip дата-центров) - или вообще не пускают, или изводят капчами.


    1. kaichou
      09.07.2023 18:03
      +2

      Ну почему только в СНГ, это уже везде актуально.


  1. Alexzionx
    09.07.2023 18:03
    +2

    Надо бы это дело в докер под арм. На след выходных может стряпаю.


  1. DennisP
    09.07.2023 18:03
    +1

    Как альтернатива - ssh туннель с сокс проксей, плюс foxyproxy (плагин для браузера, который меняет прокси в зависимости от адреса сайта)


  1. ZombieDogi
    09.07.2023 18:03

    Доброго времени суток

    Мой вопрос возможно покажется очень глупым, но возможно ли подобный механизм провернуть на уже работающем сервере Synology, но правда без статического IP?


    1. apbyiyp
      09.07.2023 18:03

      Так синолоджи это же по сути файлопомойкА, если меня не подводит память? Опять же без статического IP внешний роутер разве что только по имени будет маршрутизировать.


  1. FireWind
    09.07.2023 18:03

    Хм, а что то подобное есть под Win10? То же хотелось бы только определенные запросы заворачивать на VPN, оставляя остальное по обычным маршрутам.

    И еще, как идея - есть ли возможность указывать несколько конкретных VPN в настройках? Например - что то на VPN в одной локации, что то - на VPN в другой локации.


    1. admitrievsky Автор
      09.07.2023 18:03

      Касательно Freeroute: не пробовал, но может заработает под WSL2. Ну или виртуалку под виндой поднять.

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


    1. Didimus
      09.07.2023 18:03

      Как костыль - держать два браузера для незакрытых или заблокированных сайтов. В одном включен функционал обхода, во втором нет


    1. RadicalDreamer
      09.07.2023 18:03

      Использую связку SSH туннель + proxifier под Windows 7, в самом proxifier можно указать разные прокси (или прямое соединение) для разных сайтов / приложений.


  1. Inflame
    09.07.2023 18:03

    То же самое можно было бы сделать с помощью связки dnsmasq + nftables. Но такое решение имеет фатальный недостаток (если вы понимаете, о чём я)

    О каком недостатке речь?



  1. npkfrolov
    09.07.2023 18:03

    Скажите пожалуйста, а помогает ли Ваше решение бороться со свежими способами блокировки - насколько я понимаю, сейчас тестируется блокировка OpenVPN как такового - то есть не по ip ресурса, а через выявление пакетов vpn-трафика и их отбрасывание? Мне кажется, что нет(((


    1. admitrievsky Автор
      09.07.2023 18:03

      Скорее всего не помогает, но зависит от того, как будут блокировать. Поможет, если будут блокировать только те vpn, через которые идёт бОльшая часть трафика от домохозяйства, а vpn, которые используются для "работы" блокировать не будут, ведь с такой системой только небольшая часть трафика идёт через vpn.


      1. victor_1212
        09.07.2023 18:03

        > зависит от того, как будут блокировать

        вообще стоит для начала внимательно посмотреть как эта музыка играет, если правильно понимаю hw типа этого -

        https://habr.com/ru/news/747094/

        https://www.rdp.ru/products/service-gateway-engine/

        https://www.rdp.ru/wp-content/uploads/datasheets/ru/RDP-EcoFilter-Datasheet-RU.pdf

        https://www.rdp.ru/doc/ENATD/EcoSGE-UserGuide.pdf

        https://www.rdp.ru/doc/ED/ER_UserGuide.pdf

        спецификация довольно общая, тем не менее полезная, например

        "Самой распространенной на сегодняшний день
        схемой URL-фильтрации в РФ является метод, при
        котором на систему фильтрации направляется не весь
        трафик, а лишь его небольшая часть, предварительно
        отфильтрованная маршрутизаторами (ACL, «оттягива-
        ние» BGP-маршрутов и др.).
        ...
        В решении EcoFilter предусмотрены механизмы
        обнаружения URL в запросах HTTP, даже если
        абонент использует средства обхода блокировки
        (доступ с использованием нестандартного порта
        на сервере, маскировка URL путем фрагментации
        GET-запроса, использование нестандартной последо-
        вательности заголовков и др.)."


    1. L11R
      09.07.2023 18:03

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


  1. mosx1
    09.07.2023 18:03

    Так это на клиенте или на сервере на настраивается? Простите если упустил этот момент


    1. admitrievsky Автор
      09.07.2023 18:03

      Freeroute устанавливается на отдельной Linux машине внутри локальной сети, подойдёт виртуалка. Клиенты настраиваются на использование этой машины в качестве шлюза в Интернет.


      1. mosx1
        09.07.2023 18:03

        не очень удобно. Хорошо бы на роутер такое решение или на сервер на котором крутится ovpn


        1. nitro80
          09.07.2023 18:03

          Такое бы решение на vps в пределах РФ.

          VPN до этой vps, что бы провайдер не видел активности и не вмешивался в dns.


  1. Evgeny1503
    09.07.2023 18:03

    Ещё вариант, https://github.com/qzeleza/kvas


    1. DimonCJ
      09.07.2023 18:03

      Квас хороший но ему не хватает подгрузки списков и админки


  1. imurd
    09.07.2023 18:03

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

    "В итоге сервис будет работать от имени непривилегированного пользователя, а перенаправление трафика будет происходить с помощью команды sudo ip route. DNS‑сервер будет работать на порту 5553, поэтому скрипт также настроит nftables, чтобы трафик с 53 порта перенаправлялся на 5553.

    Запускается Freeroute от имени обычного пользователя с sudo‑правами."


    1. admitrievsky Автор
      09.07.2023 18:03

      Цель была сделать так, чтобы python-сервис работал от имени простого пользователя, поэтому надо пробрасывать порты, которые нельзя слушать не будучи рутом.

      Запускается Freeroute от имени обычного пользователя с sudo‑правами.

      имелось в виду, что хоть сервис и работает от имени простого пользователя, но для работы ему всё равно потрбуются права на выполнение команды sudo ip route


  1. nikto_b
    09.07.2023 18:03

    А дергать cli-интерфейс ip с sudo внутри - точно хорошая идея?

    Имхо очень много проблем может вызвать - в т.ч. сломанные таблицы роутинга и проблемы безопасности


    1. admitrievsky Автор
      09.07.2023 18:03
      +1

      А дергать cli-интерфейс ip с sudo внутри - точно хорошая идея?

      это был самый простой способ добиться результата. Есть идеи, как менять таблицы роутинга из процесса python, работающего от имени непривилегированного пользователя?

      Имхо очень много проблем может вызвать - в т.ч. сломанные таблицы роутинга и проблемы безопасности

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


      1. nikto_b
        09.07.2023 18:03

        менять таблицы роутинга из процесса python

        Смотрели в сторону, например, pyroute2? https://pypi.org/project/pyroute2/

        от имени непривилегированного пользователя

        Вероятно, под этот роутер стоит выделить отдельного пользователя, с запретом на вход и повышенными привелегиями

        будет установлен внутри локальной сети

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


  1. microArt
    09.07.2023 18:03
    +1

    Сделайте, пожалуйста, что-то похожее для роутеров с openWrt. Давно хочу, чтобы у меня был бы аналог anonabox - пустить бы через него трафик с домашних устройств (по 192.168.x.x), а все остальное эта волшебная коробочка сделает сама. Хотелось бы что-то простое по настройке.


  1. NotSlow
    09.07.2023 18:03
    +2

    Нечто похожее у меня уже неск. лет работает на сервере-роутере домашнем.

    Несколько wireguard соединений, dnsmasq, ip rule/route, web-управление, cron.

    Задаю списки доменов, которые роутить через определенные vpn'ы. По крону периодически ip адреса перепроверяются и обновляются. Плюс открыв веб-админку с любого устройства в доме можно принудительно направить только его через определенный vpn, либо напрямую (ну плюс те принудительные правила роутинга) через определенного провайдера (одно время было 2-3шт подключено, но в данный момент один).

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

    напрямую, кроме определенных хостов
    напрямую, кроме определенных хостов
    весь траффик с ноута пускать через vpn-ch
    весь траффик с ноута пускать через vpn-ch

    Не помню как там в 2007м было, но в наше время одного vpn уже не достаточно :(

    Кто-то блокирует Россию, кто-то Крым, кто-то по РКН спискам блокирует... нужен индивидуальный подход в каждой ситуации.


    1. admitrievsky Автор
      09.07.2023 18:03
      +1

      Freeroute тоже поддерживает несколько vpn, только инсталлер для простоты устанавливает лишь один. Ждём статью с Вашим решением проблемы)


  1. emerald_isle
    09.07.2023 18:03

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

    А ещё до появления Telegram оставалось ещё 5-6 лет...

    https://en.wikipedia.org/wiki/Telegram_(software)

    Initial release14 August 2013; 9 years ago


    1. Ivan22
      09.07.2023 18:03

      в 2007-м еще скайп был настоящим, децентрализованным


  1. kasthack_phoenix
    09.07.2023 18:03
    +1

    Очередная попытка решить нетехническую проблему техническими методами. Билет в один конец из страны решает проблему с блокировками, уголовными делами за слова, неработающими банковскими картами и многим другим.


    1. Wesha
      09.07.2023 18:03

      Билет в один конец из страны решает проблему с блокировками

      ... а потом оказывается, что в этом одном конце у Вас нет въездной визы (прикиньте, далеко не все одни концы готовы принимать сбежавших из "рассадника антидемократии и террора"), и угадайте, куда ждёт Вас дорога дальняя?


      1. kasthack_phoenix
        09.07.2023 18:03
        +1

        а потом оказывается, что в этом одном конце у Вас нет въездной визы

        Россиян без оформления визы заранее даже сейчас принимает 125 стран, а в большинство остальных въехать на постоянку не особо сложно при наличии оффера. Совсем не пустят в страны, которые можно по пальцам пересчитать, да и делать там особо нечего.


        1. Wesha
          09.07.2023 18:03

          Россиян без оформления визы заранее даже сейчас принимает 125 стран

          "Допустим, вы пробили головой стену. Ну и что вы собирались делать в соседей камере?" (с)

          Ну хорошо, Вас пустили без визы в условный Габон. И...?

          не особо сложно при наличии оффера

          Осталась самая мелочь...

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

          Да-да, у нас здесь в США беглым россиянам точно делать нечего!


          1. kasthack_phoenix
            09.07.2023 18:03
            +2

            Да-да, у нас здесь в США беглым россиянам точно делать нечего

            США по-прежнему выдает визы россиянам. Получать их придётся не в России, но это уже другой вопрос.

            Осталась самая мелочь...

            Без работы и в России не очень весело будет. Офферы дают и у меня товарищ для своей галеры в финке за год десяток людей перевёз по рабочим визам — со стороны государства препятствий тоже особо нет.

            Ну хорошо, Вас пустили без визы в условный Габон. И...?

            И можно им наслаждаться. Зачем, правда, ехать в Габон, когда открыты соседние страны — большой вопрос. Я за последние полтора года успел побывать в Латвии, Финляндии, Узбекистане, Казахстане, Таджикистане и Кыргызстане, а в России недели три провёл всего. Я раскрою спойлер, но даже Шенген до сих пор работает, а внутри ЕС границ нет — можно легально даже в закрытые на въезд для россиян извне ЕС Польшу, Прибалтику, Финляндию и Чехию попасть.


            1. Wesha
              09.07.2023 18:03

              США по-прежнему выдает визы россиянам. Получать их придётся не в России, но это уже другой вопрос.

              А, ну да, мы не понимаем, это другое.


              1. kasthack_phoenix
                09.07.2023 18:03
                +1

                А, ну да, мы не понимаем, это другое.

                Что нужно не понимать и должно быть другим?

                Если Россия сначала требует сократить персонал вдвое, а затем запрещает США нанимать людей в консульства, блокируя их работу, это не значит, что США имеют что-то против въезда россиян — это исключительно проблема российских властей. Больше того, США признали россиян бездомной национальностью, дав им право подаваться на визу не в своей стране — они как раз приложили усилия, чтобы продолжить впускать россиян. Как бы, ситуация аналогична доступу к, скажем, LinkedIn — те не мешают людям из России иметь там аккаунты, но Роскомнадзор заблокировал доступ из страны и теперь нужен VPN.


                1. Wesha
                  09.07.2023 18:03
                  +1

                  Что нужно не понимать и должно быть другим?

                  1. Надеюсь, Вы не будете спорить с выдвигаемым многими тезисом, что "Россия — не демократическая страна;

                  2. Следовательно, простой обыватель никак не может повлиять на происходящие в ней процессы — ведь страна не демократическая, его мнение и голос всё равно ни на что не повлият — более того, если он не согласный, то его ещё и ущемить могут!

                  3. Следовательно, мешать простому обывателю покинуть не демократическую страну в пользу демократической — неэтично.

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


                  1. kasthack_phoenix
                    09.07.2023 18:03

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

                    Так практически никто и не мешает, откуда вы эту часть взяли? Финляндия не впускает туристов, но рабочие визы продолжает выдавать в РФ, впускает с ними российских граждан, а также пропускает беженцев — границу пересечь можно без проблем, если цель — покинуть страну. С Чехией у России нет ни границы, ни прямого авиасообщения — запрет на въезд по турвизе мешает только тем, кто уже не в РФ.

                    Вы выше начали писать про США, но выяснилось, что те наоборот упростили требования для россиян, разрешив подаваться в других странах, когда Россия остановила работу их консульств на своей территории.

                    а простому обывателю виз не дают.

                    А это откуда появилось? Я не помню сходу статистику по другим странам, но та же Финляндия ввела fast-track режим по рабочим визам и удвоила количество выданных виз для россиян по сравнению с докоронными временами.


                    1. Wesha
                      09.07.2023 18:03

                      но рабочие визы продолжает выдавать в РФ, впускает с ними российских граждан,

                      Ага, то есть если ты пенсионер какой, инвалид или ребёнок-сирота, которым рабочие визы не положены, то подыхай, панимаишь, в своей сраной сами знаете где.

                      границу пересечь можно без проблем, если цель — покинуть страну.

                      Интересно, и с какой же целью пересекают границу оттуданаружу? Наверно, с целью остаться внутри!

                      А это откуда появилось

                      Из личного опыта. Друг пытался выехать — не дали.


                      1. kasthack_phoenix
                        09.07.2023 18:03

                        Ага, то есть если ты пенсионер какой, инвалид или ребёнок-сирота, которым рабочие визы не положены, то подыхай, панимаишь, в своей сраной сами знаете где.

                        Давайте учиться читать, ведь это не самый сильный ваш навык:

                        также пропускает беженцев

                        Так что если вопрос "подыхай" стоит, то граница вполне открыта.


    1. kinoakter
      09.07.2023 18:03
      +2

      Поддерживаю, это самое правильное решение проблемы...


      1. microArt
        09.07.2023 18:03

        Да ведь далеко не все могут вот так запросто уехать.
        Как быть тем, кто здесь живет постоянно? Так что очень полезное решение проблемы. Только сложное для неспециалиста...
        Надо, чтобы такие устройства стали массовыми. Потому что думаю, что блокировка всего и вся не за горами. Например, давно уже говорят про возможную блокировку Ютуб.


        1. kasthack_phoenix
          09.07.2023 18:03
          +1

          Как быть тем, кто здесь живет постоянно

          Перестать здесь жить постоянно, сам так сделал.

          Только сложное для неспециалиста...

          Мы, вроде, на хабре и здесь большинство — международно востребованные IT-специалисты.


  1. vivask
    09.07.2023 18:03

    Пока oracle не забанил vps решал проблему несколько иначе. Хотел автоматически разблокировать заблокированное. Решал следующим образом:

    1. Сервер DNS написан на golang.

    2. При запросе на резолв запускаем рутину, которая пытается установить соединение с требуемым ресурсом, если не успех отправляем в vpn.

    3. Были проблемы с cdn серверами, решал списками игнора, в остальном все работало.