WSL2 Kali Linux 使用 Clash Verge 代理的网络配置教程
背景
最近实在是受不了win原生的垃圾命令行了,而又没有mac,所以我想着着手转wsl做开发,没想到wsl的网络配置极其诡异,折腾了一整晚上才找到一个比较完美的配置方案,所以把它整理下来分享给需要的佬友。
注:使用了codex和gemini辅助整理了我配置的整个流程,后来测试发现这套这对kali的网络配置方案在wsl ubuntu上一样好用。
本机环境:
- Windows 上运行 Clash Verge / Mihomo。
- WSL2 中安装 Kali Linux。
- WSL2 使用 NAT 网络模式。
- Clash Verge 代理端口为
7897。 - Kali 默认用户为
hackx。
遇到的问题:
- Kali Linux 中访问网络时偶尔卡住。
- 使用
Ctrl-C中断后再次执行同一命令,经常又能恢复正常。 - 国内外网站都可能出现间歇性连接超时。
排查结论:
- Windows 侧 Clash Verge 代理端口
127.0.0.1:7897正常。 - Kali 默认 DNS 指向
10.255.255.254,域名解析结果会出现198.18.x.xfake-ip 地址。 - Kali 默认直连路径 50 次测试中出现 5 次连接超时。
- Kali 显式走宿主机 Clash 代理
http://172.25.128.1:7897后,50 次测试全部成功。
因此,建议保留 WSL2 NAT 模式,并在 Kali 中默认配置 HTTP/HTTPS 代理。
不推荐的方案:mirrored 网络模式
曾尝试将 %UserProfile%\.wslconfig 改为:
[wsl2]
networkingMode=mirrored
dnsTunneling=true
autoProxy=true
执行 wsl --shutdown 后,Kali 启动时报错:
ConfigureNetworking/0x8007054f
networkingMode Mirrored ... fallback to networkingMode None
结果是 Kali 中只剩 lo 回环网卡,网络不可用。因此当前机器不建议继续使用 mirrored 模式。
Windows 侧 WSL 配置
文件位置:
C:\Users\Lenovo\.wslconfig
推荐保持 NAT 配置:
[wsl2]
networkingMode=nat
memory=8GB
processors=4
swap=2GB
localhostForwarding=true
修改后执行:
wsl --shutdown
然后重新打开 Kali。
备份 Kali 的 bashrc
在修改 Kali 用户配置前,先备份:
cp ~/.bashrc ~/.bashrc.backup-$(date +%Y%m%d-%H%M%S)
本次实际备份文件为:
/home/hackx/.bashrc.backup-20260515-223308
配置 Kali 默认走 Clash Verge 代理
编辑 Kali 中的:
~/.bashrc
将下面配置放到 .bashrc 靠前位置,最好放在这段之前:
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
代理配置如下:
# WSL host Clash Verge proxy.
# Uses the current WSL default gateway so it continues to work after WSL restarts.
if command -v ip >/dev/null 2>&1; then
WSL_HOST="$(ip route | awk '/default/ {print $3; exit}')"
if [ -n "$WSL_HOST" ]; then
export http_proxy="http://${WSL_HOST}:7897"
export https_proxy="$http_proxy"
export HTTP_PROXY="$http_proxy"
export HTTPS_PROXY="$https_proxy"
export no_proxy="localhost,127.0.0.1,::1"
export NO_PROXY="$no_proxy"
fi
fi
说明:
WSL_HOST会自动读取 WSL2 默认网关,例如172.25.128.1。7897是当前 Clash Verge / Mihomo 监听的 HTTP 代理端口。- WSL2 每次重启后网关 IP 可能变化,所以不要把
172.25.128.1写死。 no_proxy用于避免本机地址走代理。
让当前 shell 立即生效:
source ~/.bashrc
新打开的 bash 会话会自动生效。
验证配置
查看代理环境变量:
echo "$http_proxy"
echo "$https_proxy"
echo "$no_proxy"
预期类似:
http://172.25.128.1:7897
http://172.25.128.1:7897
localhost,127.0.0.1,::1
检查 Clash 代理端口是否可达:
host=$(ip route | awk '/default/ {print $3; exit}')
timeout 3 bash -lc "</dev/tcp/$host/7897" && echo proxy_tcp_ok || echo proxy_tcp_fail
预期:
proxy_tcp_ok
测试国内网站:
curl -k -L -I https://www.baidu.com/
curl -k -L -I https://www.qq.com/
curl -k -L -I https://mirrors.aliyun.com/
测试国外网站:
curl -k -L -I https://www.google.com/generate_204
curl -k -L -I https://github.com/
curl -k -L -I https://www.cloudflare.com/
也可以查看耗时:
curl -k -L -sS --connect-timeout 5 --max-time 12 \
-o /dev/null \
-w 'code=%{http_code} dns=%{time_namelookup} connect=%{time_connect} total=%{time_total}\n' \
https://github.com/
如果 dns 和 connect 都非常小,例如:
code=200 dns=0.000016 connect=0.000269 total=2.124553
说明 curl 已经通过环境变量使用了本地代理。
适用范围
这种方式会让支持 http_proxy / https_proxy 环境变量的软件默认走代理,包括:
curlwgetgit的 HTTP/HTTPS 请求- 很多 Python、Node.js、Go 的 HTTP 客户端
- 部分包管理器,例如配合
sudo -E apt update
这种方式不会代理所有网络流量,例如:
pingssh- 原始 TCP/UDP 程序
- 不读取代理环境变量的软件
- DNS 查询本身
如果某个程序不识别环境变量,需要在该程序自己的配置里单独设置代理。
apt 使用建议
普通用户环境变量不会默认传给 sudo。如果需要让 apt 使用代理,可以使用:
sudo -E apt update
如果希望 apt 永久使用代理,可以创建 apt 配置文件:
sudo nano /etc/apt/apt.conf.d/95proxies
写入:
Acquire::http::Proxy "http://172.25.128.1:7897/";
Acquire::https::Proxy "http://172.25.128.1:7897/";
但不建议写死网关 IP。更通用的做法是优先用 .bashrc 的动态环境变量,再通过 sudo -E 执行。
回滚方法
如果要恢复 .bashrc:
cp ~/.bashrc.backup-20260515-223308 ~/.bashrc
source ~/.bashrc
如果要临时取消当前 shell 的代理:
unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY no_proxy NO_PROXY
如果误改了 Windows 的 .wslconfig,恢复 NAT:
[wsl2]
networkingMode=nat
memory=8GB
processors=4
swap=2GB
localhostForwarding=true
然后在 PowerShell 中执行:
wsl --shutdown
最终建议
当前机器上最稳定的方案是:
- Windows 侧保持 WSL2 NAT。
- Clash Verge 保持运行,确保
7897端口可用。 - Kali 的
~/.bashrc中动态读取 WSL 默认网关。 - 默认导出
http_proxy/https_proxy,让常用 HTTP/HTTPS 工具走宿主机代理。
这种方案绕开了 WSL2 默认直连路径里偶发卡住的问题,同时不需要修改系统级全流量代理。
6 个帖子 - 6 位参与者