Конфигуратор SOCKS5 для Linux: proxychains, redsocks и маршрутизация по приложениям
В Linux нет единого переключателя SOCKS5, но можно маршрутизировать трафик по приложениям с помощью proxychains, прозрачно — с redsocks или через переменные окружения. Вот как настроить каждый из способов, проверить DNS и избежать утечек.
Поиск «конфигуратора SOCKS5» в Linux часто приводит к путанице: в GNOME или KDE нет общесистемного переключателя SOCKS5, как для HTTP-прокси. Вместо этого Linux даёт гибкие строительные блоки. Это руководство охватывает практические способы маршрутизации трафика через SOCKS5-прокси в Linux — по приложениям, прозрачно и для конкретных инструментов CLI — с кодом, который можно адаптировать.
Как SOCKS5 работает в Linux (и почему DNS важен)
SOCKS5 — это универсальный прокси-протокол, который может обрабатывать TCP-соединения (и UDP с некоторыми расширениями, но большинство реализаций ограничиваются TCP). В Linux ключевое различие — между socks5 и socks5h:
socks5://разрешает DNS локально на вашей машине, а затем отправляет IP прокси.socks5h://отправляет имя хоста прокси, который разрешает его удалённо.
Для контента с геоограничениями или предотвращения утечек DNS socks5h обычно является правильным выбором. Если ваш прокси-провайдер предоставляет конечную точку SOCKS5, вы часто можете принудительно включить удалённый DNS, используя вариант с h или настройку вроде «Проксировать DNS при использовании SOCKS v5» в Firefox.
Маршрутизация по приложениям с proxychains
proxychains-ng — поддерживаемый форк классического инструмента proxychains. Он использует LD_PRELOAD, чтобы перехватывать сетевые вызовы динамически слинкованных программ и направлять их через ваш прокси. Это ближайший аналог Proxifier в Linux (для Windows или macOS), хотя под капотом он работает иначе.
Установка в Debian/Ubuntu:
sudo apt install proxychains4
В Arch:
sudo pacman -S proxychains-ng
Отредактируйте файл конфигурации (обычно /etc/proxychains4.conf или ~/.proxychains/proxychains.conf). В конце определите ваш прокси:
[ProxyList]
socks5 127.0.0.1 1080
Если ваш прокси требует аутентификации:
socks5 203.0.113.10 1080 username password
Чтобы направлять DNS через прокси, оставьте строку proxy_dns раскомментированной в конфиге. Это заставляет proxychains использовать удалённый DNS, аналогично socks5h.
Запустите любую команду через прокси:
proxychains4 curl https://ifconfig.me
proxychains4 firefox
Примечание: proxychains не работает со статически слинкованными бинарниками, setuid-бинарниками или приложениями, которые используют raw-сокеты. Он также по умолчанию не проксирует UDP-трафик. В таких случаях рассмотрите подход с прозрачным прокси ниже.
Прозрачный прокси с redsocks
Если вы хотите направлять весь TCP-трафик (или определённые порты) через SOCKS5-прокси без настройки для каждого приложения, redsocks может перенаправлять соединения на уровне ядра. Это сложнее и при неверной настройке может нарушить работу сети, поэтому действуйте осторожно.
Установите redsocks:
sudo apt install redsocks
Создайте файл конфигурации, например /etc/redsocks.conf:
redsocks {
local_ip = 127.0.0.1;
local_port = 12345;
ip = 203.0.113.10;
port = 1080;
type = socks5;
login = "username";
password = "password";
}
Затем используйте iptables, чтобы перенаправлять исходящий TCP-трафик на локальный порт redsocks. Например, чтобы перенаправить весь TCP-трафик, кроме локальных сетей:
sudo iptables -t nat -N REDSOCKS
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 169.254.0.0/16 -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
Эта конфигурация перенаправляет исходящий TCP с локальной машины. Настройте правила под свои нужды (например, исключите определённых пользователей или назначения). Помните, что DNS часто использует UDP; redsocks может обрабатывать TCP DNS, но для UDP может потребоваться дополнительная настройка. Многие пользователи объединяют redsocks с локальным DNS-резолвером вроде dnscrypt-proxy или unbound, чтобы избежать утечек.
Переменные окружения и CLI-инструменты
Многие инструменты командной строки учитывают переменные окружения, такие как http_proxy, https_proxy и all_proxy. Для SOCKS5 самый надёжный вариант — all_proxy со схемой socks5h:
export all_proxy=socks5h://127.0.0.1:1080
curl https://ifconfig.me
Некоторые инструменты также распознают http_proxy и https_proxy с URL socks5://, но поддержка различается. Для конкретных инструментов настройте их напрямую:
- curl: используйте
--socks5-hostname 127.0.0.1:1080(эквивалентноsocks5h). - git:
git config --global http.proxy socks5h://127.0.0.1:1080 - SSH: используйте динамическую переадресацию, чтобы создать локальный SOCKS-прокси:
ssh -D 1080 -N user@remote-host. Затем направьте другие инструменты на127.0.0.1:1080.
Настройка браузеров в Linux
Firefox отлично поддерживает SOCKS5. Перейдите в Настройки → Настройки сети → Настройка прокси вручную, укажите SOCKS-хост 127.0.0.1 и порт 1080, выберите SOCKS v5 и установите флажок «Проксировать DNS при использовании SOCKS v5». Так Firefox будет использовать удалённый DNS.
Chrome и Chromium в Linux можно запустить с флагом прокси:
google-chrome --proxy-server="socks5://127.0.0.1:1080"
Однако по умолчанию это не проксирует DNS. Chrome будет разрешать имена хостов локально, что может привести к утечке DNS. Чтобы принудительно использовать удалённый DNS, можно применить --host-resolver-rules или расширение-прокси, которое поддерживает SOCKS5 с удалённым DNS. Альтернативно используйте общесистемный прозрачный прокси вроде redsocks, чтобы избежать флагов для каждого браузера.
Проверка настройки и поиск утечек
После настройки всегда проверяйте, что трафик идёт через прокси и что DNS не утекает. Быстрые проверки:
- Видимый IP:
curl https://ifconfig.meилиcurl https://ipinfo.io/ip. (Если используете proxychains, добавьте префиксproxychains4.) - Тест на утечку DNS: посетите сайт вроде
dnsleaktest.comв браузере и проверьте, принадлежат ли DNS-серверы вашему провайдеру или провайдеру прокси. - Утечки WebRTC: в браузерах WebRTC может раскрыть ваш реальный IP. Отключите WebRTC или используйте расширение для его блокировки, если нужно.
- Проверка DNS в терминале:
dig +short example.comбудет использовать системный резолвер, если вы не настроили proxychains или локальный DNS-форвардер. Чтобы понять, проксируется ли DNS, сравните результаты с прокси и без него.
Частые ошибки и как их избежать
- Использование
socks5://, когда нуженsocks5h://: это самая распространённая причина утечек DNS. Если инструмент поддерживает, всегда используйте вариант сh. - Предположение, что все приложения соблюдают proxychains: статически слинкованные бинарники и некоторые изолированные (sandboxed) приложения обходят
LD_PRELOAD. Проверяйте каждое нужное приложение. - Забывание про UDP и QUIC: SOCKS5-прокси обычно обрабатывают только TCP. QUIC (используемый в HTTP/3) работает поверх UDP и может обходить ваш прокси. Отключите QUIC в браузере, если нужна абсолютная согласованность.
- Утечки IPv6: если ваш прокси поддерживает только IPv4, IPv6-трафик может уходить напрямую. Отключите IPv6 или направьте его через прокси, если поддерживается.
- Петли прозрачного прокси: с redsocks будьте осторожны, не перенаправляйте трафик, который нужен самому прокси (например, трафик к IP прокси-сервера). Используйте правила исключения.
Итог
Linux не предлагает конфигуратор SOCKS5 в один клик, но это особенность, а не баг. Вы можете выбрать маршрутизацию по приложениям с proxychains, прозрачное перенаправление с redsocks или простые переменные окружения для CLI-инструментов. Выберите метод, подходящий вашему рабочему процессу, затем проверьте DNS и утечки, прежде чем доверять ему конфиденциальный трафик.