踩坑实战 | Windows+WSL2 跨系统部署 CC-Switch 对接 Claude Code + Agnes 大模型完整指南
全网首发跨系统部署方案,解决官方文档只字未提的网络隔离、配置覆盖、IP漂移三大核心痛点
一、写在前面:为什么要写这篇文章?
1.1 背景:开发者的普遍痛点
如今越来越多开发者选择「Windows 桌面 + WSL2 开发环境」的组合:既享受 Windows 系统的桌面生态、软件兼容性,又拥有 Linux 原生的开发环境、命令行工具链。
而 Claude Code 作为当前最强大的终端 AI 编程助手,支持深度理解项目代码、自动执行命令、调试排错,已经成为很多开发者的标配。但官方 Anthropic 接口不仅价格高,国内访问也不稳定,于是很多人转向国内性价比更高的大模型 API,比如 Agnes 系列模型,Agnes现在是免费调用,模型免费使用,具体可以看官网介绍 。
Agnes官网:https://agnes-ai.com/

CC-Switch 的出现完美解决了协议转换问题:它可以把 OpenAI 兼容格式的大模型接口,转换成 Claude Code 原生支持的 Anthropic 格式,让我们可以用国内大模型无缝替代官方接口。
1.2 核心痛点:官方文档缺失的跨系统坑
网上绝大多数 CC-Switch 教程,甚至官方文档,都只讲了同系统部署方案:
- 要么 Claude Code 和 CC-Switch 都装在 Windows
- 要么都装在 Linux/WSL 里
同系统部署非常简单,一键绑定就能用,几乎没什么门槛。但一旦你选择跨系统部署:
Windows 端运行 CC-Switch 做代理管理,WSL2 里运行 Claude Code 做开发
就会遇到一堆官方文档完全没提的坑,我自己踩了整整两天才全部摸透:
- 网络隔离坑:WSL2 和 Windows 是两套独立虚拟网卡,默认
127.0.0.1完全不通 - 配置覆盖坑:CC-Switch 的
claude bind命令只会修改同系统配置,跨系统执行会把地址写错成127.0.0.1,直接导致连接失败 - IP漂移坑:WSL2 每次重启后,Windows 网关 IP 都会变,配置好的地址用一次就失效
- 协议格式坑:供应商 API 格式选错,导致请求一直报错,很难定位原因,目前Agnes AI API 只兼容 OpenAI 风格接口,需要CC-switch开路由才可以用。
这篇文章就是我踩完所有坑后整理的完整可落地指南,从原理到实操,从基础部署到终极优化,全覆盖。
二、整体架构与核心原理
2.1 完整请求链路
我们先搞清楚整条链路的数据流向,理解了原理,排坑才会得心应手:
WSL2 端 Claude Code
↓ (Anthropic 原生格式请求)
Windows 端 CC-Switch(15721端口)
↓ (协议转换:Anthropic → OpenAI 兼容格式)
Agnes 大模型 API 服务端
↓ (返回结果)
原路返回给 Claude Code
2.2 跨系统部署的核心难点
| 问题 | 同系统部署 | 跨系统部署(本文方案) |
|---|---|---|
| 网络通信 | 直接访问 127.0.0.1 即可 |
必须通过 WSL 虚拟网卡网关 IP 访问 |
| 配置下发 | cc-switch claude bind 自动搞定 |
自动下发会写错地址,必须手动配置+防覆盖 |
| IP稳定性 | 本地地址永久不变 | WSL 重启网关 IP 必变,需要自动适配 |
| 防火墙 | 本地访问无需放行 | 必须给 Windows 防火墙加端口入站规则 |
这也是这篇文章的核心价值:解决跨系统场景下独有的问题,官方文档和普通教程完全不会覆盖。
三、前置准备
开始部署前,请确保你已经准备好以下环境:
- Windows 端:已安装 CC-Switch 客户端(官网下载最新版即可)
- WSL2 端:已安装 Claude Code(
claude命令可正常执行) - API 凭证:已申请 Agnes 大模型的 API Key(OpenAI 兼容格式)
- 基础环境:WSL2 网络正常,可正常访问外网
四、详细部署步骤
4.1 第一步:Windows 端 CC-Switch 核心配置
这一步是整个方案的基础,很多人第一步就踩了坑。
4.1.1 添加 Agnes 模型供应商
- 打开 CC-Switch 客户端,进入「供应商管理」→「添加供应商」
- 填写基础信息:
- 供应商名称:自定义,比如
Agnes-API - 请求地址:
https://apihub.agnes-ai.com/v1 - 重点坑点:API 格式务必选「OpenAI Chat Completions (需开启路由)」
很多人这里会选错成 Anthropic 原生格式,导致协议转换失败,请求一直报错。Agnes 是 OpenAI 兼容接口,必须选 OpenAI 格式。
- 供应商名称:自定义,比如
- 填入你的 API Key,在「模型列表」里添加
agnes-2.0-flash(对应你要使用的模型) - 点击「测试连通性」,提示成功后保存配置
4.1.2 开启 Claude 路由并配置监听
这是跨系统访问的核心设置,默认配置 WSL 绝对连不上。
- 进入 CC-Switch「设置」→「路由」选项卡
- 开启「路由总开关」,确保服务运行中
- 在「路由启用」区域,打开 Claude 开关(Codex、Gemini 不需要就关掉)
- 重点修改:服务地址
- 默认是
http://127.0.0.1:15721,只能 Windows 本机访问 - 改成
http://0.0.0.0:15721,允许所有网段(包括 WSL 虚拟网卡)访问
- 默认是
- 记住端口号
15721(默认值,如果你改了就用你自己的) - 点击保存,等待路由服务重启生效
4.1.3 Windows 防火墙放行端口
90% 的跨系统连接失败,都是防火墙拦了。
- 按下
Win+R,输入wf.msc打开高级安全 Windows Defender 防火墙 - 左侧点击「入站规则」,右侧点击「新建规则」
- 规则类型选「端口」→ 下一步
- 选「TCP」,特定本地端口填入
15721→ 下一步 - 选「允许连接」→ 下一步
- 域、专用、公用三个选项全部勾选 → 下一步
- 规则名称填
CC-Switch-Claude路由,点击完成
4.1.4 本地验证服务
先在 Windows 本机确认服务正常,再去 WSL 配置:
- 打开 Windows 终端(CMD/PowerShell)
- 执行命令:
curl http://127.0.0.1:15721/health
- 返回类似
{"status":"healthy","timestamp":"xxx"}就说明服务正常
4.2 第二步:WSL2 端网络连通配置
现在我们打通 WSL 到 Windows CC-Switch 的网络链路。
4.2.1 获取 Windows 网关 IP
WSL2 里访问 Windows 宿主机,不能用 127.0.0.1,必须用虚拟网卡的网关地址。
在 WSL 终端执行命令:
ip route | grep default
输出示例:
default via 172.29.16.1 dev eth0 proto kernel
这里的 172.29.16.1 就是 Windows 宿主机的网关 IP,记下来。
4.2.2 测试跨系统连通性
在 WSL 里执行测试命令(替换成你自己的网关 IP):
curl http://172.29.16.1:15721/health
- ✅ 返回健康状态:网络连通成功,继续下一步
- ❌ 连接超时/拒绝:回去检查「监听地址是否改成0.0.0.0」、「防火墙是否放行端口」、「IP是否正确」
4.2.3 配置好记的静态域名
IP 太难记,而且后面会变,我们先配置一个自定义域名 win-proxy,方便使用。
执行命令:
# 把网关IP写入hosts,替换成你自己的IP
echo "172.29.16.1 win-proxy" | sudo tee -a /etc/hosts
测试域名是否生效:
curl http://win-proxy:15721/health
正常返回结果就说明域名配置成功。
4.3 第三步:WSL2 端 Claude Code 配置
现在配置 Claude Code,让它走 Windows 的 CC-Switch 代理。
4.3.1 修改配置文件
在 WSL 终端执行编辑命令:
vim ~/.claude/settings.json
写入以下完整配置(核心是 ANTHROPIC_BASE_URL 指向我们的代理域名):
{
"allowed_openai_params": [
"thinking",
"context_management"
],
"env": {
"ANTHROPIC_AUTH_TOKEN": "PROXY_MANAGED",
"ANTHROPIC_BASE_URL": "http://win-proxy:15721",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "claude-haiku-4-5",
"ANTHROPIC_DEFAULT_HAIKU_MODEL_NAME": "agnes-2.0-flash",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "claude-opus-4-8",
"ANTHROPIC_DEFAULT_OPUS_MODEL_NAME": "agnes-2.0-flash",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "claude-sonnet-4-6",
"ANTHROPIC_DEFAULT_SONNET_MODEL_NAME": "agnes-2.0-flash",
"CLAUDE_CODE_EFFORT_LEVEL": "max",
"CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS": "1",
"DISABLE_AUTOUPDATER": "1",
"ENABLE_TOOL_SEARCH": "true",
"MAX_OUTPUT_TOKENS": 50000
},
"litellm_settings": {
"drop_params": true
}
}
配置说明:
ANTHROPIC_AUTH_TOKEN: "PROXY_MANAGED":CC-Switch 标准鉴权写法,由代理统一管理后端 API Key- 模型映射配置:把 Claude 原生的三个档位,全部映射到
agnes-2.0-flash模型,切换档位不会报错 MAX_OUTPUT_TOKENS: 50000:限制最大输出 token,避免上下文超限报错(后面会详细讲)
按 Ctrl+O 回车保存,Ctrl+X 退出编辑器。
4.3.2 关键操作:给配置文件加只读锁
这是跨系统场景独有的坑!
如果你不小心在 WSL 里执行了 cc-switch claude bind,它会自动把 ANTHROPIC_BASE_URL 覆盖成 127.0.0.1:15721,直接导致连接失败。
一劳永逸的解决办法:给配置文件加只读权限
chmod 444 ~/.claude/settings.json
加锁后,任何程序、任何命令都无法修改这个配置文件,彻底杜绝被覆盖的问题。
后续如果需要手动修改配置,先执行解锁命令:
chmod 644 ~/.claude/settings.json
4.3.3 测试使用
新开一个 WSL 终端(确保配置加载生效),执行:
claude
进入 Claude Code 交互界面后,随便发一句话测试:
你好,请介绍一下你自己
能正常收到回复,同时在 Windows CC-Switch 后台能看到请求日志和 Token 消耗,就说明整条链路完全跑通了!
看着模型是Opus 4.8,但实际是 agnes-2.0-flash 模型
token实际消耗为0
五、终极优化:解决 WSL IP 漂移问题
现在还有最后一个痛点:WSL2 每次重启后,Windows 网关 IP 都会变化,win-proxy 域名就失效了,每次都要手动改 hosts,非常麻烦。
我们写一个自动脚本,每次打开 WSL 终端,自动检测并更新域名对应的 IP,完全无感适配。
5.1 配置自动更新脚本
编辑你的 bash 配置文件:
vim ~/.bashrc
拉到文件最末尾,追加以下代码:
# ============== CC-Switch 代理自动适配 ==============
# 自动更新 win-proxy 域名指向 Windows 网关IP
update_win_proxy_host() {
local GW_IP=$(ip route | grep default | awk '{print $3}')
# 网关IP为空则跳过
if [[ -z "$GW_IP" ]]; then
return 0
fi
# 更新hosts文件
if grep -q "win-proxy" /etc/hosts; then
sudo sed -i "/win-proxy$/c\\${GW_IP} win-proxy" /etc/hosts
else
echo "${GW_IP} win-proxy" | sudo tee -a /etc/hosts
fi
}
# 兜底检查:如果代理地址被篡改,自动修正为域名
check_claude_proxy_config() {
local cfg_file="$HOME/.claude/settings.json"
local correct_url='"ANTHROPIC_BASE_URL": "http://win-proxy:15721"'
if [[ -f "$cfg_file" ]] && ! grep -q "$correct_url" "$cfg_file"; then
sed -i 's|"ANTHROPIC_BASE_URL": ".*"|"ANTHROPIC_BASE_URL": "http://win-proxy:15721"|' "$cfg_file"
fi
}
# 终端启动时自动执行
update_win_proxy_host &>/dev/null
check_claude_proxy_config &>/dev/null
# ====================================================
5.2 免密 sudo 配置(可选)
因为修改 /etc/hosts 需要 sudo 权限,为了完全无感,可以配置免密:
执行命令:
sudo visudo
在文件末尾追加一行(替换成你的用户名):
你的用户名 ALL=(ALL) NOPASSWD: /usr/bin/sed -i /*win-proxy*/ /etc/hosts, /usr/bin/tee -a /etc/hosts
保存退出后,脚本执行就不需要输入密码了,完全无感。
5.3 生效验证
执行命令重载配置:
source ~/.bashrc
现在无论 WSL 怎么重启,每次打开终端都会自动更新域名解析,永久不用手动改 IP。
六、常见踩坑与排查指南
6.1 WSL 一直连不上代理端口
- 90% 原因:CC-Switch 路由监听地址还是
127.0.0.1,没改成0.0.0.0 - 其次原因:Windows 防火墙没放行对应端口,可以临时关闭防火墙测试验证
- 少见原因:IP 地址搞错了,重新执行
ip route | grep default确认网关
6.2 配置总被自动改回 127.0.0.1
- 原因:执行了
cc-switch claude bind命令,跨系统场景下这个命令会写错地址 - 解决:配置文件加只读锁(
chmod 444),永远不要再执行这个绑定命令
6.3 报错 ContextWindowExceeded 上下文超限
- 原因:Agnes-2.0-Flash 总上下文上限 262144 tokens,输入+输出超过上限
- 快速解决:执行
/clear清空当前会话 - 根治方案:配置里加
MAX_OUTPUT_TOKENS限制输出长度,预留足够输入空间 - 优化习惯:大项目用
/exclude排除无用文件,不要一次性加载整个巨型代码库
6.4 API 报错格式不匹配
- 原因:添加供应商时,API 格式选错成了 Anthropic 原生
- 解决:改成
OpenAI Chat Completions (需开启路由),保存重启路由即可
七、方案优势与总结
7.1 为什么选择跨系统部署方案?
很多人会问:为什么不直接把 CC-Switch 装在 WSL 里?
- 管理更方便:Windows 端有图形化界面,加模型、看日志、切配置更直观
- 环境隔离:代理服务和开发环境分离,WSL 折腾坏了不影响代理配置
- 复用性强:Windows 上的 CC-Switch 可以同时给 WSL、本机软件、其他设备提供代理服务
- 更稳定:Windows 端服务常驻,WSL 重启不影响代理运行
7.2 写在最后
这整套方案,是我对着官方文档和零散教程踩了两天坑才摸透的。网上所有教程都只讲了最简单的同系统部署,完全没人提跨系统的网络隔离、配置覆盖、IP 漂移这些真实痛点。
如果你也是「Windows + WSL2」的开发环境,想用国内大模型低成本替代 Claude 官方接口,这篇文章应该能帮你省下大量踩坑时间。如果有帮助,欢迎点赞收藏,有问题评论区交流~
🔔 更多硬核内容,关@注【棱镜变量】
这篇万字踩坑指南只是冰山一角。在【棱镜变量】,我持续分享:
🛠️ AI 工具链实战:像本文一样,只写官方文档没讲的真实坑点
🧠 认知与商业拆解:AI 时代普通人如何抓住变量红利
💬 每月群内答疑:加入读者群,技术问题直接找我聊
长按识别,和一群务实的开发者一起成长。
本文原创发布于 CSDN,转载请注明出处。作者:夜柒朔 | 棱镜变量。
更多推荐



所有评论(0)