Предыстория
Не претендую на открытие Америки в этой публикации, т.к. она является компиляцией различных комментариев и статей, в т.ч. на Habr. Не судите строго, надеюсь на помощь в развитии этого направления. Делал эту инструкцию для себя и специально с нуля, чтобы каждый новичок смог повторить те же действия.
Необходимо
Любой Keenetic с поддержкой USB. Можно установить и на внутреннюю память, но не рекомендуется
Актуальная версия KeeneticOs (на данный момент 3.7.4)
Flash-накопитель любого размера (хватит даже 256Мб, но в 2022 году таких уже не найдёшь)
Раздел 1. Установка Entware
Форматирование флешки в ext4. Я использовал MiniTool Partition Wizard Free, можно использовать любую другую программу
Воспользуемся инструкцией на официальном сайте Keenetic
Скачиваем mipsel
Вставляем отформатированную флешку в роутер
-
Заходим в раздел Управление – Приложения и выбираем нашу флешку
В настройках роутера предварительно должно быть включено приложение "Сервер SMB" для доступа к подключаемым USB-дискам по сети.
Создаём папку install
Ставим курсор на новую папку и импортируем туда файл mipsel с компьютера
В настройках роутера заходим в раздел Управление – OPKG, выбираем нашу флешку и удаляем сценарий, если он есть и нажимаем кнопку Сохранить
Примерно спустя минуту заходим обратно в Управление – Приложения и выбираем нашу флешку. Видим, что у нас установился entware по наличию некоторого количества папок.
Скачиваем Putty (на данный момент актуально putty-64bit-0.76-installer.msi) и запускаем её. Простенькие настроечки (если что их можно сохранить кнопкой Save)
При возможных предупреждениях соглашаемся (кнопка Accept)
Вводим логин «root» (без кавычек), нажимаем Enter, пароль «keenetic» (также без кавычек) (при вводе пароля курсор не двигается – это нормально), также Enter. Должно отобразиться:
вводим команду
passwd
и дважды вводим пароль. Курсор при вводе пароля также не двигается
Обновим opkg
P.S. здесь и далее - для копирование команды в командную строку необходимо скопировать текст на этом сайте и вставить в командную строку с помощью правой кнопкой мыши
opkg update
Раздел 2. Установка Shadowsocks и необходимых пакетов
За основу данного раздела взята вот эта инструкция
Устанавливаем необходимые компоненты с помощью настроек роутера: Общие настройки > Изменить набор компонентов
Протокол IPv6
Затем, после обновления и перезагрузки роутера, «Модули ядра подсистемы Netfilter» и, на всякий случай «Пакет расширения Xtables-addons для Netfilter» ещё раз перезагружаем роутер
Начинаем настраивать наш Entware
Для этого подключаемся к Putty (см предыдущий раздел)
Вводим логин и пароль (если логин и пароль не меняли то root-keenetic)
Вводим команду
opkg install mc bind-dig cron dnsmasq-full ipset iptables shadowsocks-libev-ss-redir shadowsocks-libev-config
Инициализация ipset, создание множества IP-адресов unblock (100-ipset.sh)
Проверьте, что в системе вашего маршрутизатора есть поддержка множества hash:net (как оказалась, не во всех маршрутизаторах Keenetic она есть):
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. Далее в этой инструкции мы также будем использовать это сочетания клавиш
#!/bin/sh
[ "$1" != "start" ] && exit 0
ipset create unblock hash:net -exist
exit 0
После этого нажимаем сохранить (клавиша F2), соглашаемся (Enter) и выход (клавиша F10). Эти сочетания также будут использоваться далее
Дайте права на исполнение:
chmod +x /opt/etc/ndm/fs.d/100-ipset.sh
Настройка Shadowsocks на примере Highload-VPN. Не является рекламой. Пока там всё бесплатно, они обещают бесплатный доступ с небольшими ограничениями, а вскоре появится информация о платном доступе, но, говорят, не слишком дорогой. Вы можете использовать любой другой сервис, либо настроить самостоятельно Shadowsocks на своём сервере, например по этой инструкции. Только теперь я не знаю как оплатить свой сервер за рубежом)))). За основу этого пункта взята эта инструкция.
После регистрации авторизуемся на сайте и заходим в панель управления
У меня автоматически создался ключ. Нажимаем на кнопку «Показать»
Синюю и зелёную часть мы также будем использовать, но позже. Пока нас интересует часть, выделенная красным цветом (от начала до "собачки"). Копируем её в буфер обмена. Она закодирована в кодировке 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":"8888888",
"timeout":86400,
"method":"chacha20-ietf-poly1305",
"local_address": "::",
"local_port": 1082,
"timeout": 300,
"fast_open": false,
"ipv6_first": true
}
Сохраняем и выходим (напомню F2,F10)
Редактируем исполняемый файл Shadowsocks
mcedit /opt/etc/init.d/S22shadowsocks
Меняем ss-local на ss-redir
Сохраняем и выходим
Список доменов (и не только) для обхода блокировки (unblock.txt)
Создадим файл /opt/etc/unblock.txt
mcedit /opt/etc/unblock.txt
Каждая строка может содержать доменное имя, IP-адрес, диапазон или CIDR. Можно использовать символ # для комментирования строк.
###Торрент-трекеры
rutracker.org
kinozal.tv
###Каталоги медиаконтента для программ
filmix.cc
###Книги
lib.rus.ec
###Разное
2ip.ru
#facebooktwitterinstagram
facebook.com
twitter.com
instagram.com
###Пример разблокировки по IP (убрать # в начале строки)
#195.82.146.214
###Пример разблокировки по CIDR (убрать # в начале строки)
#103.21.244.0/22
###Пример разблокировки по диапазону (убрать # в начале строки)
#100.100.100.200-100.100.100.210
С помощью данного файла на twitter, facebook и instagram у меня через роутер теперь спокойно заходит. Сайт 2ip будет использоваться для проверки ip
Сохраняем и выходим
Скрипт для заполнения множества unblock IP-адресами заданного списка доменов (unblock_ipset.sh) и дополнительного конфигурационного файла dnsmasq из заданного списка доменов (unblock_dnsmasq.sh)
Создадим скрипт /opt/bin/unblock_ipset.sh:
mcedit /opt/bin/unblock_ipset.sh
Вставляем содержимое, затем сохраняем и закрываем
#!/bin/sh
until ADDRS=$(dig +short google.com @localhost) && [ -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 unblock $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 unblock $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 unblock $addr
continue
fi
dig +short $line @localhost | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' | awk '{system("ipset -exist add unblock "$1)}'
done < /opt/etc/unblock.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/unblock" >> /opt/etc/unblock.dnsmasq
done < /opt/etc/unblock.txt
Даём права на использование
chmod +x /opt/bin/unblock_dnsmasq.sh
Запускаем скрипт и затем проверяем создался ли файл. Здесь 2 команды, вводим последовательно
unblock_dnsmasq.sh
cat /opt/etc/unblock.dnsmasq
Картина будет примерно такая
Скрипт ручного принудительного обновления системы после редактирования списка доменов (unblock_update.sh)
Создаём его
mcedit /opt/bin/unblock_update.sh
Записываем содержимое, сохраняем и закрываем
#!/bin/sh
ipset flush unblock
/opt/bin/unblock_dnsmasq.sh
/opt/etc/init.d/S56dnsmasq restart
/opt/bin/unblock_ipset.sh &
Даём права на использование
chmod +x /opt/bin/unblock_update.sh
Скрипт автоматического заполнения множества unblock при загрузке маршрутизатора (S99unblock)
Создаём скрипт
mcedit /opt/etc/init.d/S99unblock
Записываем содержимое, сохраняем и закрываем
#!/bin/sh
[ "$1" != "start" ] && exit 0
/opt/bin/unblock_ipset.sh &
Даём права на использование
chmod +x /opt/etc/init.d/S99unblock
Перенаправление пакетов с адресатами из unblock в Shadowsocks
Создаём скрипт
mcedit /opt/etc/ndm/netfilter.d/100-redirect.sh
Записываем содержимое. Если необходимо – меняем ip адрес роутера и наш порт. Сохраняем и закрываем
#!/bin/sh
[ "$type" == "ip6tables" ] && exit 0
if [ -z "$(iptables-save 2>/dev/null | grep unblock)" ]; then
ipset create unblock hash:net family inet -exist
iptables -I PREROUTING -w -t nat -i br0 -p tcp -m set --match-set unblock dst -j REDIRECT --to-port 1082
iptables -I PREROUTING -w -t nat -i br0 -p udp -m set --match-set unblock 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
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
fi
exit 0
Даём права на использование
chmod +x /opt/etc/ndm/netfilter.d/100-redirect.sh
Настройка dnsmasq и подключение дополнительного конфигурационного файла к dnsmasq
Удалим содержимое конфигурационного файла dnsmasq:
cat /dev/null > /opt/etc/dnsmasq.conf
Откроем файл конфигурации dnsmasq:
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
server=8.8.8.8
Добавление задачи в 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
Отключение штатного DNS-сервера и перезагрузка маршрутизатора
·Запускаем командную строку в Windows (открываем пуск и начинаем писать «Командная строка»)
Пишем (ip роутера поменяете если другой)
telnet 192.168.1.1
Логин с паролем вводим от роутера, а не entware (скорее всего admin, а пароль лично Ваш)
Вписываем поочерёдно 3 команды
opkg dns-override
system configuration save
system reboot
-
Роутер перезагрузится и Вы сможете пользоваться нужными Вам сайтами
После перезагрузки роутера у меня почему-то пропал доступ по 222 порту через putty по ssh. В итоге я подключаюсь по 22 порту через тот же putty, ввожу логин с паролем от роутера, пишу команду:
exec sh
а затем
su - root
и можно использовать любые команды Entware по типу тех, которые мы вводили в данной инструкции.
Заключение
Жду отзывов и улучшения инструкции.
Комментарии (17)
vikarti
01.05.2022 07:43+1Только теперь я не знаю как оплатить свой сервер за рубежом)
А точно надо сервер от зарубежной компании расположенный за рубежом? Может быть будет достаточно сервера от российской компании расположенного за рубежом?Просто даже во втором случае российских блокировок то там не будет.
А компании есть, например — vds.sh, селектел (у них два зарубежных региона для облака, один из которых в Европе)vconst
01.05.2022 10:31+2Полно русских хостеров, у которых есть серверы за границей, работает нормально, никаких блокировок. Оплата в рублях, картой Мир )
Мне кажется, более универсальное решение — все поставить на сервер, чтобы подключаться и через мобильную сеть, а не только домашнюю. Хотя можно выставить морду роутера в инет и заходить со смартфона на него через впн
Ну и странно делать какие-то списки с адресами, ибо никогда не знаешь, что ещё заблокируют, могут и гитхаб. Проще или вообще все через иностранный сервер пускать, или поставить готовый антизапрет. Я пошел по первому пути, поставил Wireguard и Pihole, на компе включаю по необходимости, довольно редко, потому что хватает антизапрета в браузере, а на смарте вообще не выключаю и у меня полная блокировка рекламы на нерутованном телефонеigorp1024
01.05.2022 15:31А не в курсе, российские сидбоксы среди зарубежных сервисов представлены? А то скоро мой в тыкву превратится. Или с криптой разбираться придется
Mastersland Автор
02.05.2022 13:20Весь трафик гонять это уменьшение скорости, торренты могут в Европе заблокировать, отсутствие доступа к госуслугам итп. Чаще всего нужно просто держать в "быстром доступе" белый список сайтов и в случае необходимости его обновлять (например через телеграм бот). Есть мысль его написать под эти цели. Про белый ip мысль хорошая) тоже думаю об этом
taravasya
02.05.2022 13:20Как минимум возможность влиять на направление траффика, в наших условиях обязательно. Если всё направлять через VPN, то некоторые российские сайты или полностью блокируют или ограничивают функционал при подключении к ним "от туда", а значит к ним, нужно будет подключаться на прямую. А если использовать готовый "антизапрет", то есть другая проблема. GitHub не запрещён, однако сам GitHub ограничил доступ к приватным репозиториям, а значит к нему, надо идти через VPN. Ну и так далее..
vconst
02.05.2022 13:23Вкл-выкл, да. Не очень удобно, но делать нечего
Или антизапрет (в четвертый раз)
SuAlUr
01.05.2022 13:52+1Я рекомендую iphoster. Сервер в Германии - 200 р. в месяц, скорость на спидтесте на клиенте ВПН (89 мегабит, снижена из-за шифрования), без ВПН (тариф дома 100 мбит/с) - 92-94 мбит/с.
Но есть нюанс - некоторые сайты, в т. ч. судов не позволяют получить доступ.
Mitrios
02.05.2022 13:22+1В статье описано как впустую потратить кучу времени. Бессмысленно, бесполезно, безнадёжно.
ivanovdev
03.05.2022 13:13Зачем тратить столько времени на то, что делается за пару минут?
Кинетики из коробки поддерживают wireguard.
Я себе сделал две wifi сети на одном устройстве, одна с интернетом от провайдера, другая vpn через wireguard. В зависимости от условий просто переключаюсь.
cjmaxik
03.05.2022 13:23+1Я, например, не особо горю желанием пускать весь траффик через прокси. Переключаться по обстоятельствам тоже геморно. А так есть хоть возможность пускать трафик куда нужно. Если это работает, конечно.
Jornada
Дополню, для простых юзеров: если полетела флешка и придётся сделать все заново, то перед установкой помогут команды
not opkg dns-override
system configuration save
system reboot
И на ultra 1810, например, при установке entware мне пришлось прописать путь не дефолтный к сценариям. На закладке менеджер пакетов указать opt/etc/init.d