Shadowsocks настройка на роутере keenetic

Время на прочтение
8 мин

Количество просмотров 52K

Предыстория

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

Необходимо

  • Любой Keenetic с поддержкой USB. Можно установить и на внутреннюю память, но не рекомендуется

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

  • Flash-накопитель любого размера (хватит даже 256Мб, но в 2022 году таких уже не найдёшь)

Раздел 1. Установка Entware

  1. Форматирование флешки в ext4. Я использовал MiniTool Partition Wizard Free, можно использовать любую другую программу

  1. Воспользуемся инструкцией на официальном сайте 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 и необходимых пакетов

За основу данного раздела взята вот эта инструкция

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

  • Протокол IPv6

  • Затем, после обновления и перезагрузки роутера, «Модули ядра подсистемы Netfilter» и, на всякий случай «Пакет расширения Xtables-addons для Netfilter» ещё раз перезагружаем роутер

  1. Начинаем настраивать наш Entware

  • Для этого подключаемся к Putty (см предыдущий раздел)

  • Вводим логин и пароль (если логин и пароль не меняли то root-keenetic)

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

opkg install mc bind-dig cron dnsmasq-full ipset iptables shadowsocks-libev-ss-redir shadowsocks-libev-config
  1. Инициализация 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
  1. Настройка 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

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

  1. Список доменов (и не только) для обхода блокировки (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

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

  1. Скрипт для заполнения множества 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

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

  1. Скрипт ручного принудительного обновления системы после редактирования списка доменов (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
  1. Скрипт автоматического заполнения множества 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
  1. Перенаправление пакетов с адресатами из 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 -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
  1. Настройка 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
  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. Отключение штатного DNS-сервера и перезагрузка маршрутизатора

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

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

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

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

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

    1. После перезагрузки роутера у меня почему-то пропал доступ по 222 порту через putty по ssh. В итоге я подключаюсь по 22 порту через тот же putty, ввожу логин с паролем от роутера, пишу команду:

exec sh

а затем

su - root

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

Заключение

Жду отзывов и улучшения инструкции.

Привет!

Расскажу, как я настроил свой аппарат. Исходные данные:

Keenetic Ultra KN-1810, версия ОС 3.7.4. Домашняя сеть 172.22.0.0/16, через прозрачный прокси будет ходить диапазон 172.22.12.0/24. Настройки сделаны намеренно таким образом, чтобы при обрыве связи в туннеле или остановке демона устройства не ходили в интернет через основной канал. Все можете настроить под себя.

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

# opkg install shadowsocks-libev-ss-redir iptables ipset bind-dig kmod

2. Создать файл /opt/etc/config/ssredir.conf с содержимым:

SS_SERVER_HOST="ИМЯ_СЕРВЕРА"
SS_SERVER_IP=`/opt/bin/dig +short $SS_SERVER_HOST | tail -1`
SS_SERVER_PORT=ПОРТ_СЕРВЕРА
SS_SERVER_PASSWORD="ПАРОЛЬ"
SS_SERVER_METHOD="АЛГОРИТМ_ШИФРОВАНИЯ"
SOURCE_NETWORK="172.22.12.0/24" # ЗДЕСЬ УКАЖИТЕ ТО, ЧТО АКТУАЛЬНО ДЛЯ ВАС
PIDFILE="/opt/var/run/ss-redir.pid"
SSREDIR="/opt/bin/ss-redir"
SSREDIR_CONFIG="/opt/etc/shadowsocks.json"
SSREDIR_LOCAL_ADDRESS="0.0.0.0"
SSREDIR_LOCAL_PORT="10800"
SSREDIR_TIMEOUT=300

3. Создать и сделать исполняемым файл /opt/etc/init.d/S100ssredir:

#!/bin/sh

PATH=/opt/bin:/opt/sbin:/sbin:/bin:/usr/sbin:/usr/bin

. /opt/etc/config/ssredir.conf

write_config()
{
        echo "{">"${SSREDIR_CONFIG}"
        echo "\"server\": [\"${SS_SERVER_IP}\"],">>"${SSREDIR_CONFIG}"
        echo "\"server_port\": ${SS_SERVER_PORT},">>"${SSREDIR_CONFIG}"
        echo "\"password\": \"${SS_SERVER_PASSWORD}\",">>"${SSREDIR_CONFIG}"
        echo "\"method\": \"${SS_SERVER_METHOD}\",">>"${SSREDIR_CONFIG}"
        echo "\"mode\": \"tcp_and_udp\",">>"${SSREDIR_CONFIG}"
        echo "\"local_address\": \"${SSREDIR_LOCAL_ADDRESS}\",">>"${SSREDIR_CONFIG}"
        echo "\"local_port\": \"${SSREDIR_LOCAL_PORT}\",">>"${SSREDIR_CONFIG}"
        echo "\"timeout\": \"${SSREDIR_TIMEOUT}\",">>"${SSREDIR_CONFIG}"
        echo "}">>"${SSREDIR_CONFIG}"
}

ssredir_status ()
{
        [ -f $PIDFILE ] && [ -d /proc/`cat $PIDFILE` ]
}

start()
{
        $SSREDIR -u -c "${SSREDIR_CONFIG}" -f "${PIDFILE}"
}

stop()
{
        kill `cat $PIDFILE`
}

case "$1" in
        start)
                if ssredir_status
                then
                        echo ss-redir already running
                else
                        write_config
                        start
                fi
                ;;
        stop)
                if ssredir_status
                then
                        stop
                else
                        echo ss-redir is not running
                fi
                ;;
        status)
                if ssredir_status
                then
                        echo ss-redir already running with pid `cat $PIDFILE`
                else
                        echo ss-redir is not running
                fi
                ;;

        restart)
                stop
                sleep 3
                start
                ;;
        *)
                echo "Usage: $0 {start|stop|restart|status}"
                ;;
esac

4. Создать и сделать исполняемым файл /opt/etc/ndm/fs.d/100-ssredir.sh:

#!/bin/sh

[ "$1" != "start" ] && exit 0

. /opt/etc/config/ssredir.conf

BYPASS_RESERVED_IPS="${SS_SERVER_IP} \
0.0.0.0/8 \
10.0.0.0/8 \
127.0.0.0/8 \
169.254.0.0/16 \
172.16.0.0/12 \
192.168.0.0/16 \
224.0.0.0/4 \
240.0.0.0/4 \
"

ipset create ss_bypass_set hash:net >/dev/null 2>&1
ipset flush ss_bypass_set
for line in $BYPASS_RESERVED_IPS; do
    ipset add ss_bypass_set $line
done

if [ -z "$(ip route list table 100)" ]; then
    ip route add local default dev lo table 100
    ip rule add fwmark 1 lookup 100
fi

exit 0

5. Создать и сделать исполняемым файл /opt/etc/ndm/netfilter.d/100-ssredir.sh:

#!/bin/sh

[ "$type" == "ip6tables" ] && exit 0
[ $(iptables-save | grep :SSREDIR | wc -l) -eq 2 ] && exit 0

insmod /lib/modules/$(uname -r)/xt_TPROXY.ko

iptables -w -t nat -N SSREDIR
iptables -w -t mangle -N SSREDIR

exit 0

6. Создать и сделать исполняемым файл /opt/etc/ndm/netfilter.d/101-ssredir.sh:

#!/bin/sh

[ "$type" == "ip6tables" ] && exit 0
[ "$table" != "nat" ] && exit 0
[ ! -z "$(iptables-save | grep tcp | grep ss_bypass_set)" ] && exit 0

. /opt/etc/config/ssredir.conf

iptables -w -t nat -A SSREDIR -p tcp -m set --match-set ss_bypass_set dst -j RETURN
iptables -w -t nat -A SSREDIR -p tcp -j REDIRECT --to-ports "${SSREDIR_LOCAL_PORT}"
iptables -w -t nat -A PREROUTING -s "${SOURCE_NETWORK}" -p tcp -j SSREDIR

exit 0

7. Создать и сделать исполняемым файл /opt/etc/ndm/netfilter.d/102-ssredir.sh:

#!/bin/sh

[ "$type" == "ip6tables" ] && exit 0
[ "$table" != "mangle" ] && exit 0
[ ! -z "$(iptables-save | grep udp | grep ss_bypass_set)" ] && exit 0

. /opt/etc/config/ssredir.conf

iptables -w -t mangle -A SSREDIR -p udp -m set --match-set ss_bypass_set dst -j RETURN
iptables -w -t mangle -A SSREDIR -p udp -j TPROXY --on-port "${SSREDIR_LOCAL_PORT}" --tproxy-mark 0x01/0x01
iptables -w -t mangle -A SSREDIR -p udp -j MARK --set-mark 1
iptables -w -t mangle -A PREROUTING -s "${SOURCE_NETWORK}" -p udp -j SSREDIR

exit 0

Ужасно не нравится метод генерации конфига json, но более красивого способа не знаю, потому что не разбираюсь в этих ваших компухтерах. Еще пересборку ipset’а BYPASS_RESERVED_IPS можно было бы добавить не к инициализации внешних устройств, а привязать в старту и остановке демона в init.d, но мне и так нормально.

I do not pretend to discover America in this publication, because it is a compilation of various comments and articles, incl. on Habr. Do not judge strictly, I hope for help in the development of this direction. I made this instruction for myself and specially from scratch, so that every beginner could repeat the same steps.

With possible warnings, we agree (Accept button)

  • We enter the login “root” (without quotes), press Enter, the password is “keenetic” (also without quotes) (the cursor does not move when entering the password – this is normal), also Enter. Should display:

enter the command

passwd

and enter the password twice. The cursor does not move when entering a password.

PS here and below – to copy a command to the command line, you must copy the text on this site and paste it into the command line using the right mouse button

opkg update

Section 2: Installing Shadowsocks and Required Packages

This section is based on this guide.

  1. We install the necessary components using the router settings: General settings> Change the set of components

  • IPv6 protocol

  • Then, after updating and rebooting the router, “Netfilter subsystem kernel modules” and, just in case, “Xtables-addons extension package for Netfilter” reboot the router again

  1. Let’s start setting up our Entware

  • To do this, connect to Putty (see the previous section)

  • Enter the login and password (if the login and password did not change, then root-keenetic)

  • We enter the command

opkg install mc bind-dig cron dnsmasq-full ipset iptables shadowsocks-libev-ss-redir shadowsocks-libev-config
  1. Initialize ipset, create multiple unblock IP addresses (100-ipset.sh)

  • Check that your router system has support for the hash:net set (as it turned out, not all Keenetic routers have it):

ipset create test hash:net
  • If the command did not give any errors and messages, then there is support, and just follow the instructions further. Otherwise (there is an error) in the following script you need to replace hash:net on the hash:ip. In doing so, you will lose the ability to unlock by range and CIDR.
    Most likely you won’t get any errors.

  • Create an empty address set named unblock when the router boots up. To do this, create the /opt/etc/ndm/fs.d/100-ipset.sh file:

mcedit /opt/etc/ndm/fs.d/100-ipset.sh

Paste content using keyboard shortcuts Shift+Insert. Later in this tutorial, we will also use this keyboard shortcuts.

#!/bin/sh
[ "$1" != "start" ] && exit 0
ipset create unblock hash:net -exist
exit 0

After that click saveF2 key), we agree (Enter) and exit (F10 key). These combinations will also be used later.

chmod +x /opt/etc/ndm/fs.d/100-ipset.sh
  1. Setting up Shadowsocks by example Highload VPN. Is not an advertisement. While everything is free there, they promise free access with a few restrictions, and soon there will be information about paid access, but, they say, not too expensive. You can use any other service, or set up Shadowsocks on your own server, for example, by this instructions. Only now I don’t know how to pay for my server abroad)))). This paragraph is based on this instruction.

  • After registration, log in to the site and go to Control Panel

  • I have a key automatically generated. Click on the “Show” button

  • We will also use the blue and green parts, but later. So far, we are interested in the part highlighted in red (from the beginning to the “dog”). Copy it to the clipboard. It is base64 encoded, so we need to decode it. We can use this website

  • Paste our link into the top field and press the Decode button. The decoded string will appear. We will be interested in the password that is after the colon

mcedit /opt/etc/shadowsocks.json
  • Editing our file. We change the server line (in my case 5.5.5.5) to the ip address (or domain name) from the key that we received on the site (see the second picture above). This is the “blue” part of our key. We copy the “green” part of our key to server_port (in my case 666). In the password field, we copy the password from the decoded string (previous picture, text highlighted in red, but after the colon). change local_port to any free port. You can leave this

{
    "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
}

Save and exit (remember F2, F10)

mcedit /opt/etc/init.d/S22shadowsocks

Save and exit

  1. List of domains (and not only) to bypass blocking (unblock.txt)

mcedit /opt/etc/unblock.txt

Each line can contain a domain name, IP address, range, or CIDR. You can use the # symbol to comment lines.

###Торрент-трекеры
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

With the help of this file on twitter, facebook and instagram, it now calmly enters through my router. 2ip site will be used to check ip

Save and exit

  1. Script to populate the unblock set with IP addresses from a given list of domains (unblock_ipset.sh) and an additional dnsmasq configuration file from a given list of domains (unblock_dnsmasq.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
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
unblock_dnsmasq.sh
cat /opt/etc/unblock.dnsmasq

The picture will look something like this

  1. Script for manual forced system update after editing the list of domains (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
  1. Script to automatically fill the unblock set when the router boots (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
  1. Forwarding packets with destinations from unblock to Shadowsocks

mcedit /opt/etc/ndm/netfilter.d/100-redirect.sh
#!/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
  1. Setting up dnsmasq and connecting an additional configuration file to dnsmasq

cat /dev/null > /opt/etc/dnsmasq.conf
mcedit /opt/etc/dnsmasq.conf
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
  1. Adding a cron task to periodically update the contents of the unblock set

mcedit /opt/etc/crontab
00 06 * * * root /opt/bin/unblock_ipset.sh
  • If desired, the rest of the lines can be commented out by putting a hash mark at the beginning. Then save and close

]
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. Disabling the regular DNS server and rebooting the router

  • Run the command line in Windows (open start and start writing “Command Prompt”)

  • We write (ip router change if different)

telnet 192.168.1.1
  • We enter the login with a password from the router, not entware (most likely admin, and the password is yours personally)

  • We enter 3 commands in turn

opkg dns-override
system configuration save
system reboot
exec sh

and then

su - root

and you can use any Entware commands like the ones we entered in this manual.

Conclusion

I look forward to feedback and improvement instructions.

HighLoad VPN на роутере Keenetic с Entware

techno1d

Считаем, что все необходимые для подключения к HighLoad VPN шаги пройдены, и ссылка вида ss://BASE64_STRING@SERVER:PORT/?outline=1 уже есть. В дальнейшем сведения из этой ссылки потребуются для написания конфига нашего клиента.

Нам потребуется роутер Keenetic с установленным менеджером пакетов Opkg, Вот инструкция по его установке. Думаю, что подойдёт любой роутер с OpenWRT.

Далее необходимо установить клиент Shadowsocks. Пакет shadowsocks-libev, в Opkg отсутствует, но зато есть обнаружились shadowsocks-libev-ss-local, shadowsocks-libev-ss-redir и shadowsocks-libev-ss-tunnel, которые и составляют shadowsocks-libev согласно информации на https://github.com/shadowsocks/openwrt-shadowsocks. Возможно, достаточно установить только первый из них, но утверждать не берусь, т.к. сразу же установил все три.

~ # opkg update
~ # opkg install shadowsocks-libev-ss-local shadowsocks-libev-ss-redir shadowsocks-libev-ss-tunnel

После установки открываем файл конфигурации:

~ # nano /opt/etc/shadowsocks.json

и заполняем его данными из ссылки для подключения. Что здесь что, думаю вполне очевидно, кроме разве что BASE64_STRING. По сути это просто строка, содержащая тип шифрования и пароль для подключения и закодированная в Base64-кодировке. Чтобы извлечь из неё необходимые сведения достаточно воспользоваться любым Base-64 декодером (гугл в помощь). В итоге получим строку вида chacha20-ietf-poly1305:PASSWORD. Теперь можно заполнять конфиг:

{
«server»:»SERVER»,
 «server_port»:PORT,
 «local_address»:»192.168.1.1″,
 «local_port»:1080,
 «password»:»PASSWORD»,
  «timeout»:60,
«method»:»chacha20-ietf-poly1305″,
«fast_open»: true
}

В качестве local_address указан адрес роутера в локальной сети, чтобы можно было подключаться к нему как к SOCKS5-прокси. Значение local_port оставил установленным по умолчанию.

После того, как сохранили конфиг, запускаем shadowsocks-клиент:

~ # /opt/etc/init.d/S22shadowsocks start

В результате должны увидеть следующее:

Starting ss-local…       done.

Теперь можно пробовать подключаться к получившейся прокси. Я это делал в Firefox:

После чего идём на любой сервис проверки нашего IP, например https://whatismyipaddress.com/, и проверяем, всё ли получилось.
Далее уже можно настроить роутер, чтобы он все запросы перенаправлял через это соединение. Вот пример настройки https://github.com/shadowsocks/shadowsocks-libev#transparent-proxy.
Также в Windows можно попробовать настроить системный прокси.

GitHub Repo stars GitHub closed issues GitHub last commit GitHub commit activity GitHub top language GitHub code size in bytes

КВАС — выборочный обход блокировок

ВНИМАНИЕ!

До тех пор, пока не появится отлаженная версия 1.1.5, рекомендуется использовать пакет версии 1.1.3.

VPN и SHADOWSOCKS клиент для роутеров Keenetic

Пакет представляет собой обвязку или интерфейс командной строки для работы с белым списком.

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

В пакете реализуется связка: ipset + vpn | shadowsocks + один из вариантов связки DNS сервера:

  • dnsmasq (с поддержкой wildcard) + dnscrypt-proxy2 + блокировщик рекламы adblock или
  • AdGuardHome (уже всключает в себя и шифрование DNS трафика и блокировщик рекламы).

В связи с использованием в пакете утилиты dnsmasq с wildcard, можно работать с любыми доменными именами третьего и выше уровней.
Т.е. в белый список достаточно добавить *domen.com и маршрутизация трафика
будет идти как к sub1.domen.com, так и к любому другому поддоменному имени типа subN.domen.com.

Возможности

  1. Квас работает на всех платформах произведенных Keenetic устройств, ввиду легковесности задействованных пакетов: mips, mipsel, aarch64.
  2. Квас использует dnsmasq, с поддержкой регулярных выражений, а это в свою очередь дает одно, но большое преимущество: можно работать с соцсетями и прочими высоко-нагруженными сайтами, добавив лишь корневые домены по этим сайтам.
  3. Квас позволяет просматривать/добавлять/удалять/очищать/обновлять/импортировать и экспортировать в список разблокировки или в «Белый список» доменные имена, IP адреса и их диапазоны в виде XX.XX.XX.XX, XX.XX.XX.XX-XX.XX.XX.XX, XX.XX.XX.XX/XX.
  4. Квас позволяет отображать статус/отключать/включать блокировку рекламы (модуль adblock + dnsmasq);
  5. Квас позволяет отображать статус/отключать/включать шифрование DNS (пакет dnscrypt-proxy2);
  6. Квас позволяет тестировать и выводить отладочную информацию по всем элементам связки ipset + vpn | shadowsocks + ( dnsmasq + dnscrypt-proxy2 ) | AdGuardHome
  7. Квас позволяет подключить AdGuardHome в качестве DNS сервера, вместо связки dnsmasq + dnscrypt-proxy2 + adblock.
  8. Квас позволяет подключить любые гостевые сети к доступу через установленное VPN соединение.
  9. Квас позволяет оперировать со списком исключений при блокировки рекламы, добавляет и удаляет домены в этом списке.

Используемые в проекте продукты

  • Разработка проекта ведется на IDE от компании JetBrains.
  • Для проведения тестов, в проекте используется пакет BATS от нескольких АВТОРОВ.

Помощь проекту

Лучшей поддержкой проекта будет Ваше участие в нем. Заявку на участие отправляйте на kvas собачка zeleza.ru.
Если сейчас, нет возможности помочь своей энергией, то энергия денег принимается на этот кошелек ЮМани.

Документация по проекту

  • Перейти по cсылке.

Каталог всех версий проекта

  • Перейти по cсылке

  • Sim карта ростелеком для роутера
  • Sgi что это такое в роутере
  • Samsung m2070w как подключить к wifi роутеру
  • Sim карта мтс для модема и роутера
  • Router beeline ru настройка роутера smart box one билайн