动态代理
本文介绍如何使用 XTerminal 配置动态端口转发(SOCKS5 代理),实现通过 SSH 隧道进行网络代理。
工作原理
动态转发(Dynamic Forwarding)在本机开启一个 SOCKS5 代理服务器,所有通过该代理的网络流量都会经由 SSH 隧道加密传输,从 SSH 服务器出口访问目标。
本机应用 --> SOCKS5 代理 127.0.0.1:1080 --> [SSH 加密隧道] --> SSH 服务器 --> 目标网站
等效命令行:
ssh -D [本机地址:]本机端口 user@server
与本地/远程转发的区别
| 特性 | 动态代理 | 本地/远程转发 |
|---|---|---|
| 目标地址 | 动态指定 | 固定 |
| 协议 | SOCKS5 | TCP 端口映射 |
| 配置复杂度 | 只需配置代理端口 | 需要指定远端目标 |
| 适用场景 | 通用代理上网 | 访问特定服务 |
使用场景
| 场景 | 说明 |
|---|---|
| 浏览器代理 | 通过服务器网络访问网站 |
| 命令行工具代理 | curl、wget、git 等工具走代理 |
| 开发测试 | 测试不同地区的网络访问 |
| 安全上网 | 在不安全网络环境下加密所有流量 |
配置步骤
1. 进入隧道管理
点击顶部导航栏的隧道标签,进入端口转发管理页面。
2. 新建转发规则
点击**+ 隧道**按钮,打开创建窗口。
3. 选择动态代理类型
在类型选项中选择动态代理(SOCKS)。

4. 填写配置信息
| 字段 | 说明 | 示例 |
|---|---|---|
| 分组 | 可选,选择所属分组 | 代理 |
| 名称 | 转发规则名称 | SOCKS5 代理 |
| 服务器 | 选择 SSH 服务器 | 代理服务器 |
| 本机监听地址 | 本机监听的 IP 地址 | 127.0.0.1 |
| 本机端口 | 本机监听的端口号 | 1080 |
配置说明:
- 本机监听地址:通常填
127.0.0.1;如需让局域网其他设备使用代理,可填0.0.0.0 - 本机端口:SOCKS5 代理的常用端口是 1080,也可以使用其他未被占用的端口
5. 保存并启动
- 点击创建按钮保存配置
- 在列表中找到新建的规则
- 点击开始转发按钮启动代理
快速填充
创建时可以使用快速填充模板:
- 动态代理: SOCKS5 1080:快速配置标准 SOCKS5 代理
点击模板按钮后会自动填充常用配置值。
客户端代理配置
启动动态代理后,需要在客户端应用中配置代理才能使用。
浏览器配置
Chrome
Chrome 使用系统代理设置,或使用扩展程序配置:
- 安装 SwitchyOmega 等代理管理扩展
- 新建代理配置:
- 代理协议:SOCKS5
- 代理服务器:127.0.0.1
- 代理端口:1080
- 启用该代理配置
Firefox
- 打开设置 > 网络设置 > 设置
- 选择手动代理配置
- 填写 SOCKS 主机:
127.0.0.1,端口:1080 - 选择 SOCKS v5
- 勾选使用 SOCKS v5 时代理 DNS
Safari
Safari 使用系统代理设置。
系统代理配置
macOS
- 打开系统偏好设置 > 网络
- 选择当前网络连接 > 高级 > 代理
- 勾选 SOCKS 代理
- 填写:
127.0.0.1:1080
Windows
- 打开设置 > 网络和 Internet > 代理
- 在手动代理设置中开启代理
- 填写地址:
127.0.0.1,端口:1080
Windows 系统代理不直接支持 SOCKS5,建议使用第三方工具或浏览器扩展。
Linux
大多数 Linux 桌面环境在网络设置中可以配置 SOCKS 代理。
GNOME:
- 打开设置 > 网络 > 网络代理
- 选择手动
- 填写 Socks 主机:
127.0.0.1,端口:1080
命令行工具配置
curl
# 使用 -x 参数指定代理
curl -x socks5://127.0.0.1:1080 https://example.com
# 或设置环境变量
export ALL_PROXY=socks5://127.0.0.1:1080
curl https://example.com
wget
# 在 ~/.wgetrc 中添加
use_proxy = on
http_proxy = socks5://127.0.0.1:1080
https_proxy = socks5://127.0.0.1:1080
git
# 设置 HTTP/HTTPS 代理
git config --global http.proxy socks5://127.0.0.1:1080
git config --global https.proxy socks5://127.0.0.1:1080
# 取消代理
git config --global --unset http.proxy
git config --global --unset https.proxy
npm
# 设置代理
npm config set proxy socks5://127.0.0.1:1080
npm config set https-proxy socks5://127.0.0.1:1080
# 取消代理
npm config delete proxy
npm config delete https-proxy
pip
# 临时使用代理
pip install --proxy socks5://127.0.0.1:1080 package_name
# 或设置环境变量
export ALL_PROXY=socks5://127.0.0.1:1080
pip install package_name
环境变量(通用)
设置环境变量可以让大多数命令行工具自动使用代理:
# Linux / macOS
export http_proxy=socks5://127.0.0.1:1080
export https_proxy=socks5://127.0.0.1:1080
export ALL_PROXY=socks5://127.0.0.1:1080
# 取消代理
unset http_proxy https_proxy ALL_PROXY
# Windows PowerShell
$env:http_proxy = "socks5://127.0.0.1:1080"
$env:https_proxy = "socks5://127.0.0.1:1080"
$env:ALL_PROXY = "socks5://127.0.0.1:1080"
验证代理是否生效
方法一:curl 测试
# 不使用代理
curl https://httpbin.org/ip
# 使用代理
curl -x socks5://127.0.0.1:1080 https://httpbin.org/ip
如果代理生效,两次返回的 IP 地址应该不同。
方法二:浏览器测试
配置浏览器代理后,访问 IP 查询网站(如 whatismyip.com),显示的 IP 应为 SSH 服务器的出口 IP。
常见问题
代理无法连接
问题:配置代理后无法访问网络。
排查步骤:
- 确认动态代理已启动(按钮显示"停止转发")
- 检查本机端口是否正确(如 1080)
- 检查客户端代理配置是否正确
- 确认 SSH 服务器可以正常访问外网
部分网站无法访问
问题:代理生效,但某些网站访问失败。
可能原因:
- SSH 服务器无法访问该网站
- 网站检测并阻止了代理访问
- DNS 解析问题
解决方案:
- 在浏览器代理设置中启用"代理 DNS"
- 或在环境变量中额外设置
no_proxy排除特定域名
速度较慢
问题:通过代理访问网络速度明显下降。
原因:流量需要经过 SSH 服务器中转,延迟增加。
优化建议:
- 选择延迟较低的 SSH 服务器
- 使用地理位置更近的服务器
- 检查服务器带宽是否充足
DNS 泄露
问题:使用代理但 DNS 请求没有走代理。
解决方案:
- 浏览器配置中启用"使用 SOCKS v5 时代理 DNS"
- 使用
socks5h://协议(h 表示由代理服务器解析 DNS)
curl -x socks5h://127.0.0.1:1080 https://example.com
安全建议
- 监听地址:本机监听地址使用
127.0.0.1,避免暴露给局域网 - 选择可信服务器:代理流量会经过 SSH 服务器,确保服务器可信
- HTTPS 优先:即使使用代理,也应优先访问 HTTPS 网站
- 及时关闭:不需要代理时及时停止,避免流量被无意间代理