Debian 服务器通过 tinyproxy 出网
1. 场景说明
在受限网络环境中,部分服务器 无法直连公网,只能通过一台具备公网访问能力的服务器作为 HTTP 代理网关 出网。本文档记录了使用 tinyproxy 实现该方案的完整流程、常见问题及排查方法。
适用场景:
- 内网服务器无公网路由
- 仅允许 HTTP/HTTPS 代理出网
- 运维、CI、Node/npm、apt 等需要访问公网
2. 网络拓扑示意
3. tinyproxy 安装与配置(代理服务器)
3.1 安装 tinyproxy
|
1 2 |
apt update apt install tinyproxy |
确认版本:
|
1 |
tinyproxy -v |
3.2 核心配置文件
配置文件路径:
|
1 |
/etc/tinyproxy/tinyproxy.conf |
必须关注的关键配置项:
|
1 2 3 4 5 6 7 8 |
# 监听地址(必须允许外部访问) Listen 0.0.0.0 # 监听端口(默认 8888) Port 8888 # 访问控制(ACL) Allow 192.168.1.0/24 |
⚠️ 注意:
- tinyproxy 默认拒绝所有非本机访问
- 没有 Allow = 全部拒绝(403 Access denied)
调试阶段可临时使用:
|
1 |
Allow 0.0.0.0/0 |
(生产环境务必收紧)
3.3 启动与验证
|
1 2 |
systemctl restart tinyproxy systemctl status tinyproxy |
确认端口监听:
|
1 |
ss -lntp | grep 8888 |
4. 客户端(Debian)代理配置
4.1 设置代理环境变量
|
1 2 3 4 |
export HTTP_PROXY="http://192.168.1.1:8888" export HTTPS_PROXY="http://192.168.1.1:8888" export http_proxy="$HTTP_PROXY" export https_proxy="$HTTPS_PROXY" |
⚠️ 必须带 http:// 前缀
4.2 测试代理连通性
|
1 |
curl -v -x http://192.168.1.1:8888 http://www.baidu.com |
成功标志:
|
1 2 |
HTTP/1.1 200 OK Via: 1.1 tinyproxy |
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
|
1 |
nameserver 192.168.1.1 |
6. apt 代理配置(永久生效)
vi /etc/apt/apt.conf.d/95proxy
|
1 2 |
Acquire::http::Proxy "http://192.168.1.1:8888"; Acquire::https::Proxy "http://192.168.1.1:8888"; |
测试:
|
1 |
apt update |
7. 常见问题与排查对照表
| 问题表现 | 根因 | 解决方案 |
| ping 不通 | ICMP 不走代理 | 正常现象,忽略 |
| 403 Access denied | tinyproxy 未 Allow | 配置 Allow |
| curl 直连失败 | 无公网路由 | 使用代理 |
| curl 域名失败 | DNS 不通 | 修 resolv.conf |
| apt 部分成功 | 缓存 + DNS 差异 | 修 DNS |
| npm install 失败 | DNS 解析失败 | 修 DNS |
8. 正确的网络验证方式
✅ 推荐:
|
1 2 |
curl https://www.baidu.com apt update |
9. 安全与运维注意事项
- 不要开放公网 8888
- ACL 必须限制内网段
- 定期查看代理日志:
1tail -f /var/log/tinyproxy/tinyproxy.log - 不建议长期使用 Allow 0.0.0.0/0
- 记录代理地址,避免后期排障困难
10. 解除代理配置(不再需要代理时)
当服务器后续 恢复直连公网 或 不再需要通过 tinyproxy 出网 时,必须完整解除代理相关配置,否则容易出现访问异常、速度慢、莫名超时等问题。
10.1 解除当前 Shell 会话中的代理
|
1 |
unset HTTP_PROXY HTTPS_PROXY http_proxy https_proxy |
验证:
|
1 |
env | grep -i proxy |
(无输出即为成功)
10.2 移除 bash 启动时自动加载的代理
如果之前将代理写入以下文件之一,需要删除对应行:
- /root/.bashrc
- /root/.profile
- /etc/profile
示例:
|
1 |
vim /root/.bashrc |
删除:
|
1 2 |
export HTTP_PROXY=... export HTTPS_PROXY=... |
10.3 解除 apt 代理配置
删除或清空代理配置文件:
|
1 |
rm -f /etc/apt/apt.conf.d/95proxy |
或注释内容:
|
1 2 |
#Acquire::http::Proxy "http://192.168.1.1:8888"; #Acquire::https::Proxy "http://192.168.1.1:8888"; |
验证:
|
1 |
apt update |
10.4 解除 npm / node 代理
|
1 2 |
npm config delete proxy npm config delete https-proxy |
验证:
|
1 2 |
npm config get proxy npm config get https-proxy |
(返回 null 或空即为成功)
10.5 恢复 DNS 为直连环境
如果之前将 DNS 指向代理服务器,需要恢复为正常 DNS:
|
1 |
vim /etc/resolv.conf |
示例:
删除或注释配置的dns行:
|
1 |
#nameserver 192.168.1.1 |
10.6 验证是否已完全解除代理
|
1 2 |
curl https://www.baidu.com apt update |
确认以下现象:
- curl 未显示 Via: tinyproxy
- apt 不再访问代理 IP
- DNS 正常解析公网域名
10.7 常见“未彻底解除”的坑
| 现象 | 原因 | 处理 |
| curl 很慢 | 环境变量未清 | unset proxy |
| apt 走代理 | apt.conf 未删 | 删除 95proxy |
| npm 超时 | npm 代理残留 | npm config delete |
| 域名异常 | DNS 仍指向代理 | 修 resolv.conf |