Конфигуратор SOCKS5 в Linux: маршрутизация приложений через SOCKS5-прокси с помощью Proxychains
В Linux нет единого приложения-конфигуратора SOCKS5, поэтому это руководство настраивает proxychains-ng и redsocks для маршрутизации SOCKS5 на уровне отдельных команд и всей системы, проверяет, что ваш IP действительно изменился, и объясняет, когда туннель WireGuard подходит лучше.
Обзор
Пользователи Windows и macOS получают графическое окно «конфигуратора SOCKS5». В Linux такого нет, поэтому ту же задачу решают две небольшие утилиты, которые вы настраиваете вручную:
- proxychains-ng — оборачивает одну команду и принудительно направляет её исходящие TCP-соединения через ваш SOCKS5-прокси.
- redsocks — прозрачно перенаправляет трафик через
iptables, что ближе к поведению на уровне всей системы.
Это руководство рассматривает оба варианта, показывает, как убедиться, что ваш IP-адрес действительно изменился, и объясняет ситуации, когда SOCKS5 на уровне приложения — неподходящий инструмент, а туннель WireGuard — например, выделенный шлюз от NordLayer — подходит лучше.
Предварительные требования
- Linux-десктоп или сервер. Команды приведены для Debian/Ubuntu, Fedora и Arch.
- Доступ к
sudoдля установки пакетов и редактирования конфигураций. - Работающая конечная точка SOCKS5: хост, порт и имя пользователя/пароль, если провайдер требует аутентификацию.
- Установленный
curlдля проверки (по умолчанию присутствует в большинстве дистрибутивов).
Шаги
1. Проверьте конечную точку SOCKS5 перед изменением системы
Всегда сначала убеждайтесь, что прокси работает сам по себе, чтобы не отлаживать две вещи одновременно:
curl -x socks5h://YOUR_USERNAME:YOUR_PASSWORD@PROXY_HOST:1080 https://ifconfig.me/ip
Здесь важны две детали:
socks5h://просит прокси разрешать DNS-имена за вас. Обычныйsocks5://разрешает их локально, что может привести к утечке посещаемых имён хостов.- Если ваш пароль содержит
@,:или/, закодируйте его в процентной кодировке или используйтеcurl --proxy-userвместо встраивания в URL.
2. Установите proxychains-ng
Выберите команду для вашего дистрибутива:
# Debian / Ubuntu
sudo apt update && sudo apt install -y proxychains4
# Fedora
sudo dnf install -y proxychains-ng
# Arch
sudo pacman -S proxychains-ng
Убедитесь, что бинарный файл доступен как proxychains4 (Debian/Ubuntu) или proxychains (Fedora/Arch):
proxychains4 -h || proxychains -h
3. Настройте цепочку прокси
Откройте файл конфигурации (путь зависит от пакета) и отредактируйте блок [ProxyList]:
sudo nano /etc/proxychains4.conf # Debian / Ubuntu
sudo nano /etc/proxychains.conf # Fedora / Arch
strict_chain
proxy_dns
remote_dns_subnet 224
tcp_read_time_out 15000
tcp_connect_time_out 8000
[ProxyList]
socks5 203.0.113.10 1080 YOUR_USERNAME YOUR_PASSWORD
Примечания по настройкам:
proxy_dnsзаставляет выполнять DNS-запросы через прокси вместо локального резолвера.strict_chainиспользует каждый прокси по порядку. Используйтеdynamic_chain, если хотите пропускать неудачные узлы, илиrandom_chainсchain_lenдля ротации между несколькими записями.- Замените
203.0.113.10 1080на хост и порт от вашего провайдера и уберите аргументы имени пользователя/пароля, если конечная точка не требует аутентификации.
4. Проверьте, что команда теперь выходит через IP прокси
Сравните прямой запрос с обёрнутым:
curl -s https://ifconfig.me/ip # ваш обычный IP
proxychains4 -q curl -s https://ifconfig.me/ip # должен показать IP прокси
Флаг -q подавляет баннер proxychains, чтобы вы видели только ответ. Вы можете обернуть графические приложения таким же образом:
proxychains4 -q chromium https://ifconfig.me/ip
Если обе команды возвращают один и тот же IP, остановитесь здесь и проработайте раздел устранения неполадок, прежде чем продолжать.
5. Задайте переменные окружения прокси для совместимых инструментов
Многие инструменты командной строки читают стандартные переменные прокси, что полезно, когда вы не хотите добавлять префикс к каждой команде:
export ALL_PROXY="socks5h://YOUR_USERNAME:YOUR_PASSWORD@PROXY_HOST:1080"
export HTTPS_PROXY="$ALL_PROXY"
export HTTP_PROXY="$ALL_PROXY"
curl, wget, git, pip и Python-библиотека requests по умолчанию учитывают их, но многие другие приложения полностью их игнорируют. Рассматривайте это как слой удобства, а не как общесистемную настройку.
6. Необязательно: прозрачное перенаправление с помощью redsocks
Если вам нужно, чтобы приложения, ничего не знающие о прокси, маршрутизировались автоматически, redsocks плюс правило iptables справятся с задачей. Создайте конфигурацию:
base {
log_debug = off;
log_info = on;
daemon = on;
redirector = iptables;
}
redsocks {
local_ip = 127.0.0.1;
local_port = 12345;
ip = 203.0.113.10;
port = 1080;
type = socks5;
login = "YOUR_USERNAME";
password = "YOUR_PASSWORD";
}
Запустите службу и добавьте правила перенаправления. Первое правило обязательно: трафик к самому прокси никогда не должен перенаправляться обратно в прокси, иначе вы создадите петлю.
sudo systemctl restart redsocks
sudo iptables -t nat -N REDSOCKS
sudo iptables -t nat -A REDSOCKS -d 203.0.113.10 -j RETURN
sudo iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN
sudo iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN
sudo iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN
sudo iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURN
sudo iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN
sudo iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 12345
sudo iptables -t nat -A OUTPUT -p tcp -j REDSOCKS
Redsocks перенаправляет только TCP. UDP-трафик, ICMP и всё, что обходит iptables, по-прежнему уходит через ваше обычное соединение, поэтому это не эквивалент VPN.
SOCKS5 в Linux против шлюза WireGuard
SOCKS5 на уровне приложения и туннель WireGuard решают пересекающиеся задачи разными способами:
| Требование | SOCKS5 с proxychains/redsocks | Туннель WireGuard (например, выделенный шлюз) |
|---|---|---|
| Область действия | Одна команда или приложение за раз | Все приложения и протоколы на устройстве |
| Обработка DNS | Зависит от socks5h и proxy_dns |
Разрешается внутри туннеля |
| UDP и ICMP | Не покрывается proxychains | Передаётся через туннель |
| IP-адрес выхода | Любой, который назначит провайдер SOCKS5 | Стабильный IP выделенного шлюза, который можно внести в список разрешённых |
| Трудозатраты на настройку | Низкие, но повторяются для каждого приложения | Однократная настройка туннеля |
| Лучше всего для | Быстрой маршрутизации отдельных команд и тестирования | Приватности всего устройства, доступа для команды, автоматизации со списками разрешённых |
Выбирайте маршрут через SOCKS5, когда вам нужно, чтобы только один инструмент выходил с другого IP. Выбирайте туннель WireGuard, когда всей машине — или всей команде — нужна согласованная зашифрованная маршрутизация. Управляемое решение, например NordLayer, предоставляет туннели WireGuard с выделенными шлюзами, адаптацию для команд и фиксированную месячную оплату, которую легче прогнозировать, чем тарификацию по использованию.
Устранение неполадок
proxychains не действует на определённый бинарный файл
proxychains работает путём предварительной загрузки разделяемой библиотеки, поэтому он не может перехватывать статически слинкованные программы, бинарные файлы Go или setuid-исполняемые файлы. Проверьте с помощью:
ldd $(which YOUR_APP)
Если в выводе сказано «not a dynamic executable», используйте вместо этого redsocks — или направьте машину через туннель WireGuard, который работает ниже уровня приложения.
Ваш IP всё ещё выглядит неизменным
- Убедитесь, что вы используете
socks5h://или у вас включёнproxy_dns; обычный URLsocks5://разрешает имена локально. - Проверьте, ожидает ли провайдер аутентификацию и верны ли ваши учётные данные.
- Сначала повторите тест с
curl. Еслиcurlпоказывает IP прокси, а приложение — нет, значит, приложение обходит предварительную загрузку.
Соединения завершаются по тайм-ауту или зависают
- Увеличьте
tcp_connect_time_outв/etc/proxychains4.conf. - Убедитесь, что хост прокси доступен на этом порту из вашей сети (исходящие межсетевые экраны часто блокируют нестандартные порты).
- Уменьшите количество узлов в цепочке — длинные строгие цепочки увеличивают задержку.
redsocks зацикливается или сбрасывает всё
Ваше правило RETURN для собственного IP прокси должно идти первым в цепочке REDSOCKS. Очистите и пересоберите, если вы редактировали правила в неправильном порядке:
sudo iptables -t nat -F REDSOCKS
Итог
Linux заменяет графический конфигуратор SOCKS5 на proxychains4 для маршрутизации отдельных команд и redsocks для прозрачного перенаправления TCP. Проверьте конечную точку с помощью curl, держите proxy_dns включённым, чтобы избежать утечек DNS, и помните, что ни один из инструментов не покрывает UDP или статически слинкованные бинарные файлы. Когда вам нужно, чтобы каждое приложение и протокол на устройстве использовали один стабильный выделенный IP-адрес выхода — особенно для команды — туннель WireGuard, например выделенный шлюз от NordLayer, будет более простым и надёжным выбором.