Развёртывание Shadowsocks на Raspberry Pi
Разместите собственный зашифрованный прокси дома с помощью Raspberry Pi — без ежемесячных затрат.
- Raspberry Pi 3B+ или новее (рекомендуется Pi 4)
- Карта microSD (16 ГБ+)
- Кабель Ethernet или подключение по WiFi
- Доменное имя
- Доступ к панели управления роутера
Требования к оборудованию
Прежде чем начать, убедитесь, что у вас есть следующее:
| Компонент | Минимум | Рекомендуется |
|---|---|---|
| Raspberry Pi | Pi 3B+ | Pi 4 (2 ГБ+ ОЗУ) |
| Хранилище | microSD 16 ГБ | microSD 32 ГБ (Class 10 / A2) |
| Блок питания | 5V 2.5A (Pi 3) | 5V 3A USB-C (Pi 4) |
| Сеть | WiFi | Ethernet (более стабильно) |
| Корпус | Необязательно | Рекомендуется (с пассивным охлаждением) |
Любой Raspberry Pi начиная с 3B+ обладает достаточной мощностью для комфортной работы Shadowsocks. Pi выполняет шифрование аппаратно благодаря расширениям AES в ARM-процессоре, поэтому даже самая бюджетная модель может полностью использовать большинство домашних интернет-соединений.
Как это работает
Когда вы размещаете Shadowsocks на Raspberry Pi дома, трафик проходит через ваше домашнее интернет-соединение. Вот архитектура:
graph TD
A["External Device"] -->|"HTTPS :443"| B["Router"]
B -->|"Port Forward"| C["Raspberry Pi"]
C --> D["Nginx + Docker"]
D --> E["Shadowsocks"]
E -->|"Normal Traffic"| F["ISP → Internet"]
style A fill:#1e293b,stroke:#3b82f6,color:#e2e8f0
style B fill:#1e293b,stroke:#f59e0b,color:#e2e8f0
style C fill:#1e293b,stroke:#10b981,color:#e2e8f0
style D fill:#1e293b,stroke:#8b5cf6,color:#e2e8f0
style E fill:#1e293b,stroke:#ec4899,color:#e2e8f0
style F fill:#1e293b,stroke:#6366f1,color:#e2e8f0
- Ваше устройство подключается к вашему домену через HTTPS (порт 443)
- Ваш роутер перенаправляет порт 443 на локальный IP-адрес Raspberry Pi
- Nginx на Pi обрабатывает TLS и перенаправляет WebSocket-трафик в контейнер Shadowsocks
- Shadowsocks расшифровывает ваш запрос и отправляет его в интернет через вашего домашнего провайдера
Ключевое преимущество: нулевые ежемесячные затраты. После настройки Pi работает круглосуточно, потребляя около 3-5 ватт электроэнергии (примерно $1-2 в год). Единственное требование – ваше домашнее интернет-соединение должно оставаться активным.
Шаг 1: Запись Raspberry Pi OS
- Скачайте и установите Raspberry Pi Imager на ваш компьютер (доступен для Windows, macOS и Linux)
- Вставьте карту microSD в компьютер
- Откройте Raspberry Pi Imager и настройте:
- Operating System: Raspberry Pi OS Lite (64-bit) – версия “Lite” не имеет графической среды и использует меньше ресурсов
- Storage: Выберите вашу карту microSD
- Нажмите значок шестерёнки (или Ctrl+Shift+X), чтобы открыть дополнительные настройки:
- Enable SSH и установите пароль (или добавьте ваш публичный SSH-ключ)
- Set hostname – задайте запоминающееся имя (например,
shadowsocks-pi) - Configure WiFi, если вы не используете Ethernet
- Нажмите Write и дождитесь завершения процесса
- Вставьте карту microSD в Raspberry Pi и включите питание
Шаг 2: Подключение по SSH
Подождите около 60 секунд для загрузки Pi, затем подключитесь с вашего компьютера:
ssh pi@shadowsocks-pi.local
Если разрешение имени .local не работает в вашей сети, найдите IP-адрес Pi на странице администрирования роутера (обычно 192.168.1.1 или 192.168.0.1) и подключитесь напрямую по IP:
ssh pi@192.168.1.XXX
После подключения обновите систему:
sudo apt update && sudo apt upgrade -y
Шаг 3: Установка статического IP-адреса
Вашему Raspberry Pi нужен фиксированный IP-адрес в локальной сети, чтобы правила переадресации портов не сбивались при перезагрузке Pi.
Отредактируйте конфигурацию DHCP-клиента:
sudo nano /etc/dhcpcd.conf
Добавьте следующее в конец файла (скорректируйте значения под вашу сеть):
interface eth0
static ip_address=192.168.1.100/24
static routers=192.168.1.1
static domain_name_servers=1.1.1.1 8.8.8.8
eth0 на wlan0. Значение routers должно соответствовать IP-адресу вашего роутера (обычно 192.168.1.1 или 192.168.0.1). Выберите ip_address за пределами DHCP-диапазона вашего роутера, чтобы избежать конфликтов.Перезагрузите для применения изменений:
sudo reboot
Переподключитесь по SSH, используя новый статический IP:
ssh pi@192.168.1.100
Шаг 4: Настройка переадресации портов
Вашему роутеру необходимо перенаправлять входящий трафик на портах 80 и 443 на Raspberry Pi. Это позволяет внешним подключениям достигать Pi через ваш домашний IP-адрес.
- Войдите в панель администрирования роутера (обычно
http://192.168.1.1) - Найдите раздел Port Forwarding (иногда называется “Virtual Servers” или “NAT Forwarding”)
- Создайте два правила переадресации:
| Сервис | Внешний порт | Внутренний IP | Внутренний порт | Протокол |
|---|---|---|---|---|
| HTTP | 80 | 192.168.1.100 | 80 | TCP |
| HTTPS | 443 | 192.168.1.100 | 443 | TCP |
- Сохраните настройки
Шаг 5: Настройка динамического DNS
Большинство домашних интернет-соединений имеют динамический IP-адрес, который периодически меняется. Вам нужен способ поддерживать привязку домена к текущему домашнему IP. Мы будем использовать ddclient с Cloudflare DNS.
Установите ddclient:
sudo apt install -y ddclient
Во время установки появится мастер настройки – вы можете пропустить его со значениями по умолчанию. Мы настроим всё вручную.
Отредактируйте конфигурацию ddclient:
sudo nano /etc/ddclient.conf
Замените содержимое на следующее (подставьте ваши реальные значения):
protocol=cloudflare
use=web
web=https://api.ipify.org
ssl=yes
zone=YOUR_DOMAIN.com
login=your-cloudflare-email@example.com
password=YOUR_CLOUDFLARE_API_TOKEN
YOUR_DOMAIN.com
Перезапустите ddclient и включите его автозагрузку:
sudo systemctl restart ddclient
sudo systemctl enable ddclient
Проверьте, что он работает:
sudo ddclient -query
Эта команда должна показать ваш текущий публичный IP-адрес. Демон ddclient по умолчанию проверяет изменения IP каждые 5 минут и автоматически обновляет DNS-запись.
Шаг 6: Установка Docker
Установите Docker на Raspberry Pi:
curl -fsSL https://get.docker.com | sh
Добавьте пользователя pi в группу Docker, чтобы не использовать sudo для команд Docker:
sudo usermod -aG docker pi
Выйдите и войдите снова, чтобы изменение группы вступило в силу:
exit
ssh pi@192.168.1.100
Проверьте, что Docker работает:
docker --version
Шаг 7: Развёртывание контейнера Shadowsocks
Разверните сервер Shadowsocks с поддержкой v2ray-plugin:
docker run -d \
--name shadowsocks \
--restart always \
-p 127.0.0.1:8389:8389 \
-e PASSWORD=YOUR_STRONG_PASSWORD \
-e METHOD=aes-256-gcm \
jfca68/shadowsocks-server:latest
YOUR_STRONG_PASSWORD на надёжный уникальный пароль длиной не менее 16 символов. Этот пароль шифрует весь ваш трафик.Docker-образ поддерживает несколько архитектур и автоматически выбирает правильную сборку ARM64 для вашего Raspberry Pi. Специальная настройка не требуется.
Проверьте, что контейнер запущен:
docker ps
Вы должны увидеть контейнер с именем shadowsocks и статусом Up.
Шаг 8: Установка и настройка Nginx
Установите Nginx:
sudo apt install -y nginx
Создайте конфигурацию сайта:
sudo nano /etc/nginx/sites-available/YOUR_DOMAIN
Вставьте следующую конфигурацию (замените YOUR_DOMAIN на ваш реальный домен):
server {
listen 80;
server_name YOUR_DOMAIN;
location /shadowsocks {
proxy_pass http://127.0.0.1:8389;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location / {
return 200 'Welcome to my website';
add_header Content-Type text/plain;
}
}
Активируйте сайт и перезапустите Nginx:
sudo ln -s /etc/nginx/sites-available/YOUR_DOMAIN /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
Шаг 9: Получение SSL-сертификата
Установите Certbot и получите SSL-сертификат:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d YOUR_DOMAIN
Когда будет предложено:
- Введите ваш email-адрес для уведомлений об обновлении
- Примите условия использования
- Выберите Yes для перенаправления HTTP на HTTPS
Certbot автоматически настроит Nginx для HTTPS и установит автоматическое обновление сертификата.
Шаг 10: Проверка настройки
Тестирование с внешней сети
- Отключите телефон от WiFi и используйте мобильные данные
- Откройте
https://YOUR_DOMAINв браузере – вы должны увидеть действительный SSL-сертификат и текст “Welcome to my website” - Настройте клиент Shadowsocks на телефоне со следующими параметрами:
| Параметр | Значение |
|---|---|
| Сервер | YOUR_DOMAIN |
| Порт сервера | 443 |
| Пароль | Пароль из Шага 7 |
| Шифрование | aes-256-gcm |
| Плагин | v2ray-plugin |
| Параметры плагина | tls;host=YOUR_DOMAIN;path=/shadowsocks;mux=0 |
Подробные инструкции по настройке клиента смотрите в нашем руководстве Подключение с любого устройства.
Устранение неполадок
Docker-контейнер не запущен
docker ps -a
docker logs shadowsocks
Проверьте логи на наличие сообщений об ошибках. Распространённые проблемы включают некорректные переменные окружения или конфликты портов.
Не удаётся подключиться к Pi извне
- Убедитесь, что переадресация портов настроена правильно в роутере
- Проверьте, что ваш публичный IP совпадает с тем, что сообщает ddclient:
curl https://api.ipify.org - Проверьте, что Nginx слушает:
sudo ss -tlnp | grep 443 - Проверьте фаервол (если включён):
sudo ufw status
SSL-сертификат не получается
- Убедитесь, что ваш домен указывает на домашний IP:
nslookup YOUR_DOMAIN - Убедитесь, что порт 80 перенаправлен и Nginx запущен
- Попробуйте снова:
sudo certbot --nginx -d YOUR_DOMAIN
Низкая скорость
- Используйте Ethernet вместо WiFi
- Проверьте скорость загрузки вашего домашнего интернета – это узкое место для домашнего прокси
- Убедитесь, что на Pi не запущены другие ресурсоёмкие сервисы
Соединение работает, но часто обрывается
- Проверьте температуру Pi:
vcgencmd measure_temp(должна быть ниже 80°C) - Проверьте доступную память:
free -m - Просмотрите логи Nginx:
sudo tail -f /var/log/nginx/error.log
Что дальше?
- Подключите все свои устройства – Настройте клиенты на Windows, macOS, Linux, Android и iOS
- Почему Shadowsocks? – Узнайте больше о технологии и её устойчивости к цензуре
- Рассмотрите настройку автоматических обновлений, чтобы ОС вашего Pi обновлялась автоматически:
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades