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-DNSv2rayN 形式,其中 alice:s3cret 经 Base64 编码:
socks://YWxpY2U6czNjcmV0@proxy.example.com:1080#v2rayN旧形式:
socks5://YWxpY2U6czNjcmV0QHByb3h5LmV4YW1wbGUuY29tOjEwODA#Legacy使用 IPv6 地址的服务器:
socks5://[2001:db8::1]:1080#IPv6SOCKS5 over TLS 服务器:
socks5+tls://alice:s3cret@proxy.example.com:443#TLS使用自签名证书的 SOCKS5 over TLS 服务器:
socks+tls://proxy.example.com:443?insecure=1#Self-signed