├── LICENSE ├── README.md ├── certbot-renewal-hook-deploy ├── install-server-on-Arch.sh-example ├── shadowsocks-client.json └── shadowsocks-server.json /LICENSE: -------------------------------------------------------------------------------- 1 | This is free and unencumbered software released into the public domain. 2 | 3 | Anyone is free to copy, modify, publish, use, compile, sell, or 4 | distribute this software, either in source code form or as a compiled 5 | binary, for any purpose, commercial or non-commercial, and by any 6 | means. 7 | 8 | In jurisdictions that recognize copyright laws, the author or authors 9 | of this software dedicate any and all copyright interest in the 10 | software to the public domain. We make this dedication for the benefit 11 | of the public at large and to the detriment of our heirs and 12 | successors. We intend this dedication to be an overt act of 13 | relinquishment in perpetuity of all present and future rights to this 14 | software under copyright law. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | 24 | For more information, please refer to 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Лучший способ обхода блокировок в интернете 2 | За счет чего лучший? 3 | * Он обходит любой DPI, кроме белых списков или при запрете TLS. Ему абсолютно всё равно на блокировки ip адресов или доменов. У Cloudflare миллионы IP адресов, невозможно забанить их все без последствий для экономики страны. 4 | * Вы можете подставить любой IP адрес из имеющихся у Cloudflare, если тот адрес к которому вы обращаетесь заблокирован - [cloudflare.com/ips](https://cloudflare.com/ips) 5 | * РКП (РосКомПозор) разбанил все или большинство адресов Cloudflare. И в действительности им крайне не выгодно банить IP Cloudflare, потому-что за IP адресами Cloudflare стоят самые разные сайты, в том числе и бизнес 6 | * Cloudflare не уходит из России, наоборот. Они открыли датацентр в Москве и Санкт-Петербурге и планируют ещё открыть по крайней мере один ДЦ в центральной части страны (предположительно в Новосибирске) 7 | * Cloudflare CDN с 2014 года бесплатно проксирует websocket трафик. Это позволяет скрыть VPS IP от блокировки РКП, трафик идет через Cloudflare CDN, но Cloudflare тоже не видит трафик, он только его транзитит между клиентом и прокси сервером 8 | 9 | ##### Что нам понадобится: 10 | * Дешевый VPS c возможностью держать хотя бы приватный прокси с необходимым лимитом/безлимитом трафика 11 | * [lowendstock.com](https://lowendstock.com) 12 | * [lowendbox.com](https://lowendbox.com) 13 | * [lowendtalk.com](https://lowendtalk.com) 14 | * Домен (можно бесплатный на год с возможностью бесплатного продления на [freenom.com](https://freenom.com)) 15 | * Бесплатный аккаунт в Сloudflare 16 | * Любая версия shadowsocks, которая умеет работать с плагинами. Например shadowsocks-libev (или shadowsocks-rust) 17 | * v2ray-plugin 18 | * acme.sh или certbot + certbot-cloudflare plugin 19 | * `https://dash.cloudflare.com>{DOMAIN.TLD}>Get your API key>Origin CA Key>View` 20 | 21 | ### Собственно настройки: 22 | * Сертификат Cloudflare выдает на 3 месяца. Но нам лучше ежедневно проверять, не протух ли сертификат. 23 | * С acme.sh это выглядит проще, но я делал через certbot. Главное чтоб сертификаты мог прочитать v2ray-plugin 24 | * см. [`install-server-on-Arch.sh-example`](install-server-on-Arch.sh-example) 25 | -------------------------------------------------------------------------------- /certbot-renewal-hook-deploy: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | for domain in $RENEWED_DOMAINS; do 5 | case $domain in 6 | ) 7 | daemon_cert_root="/etc/shadowsocks/certs" 8 | chown_user=":" 9 | service_name="shadowsocks-libev-server@$domain" 10 | 11 | mkdir -p "$daemon_cert_root" 12 | 13 | # Make sure the certificate and private key files are 14 | # never world readable, even just for an instant while 15 | # we're copying them into daemon_cert_root. 16 | umask 077 17 | 18 | cp "$RENEWED_LINEAGE/fullchain.pem" "$daemon_cert_root/$domain.cert" 19 | cp "$RENEWED_LINEAGE/privkey.pem" "$daemon_cert_root/$domain.key" 20 | 21 | # Apply the proper file ownership and permissions for 22 | # the daemon to read its certificate and key. 23 | chown "$chown_user" "$daemon_cert_root/$domain.cert" \ 24 | "$daemon_cert_root/$domain.key" 25 | chmod 400 "$daemon_cert_root/$domain.cert" \ 26 | "$daemon_cert_root/$domain.key" 27 | 28 | systemctl restart "$service_name" 29 | ;; 30 | esac 31 | done -------------------------------------------------------------------------------- /install-server-on-Arch.sh-example: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ### NOT TESTED! 3 | echo "EDIT variables before and run as root" && exit 4 | MY_DOMAIN=domain.tld 5 | CLOUDFLARE_EMAIL=mail@domain.tld 6 | CLOUDFLARE_API_KEY=31337 7 | SS_PASSWORD="" 8 | 9 | SS_ROOT="/etc/shadowsocks" 10 | #CHOWN_USER="shadowsocks" 11 | CHOWN_USER="nobody" 12 | DAEMON_CERT_ROOT="/etc/shadowsocks/certs" 13 | INI_FILE="cloudflare.ini" 14 | CERTBOT_INI_DIR="/root/.secrets/certbot" 15 | CERTBOT_DEPLOY_HOOKS_DIR="/etc/letsencrypt/renewal-hooks/deploy" 16 | CERTBOT_DEPLOY_HOOK_NAME="deploy" 17 | CERTBOT_LIVE_DIR="/etc/letsencrypt/live" 18 | 19 | # INSTALL 20 | pacman -S \ 21 | shadowsocks-libev \ 22 | shadowsocks-v2ray-plugin \ 23 | certbot \ 24 | certbot-dns-cloudflare 25 | 26 | # V2RAY permissions 27 | # https://bugs.archlinux.org/task/62416 28 | setcap cap_net_bind_service+ep /usr/bin/v2ray-plugin 29 | 30 | cd $(dirname "$0") 31 | 32 | # CERT 33 | mkdir -p $CERTBOT_INI_DIR 34 | cat >$CERTBOT_INI_DIR/$INI_FILE </$MY_DOMAIN/" \ 61 | -e "s//$CHOWN_USER/" \ 62 | $CERTBOT_DEPLOY_HOOKS_DIR/$CERTBOT_DEPLOY_HOOK_NAME 63 | 64 | # CRON 65 | echo -e "@daily\t\tcertbot renew" >> /var/spool/cron/root 66 | chmod 600 /var/spool/cron/root 67 | 68 | # SHADOWSOCKS CONFIG 69 | cp shadowsocks-server.json $SS_ROOT/$MY_DOMAIN.json 70 | sed -i \ 71 | -e "s//$SS_PASSWORD/" \ 72 | -e "s//$MY_DOMAIN/g" \ 73 | $SS_ROOT/$MY_DOMAIN.json 74 | 75 | # Я уже забыл зачем мне нужно было создавать пользователя shadowsocks вместо nobody, 76 | # возможно это лишняя операция 77 | 78 | # ADD SHADOWSOCKS USER 79 | # useradd --system --user-group --home $SS_ROOT shadowsocks 80 | # chown $CHOWN_USER: -R $SS_ROOT 81 | 82 | # SYSTEMD SHADOWSOCKS USER 83 | # sudo cp /usr/lib/systemd/system/shadowsocks-libev-server@.service \ 84 | # /etc/systemd/system/shadowsocks-libev-server@$MY_DOMAIN.service 85 | # sed -i "s/nobody/shadowsocks/" \ 86 | # /etc/systemd/system/shadowsocks-libev-server@$MY_DOMAIN.service 87 | 88 | # SYSTEMD ENABLE SERVICE 89 | systemctl enable shadowsocks-libev-server@$MY_DOMAIN 90 | systemctl start shadowsocks-libev-server@$MY_DOMAIN -------------------------------------------------------------------------------- /shadowsocks-client.json: -------------------------------------------------------------------------------- 1 | { 2 | "server": "", 3 | "server_port": 443, 4 | "local_port": 1080, 5 | "password": "", 6 | "method": "xchacha20-ietf-poly1305", 7 | 8 | "plugin": "v2ray-plugin", 9 | "plugin_opts": "tls;host=;path=/wss;loglevel=none", 10 | 11 | "timeout": 300, 12 | "mptcp": true, 13 | "reuse_port": true, 14 | "fast_open": true, 15 | "ipv6_first": false 16 | } -------------------------------------------------------------------------------- /shadowsocks-server.json: -------------------------------------------------------------------------------- 1 | { 2 | "server": "0.0.0.0", 3 | "server_port": 443, 4 | "password": "", 5 | "method": "xchacha20-ietf-poly1305", 6 | 7 | "plugin": "v2ray-plugin", 8 | "plugin_opts": "server;tls;host=;path=/wss;cert=/etc/shadowsocks/certs/.cert;key=/etc/shadowsocks/certs/.key;loglevel=none", 9 | 10 | "timeout": 300, 11 | "mptcp": true, 12 | "reuse_port": true, 13 | "fast_open": true, 14 | "ipv6_first": true 15 | } --------------------------------------------------------------------------------