Table of Contents
1 Зачем нужно защищать свой интернет
Расскажу об интересной штуке — Shadowsocks. Это средство для обеспечения защищённой связи с шифрованием и авторизацией по паролю.
Shadowsocks пригодится:
- для защиты ваших данных в ненадёжных сетях (при подключении к публичным точкам Wi-Fi),
- для реализации права на свободу информации, если вы столкнулись с недоступностью сайтов по какой-либо причине,
- для защиты от перехвата трафика и внедрения на страницы сайтов рекламы (так любят поступать мобильные операторы),
- для защиты от несанкционированных подписок на платные услуги, когда пользуетесь мобильным интернетом.
Если первые два пункта не нуждаются в пояснениях, это избитая тема, то ситуация с мобильными операторами требует пояснений. Пользователей мобильных операторов преследует проблема: провайдер может изменять странички как угодно, на лету внедряя скрипты отслеживания действий или рекламу. А ещё может перенаправить браузер на сайт, посещение которого автоматически включит платную подписку на какой-нибудь контент и с мобильного счёта начнут испаряться деньги. Насколько всё серьёзно, можете узнать в статье на Хабре «Как Мегафон спалился на мобильных подписках».
В условиях, когда доверять провайдерам интернета ну просто не получается из-за таких вот инцидентов, приходится защищать свои устройства и кошельки. Нужно шифровать трафик ПК, мобильных телефонов и планшетов. Бесплатные VPN сервисы, в том числе встроенный в браузер Opera, я не считаю безопасными, потому что нет точных сведений, что именно владельцы делают с историей сетевой активности. Утечки данных о пользователях таких сервисов подтверждают мои подозрения.
Поэтому, по моему мнению, надёжнее купить собственный сервер и с его помощью шифровать трафик. Обсуждаемый в статье проект родом из Китая, исходный код открыт, всё бесплатно (кроме аренды сервера и вашего времени, потраченного на настройку).
2 Что такое Shadowsocks
Это две софтины. Первая ставится на сервер для работы в качестве шифрующего прокси-сервера. На компьютеры и мобильники ставится вторая — клиент Shadowsocks, благодаря которому все передаваемые данные будут надёжно зашифрованы между сервером и используемым устройством.
Преимущество данного способа проксирования передачи данных — скорость. На выбор доступно несколько алгоритмов, среди них не требовательные к процессору. За счёт быстрого шифрования и отсутствия каких-то довесков отклик получается быстрым. Даже онлайн-игры работают неплохо, пинг в играх типа Battlefield увеличивается на 5-10 мс, что весьма хороший результат.
Может быть, OpenVPN и Wireguard в чём-то лучше, тут спорить не собираюсь. Просто мне возможностей героя данной заметки хватает с лихвой.
- Мощное шифрование — есть. Настолько мощное, что китайцам помогает (помогало?) обходить Великий Китайский Файрвол. Я не призываю ставить эту софтину для обхода чего-либо, но сам факт-то каков!
- Авторизация по паролю — есть. Нельзя назначать разным устройствам по паролю, но какая разница, если вся аппаратура — личная?
- Настройка по QR-коду — есть. Это мега-удобно.
- Низкая нагрузка на процессор — есть. Работе сервера не мешает, а батарея телефона не садится сильно быстрее.
- Клиенты для всех популярных операционных систем тоже есть. И эти программы довольно удобные.
Самое замечательное то, что серверная утилита shadowsocks-libev очень-очень легковесная и совсем не мешает работе других программ на сервере. Пускай на VDS лишь 512 Мб ОЗУ и какой-нибудь скромненький ARM процессор — проксирование будет работать нормально.
3 Что потребуется для Shadowsocks
Во-первых, собственный VPS. Лучше на Ubuntu, так настройка пройдёт проще. Сойдёт любой дешёвый виртуальный сервер. Кстати, я когда-то писал гайд по выбору сервера. Также вы можете зарегистрировать аккаунт на Digital Ocean по моей реферальной ссылке, привязать карту и вам на счёт упадёт несколько бонусных долларов. Учтите — в какой-то момент правила реферальной программы DO поменялись, поэтому читайте все надписи в админке, чтобы случайно не пополнить счёт реальными деньгами. Лучшим решением, imho, будет привязка карты с не более чем сотней рублей.
Во-вторых, требуется умение заходить по SSH. Впрочем, это можно сделать прямо через админку облачного провайдера, благо много команд вводить не придётся.
В-третьих, нужно поставить программы-клиенты на ПК и телефоны. Про устройства от Apple рассказать не смогу, так как у меня таковых нет, а настройка Shadowsocks на Windows и Android будет ниже.
4 Настройка сервера с Shadowsocks
Выбрали, где получить виртуальный сервер? Надеюсь, что с этим не было проблем. Далее все настройки будут на примере Digital Ocean
(я не навязываю пользоваться DO!).
В DO дроплет (виртуальный сервер) создаётся через меню Create — Droplets:
Подчеркну — достаточно самого дешёвого варианта. В DO это конфигурация с 1 Гб RAM и одноядерным ЦП c 25 Гб диском за 5$ в месяц:
Операционной системой лучше ставить Ubuntu 18.04. Это наиоптимальнейший вариант, благо управляется просто, наличествует нужный набор софта.
Выбор дата-центра для VPS будет на той же странице создания сервера в Digital Ocean. У других хостингов выбор местоположения может отсутствовать либо появится на другом шаге. На DO, пожалуй, лучше размещать в Амстердаме, там провайдеры пока что не занимаются активной фильтрацией трафика, поэтому проблем с сетью ожидается меньше всего. Однако за счёт нагруженности тамошнего дата-центра скорость сети будет не шибкой высокой — 30-60 Мбит.
После создания сервера обязательно проверьте его цифровой адрес на блокировку, так как IPv4 адресов в мире мало, а нехороших и глупых людей — много:
Помимо госсайтов для проверки IP на наличие санкций (спрашивается — что адреса сделали плохого?), в интернете живёт удобный сервис zapret.info:
К сожалению, реальность такова, что в 1 случае из 5 в Digital Ocean и у других популярных облачных провайдеров нужно пересоздавать сервер несколько раз, чтобы получить не заблокированный цифровой адрес. Мой «рекорд» — 31 неудачная попытка создания сервера подряд. Только после этого дроплет получил не заблокированный адрес.
Далее зайдите в терминал под пользователем root (пароль к нему придёт письмом). В DO для этого есть вебклиент, вызываемой кнопкой справа вверху панели управления VPS:
Хотя вы можете использовать Putty, Kitty или любую другую. При входе на сервер, может быть, он попросит сменить пароль — do it, благо это легко. После выполните следующую команду:
apt update && apt upgrade -y && apt install -y shadowsocks-libev
Репозиторий linux-софта обновится, сама Убунта проапгрейдится тоже, установится сервер Shadowsocks. После успешного выполнения вывод в терминале будет такой:
В отличии от прокси, к которому может подключиться любой желающий, в shadowsocks-libev можно и нужно поставить пароль. Также метод шифрования по умолчанию не оптимален. Поэтому обязательно отредактируйте файл конфигурации:
nano /etc/shadowsocks-libev/config.json
По умолчанию выглядеть config.json будет выглядеть так:
Нужно поправить файл конфигурации, добавив пару опций, приведя к такому виду:
{ "server":"0.0.0.0", "server_port":ТУТ_СЛУЧАЙНЫЙ_ПОРТ, "local_port":1080, "password":"ТУТ_ВАШ_ПАРОЛЬ", "timeout":10, "method":"chacha20-ietf-poly1305", "fast_open":true, "workers":1, "mode":"tcp_and_udp" }
Пройдусь по опциям.
- IP в поле «server» должно быть именно 0.0.0.0 — это не ошибка, так shadowsocks-libev будет прослушивать все сетевые интерфейсы.
- В качестве «server_port» нужно указать любой порт для доступа, отличный от стандартных 22, 80, 443 и 8388.
- «local_port» оставляйте 1080, это для связи внутри сервера и в нашем случае не нужно.
- «password» — конечно же, делайте пароль подлиннее да позаковыристее.
- «timeout» — время, после которого софтина разрывает соединение, если не поступило никаких данных. Вместо 60 секунд лучше ввести 10, ну максимум 20. Большее значение клиент Shadowsocks для Windows не поддерживает, ни к чему рассогласовывать опции.
- «method» — алгоритм шифрования. Стандартный «chacha20-ietf-poly1305» очень надёжен, такой трафик никакой злоумышленник не расшифрует. Однако если ваш телефон после установки Shadowsocks клиента начнёт быстро съедать батарею, переключите на «aes-256-cfb» и перезагрузите сервер. Этот алгоритм менее надёжен, но поможет снизить нагрузку на ЦП и сэкономить заряд аккумулятора, если процессор мобильного имеет поддержку аппаратного ускорения AES шифрования. Кстати, на моём дешёвом MTK6580 разница заметна.
- «fast_open» — быстрое открытие соединений, если поддерживается ядром ОС.
- «workers» — количество процессов shadowsocks-libev. Советую поставить соответственно количеству ядер у ЦП.
- «mode»:»tcp_and_udp» включает передачу данных по UDP. Честно говоря, разницы не заметил, но люди в конфигах указывают. Хуже точно не будет.
После внесения правок жмите Ctrl+O и Enter для сохранения, Ctrl+X для закрытия.
Следующие команды включат сервис Shadowsocks на сервере с Ubuntu, чтобы он включался автоматически:
systemctl enable shadowsocks-libev systemctl restart shadowsocks-libev
И финальный штрих — тюнинг настроек ядра сервера для максимальной производительности:
nano /etc/sysctl.conf
Листайте этот конфиг до самого низа и вставляйте вот этот набор твиков:
fs.file-max = 51200 net.core.rmem_max = 67108864 net.core.wmem_max = 67108864 net.core.rmem_default = 65536 net.core.wmem_default = 65536 net.core.netdev_max_backlog = 4096 net.core.somaxconn = 4096 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_fin_timeout = 30 net.ipv4.tcp_keepalive_time = 1200 net.ipv4.ip_local_port_range = 10000 65000 net.ipv4.tcp_max_syn_backlog = 4096 net.ipv4.tcp_max_tw_buckets = 5000 net.ipv4.tcp_fastopen = 3 net.ipv4.tcp_rmem = 4096 87380 67108864 net.ipv4.tcp_wmem = 4096 65536 67108864 net.ipv4.tcp_mtu_probing = 1 net.core.default_qdisc=fq net.ipv4.tcp_congestion_control=bbr
Сохраните так же, как и предыдущий конфиг, введите «sysctl -p» для применения настроек, перезагрузите машину командой «reboot» и… всё, ваш персональный супер-быстрый прокси-сервер настроен! Осталось задействовать его на устройствах.
Конечно, можно закрыть лишние порты файрволлом, включить fail2ban и сделать кучу других полезных действий, но в контексте создания прокси-сервера на Ubuntu — перечисленного выше достаточно. Остальное — по вашему усмотрению.
5 Настройка Shadowsocks в Windows
Утилита для компьютеров отличается простотой в установке. Она портативная, её можно носить с собой на флешке или распространить на все домашние ПК. Каких-то специфичных дополнительных настроек для отдельных машин нет, настройки всегда одинаковые.
Зайдите на страницу релизов shadowsocks-windows и скачайте zip-архив с именем Shadowsocks-[тут_версия].zip.
Распакуйте этот архив в любую папку. Например, C:\Shadowsocks.
Запустите исполняемый файл Shadowsocks.exe. Раз это первый запуск, появится окно добавления сервера, где нужно ввести IP, порт, пароль и алгоритм шифрования.
После нажатия ОК сервер добавится в список слева и окно скроется. При необходимости его можно вызвать нажатием правой кнопкой мыши по значку Windows-клиента Shadowsocks в трее — Servers — Edit Servers.
Чтобы инициировать подключение к настроенному серверу, нужно переключить системный прокси: в меню System-Proxy — Global. Пункт Disable выключает проксирование. Также советую, чтобы не запускать программу каждый раз при включении ПК, отметить галкой пункт Start on Boot.
На этом с настройкой в Windows всё. Теперь, если зайти через любой браузер на сервис определения IP адреса (yandex.ru/internet/), окажется, что вы сидите не из дома:
Также я протестировал получившуюся скорость интернета. К сожалению, входящую скорость больше 50 Мбит на тестовом сервере получить не удалось:
В действительности дела обстоят лучше и потери в скорости составляют не более 10% от тарифа интернета. Наверное, тестируемый VPS работает с соседстве с чересчур нагруженными проектами.
Ещё один момент: не все программы в Windows учитывают системные настройки прокси. Например, Магазин приложений может пойти в обход. Для решения этой проблемы существует SocksCap64. Однако, скорее всего, такая утилита вам не понадобится — браузеры с прокси работают нормально.
6 Настройка Shadowsocks на Android
С телефонами на Andoid всё просто — есть клиент Shadowsocks. Абсолютно бесплатный.
В телефонной программе можно точно так же заполнить поля, указав сервер и мучительно набрав сложный пароль на экранной клавиатуре, а можно выбрать «Сканировать QR-код» и навести камеру на экран компьютера.
На компьютере в Windows-версии настройки генерируются через пункт меню Servers — Share Server Config. Это удобно.
После настройки нужно лишь нажать кнопку в главном меню, чтобы на телефоне создалось VPN-соединение.
В зависимости от производительности процессора телефона и качества связи скорость получается сильно разной. К сожалению, пинг сильно страдает, поэтому во время звонков по WhatsApp собеседник услышит вас на полсекунды позже обычного, незащищённого разговора. Комфорт снижается, зато никакие мобильные подписки вам не подключится, реклама от оператора исчезнет.
7 Подчеркну
Этот или подобный софт не обязательно использовать ради доступа к запрещённым ресурсам. В конце концов, если арендовать сервер на территории необъятной, в этом плане ничего не изменится. Зато провайдер не сможет вмешаться в трафик. Если вас также, как и меня, беспокоит факт того, что мобильные операторы считают нормальным вешать на сайтах рекламу, которую владельцы не ставили, то различные прокси и VPN сервисы — это технологичный способ защититься. Так что ставьте Shadowsocks на здоровье.
Здравствуйте, Дмитрий
спасибо за статью. У меня в ходе настройки возникли вопросы:
1) при настройке shadowsocks в windows, какой пароль использовать, тот который задавали в config.json или какой-то другой?
2) в файле sysctl.conf, когда вставляем рекомендуемые твики, нужны ли какие-нибудь символы?
Дело в том, что я все сделал как в вашей статье, но при этом у меня никакие страницы не открываются когда shadowsocks включен
С уважением,
Алмас
Алмас, 1) который в config.json; 2) никакие «символы» не нужны, это не рунная магия. «Не открываются» — слишком расплывчатое описание ошибки. Всегда есть код ошибки, отталкивайтесь в решении проблем от него. И убедитесь, что шифрование используется одинаковое и на сервере, и в клиенте Shadowsocks.
Привет! Подскажи, пожалуйста, как установить shadowstock клиент на ubuntu? Захожу в менеджер приложений, нашел shadowsocks-qt5 и оно мне пишет:
Пожалуйста, посмотрите на список изменений ниже.
772,8 МБ будет загружено всего.
2,6 ГБ дискового пространства будет использовано.
Это блин что за прикол?:) Кстати например у VS code было примерно так-же, а если скачать с сайта в разы меньше весит… Ну так вот shadowsocks-qt5 предлагают скачать с гита
https://github.com/shadowsocks/shadowsocks-qt5
И весит отлично (533kb), но как потом установить из того архива который скачался?
Gyk, то, что «весит отлично» — это исходники. Их нужно скомпилировать. Для компиляции вам потребуется даже больше, чем 772,8 мегабайт зависимостей. Так что лучше ставьте через Менеджер приложений. Посмотрите список зависимых программных пакетов, перечисленных в списке изменений, и решайте — стоит ли ставить shadowsocks-qt5, если софтине нужны вагон и маленькая тележка зависимостей.
здравствуйте подскажите пожалуйста вот я все сделал все работает но как мне теперь сделать так чтоб те люди кому я поставил shadowsocks чтоб они не копировали мой профиль??????
Да никак, в общем-то. Нет такой функции.
а есть какой нибудь вариант хотябы видеть сколько пользователей онлайн???
Нет, в shadowsocks-libev ничего такого нет. Там минимум функций, чтобы работало на любом устройстве, даже на роутере с OpenWRT. В более медленной, оригинальной реализации на Python есть возможность назначать несколько пользователей, разделяя их по портам и паролям (тогда можно через iftop или nethogs следить за активностью), но на практике сервер сильно нагружается в таком режиме. Да и не рекомендую использовать подобный софт для массового использования — за все действия в интернете будете нести ответственность только вы как владелец сервера. Но если вам это так нужно, можете запустить несколько сервисов с разными конфигами на разных портах. Погуглите «Configure Multiple Users for Shadowsocks-libev».
Дмитрий, здравствуйте и спасибо за статью. Подскажите, как настроить в мобильном клиенте свой DNS, расположенный на том же сервере?
В настройках соединения есть пункт «Удалённый DNS». Укажите там IP сервера.
Но для этого надо открыть его для всего Интернета, я правильно понимаю?
Правильно понимаете. У меня тоже была такая идея, чтобы Shadowsocks-libev обращался к DNS с баннерорезкой внутри сервера по адресу 127.0.0.1, а сам сервер DNS принимал только локальные запросы, закрытый от остального мира, но провернуть такое не получилось. Скорее всего, надо в исходниках ковыряться. Не умеет Shadowsocks-libev создавать внутренние соединения, он проксирует запросы из клиента во внешний Интернет.
Теоретически, если сделать docker-контейнеры с оными и указать в клиенте IP контейнера с сервером имён, а для самих контейнеров прописать правила iptables, чтобы блокировать входящие запросы извне, то что-то может получиться, но я до такого не доходил.
Ха, странно. А у меня получилось со 127.0.0.1 Только что проверил.
Рад, что получилось :) Может быть, доделали этот момент. Пробовал-то я года два назад.
Дмитрий, а как настроить несколько клиентов на одном VPS?
В смысле? Установленным на сервере shadowsocks можно пользоваться с нескольких устройств одновременно. Если вы о том, чтобы создать несколько аккаунтов, то ответ в моём комментарии прямо над вашим первым.
ошибок никаких не было все стало , но через windows клиент вписываю все , ничего не происходит , нет подключения
может устарело , или китайский фаервол не бьет ))
3 раз удаляю сервер переделываю (aws) , ничего не работает
Windows клиент пишет о проблемах в файл /ss_win_temp/shadowsocks.log, смотрите там сообщение о причинах неполадок.
Также можно включить логирование на стороне сервера, запустив Shadowsocks с параметром -v (verbose режим). Лог будет сохраняться в /var/log/shadowsocks.log.
Если же и там пусто, значит — файрволы сервера и/или AWS мешают.
Здраствуйте Дмитрий,
У меня на VPS есть дополнительный IP, вы не могли бы помочь мне с настройками второго shadowsocks сервера с моим дополнительным IP. Пробовал поменять config.json file, но что то не сработало
Андрей, для индивидуальной помощи у меня, к сожалению, нет времени. Непонятно, как именно вы хотите, чтобы работали shadowsocks сервера и не известен ваш уровень знаний, поэтому ограничусь общими советами. Чтобы запустить второй процесс shadowsocks, в отдельном config.json должны быть другие порты. Попробуйте сменить server_port и local_port. Естественно, службу shadowsocks-libev тоже нужно сдублировать, чтобы указать в пути запуска другой адрес до config.json. Если хотите, чтобы на разных IP были доступны только разные shadowsocks сервера, полагаю, надо в server в обоих конфигах указать IP сетевых интерфейсов (теоретически, сам так не пробовал).
Здравствуйте уважаемый эксперты, подскажите пожалуйста где брать готовые прокси сервера для SSRR, v2rayNG, Shadowsocks? Я никак не могу найти рабочие прокси сервера, очень прошу вас помочь, так как там где я проживаю интернет на 95% заблокирован, надеюсь на ваше понимание, заранее благодарю
Мирный, сомневаюсь, что кто-то будет публично такое выкладывать. Да и держать сервер под несколько пользователей не очень удобно, ведь скорость будет делиться на всех. Судя по статьям и комментам на Хабре, такие сервера поднимают компании для своих сотрудников, застрявших в странах с ограниченным интернетом, и для личного пользования.
Если Shadowsocks не может зайти на сайт(403) ошибка. Мне кажется что некоторые системы на сайтах просто видят его и блочат. К примеру на *** вообще никак не зайти( В чем может быть проблема? Кто-нибудь с таким сталкивался? С обычным инетом и 911 все норм.
403 ошибка означает, что сайт блокирует IP сервера, через который вы ходите. Сайты о Shadowsocks ничего знают, они лишь видят, что заход идёт с IP какого-то хостинга, не обычного провайдера интернета. С чем они борются, блокируя такие IP, известно только владельцам сайтов.
То есть с этим вообще ничего не возможно сделать? А если обфусцировать трафик и пускать его через CDN от Cloudflare например, это может как-то помочь? И вообще нужно ли это?
San4ous, меняйте IP сервера или сам сервер, если хостинг VPS не поддерживает смену адреса. Иногда сайты банят весь пул IP хостинга, иногда только отдельные адреса. А идея «если обфусцировать трафик и пускать его через CDN от Cloudflare», на мой взгляд, не жизнеспособна. Вы уже шифруете трафик между своим устройством и вашим сервером с помощью Shadowsocks. Обфускация между сервером и сайтами подразумевает, что там тоже какой-то софт должен стоять для такого, да и IP сервера всё равно будет известен для установки соединения. Повторю: 403 ошибка — это блокировка IP вашего сервера, к шифрованию трафика это отношения не имеет.
Спасибо что прояснили эти моменты! Попробую разные хостинги. Может что-то найду…
Добрый день, что-то у меня тоже не получилось , как у коллеги выше. Не подменяется мой ip адрес.
Сервер гугл в Японии с юбунтой, на него все установил , все на нем запускается…Клиент по Windows 7 тоже, все настроил, но не выходит каменный цветок, как ни крути….
Может ли как-то влиять мой роутер на это дело? Во всех инструкциях просто никто про это не пишет.
Или это гугл впс такой? ))
Ошибка такая
2021-10-08 15:59:58.5323|INFO|Shadowsocks.Controller.TCPHandler| (внешний IP сервера в Японии):4433 timed out
Спасибо.
Ошибка «timed out» говорит о том, что нет соединения с сервером по указанному порту. Возможные причины: файрволл с какой-то из сторон блокирует доступ, доступ к IP сервера или протокол блокирует провайдер, указан неверный порт.
Уря, заработала, разрешил в фаерволе админ панели сервера порт 4433 и пошло дело.
Может кому поможет
Подскажите как отключить Shadowsocks. При установке галочки системный прокси сервер -отключен, он его не отключает а продолжает через этот сервер работать, при закрытии программы интернет просто пропадает. Куда он вносит данные, чтоб их изменить и вернуть работу интерента без этой программы??
Nic, Параметры — Сеть и интернет — Прокси-сервер — всё в «Откл».