В предыдущей статье я рассказывал, как сделать простой браузерный VPN через SSH. Там всё сводилось к запуску туннеля командой:
ssh -fND 7001 пользователь@сервер
и настройке браузера на использование SOCKS5-прокси на localhost:7001.
Но что делать, если нужно пустить через этот же туннель не браузер, а другую программу — например, терминальную утилиту, торрент-клиент или скрипт? Для этого отлично подходит утилита proxychains.
Направление трафика именно отдельных приложений гораздо гибче, чем поднятие системного VPN: вы сами решаете, какие программы «видят» интернет через удалённый сервер, а какие — напрямую.
Установка и настройка
Установите proxychains4 (в большинстве дистрибутивов он называется именно так):
sudo apt install proxychains4
Создайте конфигурационный файл в домашней директории:
mkdir -p ~/.proxychains
nano ~/.proxychains/proxychains.conf
И добавьте в него:
[ProxyList]
socks5 127.0.0.1 7001
Порт 7001 — тот самый, который вы открыли через SSH-туннель в предыдущей статье. Весь трафик, перехваченный proxychains, будет отправляться на этот локальный SOCKS5-прокси, а оттуда — через ваш VPS в интернет.
Запуск приложений через proxychains
Теперь любую программу можно запустить через прокси, просто поставив перед ней proxychains:
proxychains curl ifconfig.me
proxychains wget https://......./file.zip
proxychains nmap scanme.nmap.org
proxychains telegram-desktop
proxychains transmission-gtk
proxychains python3 my_script.py
Для Firefox это тоже работает:
proxychains firefox
Однако учтите: у Firefox есть собственные настройки прокси, и в некоторых случаях они могут конфликтовать с proxychains (см. ниже).
Важные ограничения и нюансы
Flatpak и Snap-версии программ не работают с proxychains. Эти пакеты изолированы в sandbox, и механизм LD_PRELOAD, на котором основан proxychains, в них заблокирован.
Java-приложения (включая IntelliJ IDEA, Minecraft и др.) часто игнорируют proxychains. Дело в том, что Java использует собственные сетевые API и не всегда подчиняется перехвату через LD_PRELOAD. Для таких программ лучше настраивать прокси через JVM-флаги:
java -DsocksProxyHost=127.0.0.1 -DsocksProxyPort=7001 -jar MyApp.jar
Приложения со встроенной поддержкой прокси (Firefox, Chrome, Telegram и др.) могут частично «утекать» мимо proxychains. Например:
- DNS-over-HTTPS (DoH) в Firefox отправляет DNS-запросы напрямую, минуя прокси;
- WebRTC, фоновые обновления, телеметрия и системные вызовы могут использовать реальный IP;
- На системах с Wayland или строгими sandbox-политиками перехват сетевых вызовов может не сработать.
Поэтому, если приложение умеет работать с SOCKS5 напрямую (как Firefox или Telegram), лучше использовать его собственные настройки прокси, а не proxychains. Proxychains стоит применять в первую очередь для терминальных утилит и программ без встроенной поддержки прокси.
Такой подход даёт вам точечный контроль над сетевым трафиком — без перегрузки всей системы и без сложных настроек.