Skip to content

SOCKS5 和 SOCKS5 over TLS

iPhone 版 Potatso 支持的 SOCKS5 和 SOCKS5 over TLS 选项、链接和功能,包括用户名密码认证、UDP 转发和证书固定。

Updated 以 Markdown 查看

SOCKS5 服务器为你建立连接并转发 UDP,可以有用户名和密码,也可以没有(RFC 1928)。SOCKS5 over TLS 是通过 TLS 访问的同一种服务器,因此与服务器之间的连接也是加密的。

Potatso 会把你访问的网站名称(而不是地址)发给服务器,由服务器去解析这个名称。其他 App 把这称为 socks5h 或远程 DNS。

你可以手动添加 SOCKS5 服务器、通过 socks5:// 链接添加,或通过导入添加:

  • Clash 或 Mihomo 订阅(type: socks5),
  • Surge 配置(socks5 和 socks5-tls),
  • Xray 或 V2Ray 配置(socks 出站,可带或不带 TLS)。

手动添加 SOCKS5 over TLS 服务器时,请选择 SOCKS5 并开启 TLS。

设置

设置 说明
服务器、端口 服务器的地址和端口。也可以使用 IPv6 地址。
认证 无,或用户名和密码。
用户名、密码 各自最长 255 字节。
UDP 转发 默认开启。见 UDP。
TLS SOCKS5 over TLS 需开启。
跳过证书验证 仅限 SOCKS5 over TLS。接受任何证书。仅用于测试。
证书固定 仅限 SOCKS5 over TLS,可选。服务器证书的 SHA-256 指纹,共 64 位十六进制数字。设置后,Potatso 只接受被固定的证书(包括自签名证书),不接受其他证书。

如果服务器要求用户名和密码而你没有设置,Potatso 不会连接。Potatso 不支持 GSSAPI(Kerberos)认证。

username 为空的 Clash 或 Mihomo 服务器会按无认证导入,与 Clash 的做法一致。

证书

使用 SOCKS5 over TLS 时,TLS 握手中的服务器名称始终是服务器的地址,服务器证书必须对该地址有效。如果无效,请设置证书固定或开启跳过证书验证。你无法设置不同的服务器名称:对于带有服务器名称的链接、Surge 服务器或 Xray 服务器,Potatso 不会导入。Clash 和 Mihomo 的 SOCKS5 没有服务器名称这项设置,所以 Potatso 会像它们一样忽略其中的 sni。

Potatso 不支持:

  • 自定义 CA 证书:请改为固定服务器的证书,
  • TLS 客户端证书(Clash 的 certificate 和 private-key),或用于检查证书的另一个名称(name-cert-verify):Potatso 不会导入需要它们的服务器,
  • ALPN 列表:Potatso 会忽略它并导入服务器。

UDP

QUIC、语音和视频通话以及许多游戏都使用 UDP。开启 UDP 转发后,Potatso 会通过服务器发送 UDP(UDP ASSOCIATE),支持 IPv4 和 IPv6 地址。对于位于 NAT 之后、把自己的地址报告为 0.0.0.0 的服务器也能使用:Potatso 会把 UDP 发往你设置的地址。

如果服务器不转发 UDP,请关闭 UDP 转发。关闭后:

  • 使用规则时,Potatso 会跳过把 UDP 发往该服务器的规则,由下一条匹配的规则决定。没有其他规则匹配的 UDP 会直接发送。
  • 在全局模式下,UDP 无法使用,因为所有流量都必须经过服务器。

关于 UDP,有几点需要了解:

  • UDP 通过服务器单独的 UDP 端口转发,所以服务器的防火墙必须放行 UDP。
  • 使用 SOCKS5 over TLS 时,只有到服务器的连接是加密的。SOCKS5 在其之外发送 UDP,所以你的 UDP 流量会以未加密的方式到达服务器。
  • 对于 UDP,Potatso 自行解析网站的地址,并把地址发给服务器。
  • 从 Clash、Mihomo 或 Surge 导入时,除非服务器设置了 udp: false(Surge 中是 udp-relay=false),否则 UDP 转发为开启。Clash 在缺少 udp 时会关闭 UDP,所以请确认你的服务器是否转发 UDP。

功能支持

功能 支持情况
到 IPv4、IPv6 和域名目标的 CONNECT(RFC 1928) ✅
远程 DNS:由服务器解析域名(socks5h) ✅ 适用于 TCP
无认证 ✅
用户名和密码(RFC 1929) ✅
GSSAPI(RFC 1961) ❌
到 IPv4 和 IPv6 目标的 UDP ASSOCIATE ✅
NAT 之后的服务器上的 UDP(0.0.0.0 中继地址) ✅
UDP 分片 ❌ 分片的数据报会被丢弃,RFC 1928 允许这样做
BIND(入站连接,如主动模式 FTP) ❌
SOCKS5 over TLS ✅ 支持证书固定和跳过证书验证
与服务器地址不同的 TLS 服务器名称、ALPN、自定义 CA、客户端证书 ❌
用 TLS 加密的 UDP ❌ SOCKS5 在 TLS 之外发送 UDP
IPv6 服务器地址 ✅
SOCKS4 和 SOCKS4a ❌

每一项受支持的功能,都用真实的 SOCKS5 服务器测试过:Xray、sing-box、Mihomo、3proxy 和 microsocks。sing-box 在 mixed 入站而不是 socks 入站上提供 SOCKS5 over TLS。

SOCKS5 链接用一行文字包含完整的服务器信息:

socks5://user:password@host:port#name
socks5+tls://user:password@host:port?insecure=1#name
部分 说明
协议头 SOCKS5 使用 socks5://、socks:// 或 socks5h://;SOCKS5 over TLS 使用 socks5+tls:// 或 socks+tls://。Potatso 始终把域名发给服务器,所以 socks5h:// 与 socks5:// 效果相同。
user:password 可选。密码中的 :、@ 和其他特殊字符需要百分号编码,例如用 p%3Ass 表示 p:ss。用户名不能包含 :。
host 服务器地址。IPv6 地址要放在方括号里,如 [2001:db8::1]。
port 服务器端口。
insecure 仅限 SOCKS5 over TLS,可选。1 表示开启跳过证书验证。Potatso 也会读取 allowInsecure 和 skip-cert-verify。
name 可选。服务器在 Potatso 中的名称。

链接中不能包含证书固定。带有与服务器地址不同的 sni 的链接不会被导入。

Potatso 还能导入另外两种形式:

socks://base64(user:password)@host:port#name
socks5://base64(user:password@host:port)#name

第一种是 v2rayN 分享 SOCKS 服务器的方式。第二种是较旧的形式,即 :// 与 # 之间的全部内容都经 Base64 编码。分享带密码的 SOCKS5 服务器时,Potatso 提供标准链接和 v2rayN 形式。

没有密码的服务器:

socks5://proxy.example.com:1080#Open

用户名为 alice、密码为 s3cret 的服务器:

socks5://alice:s3cret@proxy.example.com:1080#Auth

密码 p:ss wörd,经百分号编码:

socks5://alice:p%3Ass%20w%C3%B6rd@proxy.example.com:1080#Encoded

同一台服务器,写成 socks5h:// 链接:

socks5h://alice:s3cret@proxy.example.com:1080#Remote-DNS

v2rayN 形式,其中 alice:s3cret 经 Base64 编码:

socks://YWxpY2U6czNjcmV0@proxy.example.com:1080#v2rayN

旧形式:

socks5://YWxpY2U6czNjcmV0QHByb3h5LmV4YW1wbGUuY29tOjEwODA#Legacy

使用 IPv6 地址的服务器:

socks5://[2001:db8::1]:1080#IPv6

SOCKS5 over TLS 服务器:

socks5+tls://alice:s3cret@proxy.example.com:443#TLS

使用自签名证书的 SOCKS5 over TLS 服务器:

socks+tls://proxy.example.com:443?insecure=1#Self-signed
导航

Type to search…

↑↓ navigate↵ selectEsc close