纯内网环境使用Claude Code的完美解决方案:通过HTTP代理“欺骗”验证

1. 背景与问题描述

最近很多小伙伴在公司内网开发时,想要使用强大的claude-code工具,但却遇到了一个棘手的问题:

公司内网机器完全隔离,无法访问外网。 虽然我们知道可以通过设置 ANTHROPIC_BASE_URL 环境变量来指向内网的DeepSeek等服务,但 claude-code 仍然会报错 “request time” 或连接失败。

经过分析和测试,发现根本原因是:claude-code 在启动时会进行网络连通性检查,即使你配置了内网API地址,这个预检查失败也会导致程序无法正常使用。

2. 解决方案核心思路

既然claude-code一定要检查网络,那我们就"欺骗"它一下:

在本地启动一个HTTP代理,让claude-code的网络检查请求通过这个代理,但实际上代理会将请求重定向到我们的内网API服务。

这样:

  • claude-code 认为自己有网络(因为检查通过了)
  • 实际的所有API请求都被代理转发到了内网的DeepSeek等服务
  • 完美实现纯内网环境使用

3. 环境准备

在开始之前,请确保你已经准备好:

  • claude-code 已安装
  • 内网可访问的AI API服务(如DeepSeek API)
  • 一个简单的HTTP代理工具

4. 实施步骤

4.1 启动HTTP代理

这里我们使用 pproxy 作为代理工具,你也可以使用其他任何HTTP代理。

# 安装pproxy(如果尚未安装)
pip install pproxy

# 启动一个本地HTTP代理,端口8899
pproxy -l http://127.0.0.1:8899

这个代理会监听本地的8899端口,将所有经过它的请求转发到目标地址。

4.2 配置并启动Claude Code

使用以下完整的启动命令:

export ANTHROPIC_BASE_URL=http://localhost:3456 \
&& export ANTHROPIC_AUTH_TOKEN=1 \
&& export CLAUDE_CODE_MAX_OUTPUT_TOKENS=64000 \
&& export HTTPS_PROXY=http://127.0.0.1:8899 \
&& export HTTP_PROXY=http://127.0.0.1:8899 \
&& export NO_PROXY="localhost example.com .example.com" \
&& claude

4.3 命令参数详解

让我们逐个分析这些环境变量的作用:

  • ANTHROPIC_BASE_URL=http://localhost:3456
    指定Claude Code实际要连接的内网API地址(这里假设你的内网服务在3456端口)

  • ANTHROPIC_AUTH_TOKEN=1
    认证令牌,根据你的内网服务要求设置

  • CLAUDE_CODE_MAX_OUTPUT_TOKENS=64000
    设置最大输出token数,可根据需要调整

  • HTTPS_PROXY=http://127.0.0.1:8899
    设置HTTPS流量走我们的本地代理

  • HTTP_PROXY=http://127.0.0.1:8899
    设置HTTP流量走我们的本地代理

  • NO_PROXY="localhost example.com .example.com"
    设置不需要代理的地址,避免代理循环

5. 完整工作流程

5.1 方案架构图

claude-code 
    ↓ (请求经过代理)
HTTP代理 (localhost:8899) 
    ↓ (请求被重定向)
内网API服务 (localhost:3456或你的内网地址)
    ↓
DeepSeek等AI服务

5.2 实际操作流程

  1. 首先启动代理服务:

    # 终端1 - 启动代理
    pproxy -l http://127.0.0.1:8899
    
  2. 然后在新终端中启动Claude Code:

    # 终端2 - 启动Claude Code
    export ANTHROPIC_BASE_URL=http://你的内网API地址:端口 \
    && export ANTHROPIC_AUTH_TOKEN=你的令牌 \
    && export HTTPS_PROXY=http://127.0.0.1:8899 \
    && export HTTP_PROXY=http://127.0.0.1:8899 \
    && claude
    
  3. 验证是否正常工作:

    • 在Claude Code中尝试一些代码操作
    • 观察代理终端的日志,确认有请求经过
    • 检查是否能够正常获得AI响应

6. 进阶配置

6.1 使用squid等专业代理

如果你有更复杂的代理需求,可以使用squid:

# 安装squid
sudo apt-get install squid

# 配置squid(/etc/squid/squid.conf)
http_port 3128
visible_hostname squid-proxy

# 启动squid
sudo systemctl start squid

# 然后设置环境变量
export HTTP_PROXY=http://localhost:3128
export HTTPS_PROXY=http://localhost:3128

6.2 编写启动脚本

为了方便使用,可以创建一个启动脚本 start_claude.sh:

#!/bin/bash

# 设置环境变量
export ANTHROPIC_BASE_URL=http://localhost:3456
export ANTHROPIC_AUTH_TOKEN=1
export CLAUDE_CODE_MAX_OUTPUT_TOKENS=64000
export HTTPS_PROXY=http://127.0.0.1:8899
export HTTP_PROXY=http://127.0.0.1:8899
export NO_PROXY="localhost,127.0.0.1"

echo "启动Claude Code(内网模式)..."
claude

给脚本执行权限:

chmod +x start_claude.sh
./start_claude.sh

7. 故障排除

7.1 常见问题及解决

Q1: 仍然提示网络错误

  • 检查代理是否正常启动:curl -x http://127.0.0.1:8899 http://www.example.com
  • 确认代理端口没有被占用

Q2: 连接超时

  • 检查 ANTHROPIC_BASE_URL 是否正确指向可用的内网服务
  • 确认内网API服务正常运行

Q3: 认证失败

  • 检查 ANTHROPIC_AUTH_TOKEN 是否设置正确
  • 确认内网服务的认证方式

7.2 调试技巧

启用详细日志输出:

export DEBUG=*
export NODE_DEBUG=net,http,https

然后重新启动Claude Code查看详细日志。

8. 总结

通过这种"欺骗"网络检查的方法,我们成功在纯内网环境中使用了Claude Code。这种方法的关键在于:

  1. 理解问题根源:Claude Code的网络连通性检查
  2. 巧妙利用代理:通过本地代理"证明"有网络
  3. 正确配置环境:确保所有流量都经过代理转发到正确目标

这种方法不仅适用于Claude Code,对于其他有类似网络检查需求的工具也同样有效。

希望这篇文档能帮助到在内网环境下奋斗的开发者们!如果有任何问题,欢迎在评论区讨论。


标签: #内网开发 #ClaudeCode #HTTP代理 #DeepSeek #开发工具技巧

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐