跳到主要内容

动态代理

本文介绍如何使用 XTerminal 配置动态端口转发(SOCKS5 代理),实现通过 SSH 隧道进行网络代理。

工作原理

动态转发(Dynamic Forwarding)在本机开启一个 SOCKS5 代理服务器,所有通过该代理的网络流量都会经由 SSH 隧道加密传输,从 SSH 服务器出口访问目标。

本机应用  -->  SOCKS5 代理 127.0.0.1:1080  -->  [SSH 加密隧道]  -->  SSH 服务器  -->  目标网站

等效命令行:

ssh -D [本机地址:]本机端口 user@server

与本地/远程转发的区别

特性动态代理本地/远程转发
目标地址动态指定固定
协议SOCKS5TCP 端口映射
配置复杂度只需配置代理端口需要指定远端目标
适用场景通用代理上网访问特定服务

使用场景

场景说明
浏览器代理通过服务器网络访问网站
命令行工具代理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. 保存并启动

  1. 点击创建按钮保存配置
  2. 在列表中找到新建的规则
  3. 点击开始转发按钮启动代理

快速填充

创建时可以使用快速填充模板:

  • 动态代理: SOCKS5 1080:快速配置标准 SOCKS5 代理

点击模板按钮后会自动填充常用配置值。

客户端代理配置

启动动态代理后,需要在客户端应用中配置代理才能使用。

浏览器配置

Chrome

Chrome 使用系统代理设置,或使用扩展程序配置:

  1. 安装 SwitchyOmega 等代理管理扩展
  2. 新建代理配置:
    • 代理协议:SOCKS5
    • 代理服务器:127.0.0.1
    • 代理端口:1080
  3. 启用该代理配置

Firefox

  1. 打开设置 > 网络设置 > 设置
  2. 选择手动代理配置
  3. 填写 SOCKS 主机:127.0.0.1,端口:1080
  4. 选择 SOCKS v5
  5. 勾选使用 SOCKS v5 时代理 DNS

Safari

Safari 使用系统代理设置。

系统代理配置

macOS

  1. 打开系统偏好设置 > 网络
  2. 选择当前网络连接 > 高级 > 代理
  3. 勾选 SOCKS 代理
  4. 填写:127.0.0.1:1080

Windows

  1. 打开设置 > 网络和 Internet > 代理
  2. 手动代理设置中开启代理
  3. 填写地址:127.0.0.1,端口:1080

Windows 系统代理不直接支持 SOCKS5,建议使用第三方工具或浏览器扩展。

Linux

大多数 Linux 桌面环境在网络设置中可以配置 SOCKS 代理。

GNOME:

  1. 打开设置 > 网络 > 网络代理
  2. 选择手动
  3. 填写 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。

常见问题

代理无法连接

问题:配置代理后无法访问网络。

排查步骤

  1. 确认动态代理已启动(按钮显示"停止转发")
  2. 检查本机端口是否正确(如 1080)
  3. 检查客户端代理配置是否正确
  4. 确认 SSH 服务器可以正常访问外网

部分网站无法访问

问题:代理生效,但某些网站访问失败。

可能原因

  1. SSH 服务器无法访问该网站
  2. 网站检测并阻止了代理访问
  3. DNS 解析问题

解决方案

  1. 在浏览器代理设置中启用"代理 DNS"
  2. 或在环境变量中额外设置 no_proxy 排除特定域名

速度较慢

问题:通过代理访问网络速度明显下降。

原因:流量需要经过 SSH 服务器中转,延迟增加。

优化建议

  1. 选择延迟较低的 SSH 服务器
  2. 使用地理位置更近的服务器
  3. 检查服务器带宽是否充足

DNS 泄露

问题:使用代理但 DNS 请求没有走代理。

解决方案

  1. 浏览器配置中启用"使用 SOCKS v5 时代理 DNS"
  2. 使用 socks5h:// 协议(h 表示由代理服务器解析 DNS)
curl -x socks5h://127.0.0.1:1080 https://example.com

安全建议

  1. 监听地址:本机监听地址使用 127.0.0.1,避免暴露给局域网
  2. 选择可信服务器:代理流量会经过 SSH 服务器,确保服务器可信
  3. HTTPS 优先:即使使用代理,也应优先访问 HTTPS 网站
  4. 及时关闭:不需要代理时及时停止,避免流量被无意间代理

下一步