Проксирование с помощью NGINX Stream

Обход блокировок серверов возможен с помощью проксирования через NGINX и модуля stream. Здесь я делюсь полным руководством по настройке этого решения, а также всеми деталями работы модуля stream, чтобы вы могли настроить свой прокси для доступа к ресурсам даже в регионах с ограниченным доступом.

Введение в NGINX Stream

Модуль stream в NGINX позволяет проксировать любые TCP/UDP-соединения, а не только HTTP/HTTPS, что делает его отличным решением для проксирования серверов, работающих по нестандартным портам. В отличие от традиционного HTTP-проксирования, stream позволяет обрабатывать целые потоки данных и передавать их с минимальными задержками.

Основные возможности модуля stream:
Проксирование TCP и UDP-трафика: Поддержка всех приложений, использующих нестандартные порты.

Балансировка нагрузки: Можно распределять трафик между несколькими серверами, если есть необходимость.

Логирование: Позволяет отслеживать и логировать подключения к серверу.

Установка и проверка модуля stream

Для начала убедитесь, что у вас установлен NGINX с поддержкой модуля stream. В большинстве систем Linux это можно сделать с пакетом nginx-extras:

``bash sudo apt install nginx-extras nginx -V 2>&1 | grep -- '--with-stream' `

Если модуль stream включен, команда покажет --with-stream в конфигурации NGINX. После этого можно переходить к настройке конфигурационного файла.

Настройка NGINX для проксирования

Основной конфигурационный файл

Создаем конфигурацию, где каждый новый server блок проксирует подключение на соответствующий сервер. Это позволяет NGINX принимать запросы на одном сервере и перенаправлять их на другие по нужным IP и портам.

Конфигурационный файл для этого модуля находится по пути: /etc/nginx/nginx.conf.

`nginx stream { log_format basic '$remote_addr $status $bytes_sent $bytes_received $session_time'; access_log /var/log/nginx/stream_access.log basic; error_log /var/log/nginx/stream_error.log;

server { listen 10001; proxy_pass 192.0.2.1:10001; # Пример IP-адреса сервера } server { listen 10002; proxy_pass 192.0.2.2:10002; } server { listen 10003; proxy_pass 192.0.2.3:10003; } server { listen 10004; proxy_pass 192.0.2.4:10004; } } `

Здесь listen определяет порт, на котором NGINX будет принимать запросы, а proxy_pass указывает IP-адрес и порт конечного сервера, к которому трафик будет направлен. Проверяем конфигурацию и перезапускаем nginx `bash sudo nginx -t sudo systemctl restart nginx `

Дополнительные примеры использования stream

Пример 1: Балансировка нагрузки между серверами

Используя stream, можно настроить балансировку между несколькими серверами. Это позволяет равномерно распределять нагрузку и автоматически переключаться на доступный сервер в случае сбоя.

`nginx stream { upstream backend_servers { server 192.0.2.10:10001; server 192.0.2.11:10001; }

server { listen 10001; proxy_pass backend_servers; } } `

Пример 2: Резервирование серверов для высокой доступности

Если один сервер становится недоступным, stream автоматически перенаправляет трафик на резервный сервер.

`nginx stream { upstream backup_servers { server 192.0.2.20:10002; server 192.0.2.21:10002 backup; }

server { listen 10002; proxy_pass backup_servers; } } `

Пример 3: Ограничение доступа по IP

Для повышения безопасности можно ограничить доступ по IP-адресам, разрешая подключение только из определенных диапазонов.

`nginx stream { server { listen 10003; proxy_pass 192.0.2.30:10003;

allow 203.0.113.0/24; # Разрешить доступ только из сети 203.0.113.0/24 deny all; # Запретить доступ всем остальным } } ``

Плюсы и минусы данного метода

Плюсы

Скрытие IP-адреса конечных серверов: Реальные IP-адреса скрыты за прокси.

Обход блокировок: Метод помогает обойти ограничения на подключение к серверам из стран с блокировками.

Управление доступом: Возможность легко управлять доступом, добавляя или убирая проксируемые серверы.

Минусы

Требует ресурсов сервера: Проксирование требует выделенных ресурсов, особенно если задействовано несколько серверов.

Я использую сервер хостинга Aéza тарифа SWE Promo. Этот метод помогает обойти ограничения и предоставляет стабильное подключение к серверам.