Консольные инструменты системный прокси не читают. Здесь собраны настройки для самых распространённых, чтобы брать нужное.
Предполагаем, что ваш смешанный порт — 7897 (проверьте в настройках портов Clash Verge; умолчания у версий разные).
Сначала переменные окружения — они закрывают больше половины
Большинство инструментов, следующих соглашениям Unix, уважает эти:
# macOS / Linux / WSL
export http_proxy=http://127.0.0.1:7897
export https_proxy=http://127.0.0.1:7897
export all_proxy=socks5://127.0.0.1:7897
export no_proxy="localhost,127.0.0.1,::1,*.local,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16"# Windows PowerShell (текущая сессия)
$env:HTTP_PROXY = "http://127.0.0.1:7897"
$env:HTTPS_PROXY = "http://127.0.0.1:7897"
$env:NO_PROXY = "localhost,127.0.0.1,::1,*.local":: Windows CMD
set HTTP_PROXY=http://127.0.0.1:7897
set HTTPS_PROXY=http://127.0.0.1:7897Оформите парой shell-функций:
# ~/.zshrc или ~/.bashrc
proxyon() {
export http_proxy=http://127.0.0.1:7897
export https_proxy=$http_proxy
export all_proxy=socks5://127.0.0.1:7897
export no_proxy="localhost,127.0.0.1,::1,*.local"
echo "✓ proxy on"
}
proxyoff() {
unset http_proxy https_proxy all_proxy no_proxy
echo "✗ proxy off"
}Git
У Git своя система настроек. Переменные окружения работают для HTTPS, но не для SSH.
# HTTPS
git config --global http.proxy http://127.0.0.1:7897
git config --global https.proxy http://127.0.0.1:7897
# отменить
git config --global --unset http.proxy
git config --global --unset https.proxy
# посмотреть
git config --global --get-regexp proxyПроксировать только один хост (рекомендуется, чтобы корпоративный Git-сервер туда не попал):
git config --global http.https://github.com.proxy http://127.0.0.1:7897Git по SSH ([email protected]:xxx.git) игнорирует http.proxy и требует настройки SSH:
# ~/.ssh/config
Host github.com
HostName github.com
User git
Port 22
# macOS / Linux
ProxyCommand nc -X connect -x 127.0.0.1:7897 %h %p
# Windows (в Git Bash есть connect.exe)
# ProxyCommand connect -H 127.0.0.1:7897 %h %pnpm / yarn / pnpm
# npm
npm config set proxy http://127.0.0.1:7897
npm config set https-proxy http://127.0.0.1:7897
npm config delete proxy && npm config delete https-proxy # отменить
# yarn (v1)
yarn config set proxy http://127.0.0.1:7897
yarn config set https-proxy http://127.0.0.1:7897
# pnpm
pnpm config set proxy http://127.0.0.1:7897
pnpm config set https-proxy http://127.0.0.1:7897Настройки лежат в ~/.npmrc и правятся напрямую:
proxy=http://127.0.0.1:7897
https-proxy=http://127.0.0.1:7897
noproxy=localhost,127.0.0.1,.company.comPython / pip
# разово
pip install --proxy http://127.0.0.1:7897 requests
# постоянно
pip config set global.proxy http://127.0.0.1:7897
pip config unset global.proxyРасположение файла настроек:
- Windows:
%APPDATA%\pip\pip.ini - macOS/Linux:
~/.config/pip/pip.conf
[global]
proxy = http://127.0.0.1:7897
index-url = https://pypi.org/simpleБиблиотека requests тоже читает переменные окружения, а в коде можно указать явно:
proxies = {
"http": "http://127.0.0.1:7897",
"https": "http://127.0.0.1:7897",
}
requests.get(url, proxies=proxies)Go
# модули Go через официальный прокси (обычно достаточно, локальный не нужен)
go env -w GOPROXY=https://proxy.golang.org,direct
# региональное зеркало
go env -w GOPROXY=https://goproxy.cn,direct
# приватные репозитории мимо прокси
go env -w GOPRIVATE=*.company.com,github.com/myorg/*
# когда локальный прокси всё-таки нужен (скажем, приватный репозиторий на GitHub)
go env -w GOPROXY=direct
export HTTPS_PROXY=http://127.0.0.1:7897go get уважает переменные окружения HTTP_PROXY и HTTPS_PROXY.
Java / Maven / Gradle
Maven (~/.m2/settings.xml):
<settings>
<proxies>
<proxy>
<id>clash</id>
<active>true</active>
<protocol>http</protocol>
<host>127.0.0.1</host>
<port>7897</port>
<nonProxyHosts>localhost|127.0.0.1|*.company.com</nonProxyHosts>
</proxy>
</proxies>
</settings>Gradle (~/.gradle/gradle.properties):
systemProp.http.proxyHost=127.0.0.1
systemProp.http.proxyPort=7897
systemProp.https.proxyHost=127.0.0.1
systemProp.https.proxyPort=7897
systemProp.http.nonProxyHosts=localhost|127.0.0.1|*.company.comФлаги командной строки JVM:
java -Dhttp.proxyHost=127.0.0.1 -Dhttp.proxyPort=7897 \
-Dhttps.proxyHost=127.0.0.1 -Dhttps.proxyPort=7897 \
-Dhttp.nonProxyHosts="localhost|127.0.0.1" -jar app.jarRust / Cargo
~/.cargo/config.toml:
[http]
proxy = "http://127.0.0.1:7897"
[https]
proxy = "http://127.0.0.1:7897"curl / wget
# curl, разово
curl -x http://127.0.0.1:7897 https://example.com
curl --socks5 127.0.0.1:7897 https://example.com
# curl, постоянно (~/.curlrc)
echo 'proxy = "http://127.0.0.1:7897"' >> ~/.curlrc
# wget, постоянно (~/.wgetrc)
cat >> ~/.wgetrc <<'EOF'
use_proxy = on
http_proxy = http://127.0.0.1:7897
https_proxy = http://127.0.0.1:7897
EOFСистемные пакетные менеджеры
# apt (/etc/apt/apt.conf.d/95proxy)
echo 'Acquire::http::Proxy "http://127.0.0.1:7897";' | sudo tee /etc/apt/apt.conf.d/95proxy
echo 'Acquire::https::Proxy "http://127.0.0.1:7897";' | sudo tee -a /etc/apt/apt.conf.d/95proxy
# dnf/yum (добавьте в /etc/dnf/dnf.conf)
# proxy=http://127.0.0.1:7897
# Homebrew (macOS) — читает окружение
export ALL_PROXY=socks5://127.0.0.1:7897
brew install xxxСводная таблица
| Инструмент | Как настраивается | Читает переменные окружения |
|---|---|---|
| curl / wget | Флаг -x или .curlrc | ✅ |
| Git (HTTPS) | git config http.proxy | ✅ |
| Git (SSH) | ProxyCommand в ~/.ssh/config | ❌ |
| npm / yarn / pnpm | .npmrc | ⚠️ В некоторых версиях |
| pip | pip.conf | ✅ |
| Go | Переменные окружения плюс GOPROXY | ✅ |
| Maven | settings.xml | ❌ |
| Gradle | gradle.properties | ❌ |
| Cargo | .cargo/config.toml | ✅ |
| Демон Docker | drop-in для systemd | ❌ |
| apt / dnf | Собственные файлы настроек | ⚠️ Теряются под sudo |
| Homebrew | Переменные окружения | ✅ |
Почему переменные окружения иногда не работают
Путь попроще: включить TUN
Всё вышеперечисленное складывается, и каждый новый установленный инструмент, возможно, придётся настраивать снова.
С включённым TUN каждый консольный инструмент проксируется автоматически, и настраивать не нужно ничего.
Цена — привилегии виртуального адаптера плюс необходимость добавить приватные диапазоны в прямые правила:
prepend-rules:
- IP-CIDR,10.0.0.0/8,DIRECT,no-resolve
- IP-CIDR,172.16.0.0/12,DIRECT,no-resolve
- IP-CIDR,192.168.0.0/16,DIRECT,no-resolve
- DOMAIN-SUFFIX,company.com,DIRECTПроверка
# какой у меня выходной IP
curl https://api.ipify.org
# идёт ли Git через прокси (-v печатает детали соединения)
GIT_CURL_VERBOSE=1 git ls-remote https://github.com/git/git 2>&1 | head -20
# настройки npm
npm config list | grep -i proxyМожно также открыть страницу подключений в Clash Verge и следить за новыми записями во время выполнения команды — появилась запись, значит трафик прошёл.
Коротко
- Сначала пробуйте переменные окружения; они покрывают curl, pip, Go, Cargo, Homebrew и многое другое
- У Git, npm, Maven, Gradle и Docker свои системы настроек, их надо делать отдельно
- SSH требует ProxyCommand либо перехода на порт 443
no_proxyобязателен, иначе ломаются локальные и внутренние сервисы- Помните про
-Eприsudo - Если всё это слишком, включите TUN — но настройте прямые правила для приватных диапазонов
Смотрите также: прокси для Docker и WSL2 и правила по процессам.
Смежные документы
127.0.0.1 внутри контейнера — это не хост. Настройка для всех трёх сценариев Docker (загрузка образов демоном, сборка, запуск) плюс два подхода для разных режимов сети WSL2.
Нулевая настройка для каждого устройства в доме. Компромиссы трёх подходов (боковой роутер, TProxy, TUN), полная конфигурация и служба systemd, правила брандмауэра и отказоустойчивость, чтобы домашние оставались в сети.
Полный RESTful API, который открывает external-controller: переключение узлов, просмотр соединений, перезагрузка конфигурации, развёртывание веб-панели и несколько практичных скриптов.