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

> Documentation Index
> Fetch the complete documentation index at: https://potatso.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# SOCKS5 和 SOCKS5 over TLS

SOCKS5 服务器为你建立连接并转发 UDP，可以有用户名和密码，也可以没有（[RFC 1928](https://www.rfc-editor.org/rfc/rfc1928)）。**SOCKS5 over TLS** 是通过 TLS 访问的同一种服务器，因此与服务器之间的连接也是加密的。

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

你可以手动添加 SOCKS5 服务器、通过 [`socks5://` 链接](#links)添加，或通过导入添加：

- Clash 或 Mihomo 订阅（`type: socks5`），
- Surge 配置（`socks5` 和 `socks5-tls`），
- Xray 或 V2Ray 配置（`socks` 出站，可带或不带 TLS）。

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

## 设置 {#settings}

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

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

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

### 证书 {#certificates}

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

Potatso 不支持：

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

## UDP {#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。

## 功能支持 {#features}

| 功能 | 支持情况 |
| --- | --- |
| 到 IPv4、IPv6 和域名目标的 `CONNECT`（[RFC 1928](https://www.rfc-editor.org/rfc/rfc1928)） | ✅ |
| 远程 DNS：由服务器解析域名（`socks5h`） | ✅ 适用于 TCP |
| 无认证 | ✅ |
| 用户名和密码（[RFC 1929](https://www.rfc-editor.org/rfc/rfc1929)） | ✅ |
| GSSAPI（[RFC 1961](https://www.rfc-editor.org/rfc/rfc1961)） | ❌ |
| 到 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](https://xtls.github.io/)、[sing-box](https://sing-box.sagernet.org/)、[Mihomo](https://wiki.metacubex.one/)、[3proxy](https://3proxy.org/) 和 [microsocks](https://github.com/rofl0r/microsocks)。sing-box 在 `mixed` 入站而不是 `socks` 入站上提供 SOCKS5 over TLS。

## 链接 {#links}

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

```text
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 还能导入另外两种形式：

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

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

### 示例 {#link-examples}

没有密码的服务器：

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

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

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

密码 `p:ss wörd`，经百分号编码：

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

同一台服务器，写成 `socks5h://` 链接：

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

v2rayN 形式，其中 `alice:s3cret` 经 Base64 编码：

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

旧形式：

```text
socks5://YWxpY2U6czNjcmV0QHByb3h5LmV4YW1wbGUuY29tOjEwODA#Legacy
```

使用 IPv6 地址的服务器：

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

SOCKS5 over TLS 服务器：

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

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

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

Source: https://potatso.com/docs/zh/protocols/socks5/index.mdx
