Skip to content
Статья / 2 мин. чтения

Конфигуратор 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 и утечки, прежде чем доверять ему конфиденциальный трафик.