WSL配置网络

WSL2 Kali Linux 使用 Clash Verge 代理的网络配置教程 背景 最近实在是受不了win原生的垃圾命令行了,而又没有mac,所以我想着着手转wsl做开发,没想到wsl的网络配置极其诡异,折腾了一整晚上才找到一个比较完美的配置方案,所以把它整理下来分享给需要的佬友。 注:使用了c...
WSL配置网络
WSL配置网络

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.x fake-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/

如果 dnsconnect 都非常小,例如:

code=200 dns=0.000016 connect=0.000269 total=2.124553

说明 curl 已经通过环境变量使用了本地代理。

适用范围

这种方式会让支持 http_proxy / https_proxy 环境变量的软件默认走代理,包括:

  • curl
  • wget
  • git 的 HTTP/HTTPS 请求
  • 很多 Python、Node.js、Go 的 HTTP 客户端
  • 部分包管理器,例如配合 sudo -E apt update

这种方式不会代理所有网络流量,例如:

  • ping
  • ssh
  • 原始 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

最终建议

当前机器上最稳定的方案是:

  1. Windows 侧保持 WSL2 NAT。
  2. Clash Verge 保持运行,确保 7897 端口可用。
  3. Kali 的 ~/.bashrc 中动态读取 WSL 默认网关。
  4. 默认导出 http_proxy / https_proxy,让常用 HTTP/HTTPS 工具走宿主机代理。

这种方案绕开了 WSL2 默认直连路径里偶发卡住的问题,同时不需要修改系统级全流量代理。

6 个帖子 - 6 位参与者

阅读完整话题

来源: LinuxDo 最新话题查看原文