Настройка прокси-сервера Shadowsocks-libev на CentOS/Rocky Linux

Данный учебник продемонстрирует, как установить прокси-сервер Shadowsocks на системе CentOS. Shadowsocks представляет собой легкий, быстрый и безопасный прокси Socks5, предназначенный для обхода интернет-цензуры. Мы разберемся в настройке серверной части и конфигурации клиента на рабочем столе в CentOS. Существует множество реализаций Shadowsocks, и в этом руководстве будет показано использование Shadowsocks-libev, так как…

  • Он разработан на языке C и демонстрирует высокую скорость работы даже на маломощных устройствах.
  • Он имеет отличную поддержку.
  • Данная реализация обладает максимальным функционалом. В ней предусмотрены такие возможности, как TCP fast open, многопользовательский режим, управление через API, режим перенаправления, туннельный режим, реле UDP, шифры AEAD и поддержка плагинов.

Настройка прокси-сервера Shadowsocks-libev на CentOS.

Требования

Для того чтобы воспользоваться данным руководством, вам потребуется виртуальный частный сервер (VPS), который обеспечит доступ к заблокированным сайтам (например, за пределами вашей страны или системы интернет-фильтрации). Я советую рассмотреть VPS от Kamatera с такими характеристиками:

  • Бесплатный доступ на протяжении 30 дней.
  • Стоимость начинается от 4 долларов в месяц за 1 ГБ оперативной памяти.
  • Высокопроизводительный виртуальный сервер на основе KVM.
  • Девять дата-центров расположены по всему миру, в том числе в США, Канаде, Великобритании, Германии, Нидерландах, Гонконге и Израиле.

Воспользуйтесь следующим руководством для настройки вашего сервера Linux VPS на платформе Kamatera.

  • Как настроить сервер Linux VPS на платформе Kamatera.

Когда у вас будет VPS с Ubuntu 24.04, выполните указания ниже.

Установите сервер Shadowsocks-libev на операционной системе CentOS.

Подключитесь к своему удалённому серверу на базе CentOS с помощью SSH. Shadowsocks-libev отсутствует в репозитории CentOS, поэтому рекомендуется установить его через Snap store. Для этого вам нужно установить демон snapd для загрузки программного обеспечения из Snap store.

sudo dnf install - y epel-release sudo dnf update - y sudo dnf install - y snapd

Запустите и активируйте службу systemd snapd.

sudo systemctl enable --now snapd.service

После этого необходимо установить Shadowsocks-libev.

sudo snap install shadowsocks-libev

После установки вы можете использовать следующую команду для отображения детальной информации о snap shadowsocks-libev.

snap info shadowsocks-libev

snap информация shadowsocks-libev

В доступе имеется пять команд. Перед тем как применить команду для старта сервера Shadowsocks-libev, необходимо создать файл конфигурации, используя текстовый редактор командной строки, например, Nano. Установите Nano с помощью:

sudo dnf install nano

Сформируйте файл настроек.

sudo nano /var/snap/shadowsocks-libev/common/server-config.json

Вставьте указанные строки в данный файл.

< "server":["[::0]", "0.0.0.0"], "mode":"tcp_and_udp", "server_port":8888, "local_port":1080, "password":"o+4LmywwopNXSUhA7Wf8wg==", "timeout":60, "name_server":"8.8.8.8", "method":"chacha20-ietf-poly1305" >

  • server: указывает на адрес, на котором происходит прослушивание. Использование [::0] позволяет прослушивать все доступные IPv6-адреса, в то время как 0.0.0.0 предназначен для прослушивания всех доступных IPv4-адресов.
  • Режим: Применять как TCP, так и UDP.
  • server_port: укажите порт, который свободен и не занят другими процессами на сервере, например, 8888.
  • Локальный порт: чаще всего для SOCKS-прокси используется порт 1080.
  • пароль: Для создания надежного случайного пароля используйте следующую команду: openssl rand — base64 16.
  • время ожидания: 60 секунд.
  • name_server: Shadowsocks предоставляет возможность клиентам использовать определённый DNS-сервер, например, 8.8.8.8. Также можно заменить его на 1.1.1.1, чтобы клиенты подключались к DNS-серверу Cloudflare.
  • Метод: укажите алгоритм шифрования. ChaCha20-IETF-Poly1305 представляет собой крайне быстрый и надежный алгоритм.
Читайте также:  Как установить Apache Maven на CentOS/RHEL 9/8/7

Сохраните файл и закройте его. (Для сохранения файла в текстовом редакторе Nano нажмите Ctrl+O, затем нажмите Enter для подтверждения. Чтобы выйти, используйте сочетание Ctrl+X.)

Запустите Shadowsocks-libev в качестве службы Systemd.

Существует возможность запустить сервер Shadowsocks-libev вручную, но гораздо практичнее создать службу systemd, чтобы обеспечить его автоматический запуск при загрузке системы. Для этого воспользуйтесь текстовым редактором Nano для создания службы systemd.

sudo nano /etc/systemd/system/shadowsocks-libev.service

Вставьте указанные строки в данный файл.

[Unit] Description=Shadowsocks-Libev Server After=network-online. target [Service] Type=simple ExecStart=/usr/bin/snap run shadowsocks-libev. ss-server - c /var/snap/shadowsocks-libev/common/server-config.json Restart=always RestartSec=2 [Install] WantedBy=multi-user. target

Сохраните изменения в файле и закройте его. После этого запустите службу shadowsocks-libev.

sudo systemctl start shadowsocks-libev.service

Активируйте автоматический запуск при старте системы.

sudo systemctl enable shadowsocks-libev.service

Проверьте его состояние. Убедитесь, что он функционирует.

systemctl status shadowsocks-libev.service

Проверьте статус сервиса shadowsocks-libev в CentOS с помощью команды systemctl.

Если вы обнаружили ошибку в файле службы systemd для shadowsocks-libev, исправьте её и перезапустите systemd.

sudo systemctl daemon-reload

После этого можно заново запустить службу shadowsocks-libev.

sudo systemctl restart shadowsocks-libev.service

Если вам встречается следующая ошибка.

Эта система не предоставляет достаточного количества энтропии для быстрого генерации высококачественных случайных чисел. Служба не запустится, пока не будет собрана достаточная энтропия.

Для устранения этой ошибки установите пакет rng-tools.

sudo dnf install rng-tools

sudo rngd - r /dev/urandom

Теперь вы можете активировать сервис Shadowsocks-libev.

Конфигурация межсетевого экрана

Для того чтобы разрешить трафик на TCP и UDP порту, который использует Shadowsocks, необходимо выполнить команду. Например, если выбран порт 8888, используйте следующую команду:

sudo firewall-cmd --permanent --add-port=8888/tcp sudo firewall-cmd --permanent --add-port=8888/udp

После этого необходимо перезапустить firewalld для применения внесенных изменений.

sudo systemctl reload firewalld

Инсталляция и конфигурация клиента Shadowsocks-libev.

Рабочая среда в CentOS

Пакет shadowsocks-libev включает в себя программное обеспечение как для сервера, так и для клиента. Клиентская программа Shadowsocks называется ss-local. Для установки на рабочем столе CentOS применяйте аналогичный метод.

Для начала установите службу snapd.

sudo dnf install - y epel-release sudo dnf update - y sudo dnf install - y snapd

Включите и запустите службу systemd для snapd.

sudo systemctl enable --now snapd.service

Далее установите Shadowsocks-libev через магазин Snap.

sudo snap install shadowsocks-libev

Перед запуском клиента следует создать конфигурационный файл для клиентской части, используя текстовый редактор командной строки, например, Nano. Для установки Nano выполните команду:

sudo dnf install nano

Сгенерируйте конфигурационный файл для клиента.

sudo nano /var/snap/shadowsocks-libev/common/client-config.json

Вставьте указанные строки в данный файл.

{ "server":"ваш-ip-адрес-сервера

jsono+4LmywwopNXSUhA7Wf8wg==", "timeout":60, "name_server":"8.8.8.8", "method":"chacha20-ietf-poly1305" }

  • Введите IP-адрес вашего сервера.
  • Режим работы: задействуйте одновременно TCP и UDP.
  • server_port: укажите порт, на котором работает сервер Shadowsocks-libev.
  • Клиент обязан принимать соединения на локальном адресе.
  • Локальный порт для SOCKS-прокси, как правило, устанавливается на 1080.
  • Пароль: применяйте тот же пароль, который указан в конфигурационном файле сервера.
  • время ожидания: 60 секунд.
  • name_server: Указание сервера имен клиентом не является обязательным, однако, если параметр name_server используется, необходимо указать тот же сервер имен, который прописан в конфигурационном файле сервера.
  • Метод: укажите алгоритм шифрования. ChaCha20-IETF-Poly1305 представляет собой крайне быстрый и надежный алгоритм.

Сохраните файл и закройте его. (В текстовом редакторе Nano для сохранения файла нажмите Ctrl+O, а затем подтвердите, нажав Enter. Для выхода используйте комбинацию Ctrl+X.)

Далее необходимо разработать unit-файл systemd для клиента, чтобы обеспечить его автоматический запуск при загрузке системы.

sudo nano /etc/systemd/system/shadowsocks-client.service

Вставьте указанные строки в данный файл.

[Unit] Description=Shadowsocks-Libev Client After=network-online. target [Service] Type=simple ExecStart=/usr/bin/snap run shadowsocks-libev. ss-local - c /var/snap/shadowsocks-libev/common/client-config.json Restart=always RestartSec=2 [Install] WantedBy=multi-user. target

Сохраните изменения в файле и закройте его. После этого запустите службу shadowsocks-client.service.

sudo systemctl start shadowsocks-client.service

Активируйте автоматический запуск при старте системы.

sudo systemctl enable shadowsocks-client.service

Проверьте его состояние. Убедитесь, что он функционирует.

systemctl status shadowsocks-client.service

Теперь клиент Shadowsocks работает на 127.0.0.1:1080 на вашем настольном компьютере с CentOS и установленное соединение с вашим сервером Shadowsocks.

Рекомендации по диагностике и исправлению неисправностей

Если не удается запустить процесс клиента Shadowsocks, проверьте журналы, чтобы выяснить причину проблемы.

sudo journalctl - eu shadowsocks-client

К примеру, в моем журнале возникла такая ошибка.

ERROR: 2:0: Unexpected `m` in object

Я обнаружил, что забыл обернуть IP-адрес сервера в двойные кавычки в конфигурационном файле клиента.

Рабочая область Windows

Пользователи Windows могут загрузить данный клиент Shadowsocks. После завершения установки можно добавить новый сервер в клиентское программное обеспечение. Введите IP-адрес сервера, порт и пароль, затем нажмите кнопку «Применить».

клиент для Windows Shadowsocks

Если у вас имеется несколько прокси-серверов, вы можете нажать кнопку «Добавить», чтобы расширить их список. Имейте в виду, что одновременно вы можете использовать лишь один прокси-сервер.

Конфигурация веб-браузера для работы с Socks-прокси.

Для того чтобы ваша программа могла работать с socks-прокси, необходимо, чтобы она поддерживала эту функцию. Например, такие приложения, как Firefox, Google Chrome и Dropbox, предоставляют пользователям возможность использовать прокси-серверы. Я расскажу вам, как произвести настройки в Firefox и Google Chrome.

Firefox

В Firefox перейдите в Правка > Настройки > Основные (или Инструменты -> Параметры ->Основные шаги: прокрутите вниз и выберите раздел «Настройки» в «Сетевом прокси». В появившемся окне «Настройки соединения» активируйте опцию ручной настройки прокси. Выберите SOCKS v5, так как Shadowsocks работает по протоколу Socks5. Введите 127.0.0.1 в поле для SOCKS Host и 1080 в поле порта. Убедитесь, что опция «Прокси DNS при использовании SOCKS v5» включена. Нажмите «ОК», чтобы сохранить изменения.

настройки сети shadowsocks-libev для Firefox

Теперь Firefox будет соединяться с локальным клиентом Shadowsocks, который работает на 127.0.0.1:1080, и в результате трафик будет перенаправляться через сервер Shadowsocks-libev.

Google Хром

Google Chrome расширение Proxy SwitchyOmega

После добавления расширения в Google Chrome выполните настройку прокси-сервера следующим образом:

  • Выберите протокол SOCKS5.
  • Задайте 127.0.0.1 как адрес сервера.
  • Установите номер порта на 1080.

команда прокси для Google Chrome через командную строку

Внесите изменения, а затем кликните на иконку расширений в верхнем правом углу и выберите Proxy SwitchyOmega.

прокси SwitchyOmega shadowsocks-libev

SwithyOmega по умолчанию применяет настройки прокси, установленные в операционной системе. Необходимо переключить его с системного прокси на другой прокси.

switchyomega стандартный прокси

Теперь Google Chrome будет соединяться с локальным клиентом Shadowsocks, который работает на 127.0.0.1:1080, после чего трафик будет перенаправлен через сервер Shadowsocks-libev.

Проверка на наличие утечек DNS

Зайдите на сайт dnsleaktest.com. Там вы сможете увидеть IP-адрес вашего сервера Shadowsocks, что подтвердит его функционирование.

shadowsocks-libev-centos-install

Выберите стандартный тест. Проверьте, чтобы ваш местный интернет-провайдер не фигурировал в итогах тестирования.

shadowsocks-libev-dns-leak-test

Активирование TCP Fast Open

Для повышения производительности Shadowsocks активируйте функцию TCP fast open. TCP представляет собой протокол с установлением соединения, что подразумевает возможность передачи данных лишь после его создания, осуществляемого через трехстороннее рукопожатие. Иными словами, в классическом подходе обмен данными возможен только после завершения данного процесса. TCP fast open (TFO) — это технология, позволяющая передавать данные до завершения трехстороннего рукопожатия, что позволяет сэкономить время одного кругового прохождения (RTT).

Поддержка TCP fast open появилась в ядре Linux начиная с версии 3.7 и была активирована по умолчанию начиная с версии 3.13. Чтобы узнать свою версию ядра, выполните следующую команду:

uname - r

Для проверки конфигурации TCP fast open на вашем сервере CentOS выполните следующие действия:

cat /proc/sys/net/ipv4/tcp_fastopen

Это может вернуть четыре результата.

  • 0 означает, что функция выключена.
  • 1 указывает на то, что оно активно для исходящих соединений (в качестве клиента).
  • 2 указывает на то, что функция активирована для входящих соединений (в качестве сервера).
  • Число 3 указывает на то, что функция активирована как для исходящих, так и для входящих соединений.

Все мои VPS на базе CentOS (Виртуальный Частный Сервер) вернули значение 1 после выполнения указанной команды. Мы хотим, чтобы параметр tcp_fastopen был установлен на 3 на нашем сервере. Для этого необходимо отредактировать файл конфигурации sysctl.

sudo nano /etc/sysctl.conf

После этого добавьте следующую строку в конец файла.

net. ipv4.tcp_fastopen=3

Обновите конфигурацию sysctl, чтобы изменения начали действовать.

sudo sysctl - p

После этого вам необходимо активировать TCP fast open в конфигурационном файле сервера Shadowsocks.

sudo nano /var/snap/shadowsocks-libev/common/server-config.json

Включите следующую строку.

"fast_open": true

Таким образом, конфигурационный файл вашего сервера Shadowsocks будет иметь следующий вид:

< "server":["[::0]", "0.0.0.0"], "mode":"tcp_and_udp", "server_port":8888, "local_port":1080, "password":"o+4LmywwopNXSUhA7Wf8wg==", "timeout":60, "name_server":"8.8.8.8", "method":"chacha20-ietf-poly1305", "fast_open": true >

Имейте в виду, что последняя строка в конфигурации не должна содержать запятую. Все остальные строки в этом блоке заканчиваются запятой.<. >Файл нужно сохранить и закрыть. После этого перезапустите сервер Shadowsocks.

sudo systemctl restart shadowsocks-libev.service

Убедитесь, что он функционирует корректно. (Ошибки в конфигурационном файле могут помешать его перезапуску.)

systemctl status shadowsocks-libev

Необходимо внести изменения в файл конфигурации клиента Shadowsocks и перезапустить его, чтобы активировать TCP fast open на рабочем столе CentOS.

Активация TCP BBR

TCP BBR представляет собой алгоритм управления перегрузкой для TCP, который способен существенно повысить скорость соединения. Чтобы активировать его на сервере CentOS, необходимо внести изменения в файл /etc/sysctl.conf.

sudo nano /etc/sysctl.conf

Вставьте эти две строки в конец документа.

net. core. default_qdisc=fq net. ipv4.tcp_congestion_control=bbr

Сохраните изменения в файле и закройте его. После этого выполните перезагрузку конфигураций sysctl.

sudo sysctl - p

Теперь проверьте алгоритм, который применяется для управления перегрузкой.

sysctl net. ipv4.tcp_congestion_control

net. ipv4.tcp_congestion_control = bbr

Поздравляю! Вам удалось активировать TCP BBR на сервере с операционной системой CentOS.

Заключение

На этом все! Надеюсь, что данный учебник был полезен для установки прокси Shadowsocks-libev на CentOS. Как и всегда, если вы нашли эту информацию ценной, не забудьте подписаться на нашу бесплатную рассылку, чтобы получать больше советов и хитростей.

Shadowsocks представляет собой прямой прокси. Если вам интересно, что подразумевается под термином «прямой прокси», рекомендуем ознакомиться со следующей статьей:

  • Отличия между прямым и обратным прокси.