SOCKS5 伺服器會替你開啟連線並轉送 UDP,有無使用者名稱和密碼都可以(RFC 1928)。SOCKS5 over TLS 是同一種伺服器,但透過 TLS 連上,所以與伺服器之間的連線同樣經過加密。
Potatso 傳給伺服器的是你造訪網站的名稱,而不是它的位址,由伺服器自行查詢該名稱。其他 App 稱這種做法為 socks5h,也就是遠端 DNS。
你可以手動加入 SOCKS5 伺服器、使用 socks5:// 連結,或透過匯入:
- Clash 或 Mihomo 訂閱(
type: socks5), - Surge 設定(
socks5和socks5-tls), - Xray 或 V2Ray 設定(
socksoutbound,可搭配或不搭配 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 交握中的伺服器名稱一律是伺服器的位址,且伺服器的憑證必須對該位址有效。如果無效,請設定憑證釘選或開啟略過憑證驗證。你無法設定不同的伺服器名稱:Potatso 不會匯入帶有不同名稱的連結、Surge 伺服器或 Xray 伺服器。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 轉送為開啟。當缺少udp時,Clash 會讓 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 inbound 上提供 SOCKS5 over TLS,而不是 socks inbound。
連結
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:ss 寫成 p%3Ass。使用者名稱不可包含 :。 |
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 編碼。Potatso 分享帶有密碼的 SOCKS5 伺服器時,會提供標準連結和 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