Прошло почти 3 месяца с моей предыдущей статьи, я решил написать ещё одну. Она частично будет повторять мою предыдущую статью и статью, на основе которой она была написана. Исходя из различных комментариев на форумах и под этими статьями, я попытался в этой инструкции показать, как можно использовать различные обходы блокировок. Для большинства специалистов по этой теме ничего нового тут не будет. А для остальных, думаю, будет что почитать и чем заняться на досуге. Сильно страшного в этой инструкции, как и в предыдущих, ничего нет, нужно просто двигаться по ней, не пропуская ни одного шага.

Итак, зачем нужен этот обход блокировок:

  1. Для захода на необходимые сайты, которые блокируются в любой конкретной стране.

  2. Для "обмана" сайтов из других стран, которые не хотят работать для граждан конкретной страны.

С помощью действий, описанных в этой статье, Вы сможете подключить все устройства домашней сети (телефоны, смарт-тв, компьютеры и ноутбуки и другие "домашние" устройства) к данному обходу блокировок, а также подключаться к Вашему роутеру не из дома и пользоваться его обходом блокировок для доступа к любимым сайтам и приложениям. Кроме того, из обеих этих сетей (домашней и через подключение к роутеру), из любого браузера можно будет пользоваться onion-сайтами.

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

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

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

Необходимо

  • Любой Keenetic с поддержкой USB;

  • Актуальная версия KeeneticOs (на данный момент 3.8.3);

  • Flash-накопитель размером от 1Гб;

  • Не побояться прочитать инструкцию;

  • Около 30 минут времени, попивая кофе. Основная часть работы это будет время ожидания установки.

Подготовка Flash-накопителя, роутера и установка Entware

  1. Используем инструкцию на сайте Keenetic. Для корректной работы телеграм-бота нам необходим будет файл подкачки. Возможно на "старших" моделях роутера это будет и необязательно, тогда можно воспользоваться предыдущей инструкцией (без файла подкачки), но на моём Keenetic Extra 1711 файл подкачки необходим. На флешке необходимо создать два раздела, один Linux Swap, второй - Ext4. Можно вместо Ext4 использовать NTFS, но для этого необходимо будет установить соответствующий компонент. Для работы с разделами в данной статье используется  MiniTool Partition Wizard. Если что на всем известных сайтах можно найти взломанную версию, хотя, может, и бесплатная сработает.

  1. Для установки Entware воспользуемся инструкцией на официальном сайте Keenetic.

  • Скачиваем mipsel.

  • Вставляем отформатированную флешку в роутер.

  • Заходим в раздел Управление – Приложения и выбираем нашу флешку.

    В настройках роутера предварительно должно быть включено приложение "Сервер SMB" для доступа к подключаемым USB-дискам по сети.

  • Создаём папку install:

  • Ставим курсор на новую папку и импортируем туда файл mipsel с компьютера с помощью третьей иконки:

  • В настройках роутера заходим в раздел Управление – OPKG, выбираем нашу флешку и удаляем сценарий, если он есть и нажимаем кнопку Сохранить:

  • Примерно спустя минуту заходим обратно в Управление – Приложения и выбираем нашу флешку. Видим, что у нас установился entware по наличию некоторого количества папок. Можно также в Диагностике посмотреть ход установки:

  1. Установим необходимые компоненты роутера. В настройках роутера заходим в Общие настройки -> Изменить набор компоненты:

  • Поиском ищем следующие компоненты "Прокси-сервер DNS-over-TLS", "Прокси-сервер DNS-over-HTTPS", "Протокол IPv6", "SSTP VPN-сервер", "Подготовка открытых пакетов OPKG" и "Сервер SSH" затем, после обновления и перезагрузки роутера ещё следующие компоненты: "Модули ядра подсистемы Netfilter", "Пакет расширения Xtables-addons для Netfilter" и ещё раз перезагружаем роутер.

  • Заходим в "Сетевые правила" --> "Интернет-фильтр" и добавляем серверы DNS-over-TLS и DNS-over-HTTPS. У TLS адрес сервера 8.8.8.8:853, доменное имя TLS dns.google. У HTTPS сервер dns https://dns.google/dns-query. Должно получиться как на картинке:

  • Скачиваем Putty (на данный момент актуально putty-64bit-0.76-installer.msi) и запускаем её. Простенькие настроечки (если что их можно сохранить кнопкой Save):

При возможных предупреждениях соглашаемся (кнопка Accept).

  • Вводим логин «root» (без кавычек), нажимаем Enter, пароль «keenetic» (также без кавычек) (при вводе пароля курсор не двигается – это нормально), также Enter. Должно отобразиться:

P.S. здесь и далее - для копирование команды в командную строку необходимо скопировать текст на этом сайте и вставить в командную строку с помощью правой кнопкой мыши

  • Вводим команду:

passwd

и дважды вводим пароль. Курсор при вводе пароля также не двигается.

  • Обновим opkg:

opkg update

Установка необходимых компонентов

  1. Начинаем установку необходимых компонентов.

  • Вводим команду для установки необходимых компонентов Entware.

    Сначала устанавливаем необходимые пакеты opkg, затем скачиваем pip для python'a (почему-то он не устанавливается корректно через opkg) и устанавливаем с помощью скрипта. Некоторое время у Вас это займёт, дождитесь. В конце установим два пакета расширения python.

opkg install mc tor tor-geoip bind-dig cron dnsmasq-full ipset iptables wget wget-ssl obfs4 shadowsocks-libev-ss-redir shadowsocks-libev-config python3 python3-pip
wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate
python get-pip.py
pip install pyTelegramBotAPI
pip install telethon
  1. Устанавливаем и настраиваем бота. Он будет скачан с сайта гитхаба, это сделано для простоты обновления. Если что, там всегда будет крайняя версия скрипта. Внутри установочника некоторые файлы будут также скачиваться с сайта (по той же причине), но об этом позже.

wget https://raw.githubusercontent.com/tas-unn/bypass_keenetic/master/bot.py --no-check-certificate /opt/etc/bot.py
mcedit /opt/etc/bot.py
  1. В редакторе нашего бота нам необходимо:

  • Установить api ключ, который даст вам бот BotFather (в поиске телеграма его можно найти), спросить его команду /newbot, выбрать свободное имя и скопировать необходимый ключ в поле token

  • Копируем Username (логин) телеграма. Он будет использоваться для администрирования. Можно добавить несколько администраторов:

  • Обратите внимание, все свои настройки Вы вбиваете и сохраняете на своём роутере. В конце концов код можете посмотреть сами, если умеете это делать.

  • Все данные записываем в файл в нужные места:

  • Это были необходимые минимальные настройки. Дело в том, что бот за Вас будет запрашивать ключи для ТОРа и Shadowsocks и устанавливать их. Вам в телеграм будут лишь приходить уведомления (отключите звук и другие оповещения, чтоб они Вас не раздражали).

  • Чуть ниже этих строк есть настройки, которые можно оставить по умолчанию, но на всякий случай просмотрите их.

  1. Запускаем бота:

python /opt/etc/bot.py
  • Заходим в свой телеграм-бот, если необходимо нажимаем /start и выбираем сначала Установку и удаление, а затем Установку \ переустановку:

  • В программе Putty можете наблюдать внутренние команды, а в телеграм-боте ход установки, а также полученные ключи от двух ботов. ВНИМАНИЕ: при включенной двухфакторной авторизации телеграма, Вам необходимо будет ввести данные в Putty. Не пугайтесь, всё работает исключительно на Вашем роутере.

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

    5. Отключение штатного DNS-сервера и перезагрузка маршрутизатора.

  • Запускаем командную строку в Windows (открываем пуск и начинаем писать «Командная строка» или «cmd»).

  • Пишем (ip роутера поменяете если другой).

    telnet 192.168.1.1
  • Логин с паролем вводим от роутера, а не entware (скорее всего admin, а пароль лично Ваш).

  • Вписываем поочерёдно 3 команды:

opkg dns-override
system configuration save
system reboot
  • Роутер перезагрузится и Вы сможете пользоваться ботом работы.

  • Внимание: если захотите переустановить флешку с нуля, то Вам необходимо в Putty ввести следующие команды и после перезагрузки роутера приступать к созданию флешки:

no opkg dns-override
system configuration save
system reboot

Описание работы телеграм-бота

  1. При старте бот имеет две кнопки "Установка и удаление" и "Списки обхода".

  2. Первой кнопкой мы частично пользовались при установке.

  3. Также после нажатия этой кнопки (см предыдущий скриншот) существует возможность переустановить скрипты (если что, обновление бота скачиваются отдельно и вручную), удалить все созданные скрипты, переустановить мосты Тор и Shadowsocks, если они не работают.

  4. В пункте меню "Списки обхода" создаются кнопки, соответствующие названием файла и папки /opt/etc/unblock/. При изначальной установке там находятся 2 файла shadowsocks.txt и tor.txt, поэтому у нас будет 2 кнопки:

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

  1. При добавлении существует возможность ЛИБО добавить обход блокировок соцсетей (скачивается вот отсюда и может редактироваться в случае необходимости), ЛИБО написать доменное имя сайта, либо IP-адрес боту:

  1. Для удаления просто вписываете необходимый адрес и отправляете его боту.

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

  • На устройствах из дома (wifi, по проводу) всё уже работает, но существует возможность подключаться к вашему роутеру и пользоваться теми же сайтами, которые Вы указали в списках разблокировок.

  • Для этого нужно воспользоваться вот этой инструкцией на сайте Keenetic.

  • А потом можно подключаться через Android, Windows, MacOS, IOs (только платный).

Установка обхода завершена! Можете пользоваться на здоровье!

  • Донаты приветствуются) куда переводить - можно найти в первых строчках бота в комментариях) но всё, естественно, по желанию.

  • Пишите в комментариях чего Вы хотите в следующих версиях.

О чём будет следующая часть статьи:

  1. Рассказ о внутренних особенностях установленной системы. Если кто-то хочет покопаться, либо дать совет в настройке - милости просим.

  2. Данный обход блокировок сейчас настроен на 2 сервиса - один Hi!Load VPN с помощью технологии Shadowsocks, второй - Тор, но Вы можете сами настроить необходимые Вам сервисы вручную, подключив их к своему телеграм-боту и он также сможет работать!

  3. Те люди, которые не хотят тратить на это время, могут этого не делать. Остальные - welcome :)

  4. Для тех, кто до сих пор пользуется программой teamviewer, есть способ чтобы он продолжил работать.

Детальная настройка и всё что с этим связано

  1. Для установки VPN сервисов, которые поддерживаются роутером Keenetic (OpenVPN, Wireguard, IpSec, PPTP, L2TP воспользуйтесь инструкциями на официальном сайте Keenetic. Shadowsocks и Tor уже были настроены с помощью установочника телеграм-бота, здесь будет лишь отписание.

  1. Через Putty заходим по SSH (см самое начало статьи).

  2. Инициализируем ipset, создание множества IP-адресов unblock (100-ipset.sh).

  • Проверьте, что в системе вашего маршрутизатора есть поддержка множества hash:net:

ipset create test hash:net
  • Если команда никаких ошибок и сообщений не выдала, значит поддержка есть, и просто следуйте инструкции дальше. В противном случае (есть ошибка) в следующем скрипте вам нужно заменить hash:net на hash:ip. При этом вы потеряете возможность разблокировки по диапазону и CIDR.

    Скорее всего ошибок не будет у Вас.

  • Создайте пустое множество адресов с именем unblock при загрузке маршрутизатора. Для этого создайте файл /opt/etc/ndm/fs.d/100-ipset.sh:

mcedit /opt/etc/ndm/fs.d/100-ipset.sh
  • Вставляем содержимое с помощью сочетания клавиш Shift+Insert. Далее в этой инструкции мы также будем использовать это сочетания клавиш.

  • Внимание: в данном файле мы создаём ровно столько множеств для обхода блокировок, сколько нам надо. В инструкции показано 3 обхода (shadowsocks, tor и какой-то VPN, подключенный исходя из инструкций на официальном сайте), но их может быть бесконечное множество. Если Вам нужно добавить ещё один обход VPN, то Вам нужно добавить ещё одну строку в следующем файле (по аналогии с 3-5 строками). Также можно удалить 1-2 строки, если будете использовать меньшее количество обходов.

    #!/bin/sh
    [ "$1" != "start" ] && exit 0
    ipset create unblocksh hash:net -exist
    ipset create unblocktor hash:net -exist
    #ipset create unblockvpn hash:net -exist #если нужно раскомментируем
    exit 0
  • Ссылка на скачивание (там будет храниться всегда актуальная информация).

  • После этого нажимаем сохранить (клавиша F2), соглашаемся (Enter) и выход (клавиша F10). Эти сочетания также будут использоваться далее.

  • Дайте права на исполнение:

chmod +x /opt/etc/ndm/fs.d/100-ipset.sh
  1. Настройка Shadowsocks на примере Highload-VPN. Не является рекламой. Пока там всё бесплатно, они обещают бесплатный доступ с небольшими ограничениями, а есть также платный доступ, доступ к российскому vpn (если например Вы из-за границы и хотите воспользоваться госуслугами или подобными сервисами). Вы можете использовать любой другой сервис, либо настроить самостоятельно Shadowsocks на своём сервере, например по этой инструкции. За основу этого пункта взята эта инструкция.

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

  • Через некоторое время Вам в телеграм придёт ключ вида:

ss:/password@serverip:port/?outline=1

Есть 2 способа создать файл настроек. Первый через python, вставив полученный ключ в переменную k. Второй "ручками":

  • В данном ключе есть 3 позиции, которые нам интересны: первая часть до значка собачки (красная), вторая - после собачки до двоеточия (синяя), третья цифры после двоеточия (зелёная).

  • Первая часть это пароль, который закодирован в кодировке base64, поэтому нам нужно её раскодировать. Можем использовать этот сайт. В верхнее поле вставляем первую ("красную") часть нашей ссылки и нажимаем кнопку Decode. Появится декодированная строка. Нас будет интересовать пароль, который находится после двоеточия.

  • Возвращаемся в Putty и выполняем команду:

mcedit /opt/etc/shadowsocks.json
  • Редактируем наш файл. Изменяем строку server (в моём случае 5.5.5.5) на ip адрес (или доменное имя) из ключа, который мы получили на сайте (см вторую картинку наверх). Это "синяя" часть нашего ключа. "Зелёную" часть нашего ключа копируем в server_port (в моём случае 666). В поле password мы копируем пароль из декодированной строки. local_port изменяем на любой свободный порт. Можно оставить этот:

{
    "server":["5.5.5.5"],
    "mode":"tcp_and_udp",
    "server_port":666,
    "password":"mypass",
    "timeout":86400,
    "method":"chacha20-ietf-poly1305",
    "local_address": "::",
    "local_port": 1082,
    "fast_open": false,
    "ipv6_first": true
}

Сохраняем и выходим (напомню F2,F10).

  • Редактируем исполняемый файл Shadowsocks:

mcedit /opt/etc/init.d/S22shadowsocks
  • Меняем ss-local на ss-redir:

Сохраняем и выходим.

  1. Настройка Tor. Эта часть инструкции взята вот отсюда, включая саму статью и комментарии.

  • Удаляем содержимое конфигурационного файла:

cat /dev/null > /opt/etc/tor/torrc
  • Ищем мосты для Тора. Их можно найти вот тут или вот тут.

  • Открываем файл конфигурации Тор. Актуальный (только без актуальных мостов) можно всегда скачать отсюда.

mcedit /opt/etc/tor/torrc
  • Вставьте (Shift+Insert) содержимое (сразу не закрывайте, дочитайте ещё один пункт):

User root
PidFile /opt/var/run/tor.pid
ExcludeExitNodes {RU},{UA},{AM},{KG},{BY}
StrictNodes 1
TransPort 0.0.0.0:9141
ExitRelay 0
ExitPolicy reject *:*
ExitPolicy reject6 *:*
GeoIPFile /opt/share/tor/geoip
GeoIPv6File /opt/share/tor/geoip6
DataDirectory /opt/tmp/tor
VirtualAddrNetwork 10.254.0.0/16
DNSPort 127.0.0.1:9053
AutomapHostsOnResolve 1
UseBridges 1
ClientTransportPlugin obfs4 exec /opt/sbin/obfs4proxy managed
  • В конец этого файла вставляем мосты, полученные через сайт или через телеграм-бот. Перед каждым мостом (строкой) нужно написать слово "Bridge" и поставить пробел. Например:

Bridge obfs4 15.18.22.16:123 C06700D83A2D cert=q34/VfQ+hrUTBto/WhJnwB+BO9jFwBZhNfA iat-mode=0
Bridge obfs4 19.9.1.9:56789 CAF61C9210E5B7638ED00092CD cert=qMUhCi4u/80ecbInGRKAUvGU0cmsiaruHbhaA iat-mode=0
  • Сохраняем и выходим.

  1. Установочником бота создана папка /opt/etc/unblock. Там располагаются файлы со списками для наших различных обходов. Если Вы устанавливаете вручную, то нужна следующая команда для создания папки:

mkdir /opt/etc/unblock
  • Создаём сами списки. Их должно быть ровно столько, сколько обходов мы собираемся создавать. Именно их названия будут использоваться в телеграм-боте для создания списков разблокировок. Напомню, в нашем случае их 3 (вводим последовательно):

mcedit /opt/etc/unblock/shadowsocks.txt
mcedit /opt/etc/unblock/tor.txt
mcedit /opt/etc/unblock/vpn1.txt
  • В разные файлы мы можем вносить разные домены и ip-адреса. Предлагаю два из них заполнить только одним сайтом, который будет отображать ip адрес, а один из них наполнить основным списком адресов. В моём случае первый файл будет основным, а тор и vpn будет "запасными". В основной вводим свои сайты примерно в таком виде:

rutracker.org
kinozal.tv
2ip.ru
chess.com

#facebooktwitterinstagram
facebook.com
twitter.com
instagram.com
cdninstagram.com
cdnfacebook.com
facebook.net
ads-twitter.com
static.ads-twitter.com

###Пример разблокировки по IP (убрать # в начале строки)
#195.82.146.214
###Пример разблокировки по CIDR (убрать # в начале строки)
#103.21.244.0/22
###Пример разблокировки по диапазону (убрать # в начале строки)
#100.100.100.200-100.100.100.210
  • В таком виде фейсубокотвиттероинстаграммы должны открываться через браузер, как и другие сайты из этого списка. Если что мой актуальный список будет тут.

    Пока нет способа, который будет работать по маске. Кстати, чтобы узнать какие конкретные домены должны быть внесены в этот список, проще всего зайти через обычный тор-браузер, нажать F12 и зайти на нужный сайт. Во вкладке Network будет список различных доменов, которые используются. Это нужно для тех сайтов, где используется различные другие домены внутри основного сайта.

  • В другие два для проверки добавим по одному сайту: myip.ru и whatismyipaddress.com, а для тора ещё сайт check.torproject.org. В конце концов, изменить списки вы сможете всегда по Вашему желанию либо через Putty, либо через телеграм-бот.

  • Кстати для обхода teamviewer в любой из списков обхода добавить следующие адреса (актуальные взял вот отсюда, предварительно добавив в список обхода основной сайт teamviewer.com, чтоб данный список можно было посмотреть ):

teamviewer.com
217.146.28.192/27
37.252.239.128/27
213.227.180.128/27
188.172.221.96/27
131.100.3.192/27
162.250.7.160/27
188.172.251.192/27
162.220.222.192/27
188.172.214.128/27
162.250.2.192/27
162.220.223.160/27
94.16.21.192/27
185.228.150.128/27
188.172.245.32/27
188.172.192.160/27
213.227.162.64/27
217.146.23.96/27
37.252.227.128/27
185.116.99.128/27
37.252.230.160/27
178.255.155.224/27
213.227.181.64/27
188.172.222.0/27
188.172.223.160/27
217.146.13.96/27
94.16.102.128/27
213.227.178.128/27
94.16.26.64/27
213.227.185.192/27
188.172.235.192/27
37.252.245.96/27
213.227.167.160/27
188.172.201.160/27
217.146.11.128/27
37.252.229.192/27
188.172.203.64/27
37.252.244.192/27
37.252.243.160/27

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

  1. Скрипт для заполнения множества unblock IP-адресами заданного списка доменов (unblock_ipset.sh) и дополнительного конфигурационного файла dnsmasq из заданного списка доменов (unblock_dnsmasq.sh).

  • Создадим скрипт /opt/bin/unblock_ipset.sh:

mcedit /opt/bin/unblock_ipset.sh
  • Обратите внимание, здесь код разделён на 3 части, т.к. у нас три обхода блокировок (10-38, 45-74, 80-109). Если что добавляем ещё подобные строки, заменяя названия ipset'ов и файлов со списком адресов:

#!/bin/sh

until ADDRS=$(dig +short google.com @localhost -p 40500) && [ -n "$ADDRS" ] > /dev/null 2>&1; do sleep 5; done

while read line || [ -n "$line" ]; do

  [ -z "$line" ] && continue
  [ "${line:0:1}" = "#" ] && continue

  cidr=$(echo $line | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/[0-9]{1,2}')

  if [ ! -z "$cidr" ]; then
    ipset -exist add unblocksh $cidr
    continue
  fi

  range=$(echo $line | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}-[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')

  if [ ! -z "$range" ]; then
    ipset -exist add unblocksh $range
    continue
  fi

  addr=$(echo $line | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')

  if [ ! -z "$addr" ]; then
    ipset -exist add unblocksh $addr
    continue
  fi

  dig +short $line @localhost -p 40500 | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | awk '{system("ipset -exist add unblocksh "$1)}'

done < /opt/etc/unblock/shadowsocks.txt

while read line || [ -n "$line" ]; do

  [ -z "$line" ] && continue
  [ "${line:0:1}" = "#" ] && continue

  cidr=$(echo $line | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/[0-9]{1,2}')

  if [ ! -z "$cidr" ]; then
    ipset -exist add unblocktor $cidr
    continue
  fi

  range=$(echo $line | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}-[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')

  if [ ! -z "$range" ]; then
    ipset -exist add unblocktor $range
    continue
  fi

  addr=$(echo $line | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')

  if [ ! -z "$addr" ]; then
    ipset -exist add unblocktor $addr
    continue
  fi

  dig +short $line @localhost -p 40500 | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | awk '{system("ipset -exist add unblocktor "$1)}'



done < /opt/etc/unblock/tor.txt

#script0
#script1
#script2
#script3
#script4
#script5
#script6
#script7
#script8
#script9
  • В конце файла я оставил место под скрипты для доп. обходов (нашего vpn1), их нужно вставлять например вместо строки #script0, #script1 итд в зависимости от количества обходов. Актуальную часть скрипта можно отсюда, а на данный момент:

# unblockvpn - множество
# vpn1.txt - название файла со списком обхода

while read line || [ -n "$line" ]; do

  [ -z "$line" ] && continue
  [ "${line:0:1}" = "#" ] && continue

  cidr=$(echo $line | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/[0-9]{1,2}')

  if [ ! -z "$cidr" ]; then
    ipset -exist add unblockvpn $cidr
    continue
  fi
  
  range=$(echo $line | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}-[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')

  if [ ! -z "$range" ]; then
    ipset -exist add unblockvpn $range
    continue
  fi
  
  addr=$(echo $line | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')

  if [ ! -z "$addr" ]; then
    ipset -exist add unblockvpn $addr
    continue
  fi

  dig +short $line @localhost -p 40500 | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | awk '{system("ipset -exist add unblockvpn "$1)}'


done < /opt/etc/unblock/vpn1.txt
  • Даём права на использование:

chmod +x /opt/bin/unblock_ipset.sh
  • Создадим скрипт /opt/bin/unblock_dnsmasq.sh:

mcedit /opt/bin/unblock_dnsmasq.sh
#!/bin/sh
cat /dev/null > /opt/etc/unblock.dnsmasq
while read line || [ -n "$line" ]; do

  [ -z "$line" ] && continue
  [ "${line:0:1}" = "#" ] && continue

  echo $line | grep -Eq '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' && continue

  echo "ipset=/$line/unblocktor" >> /opt/etc/unblock.dnsmasq
  echo "server=/$line/127.0.0.1#40500" >> /opt/etc/unblock.dnsmasq
done < /opt/etc/unblock/tor.txt


while read line || [ -n "$line" ]; do

  [ -z "$line" ] && continue
  [ "${line:0:1}" = "#" ] && continue

  echo $line | grep -Eq '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' && continue

  echo "ipset=/$line/unblocksh" >> /opt/etc/unblock.dnsmasq
  echo "server=/$line/127.0.0.1#40500" >> /opt/etc/unblock.dnsmasq
done < /opt/etc/unblock/shadowsocks.txt

#script0
#script1
#script2
#script3
#script4
#script5
#script6
#script7
#script8
#script9
  • Здесь аналогичная картина - код разбит на 3 части (3-12,15-24 и доп. скрипты). При необходимости увеличиваем за счёт #script0 и т.д пока так (актуальную знаете где взять):

#vpn1 и unblockvpn меняем
while read line || [ -n "$line" ]; do

  [ -z "$line" ] && continue
  [ "${line:0:1}" = "#" ] && continue

  echo $line | grep -Eq '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' && continue

  echo "ipset=/$line/unblockvpn" >> /opt/etc/unblock.dnsmasq
  echo "server=/$line/127.0.0.1#40500" >> /opt/etc/unblock.dnsmasq
done < /opt/etc/unblock/vpn1.txt

Сохраняем и выходим.

  • Даём права на использование:

chmod +x /opt/bin/unblock_dnsmasq.sh
  • Запускаем скрипт и затем проверяем создался ли файл. Здесь 2 команды, вводим последовательно:

unblock_dnsmasq.scat /opt/etc/unblock.dnsmasq

Картина будет примерно такая:

  1. Скрипт ручного принудительного обновления системы после редактирования списка доменов (unblock_update.sh). Создаём его:

mcedit /opt/bin/unblock_update.sh
  • Записываем содержимое, сохраняем и закрываем:

#!/bin/sh
ipset flush unblocktor
ipset flush unblocksh
#ipset flush unblockvpn # добавляем столько сколько надо и раскомментируем
/opt/bin/unblock_dnsmasq.sh
/opt/etc/init.d/S56dnsmasq restart
/opt/bin/unblock_ipset.sh &
  • Даём права на использование:

chmod +x /opt/bin/unblock_update.sh
  1. Скрипт автоматического заполнения множества unblock при загрузке маршрутизатора (S99unblock). Создаём его:

mcedit /opt/etc/init.d/S99unblock
  • Записываем содержимое, сохраняем и закрываем:

#!/bin/sh
[ "$1" != "start" ] && exit 0
/opt/bin/unblock_ipset.sh 
python /opt/etc/bot.py &
  • Даём права на использование:

chmod +x /opt/etc/init.d/S99unblock
  1. Перенаправление пакетов с адресатами.

  • Если кроме тора и shadowsocks мы используем другие VPN, то нам нужно узнать их имена. Вводим команду:

ifconfig
  • Список будет большим (может потребоваться прокрутка), но по тем параметрам, которые видны, Вы должны догадаться какой выбрать. У меня это ppp1, поэтому в следующем файле будем использовать его.

.
.
  • Здесь будут отображаться все созданные Вами vpn (кроме shadowsocks и tor).

  • Создаём ещё один файл, который будет перенаправлять пакеты с адресатами:

mcedit /opt/etc/ndm/netfilter.d/100-redirect.sh
#!/bin/sh
[ "$type" == "ip6tables" ] && exit 0
ip4t() {
    if ! iptables -C "$@" &>/dev/null; then
        iptables -A "$@"
    fi
}
if [ -z "$(iptables-save 2>/dev/null | grep unblocksh)" ]; then
    ipset create unblocksh hash:net -exist
    iptables -I PREROUTING -w -t nat -i br0 -p tcp -m set --match-set unblocksh dst -j REDIRECT --to-port 1082
    iptables -I PREROUTING -w -t nat -i br0 -p udp -m set --match-set unblocksh dst -j REDIRECT --to-port 1082
    iptables -I PREROUTING -w -t nat -i sstp0 -p tcp -m set --match-set unblocksh dst -j REDIRECT --to-port 1082
    iptables -I PREROUTING -w -t nat -i sstp0 -p udp -m set --match-set unblocksh dst -j REDIRECT --to-port 1082
    iptables -t nat -A OUTPUT -p tcp -m set --match-set unblocksh dst -j REDIRECT --to-port 1082
fi


if [ -z "$(iptables-save 2>/dev/null | grep "udp \-\-dport 53 \-j DNAT")" ]; then
    iptables -w -t nat -I PREROUTING -i br0 -p udp --dport 53 -j DNAT --to 192.168.1.1
    iptables -w -t nat -I PREROUTING -i sstp0 -p udp --dport 53 -j DNAT --to 192.168.1.1
fi
if [ -z "$(iptables-save 2>/dev/null | grep "tcp \-\-dport 53 \-j DNAT")" ]; then
    iptables -w -t nat -I PREROUTING -i br0 -p tcp --dport 53 -j DNAT --to 192.168.1.1
    iptables -w -t nat -I PREROUTING -i sstp0 -p tcp --dport 53 -j DNAT --to 192.168.1.1
fi


if [ -z "$(iptables-save 2>/dev/null | grep unblocktor)" ]; then
    ipset create unblocktor hash:net -exist
    iptables -I PREROUTING -w -t nat -i br0 -p tcp -m set --match-set unblocktor dst -j REDIRECT --to-port 9141
    iptables -I PREROUTING -w -t nat -i br0 -p udp -m set --match-set unblocktor dst -j REDIRECT --to-port 9141
    iptables -t nat -A PREROUTING -i br0 -p tcp -m set --match-set unblocktor dst -j REDIRECT --to-port 9141
    iptables -t nat -A OUTPUT -p tcp -m set --match-set unblocktor dst -j REDIRECT --to-port 9141

    iptables -I PREROUTING -w -t nat -i sstp0 -p tcp -m set --match-set unblocktor dst -j REDIRECT --to-port 9141
    iptables -I PREROUTING -w -t nat -i sstp0 -p udp -m set --match-set unblocktor dst -j REDIRECT --to-port 9141
    iptables -t nat -A PREROUTING -i sstp0 -p tcp -m set --match-set unblocktor dst -j REDIRECT --to-port 9141

fi



#script0
#script1
#script2
#script3
#script4
#script5
#script6
#script7
#script8
#script9
exit 0
  • По аналогии внизу (вместо #script0 и т.д.) нам необходимо вставить дополнительный код (актуальный всегда тут). Тут аккуратненько) вместо ppp1 вставляем нужное нам название интерфейса (чуть повыше я писал):

if [ -z "$(iptables-save 2>/dev/null | grep unblockvpn)" ]; then
    ipset create unblockvpn hash:net -exist
    iptables -I PREROUTING -w -t nat -i br0 -p tcp -m set --match-set unblockvpn dst -j MASQUERADE -o ppp1
    iptables -I PREROUTING -w -t nat -i br0 -p udp -m set --match-set unblockvpn dst -j MASQUERADE -o ppp1
    iptables -t nat -A PREROUTING -i br0 -p tcp -m set --match-set unblockvpn dst -j MASQUERADE -o ppp1
    iptables -t nat -A OUTPUT -p tcp -m set --match-set unblockvpn dst -j MASQUERADE -o ppp1

    iptables -I PREROUTING -w -t nat -i sstp0 -p tcp -m set --match-set unblockvpn dst -j MASQUERADE -o ppp1
    iptables -I PREROUTING -w -t nat -i sstp0 -p udp -m set --match-set unblockvpn dst -j MASQUERADE -o ppp1
    iptables -t nat -A PREROUTING -i sstp0 -p tcp -m set --match-set unblockvpn dst -j MASQUERADE -o ppp1

fi
exit 0

Сохраняем и даём права на использование:

chmod +x /opt/etc/ndm/netfilter.d/100-redirect.sh
  1. Настройка dnsmasq и подключение дополнительного конфигурационного файла к dnsmasq.

  • Удалим содержимое конфигурационного файла dnsmasq и создадим вновь (команды вводим последовательно):

cat /dev/null > /opt/etc/dnsmasq.conf
mcedit /opt/etc/dnsmasq.conf
  • Записываем содержимое. При необходимости меняем ip роутера. Сохраняем и закрываем.

user=nobody
bogus-priv
no-negcache
clear-on-reload
bind-dynamic
listen-address=192.168.1.1
listen-address=127.0.0.1
min-port=4096
cache-size=1536
expand-hosts
log-async
conf-file=/opt/etc/unblock.dnsmasq
no-resolv
server=127.0.0.1#40500
server=127.0.0.1#40508
server=/onion/127.0.0.1#9053
ipset=/onion/unblocktor
  1. Добавление задачи в cron для периодического обновления содержимого множества unblock.

  • Откроем файл:

mcedit /opt/etc/crontab
  • В конец добавляем строку:

00 06 * * * root /opt/bin/unblock_ipset.sh
  • При желании остальные строчки можно закомментировать, поставив решётку в начале. Затем сохраняем и закрываем:

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/opt/bin:/opt/sbin
MAILTO=""
HOME=/
# ---------- ---------- Default is Empty ---------- ---------- #
#*/1 * * * * root /opt/bin/run-parts /opt/etc/cron.1min
#*/5 * * * * root /opt/bin/run-parts /opt/etc/cron.5mins
#01 * * * * root /opt/bin/run-parts /opt/etc/cron.hourly
#02 4 * * * root /opt/bin/run-parts /opt/etc/cron.daily
#22 4 * * 0 root /opt/bin/run-parts /opt/etc/cron.weekly
#42 4 1 * * root /opt/bin/run-parts /opt/etc/cron.monthly
00 06 * * * root /opt/bin/unblock_ipset.sh
  1. После перезагрузки роутера у меня почему-то пропал доступ по 222 порту через putty по ssh. В итоге я подключаюсь по 22 порту через тот же putty, ввожу логин с паролем от роутера, пишу команду:

exec sh

а затем:

su - root

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

Заключение

Надеюсь Вам всё понравилось) Пишите в комментариях что бы Вы хотели улучшить, Ваши замечания. "Спасибки" и прочее также приветствуются).

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


  1. Jolt
    20.07.2022 19:04
    +6

    столько мороки ради обхода блокировок?
    ну серьезно, это самая длинная статья\инструкция которую я видел на Хабре за последние месяцы


    1. Marwin
      20.07.2022 19:22
      +1

      нет предела совершенству )) Очевидно, что в реальной жизни 100% покрытие списка РКН мало кому нужно... так это всё просто из разряда "чтобы было". Лично у меня поднят wireguard туннель до датацентра, настроенный мышкой в интерфейсе кинетика и введен десяток статических маршрутов для подсетей на это соединение для нужных мне социалок. На самом деле ip адреса их меняются не так уж и часто. А в те крайне редкие случаи, когда надо зайти куда-то еще - просто опять же в пару кликов я повышаю приоритет vpn канала на пропуск всего траффика для устроства и всё. В кинетике это делается опять же из веба интуитивно. В общем как обычно: для покрытия 90% потребностей достаточно всего лишь 10% усилий. А нужны ли оставшиеся 10% - выбор каждого.


      1. Jolt
        20.07.2022 19:28

        да у меня самого Keenetic Giga и тоже wireguard)
        кстати раз уж зашел разговор, кто-нибудь сталкивался что клиенты внутри сети очень плохо работают с Wireguard VPN (соединение тупит частенько), а если включить на роутере - все летает?
        в интернетах советуют поставить одинаковый MTU на роутере и клиенте - чет не помогло


        1. Jolt
          21.07.2022 13:11

          сегодня осенило
          использовал на роутере и ноутбуке один и тот же peer конфиг, поэтому каждый раз когда роутер делал handshake - коннект на ноуте обрывался


      1. Mastersland Автор
        20.07.2022 21:03
        +1

        Wireguard банится по протоколу без проблем, на сколько я знаю, а shadowsocks хрен забанишь. Да и ещё... Все говорят про это, но инструкций не видел. Или хотя бы список ip адресов). Я лично считаю, что нужно подготовиться со всех сторон, так что не имею ничего против Вашего подхода. В этой статье тоже указано вскользь о Wireguard и других стандартных протоколов Keenetic.


    1. Mastersland Автор
      20.07.2022 21:04

      Инструкция состоит из 2х частей, причём первая из них (основная) занимает максимум треть всей статьи


  1. xtrime
    20.07.2022 19:43
    +1

    Не очень понимаю, зачем так сложно. Чем отличается от сущствующих решений? Например:

    • поднять контейнер antizapret-vpn у себя на виртуальном сервере

    • Скачать сгенерированный конфиг openvpn клиента

    • Добавить конфиг на роутер и включить openvpn клиент на нем

    • Профит.


    1. Mastersland Автор
      20.07.2022 21:05

      Вот на первом шаге и происходит проблемы у большинства людей, так как виртуальный сервер не у всех есть


      1. xtrime
        20.07.2022 22:21

        Ну он стоит 200 руб в месяц. Можно даже в РФ покупать, так как некоторые хостинги не фильтруют трафик.

        Настраивается тоже просто:

        1. Указать ключ или root пароль

        2. Зайти и поставить докер

        3. См шаги из первого сообщения...

        Делов минут на несколько минут. И появится поддержка многих роутеров, а не только kinetic.


        1. Mastersland Автор
          20.07.2022 22:38
          +1

          Да, но тут халява и плюс хорошая инструкция


          1. xtrime
            20.07.2022 22:40

            А там тор используется в качестве канала обхода? В таком случае скорость будет не очень.
            А раз скорость и приватность не важна, то можно использовать публичный бесплаптный antizapret-vpn :) Там еще проще: скачать ovpn файлик с офф сайта и запустить openvpn клиент в роутере...


            1. Mastersland Автор
              21.07.2022 08:53

              Гонять трафик через любой vpn это падение скорости. Да тор более медленный, но это как один из вариантом не из коробки keenetic. Про openvpn тоже падение скорости из-за изначального обращение к антизапрет. Здесь же предлагается на уровне роутера по доменным именам обращаться через vpn, остальное будет идти через обычный канал. Кроме того, есть сайты, которые роспозорнадзор не банил, а они сами отказываются работать в России (тот же тимвьювер, описанный в статье, либо сервера майкрософт, не желающие активировать лицензии). И если будут банить vpnы в нашей стране, то начнут с протоколов openvpn, wireguard и сервисов типа антизапрет и что будет делать этот антизапрет пока не ясно


        1. vviz
          21.07.2022 16:20

          Даа, часто пишут "Ну он стоит 200 руб в месяц". Но в реалиях ничего подобного не наблюдается, при внешнем хостинге.


          1. xtrime
            21.07.2022 16:32

            Вот например приличный хостинг. Несмотря на расположение в РФ все работает. Для пары контейнеров - ресурсов вполне достаточно.


            1. vviz
              21.07.2022 17:43

              Спасибо за инфу, но "при внешнем хостинге"...


  1. ads83
    20.07.2022 21:58

    Пустой пароль у root на роутере — это нормально?


    1. Mastersland Автор
      20.07.2022 22:36

      Не совсем понятно о чём Вы? Пароль keenetic у рута entware


      1. ads83
        20.07.2022 22:57
        +1

        Я про этот кусочек инструкции:


        Вводим логин «root» (без кавычек), нажимаем Enter, пароль «keenetic» (также без кавычек) (при вводе пароля курсор не двигается – это нормально), также Enter. Должно отобразиться

        Как я понимаю, мы подключаемся через Putty к роутеру и меняем пароль рута на пустой.


        1. Я подозреваю, он нужен чтобы потом какая-то автоматика поставила на роутер что-то там. Что именно — непонятно, почему нельзя задавать пароль — тоже неясно.
        2. Дальше по инструкции я не увидел, чтобы пароль менялся. Получается, есть backdoor к моему роутеру? (Для меня это темный лес, если ошибаюсь — поправьте)
        3. А если я после выполнения всех шагов инструкции таки поставлю пароль на рута — будет все работать или он так и должен оставаться пустым все время?

        Повторюсь, для меня настройка роутера через прошивки и удаленно — темный лес. Возможно, я что-то не так понял — было бы здорово если вы объясните (и в идеале доработаете статью).
        На моем FT-AIR-DUO-G портов USB вроде нет, а значит мне придется искать альтернативные пути. Для этого хорошо бы разобраться, как работает ваше решение :-)


        1. dartraiden
          21.07.2022 02:48
          +1

          Entware при развёртывании создаёт пользователя root с паролем keenetic.

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

          Лучше бы было просто дать ссылку на официальную инструкцию, а не отводить половину статьи под описание того, как развернуть Entware.

          Получается, есть backdoor к моему роутеру?
          Файерволл с настройками по умолчанию не разрешит доступ из Интернета (из WAN). Из LAN доступ будет, да.


  1. dartraiden
    21.07.2022 02:37
    +2

    Всё это (как и упомянутый выше Antizapret) не устраняет ряд неудобств:
    — всё так же не работает протокол HTTP/3 на зарубежные направления (да, это можно решить с помощью zapret, но его настройка и подбор параметров это отдельный геморрой, я через это успешно прошёл и не рекомендую).
    — всё так же вы будете сталкиваться с краткосрочными перебоями, описанными в статье «В России сохраняются проблемы с доступностью сайтов, но никто их не замечает». Вносить домены в список в этом случае бесполезно — проблемный IP-адрес через какое-то время уйдет другому сервису. Сидеть и вычислять эти проблемные IP — а нафиг так жить? Я в интернет захожу не для того, чтобы выяснять, какую ещё пачку адресов Cloudflare сегодня вредители из Роскомнадзора заблокировали.

    Единственный способ полноценно пользоваться интернетом в России, не сталкиваясь с блокировками Роскомнадзора совсем никак — пустить весь трафик через зарубежный VPN. В этом случае, правда, вы можете столкнуться с российскими ресурсами, которые к себе не пускают с диапазонов хостеров (Авито, Википедия на редактирование) или с зарубежных адресов (всякие Госуслуги и прочие объекты «критической инфраструктуры»), но первых очень мало, а что до вторых — то война не вечна, и это пройдет.


    1. Mastersland Автор
      21.07.2022 09:05

      В Вашем посте, безусловно, есть доля истины. Тогда нужно будет перенастроить этот скрипт, чтобы на адреса из списка заходить напрямую, а всё остальное через vpn. Кроме того, в теории, если отыскать в интернете список ip адресов для cloudflare, либо других сервисов, которые заблокированы (доп. адреса facebooktwitterinstagram, а если ещё и тытрубу заблокируют?), то их можно будет обновлять на роутере в автоматическом режиме, подставляя адреса в нужный txt файл и запуская скрипт обновления. Уверен, что найдутся энтузиасты, которые это провернут. Да, кстати, весь трафик через vpn? Тогда про торренты можно забыть, даже если поставить свою vds, так как в Европе с этим строго


    1. Renaissance
      21.07.2022 10:32

      всё так же не работает протокол HTTP/3

      в zapret есть инструмент обхода блокировки QUIC/HTTP/3, он работает.

      подбор параметров это отдельный геморрой

      там существует инструмент blockcheck.sh который сам определит нужные параметры в 99% случаев.


  1. cjmaxik
    21.07.2022 11:40

    Есть же КВАС, смысл делать это руками уже отпал (если, конечно, не экзотические настройки).


    1. Mastersland Автор
      21.07.2022 12:53

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

      2) списки обхода в моём случае можно изменять через телеграм-бот. Развитие функционала тут также возможно за счёт получения информации о новых списках разблокировок с гита (или другого внешнего сайта)

      3) обновление мостов и ключей происходят в полуавтоматическом режиме (с помощью одной кнопки в телеграм-боте)

      4) не требуется полное удаление пакета даже в случае обновления пакета, т.к. вся настройка хранится либо в боте, либо на гите, которые при желании также можно масштабировать


  1. kostian777
    21.07.2022 13:04

    Добрый день. Что-то не получается. Выдает ошибку.

    telethon.errors.rpcerrorlist.PeerIdInvalidError: An invalid Peer was used. Make sure to pass the right peer type and that the value is valid (for instance, bots cannot start conversations) (caused by SendMessageRequest)


    1. Mastersland Автор
      21.07.2022 13:07

      думаю проблема в настройках бота. Нужно вставить свои настройки https://my.telegram.org/apps вот с этого сайта вот в эти переменные "appapiid, appapihash" внутри файла bot.py. Посмотрите ещё раз часть статьи по настройке бота, а также комментарии в файле bot.py


      1. kostian777
        21.07.2022 13:10

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


        1. Mastersland Автор
          21.07.2022 13:36

          Да, бот запустится, но будет выдавать ошибки при получении ключей shadowsocks и мостов tor. Так ведь? Например при изначальной установке. Проверьте ещё раз указанные переменные. В коде они должны выглядеть примерно так:

          appapiid='123456' (в моём случае 6, у Вас не знаю)

          appapihash='726fd29fcedea79a477887db73aac9d6' (здесь 32 символа скорее всего md5 внутри)

          И на какой строке ошибку выдаёт?


          1. kostian777
            21.07.2022 13:49

            Package tor (0.4.6.9-1) installed in root is up to date.
            Package tor-geoip (0.4.6.9-1) installed in root is up to date.
            Package bind-dig (9.18.1-2) installed in root is up to date.
            Package cron (4.1-4) installed in root is up to date.
            Package dnsmasq-full (2.86-1) installed in root is up to date.
            Package ipset (7.15-2) installed in root is up to date.
            Package iptables (1.4.21-3) installed in root is up to date.
            Package obfs4 (0.0.13-1) installed in root is up to date.
            Package shadowsocks-libev-ss-redir (3.3.5-4) installed in root is up to date.
            Package shadowsocks-libev-config (3.3.5-4) installed in root is up to date.
            ipset v7.15: Set cannot be created: set with the same name already exists
            mkdir: can't create directory '/opt/etc/unblock/': File exists
            Traceback (most recent call last):
            File "/opt/etc/bot.py", line 480, in
            bot.polling(none_stop=True)
            File "/opt/lib/python3.10/site-packages/telebot/init.py", line 621, in pol ling
            self.__threaded_polling(non_stop=non_stop, interval=interval, timeout=timeou t, long_polling_timeout=long_polling_timeout,
            File "/opt/lib/python3.10/site-packages/telebot/init.py", line 695, in __t hreaded_polling
            raise e
            File "/opt/lib/python3.10/site-packages/telebot/init.py", line 651, in __t hreaded_polling
            self.worker_pool.raise_exceptions()
            File "/opt/lib/python3.10/site-packages/telebot/util.py", line 147, in raise_e xceptions
            raise self.exception_info
            File "/opt/lib/python3.10/site-packages/telebot/util.py", line 93, in run
            task(*args, **kwargs)
            File "/opt/etc/bot.py", line 318, in bot_message
            shadowsocks()
            File "/opt/etc/bot.py", line 427, in shadowsocks
            client.send_message('hlvpnbot', 'Хочу ключ')
            File "/opt/lib/python3.10/site-packages/telethon/sync.py", line 39, in syncifi ed
            return loop.run_until_complete(coro)
            File "/opt/lib/python3.10/asyncio/base_events.py", line 646, in run_until_comp lete
            File "/opt/lib/python3.10/site-packages/telethon/client/messages.py", line 872 , in send_message
            result = await self(request)
            File "/opt/lib/python3.10/site-packages/telethon/client/users.py", line 30, in call
            return await self._call(self._sender, request, ordered=ordered)
            File "/opt/lib/python3.10/site-packages/telethon/client/users.py", line 84, in _call
            result = await future
            telethon.errors.rpcerrorlist.PeerIdInvalidError: An invalid Peer was used. Make sure to pass the right peer type and that the value is valid (for instance, bots cannot start conversations) (caused by SendMessageRequest)
            ~ #

            Это последние строки. На этом бот зависает.


            1. Mastersland Автор
              21.07.2022 14:47

              427 строка это как раз получение ключа shadowsocks, которая начинается с отправки сообщения в телеграм-бота. Написал в ЛС, чтоб не плодить тут ошибки, как исправим - сообщу


              1. Mastersland Автор
                21.07.2022 17:26

                В общем, с грехом пополам решили проблему, установив ключ shadowsocks вручную (во второй части статьи написано как это сделать). Странно что получение мостов тор отрабатывает нормально, хотя сделаны по тому же принципу. Для тех у кого будет та же ошибка - закомментируйте строки (поставить решётку в начале), которые начинаются с "shadowsocks()". Их 2 штуки, для установки можно закомментировать только вторую. Тогда установка пройдёт успешно


  1. AlexR25
    21.07.2022 14:48

    Проверьте правила для unblockvpn (на сочетание PREROUTING с -o и OUTPUT с MASQUERADE).

    Ещё можно уменьшить регулярные выражения, например вместо

    [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}

    использовать:

    ([0-9]{1,3}\.){3}[0-9]{1,3}

    или

    ([0-9]{1,3}\.){3}.{1,3}


    1. Mastersland Автор
      21.07.2022 17:27

      С регулярками согласен, никогда из не любил) а вот по 1му пункту недопонял...


      1. AlexR25
        22.07.2022 01:50
        +1

        Вот результат выполнения ваших правил iptables:

        ~ # iptables -I PREROUTING -w -t nat -i br0 -p tcp -m set --match-set unblockvpn dst -j MASQUERADE -o ppp1
        iptables v1.4.21: Can't use -o with PREROUTING

        Try `iptables -h' or 'iptables --help' for more information.

        ~ # iptables -t nat -A OUTPUT -p tcp -m set --match-set unblockvpn dst -j MASQUERADE -o ppp1
        iptables: Invalid argument. Run `dmesg' for more information.

        dmesg: x_tables: ip_tables: MASQUERADE target: used from hooks OUTPUT, but only usable from POSTROUTING


  1. fckmoders
    22.07.2022 09:36

    ну и простыняяяя, всё гораздо проще https://ntc.party/t/vpn/129


    1. Mastersland Автор
      22.07.2022 09:38

      будет гораздо проще ровно до того момента, пока работает этот антизапрет и вообще протокол openvpn. Shadowsocks не заблокировать, ибо он создан для обхода блокировок, а не просто для создания vpn


  1. kostian777
    22.07.2022 16:15

    Всё снес, отформатировал. Установил заново. Заработало! Надо читать внимательно инструкцию))) Спасибо автору!