Jump to content

shadowsocks-libev как настроить


Recommended Posts

7 hours ago, Пихал Метрович said:

Не работатет скрипт, правила iptables просто тупо не создаются после перезагрузки, в том числе, если и DNS-запросы на прокси заворачивать (дополнительно добавлял строку [ "$table" != "mangle" ] && exit 0).

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

Хмм, странно, у меня создаются, правда у меня правила для таблицы mangle. Сейчас попробую потестировать nat. Вообще я нашел этот совет (про дубликаты) в официальном доке NDM Systems:

https://github.com/ndmsystems/packages/wiki/Opkg-Component#ndmnetfilterd

 

PS Да, загадка. Добавил в скрипт строчки

echo $table
echo $type

и в логах вижу только такое:

Opkg::Manager: /opt/etc/ndm/netfilter.d/shadow: mangle.
Opkg::Manager: /opt/etc/ndm/netfilter.d/shadow: iptables.

Так что эти переменные почему-то только такие значения и принимают. Значений ip6tables, filter, nat, о которых написано в документации нет. При этом правила добавляются именно в нужную таблицу. Вот тебе и RTFM 🤣

Edited by uneasy
Link to comment
Share on other sites

5 hours ago, vasek00 said:

А почему должны создаваться, используйте скрипт в /opt/etc/init.d для их cозданияю Далее после создания они будут проверяться по вашему скрипту в ndm.

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

https://keenetic-gi.ga/2022/12/17/adguardhome-and-selective-routing.html

Link to comment
Share on other sites

1 час назад, uneasy сказал:

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

https://keenetic-gi.ga/2022/12/17/adguardhome-and-selective-routing.html

С ним знаком.

Я делаю как написал выше.

Link to comment
Share on other sites

  • 2 weeks later...
В 15.03.2023 в 12:31, uneasy сказал:

Кстати, я свой скрипт переделал, надоело мучаться с DNS - сейчас новые сайты блокируют каждый день, да и часто одного domain.com для обхода недостаточно. Решил перейти на списки блокированных IP

Можете выложить весь скрипт?

Кстати, если вашем текущем скрипте удалить строку:

В 17.06.2022 в 00:08, uneasy сказал:
until ping -c1 dns.google >/dev/null 2>&1; do :; done

то я теряю доступ к веб-морде роутера (роутер работает, но перестает отвечать на запросы), я так понимаю, что это просто проверка доступности интернета. Вопрос - как эту строку выпилить правильно?

Link to comment
Share on other sites

Обновленный вариант настройки shadowsocks, с использованием списка заблокированных IP.

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

opkg update; opkg upgrade; opkg install nano cron ipset iptables wget-ssl ca-bundle shadowsocks-libev-ss-redir

Редактируем нужные файлы:

nano /opt/etc/init.d/S52unblock

#!/bin/sh
ipset -exist create unblock hash:net
for i in `cat /opt/root/allyouneed.lst`; do ipset -exist add unblock $i; done
for i in `cat /opt/root/community.lst`; do ipset -exist add unblock $i; done
for i in `grep -v ^# /opt/root/exceptions`; do ipset del unblock $i; done
for i in `grep -v ^# /opt/root/sites`; do
for j in `nslookup $i | grep -v 127.0.0.1 | awk '/Addr/ {print $3}' | grep -v :`; do ipset -exist add unblock $j; done
done

nano /opt/etc/cron.daily/unblock_daily

#!/bin/sh
wget -O /opt/root/allyouneed.lst https://antifilter.download/list/allyouneed.lst
wget -O /opt/root/community.lst https://community.antifilter.download/list/community.lst
ipset flush unblock
/opt/etc/init.d/S52unblock

nano /opt/etc/ndm/netfilter.d/unblock_netfilter

#!/bin/sh
if [ -z "$(iptables-save | grep unblock)" ]; then
iptables -I PREROUTING -w -t nat -i br0 -p tcp -m set --match-set unblock dst -j REDIRECT --to-port 1080
fi
if [ -z "$(ps | grep -v grep | grep ss-redir)" ]; then
ss-redir -s SERVER -p PORT -k PASSWORD -m METHOD -b 0.0.0.0 -l 1080 -t 600 -f /opt/var/run/ss-redir.pid
fi

Тут SERVER, PORT, PASSWORD и METHOD нужно поменять на свои.

Также можно добавить сайты, которых нет в списке antifilter:

nano /opt/root/sites

# comments
spotify.com

Также, в случае проблем, можно добавить какую-либо подсеть в исключения, чтобы соединение шло напрямую, минуя shadowsocks. Ниже я добавляю таким образом подсеть сайта iptvin.ru, которая попала в список antifilter, но у меня отказывается работать через мой сервер shadowsocks:

nano /opt/root/exceptions

# iptvin.ru
92.125.33.0/24

Даем файлам права на запуск:

chmod +x /opt/etc/init.d/S52unblock
chmod +x /opt/etc/cron.daily/unblock_daily
chmod +x /opt/etc/ndm/netfilter.d/unblock_netfilter

Один раз вручную скачиваем списки IP, чтобы они были при запуске роутера:

wget -O /opt/root/allyouneed.lst https://antifilter.download/list/allyouneed.lst
wget -O /opt/root/community.lst https://community.antifilter.download/list/community.lst

Перезагружаем роутер. Все должно заработать через пару минут после перезагрузки (ipset строится какое-то время, в списке много IP).

Дополнительно, на случай подмены провайдером IP адресов заблокированных сайтов, очень желательно настроить на роутере шифрование DNS запросов:

https://help.keenetic.com/hc/ru/articles/360007687159

Edited by uneasy
  • Thanks 1
  • Upvote 1
Link to comment
Share on other sites

5 hours ago, Пихал Метрович said:

Вопрос - как эту строку выпилить правильно?

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

Link to comment
Share on other sites

В 01.04.2023 в 01:01, uneasy сказал:

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

Спасибо за скрипт, все работает отлично, заблокированные сайты открываются.

В 01.04.2023 в 00:54, uneasy сказал:
iptables -I PREROUTING -w -t nat -i br0 -p udp -m set --match-set unblock dst -j REDIRECT --to-port 1080

Это правило работать не будет, трафик udp можно затолкать на порт локального прокси только через механизм TPROXY iptables (пример куска скрипта ниже - для DNS-запросов как клиентов локальной сети роутера, так и его самого; для роутера и для его клиентов локальной сети нужно в настройках DHCP установить любой внешний обычный DNS-сервер без шифрования, типа 1.1.1.1, 8.8.8.8 и т.п.):

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
if [ -z "$(iptables-save 2>/dev/null | grep SS-REDIR_UDP)" ]; then
insmod /lib/modules/$(uname -r)/xt_TPROXY.ko
iptables -w -t mangle -N SS-REDIR_UDP
iptables -w -t mangle -A SS-REDIR_UDP -p udp --dport 53 -j TPROXY --on-port 1080 --tproxy-mark 0x01/0x01
fi
if [ -z "$(ps | grep -v grep | grep ss-redir)" ]; then
ss-redir -u -c /opt/etc/shadowsocks.json -f /opt/var/run/ss-redir.pid
fi

Кстати, shadowsocks-rust, собранный под архитектуру mips, нормально работает на сабже (запускал вместе с плагином обфускации трафика simle-tls, собранного также под mips-архитектуру; архивы бинарников можно скачать на гитхабе). Команда на запуск transparent proxy (редирект tcp и udp-трафика (DNS-запросы)):

sslocal --local-addr 0.0.0.0:1080 --protocol redir --tcp-redir redirect --udp-redir tproxy -d -U -c /opt/etc/shadowsocks/shadowsocks.json

Загрузка процессора конечно выше, чем в случае shadowsocks-libev, но жить можно, каких-то сильных тормозов не заметил (даже в случае скачки торрентов на внешний жесткий диск встроенным торрент-клиентом роутера).

Edited by Пихал Метрович
Link to comment
Share on other sites

2 hours ago, Пихал Метрович said:

Это правило работать не будет

Да, вот это печально весьма. Я как раз пытался пустить wg-туннель WARP через shadowsocks, не работает ни фига. А так можно было бы весьма эффективно скрыть свой трафик от владельца публичного SS-сервера.

Кстати, про тот же  shadowsocks-rust пишут, что там появилась возможность создавать tun интерфейс (то есть встроен функционал Tun2Socks / badvpn). Не проверяли, работает на кинетике эта фишка? Тогда можно будет просто создать статический маршрут, по идее udp тоже должен работать.

Edited by uneasy
Link to comment
Share on other sites

9 часов назад, uneasy сказал:

Да, вот это печально весьма. Я как раз пытался пустить wg-туннель WARP через shadowsocks, не работает ни фига.

Можно так, например - https://lore.kernel.org/wireguard/CAMwURuCj4O2rik1kWeA22x7ovHxfGNTEyk_aNsTwc9yYbihvbw@mail.gmail.com/T/, как-то давно настраивал и это даже работало.

 

9 часов назад, uneasy сказал:

Кстати, про тот же  shadowsocks-rust пишут, что там появилась возможность создавать tun интерфейс (то есть встроен функционал Tun2Socks / badvpn). Не проверяли, работает на кинетике эта фишка? Тогда можно будет просто создать статический маршрут, по идее udp тоже должен работать.

Да, можно, настройки по созданию тоннельного интерфейса есть, но это не полноценная замена тоннелю VPN (хотя маршрутизация в отношении оного должна работать), некоторыми функциями все равно невозможно будет воспользоваться - https://ntc.party/t/topic/1425/3

"Все технологии туннелирования так или иначе строятся на двух принципах:

  • VPN: пакетная передача данных, ПО создаёт отдельный сетевой интерфейс (L2/L3), возможность использования стандартных способов маршрутизации, передачи любых протоколов и приёма входящих соединений;
  • Прокси: потоковая передача данных, ПО создаёт отдельный TCP/UDP-порт, возможность передачи только TCP/UDP-трафика, невозможность (в общем случае) приёма входящих соединений.

Через прокси у вас не будет работать ping (протокол ICMP), а голосовая связь VoIP (и другие p2p-программы) может работать плохо или не работать вовсе, из-за невозможности входящих подключений. Тем не менее, для большинства обычных программ функциональности прокси вполне достаточно.

Нередко прокси-программы эмулируют VPN-интерфейс для удобства настройки или из-за технических ограничений – не каждая программа поддерживает работу через прокси, а VPN-интерфейс настраивается на уровне операционной системы и не требует ничего от программ.
Эмуляция VPN-интерфейса не добавляет недостающих функций прокси – вы всё ещё не сможете пользоваться ping, принимать входящие соединения."

  • Thanks 2
Link to comment
Share on other sites

5 hours ago, Пихал Метрович said:

Можно так, например - https://lore.kernel.org/wireguard/CAMwURuCj4O2rik1kWeA22x7ovHxfGNTEyk_aNsTwc9yYbihvbw@mail.gmail.com/T/, как-то давно настраивал и это даже работало.

Круто! Работает! И все одной командой, люблю такое :)

Я кстати уже видел подобный гайд, но подумал, что такое будет работать, только если wireguard и shadowsocks крутятся на одной машине (личном VDS). Но нет, можно просто WARP'овский endpoint прописать, и все.

Edited by uneasy
Link to comment
Share on other sites

37 minutes ago, Пихал Метрович said:

На роутере запускали (через ss-redir) или на linux-клиенте (ss-tunnel)?

На роутере, там тоже ss-tunnel есть:

opkg install shadowsocks-libev-ss-tunnel

Link to comment
Share on other sites

  • 2 weeks later...
В 01.04.2023 в 04:54, uneasy сказал:

Обновленный вариант настройки shadowsocks, с использованием списка заблокированных IP.

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

 

пытаюсь повторить по вашей инструкции, в журнале роутера появляется ошибка

image.thumb.png.daed068037ab91c8faa3f5da8bd4a017.png

и конечно ничего не работает.

upd. entware есть, putty есть, ss-строка есть. эта часть работает, проверено.

Edited by panicoil
Link to comment
Share on other sites

22 часа назад, panicoil сказал:

пытаюсь повторить по вашей инструкции, в журнале роутера появляется ошибка

А файл клиента ss /opt/etc/shadowsocks.json заполнен верно (IP сервера, порт, метод шифрования, пароль)? К какому серверу ss вы пытаетесь приконнектиться - к своему, поднятому на VDS, или найденному в глобальной сети? Вы проверили, что сервер доступен и отвечает на запросы (это можно сделать из клиента ss под Android)?

Edited by Пихал Метрович
Link to comment
Share on other sites

2 часа назад, Пихал Метрович сказал:

А файл клиента ss /opt/etc/shadowsocks.json заполнен верно (IP сервера, порт, метод шифрования, пароль)? К какому серверу ss вы пытаетесь приконнектиться - к своему, поднятому на VDS, или найденному в глобальной сети? Вы проверили, что сервер доступен и отвечает на запросы (это можно сделать из клиента ss под Android)?

.json

{
    "server":"185.106.94.133",
    "mode":"tcp_and_udp",
    "server_port":6513,
    "local_port":1080,
    "password":"xxxxxxxxxxxx",
    "timeout":600,
    "method":"chacha20-ietf-poly1305"
    "local_address":"0.0.0.0",
}

строка из бота hlvpnbot  вида

ss://Y2hhYххххххххххххххххххekhK@hl-public4.undef.network:6513#HILOAD_HL_FREE

по ней клиент outline под win&android подключаются и работают

сервер прописывал как в виде ip, так и доменом - одинаково

 

upd. проблема оказалась в запятой лишней запятой :) 

Edited by panicoil
Link to comment
Share on other sites

On 4/16/2023 at 9:57 AM, panicoil said:

проблема оказалась в запятой лишней запятой :) 

Подскажите, а лишняя запятая у меня в инструкции, или просто при копировании случайно добавили?

Link to comment
Share on other sites

7 минут назад, uneasy сказал:

Подскажите, а лишняя запятая у меня в инструкции, или просто при копировании случайно добавили?

при копировании случайно добавил в .json "local_address":"0.0.0.0"пытался и с хабра и вашу. видимо смешалось в кучу с ошибкой(

Link to comment
Share on other sites

  • 4 weeks later...
В 01.04.2023 в 00:54, uneasy сказал:

Также можно добавить сайты, которых нет в списке antifilter:

nano /opt/root/sites

Доброго времени суток, а можно ли как-то добавить не домен, а несколько подсетей (в дополнение к списку antifilter, которые с ними не пересекаются), трафик на IP которых должен идти через прокси? Видео с телеги долго грузится, заворачиваешь весь трафик клиентов роутера на прокси - загрузка происходит раз в 10 быстрее, видимо, мобильный провайдер подрезает скорость, а весь трафик не хочется заворачивать.

Edited by Пихал Метрович
Link to comment
Share on other sites

11 hours ago, Пихал Метрович said:

Доброго времени суток, а можно ли как-то добавить не домен, а несколько подсетей (в дополнение к списку antifilter, которые с ними не пересекаются), трафик на IP которых должен идти через прокси? Видео с телеги долго грузится, заворачиваешь весь трафик клиентов роутера на прокси - загрузка происходит раз в 10 быстрее, видимо, мобильный провайдер подрезает скорость, а весь трафик не хочется заворачивать.

Да, конечно, можете просто добавить в конец S52unblock что-то типа

for i in `cat /opt/root/subnets`; do ipset add unblock $i; done

И в subnets прописать свои подсети в формате CIDR

  • Thanks 1
Link to comment
Share on other sites

В 02.04.2023 в 16:23, uneasy сказал:

Круто! Работает! И все одной командой, люблю такое :)

Я кстати уже видел подобный гайд, но подумал, что такое будет работать, только если wireguard и shadowsocks крутятся на одной машине (личном VDS). Но нет, можно просто WARP'овский endpoint прописать, и все.

Добрый день! Может поподробнее рассказать, как это настроить?

У меня есть VPS, на которой стоит wireguard и shadowsocks. И keenetic kn-1811, для которого требуется wireguard пустить через shadowsocks. 

Конфиг ss на сервере:

{
  "server": "0.0.0.0",
  "server_port": 8443,
  "password": "<some_pass>",
  "method": "chacha20-ietf-poly1305",
  "nameserver": "1.1.1.1",
  "mode": "tcp_and_udp"
}

На роутере запускаю:

ss-tunnel -s <vps_ip> -p 8443 -l 51820 -L 127.0.0.1:51820 -k <some_pass> -m chacha20-ietf-poly1305 -u

В настройках wg на роутере адрес и порт пира заменил с <vps_ip>:51820 на 127.0.0.1:51820

В интерфейсе вижу только сколько байт отправлено, в получено пусто: 

Скрытый текст

wg.thumb.png.093b806c67a4cb10480b352d62e8291d.png

В логах строчки вида:

wireguard: Wireguard1: handshake for peer "<some_peer>" (23) (127.0.0.1:51820) did not complete after 5 seconds, retrying (try 2)

В логах прокси на клиенте ничего не появляется.

Если вместо ss-tunnel указать ss-local и убрать аргумент -L 127.0.0.1:51820, то в логах прокси начинают появляться строчки:

2023-05-20 21:37:59 ERROR: [udp] invalid header with addr type 0

Но какой-нибудь запрос, например, 

curl --socks5 127.0.0.1:51820 -4 ifconfig.me

отрабатывает успешно, отображается внешний IP vps - <vps_ip>. То есть сам прокси рабочий, вероятно ошибаюсь где-то в конфигах...

Link to comment
Share on other sites

1 час назад, Dell сказал:

Добрый день! Может поподробнее рассказать, как это настроить?

Отвечу сам себе, наконец разобрался.

Во-первых вместо передачи параметров в ss-tunnel сделал конфиг, по которому стало понятнее, что куда переадресовывается:

{
  "server": "<vps_ip>",
  "server_port": 8443,
  "local_address": "0.0.0.0",
  "local_port": 5634,
  "password": "<some_pass>",
  "timeout": 120,
  "method": "chacha20-ietf-poly1305",
  "mode": "tcp_and_udp",
  "tunnel_address": "127.0.0.1:51820"
}

И в настройках клиента wg адрес и порт пира поменял на 127.0.0.1:5634

Во-вторых проблема оказалась до банальности проста: на VPS порт 8443 был открыт только для TCP. Открыл для UDP, и все заработало.

  • Upvote 1
Link to comment
Share on other sites

  • 2 months later...
On 5/15/2023 at 9:37 PM, Пихал Метрович said:

можно ли как-то добавить не домен, а несколько подсетей (в дополнение к списку antifilter, которые с ними не пересекаются)

Тоже стал замечать, что одного списка allyouneed стало не хватать (вопреки его названию 🙂). В параллельной ветке рекомендуют дополнительно использовать список с community.antifilter.download. Добавил в свой скрипт, если хотите, можете потестировать. По крайней мере Twitter у меня теперь лучше стал работать.

Также убрал из скрипта shadowsocks.json, чтобы не было проблем, как у panicoil.

Link to comment
Share on other sites

  • 3 weeks later...

буду задавать ламерские вопросы)

Надо добавить в гигу Прокси клиент Shadowsocks SOCKS v5. Все понятно, кроме того, что когда я создавал сам Shadowsocks на VPS  я получил по итогу только ключ ss://…………………………. для добавления в приложение андроид, а где взять данные для добавления в роутер? сервер, порт, логин и пароль?

Edited by Кайло Рен
Link to comment
Share on other sites

On 8/24/2023 at 7:17 PM, Кайло Рен said:

буду задавать ламерские вопросы)

Надо добавить в гигу Прокси клиент Shadowsocks SOCKS v5. Все понятно, кроме того, что когда я создавал сам Shadowsocks на VPS  я получил по итогу только ключ ss://…………………………. для добавления в приложение андроид, а где взять данные для добавления в роутер? сервер, порт, логин и пароль?

Можете на роутере запустить следующие команды (вставьте в первую команду свою ссылку ss://):

url="ss://..."
server=$(echo $url | grep -oP "(?<=@).*?(?=:)")
port=$(echo $url | cut -d ":" -f 3 | cut -d "#" -f 1)
password=$(echo $url | grep -oP "(?<=ss://).*?(?=@)" | base64 -d | cut -d ":" -f 2)
method=$(echo $url | grep -oP "(?<=ss://).*?(?=@)" | base64 -d | cut -d ":" -f 1)
echo $server $port $password $method

Последняя команда выдаст ваш сервер, порт, пароль и метод.

Или декодируйте свою ссылку на сайте base64decode.org 

Edited by uneasy
Link to comment
Share on other sites

7 hours ago, Кайло Рен said:

так логина нет все равно

Логина на серверах shadowsocks не бывает, только пароль.

Link to comment
Share on other sites

5 minutes ago, Кайло Рен said:

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

Если вы про компонент KeeneticOS "Клиент прокси", то да, он shadowsocks не поддерживает. Настроить подключение shadowsocks можно только через OPKG

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   1 member

×
×
  • Create New...