在命令行(终端)进行网络代理(Network Proxy)

为何要在命令行(终端)设置网络代理

主要是方便 curl、wget、apt、pip、git、npm 等工具的使用。众所周知,代理工具的常规方法是无法代理到终端的流量。

需要用到命令行网络代理的场景:

  1. pip 下包下不动或是屡屡报网络错误,那无非就两种情况:一是下载了过于冷门的包版本,二是包源仓库在国外,国外裸连下载不一定会成功,如果在手机流量和校园网流量之间尝试仍无法下载,则直接终端网络代理。
  2. 当需要 git 来克隆仓库,发现timeout 或者下载慢,那么请直接代理流量。
  3. 当链接是任何的国外链接时,裸连可能无法建立稳定的连接。比如 claudecode的两条下载命令(分别是powershell和cmd): irm https://claude.ai/install.ps1 | iexcurl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd ,网络代理之后会很明显的顺利下下来。

四种实现方式

1. 网络代理工具开启虚拟网卡模式(即 TUN 模式)

该方法好处是方便,鼠标一点就完成的事情;坏处是不太稳定,可能体现在浏览器打不开网页,但 qq、微信等却能发信息。目前不知道跟什么东西挂钩,节点质量?代理工具?若开启之后浏览器能正常使用,我倒是很推荐这种方法,十分方便。

原理:在电脑本地创建了一个虚拟的网卡,所有电脑的流量都经过该虚拟网卡,达到连终端流量一起代理的效果。
91b9b5d2-f42d-4e88-b1b4-e0dbaeefdc92.png

测试用 ping www.google.com 或者 curl -I https://www.google.com

分别在 cmd、powershell、wsl2 演示:

  • 启用 TUN:
  • 未启用 TUN:

可见 TUN 确实可以代理到终端的流量。


Tip

以下的格式均是:http(s)_proxy=< ip >:< 代理工具的转发端口 >

只要不是人为改动,小猫咪的默认端口都是 7897(该端口为混合端口,包含http、https、socks5)

3485ddb2-cd25-4ca9-a1bf-206fc1ca1b20.png

以下三个方法都是开启【系统代理】进行,演示如何通过命令代理而非 TUN 模式来获取代理特殊流量的效果。
2536bbc3-3cca-4f29-8979-6fb02c9fdc7d.png

Caution

【系统代理】不要和【虚拟网卡模式】(即 TUN 模式)同时开启。


2. cmd 设置网络代理

1
2
set http_proxy=http://127.0.0.1:7897
set https_proxy=http://127.0.0.1:7897

curl -I https://www.google.com 验证,返回 200 即可。
20260606-2048-51.9348115.gif


3. powershell 设置网络代理

1
2
$env:https_proxy="http://127.0.0.1:7897"
$env:http_proxy="http://127.0.0.1:7897"

curl.exe -I https://www.google.com 验证,返回 200 即可。
20260606-2102-16.4220351.gif


4. wsl2 设置网络代理

1
2
export http_proxy="http://IP:7897"
export https_proxy="http://IP:7897"

这个 wsl2 进行网络代理的方法稍有不同,IP 处不能是 127.0.0.1 ,WSL2 的网络是隔离的,127.0.0.1 指向 WSL2 自身。如果代理跑在 Windows 上,需要用宿主机 IP。因为如果填写本地回环地址,相当于代理了 Linux 系统里面的一个叫 7897 端口的软件,而小猫咪一般都是安装在 Windows 上,不在 Linux 上,这就会导致链路不通。


wsl2 设置网络代理方法一

所以 IP 处应该填写 wsl2 拿到 Windows 主机 IP,命令是:

1
cat /etc/resolv.conf | grep nameserver | awk '{print $2}'

b9ba52f8-75fc-4ea6-835e-cbfd8b222816.png

Tip

这个命令作用是查看 /etc/resolv.conf 里 WSL 的 DNS 配置文件,由 WSL 自动生成
这个 WSL2 里拿到的 10.255.255.254 是 WSL 虚拟网卡的网关 IP,是 WSL 访问 Windows 宿主机的 默认入口

所以命令是:

1
2
export http_proxy="http://10.255.255.254:7897"
export https_proxy="http://10.255.255.254:7897"

wsl2 设置网络代理方法二

把 IP 换成本机 ipv4 地址,此方法必须在小猫咪的设置里把 允许局域网连接 打开。

1
2
export http_proxy="http://192.168.3.54:7897"
export https_proxy="http://192.168.3.54:7897"

curl -I https://www.google.com 验证,返回 200 即可。
20260606-2137-29.7502200.gif


wsl2 设置网络代理方法三

WSL2 目前支持 4 种网络模式
模式 networkingMode 值 说明
NAT nat(默认) WSL2 有独立虚拟网卡,通过 NAT 访问外网,宿主机 IP 需从 /etc/resolv.conf 获取
镜像 mirrored 共享 Windows 网络栈,127.0.0.1 直通宿主机,支持 IPv6
桥接 bridged WSL2 直接接入物理网络,获得局域网 IP,对外表现为独立设备
Virtiofs/无网络 none 禁用网络
如何确认自己的网络模式

执行以下命令,若显示无此文件或打开显示为 networkingMode=nat 则说明是 NAT 模式。默认都是 NAT 模式,跟虚拟机 VMware 一样。

1
notepad $env:USERPROFILE\.wslconfig

配置的语法是:

1
2
[wsl2]
networkingMode=[nat,mirrored,bridged,none]

若在 .wslconfig 里配置了 镜像模式,则可以直接用 127.0.0.1 来代理。

1
2
export http_proxy="http://127.0.0.1:7897"
export https_proxy="http://127.0.0.1:7897"


以上方法均是临时代理(除了 TUN 模式),关闭窗口后代理就自动失效。