1. 场景说明

在受限网络环境中,部分服务器 无法直连公网,只能通过一台具备公网访问能力的服务器作为 HTTP 代理网关 出网。本文档记录了使用 tinyproxy 实现该方案的完整流程、常见问题及排查方法。

适用场景:

  • 内网服务器无公网路由
  • 仅允许 HTTP/HTTPS 代理出网
  • 运维、CI、Node/npm、apt 等需要访问公网

2. 网络拓扑示意

[ 内网服务器 Debian ]
    (无公网 / ping 不通)
        |
        | HTTP_PROXY / HTTPS_PROXY
        v
[ tinyproxy 代理服务器 ] 192.168.1.1:8888
       |
       v
       Internet

3. tinyproxy 安装与配置(代理服务器)

3.1 安装 tinyproxy

确认版本:

3.2 核心配置文件

配置文件路径:

必须关注的关键配置项:

⚠️ 注意:

  • tinyproxy 默认拒绝所有非本机访问
  • 没有 Allow = 全部拒绝(403 Access denied)

调试阶段可临时使用:

(生产环境务必收紧)

3.3 启动与验证

确认端口监听:

4. 客户端(Debian)代理配置

4.1 设置代理环境变量

⚠️ 必须带 http:// 前缀

4.2 测试代理连通性

成功标志:

5. DNS 问题(最常见、最致命)

5.1 现象

  • curl https://xxx 报错:Could not resolve host
  • apt update 偶尔成功,脚本失败
  • npm / NodeSource / git clone 失败

5.2 原因

HTTP 代理不负责 DNS

多数工具流程为:

DNS 解析(本机) → 再通过代理发起连接

DNS 不通 → 代理根本不会被使用

5.3 解决方案(推荐)

使用代理服务器作为 DNS:

vi /etc/resolv.conf

6. apt 代理配置(永久生效)

vi /etc/apt/apt.conf.d/95proxy

测试:

7. 常见问题与排查对照表

问题表现 根因 解决方案
ping 不通 ICMP 不走代理 正常现象,忽略
403 Access denied tinyproxy 未 Allow 配置 Allow
curl 直连失败 无公网路由 使用代理
curl 域名失败 DNS 不通 修 resolv.conf
apt 部分成功 缓存 + DNS 差异 修 DNS
npm install 失败 DNS 解析失败 修 DNS

8. 正确的网络验证方式

✅ 推荐:

9. 安全与运维注意事项

  • 不要开放公网 8888
  • ACL 必须限制内网段
  • 定期查看代理日志:
  • 不建议长期使用 Allow 0.0.0.0/0
  • 记录代理地址,避免后期排障困难

10. 解除代理配置(不再需要代理时)

当服务器后续 恢复直连公网不再需要通过 tinyproxy 出网 时,必须完整解除代理相关配置,否则容易出现访问异常、速度慢、莫名超时等问题。

10.1 解除当前 Shell 会话中的代理

验证:

(无输出即为成功)

10.2 移除 bash 启动时自动加载的代理

如果之前将代理写入以下文件之一,需要删除对应行:

  • /root/.bashrc
  • /root/.profile
  • /etc/profile

示例:

删除:

10.3 解除 apt 代理配置

删除或清空代理配置文件:

或注释内容:

验证:

10.4 解除 npm / node 代理

验证:

(返回 null 或空即为成功)

10.5 恢复 DNS 为直连环境

如果之前将 DNS 指向代理服务器,需要恢复为正常 DNS:

示例:

删除或注释配置的dns行:

10.6 验证是否已完全解除代理

确认以下现象:

  • curl 未显示 Via: tinyproxy
  • apt 不再访问代理 IP
  • DNS 正常解析公网域名

10.7 常见“未彻底解除”的坑

现象 原因 处理
curl 很慢 环境变量未清 unset proxy
apt 走代理 apt.conf 未删 删除 95proxy
npm 超时 npm 代理残留 npm config delete
域名异常 DNS 仍指向代理 修 resolv.conf