VPN 与代理

SOCKS 代理

约 4 分钟阅读

什么是 SOCKS 代理

SOCKS(Socket Secure)代理是一种在 TCP/UDP 层面中继通信的通用代理服务器。HTTP 代理仅中继浏览器的 Web 通信,而 SOCKS 代理可以不分协议地中继任何应用的通信。

SOCKS 代理不解释应用层数据,只是简单地转发数据包。因此它具有处理 HTTP 以外协议的灵活性,包括邮件(SMTP/IMAP)、文件传输(FTP)、SSH 和 P2P 通信。

SOCKS4 / SOCKS4a / SOCKS5 的区别

SOCKS4(1996)
仅支持 TCP。无认证。仅 IPv4。客户端需预先解析 DNS 并以 IP 地址指定目标,DNS 请求直接发送到运营商 DNS 服务器而不经过代理,导致 DNS 泄漏
SOCKS4a
SOCKS4 的扩展。可以域名指定目标,DNS 解析在代理服务器端执行,降低 DNS 泄漏风险。但 TCP 限制和无认证与 SOCKS4 相同。曾用于 Tor 的早期实现。
SOCKS5(RFC 1928,1996)
支持 TCP 和 UDP。支持用户名/密码认证(RFC 1929)和 GSSAPI 认证。兼容 IPv6。可在代理端执行 DNS 解析。支持 IPv4 地址、IPv6 地址和域名三种目标指定方式。当前的事实标准。

实务中应选择 SOCKS5。UDP 支持使其能中继 DNS 查询、VoIP、流媒体等实时通信。

SSH 动态端口转发

搭建 SOCKS 代理最简便的方法是 SSH 动态端口转发。只要有远程服务器的 SSH 访问权限,无需额外软件即可创建加密的 SOCKS5 代理。

ssh -D 1080 -N -f user@remote-server

此命令在本地端口 1080 启动 SOCKS5 代理。-N 表示不执行远程命令,-f 在后台运行。然后只需在浏览器或应用中将 localhost:1080 设为 SOCKS5 代理即可。

这种方式的优点是客户端与远程服务器之间的通信由 SSH 加密。普通 SOCKS 代理不加密通信,但在 SSH 隧道上运行可以在咖啡馆公共 Wi-Fi 等不可信网络上安全通信。

实际应用场景

  • Tor 网络:Tor 在本地启动 SOCKS5 代理(通常端口 9050),将应用流量导入 Tor 线路。Tor 浏览器以外的应用(curl、wget 等)也可通过 --socks5-hostname localhost:9050 使用 Tor。
  • 穿越企业防火墙:当专有协议流量无法通过 HTTP 代理时,可通过 SOCKS 代理路由到外部。
  • 按应用代理VPN 转发操作系统全部流量,而 SOCKS 代理可以仅将特定应用通过代理。可以仅让浏览器走代理,其他应用直连。
  • 开发与测试:模拟来自特定国家或地区的访问时,通过该地区的 SOCKS 代理连接。

公开 SOCKS 代理的风险

SOCKS 代理本身不加密通信。你与代理服务器之间的通信以明文传输,使用不可信的代理有通信被截获的风险。

互联网上有大量免费 SOCKS 代理列表,但使用它们极其危险。具体风险包括:

  • 通信截获:非 HTTPS 通信的内容(登录凭据、邮件正文等)对代理运营者完全可见
  • 中间人攻击:即使是 HTTPS 通信,代理也可能注入伪造证书来解密通信
  • 恶意软件注入:HTTP 响应中可能被注入恶意 JavaScript 或重定向
  • 蜜罐:执法机构或攻击者可能故意运营公开代理来监控用户通信

专业用途应自行搭建(SSH 隧道最简便)或使用可信提供商的服务。

常见误解

使用 SOCKS 代理就能加密通信
SOCKS 代理只是中继数据包,没有加密功能。需要加密时必须与 SSH 隧道或 VPN 配合使用。
SOCKS 代理可以替代 VPN
SOCKS 代理仅中继特定应用的通信。不像 VPN 那样在操作系统级别保护所有通信,未配置的应用流量会直接连接互联网。

SOCKS 代理与 HTTP 代理的区别

SOCKS 代理

不依赖协议,中继 TCP/UDP。支持 HTTP 以外的通信(SSH、FTP、P2P 等)。不解释数据内容。

HTTP 代理

仅中继 HTTP/HTTPS 通信。可改写请求头和缓存内容。专用于 Web 浏览。

分享

相关术语