SOCKS5 서버는 사용자 이름과 암호가 있든 없든 대신 연결을 열고 UDP를 중계합니다(RFC 1928). SOCKS5 over TLS는 같은 서버에 TLS로 접속하는 것이므로 서버까지의 연결도 암호화됩니다.
Potatso는 서버에 사이트의 주소가 아니라 방문하는 사이트의 이름을 보내며, 서버가 그 이름을 조회합니다. 다른 앱에서는 이를 socks5h 또는 원격 DNS라고 부릅니다.
SOCKS5 서버는 직접 추가하거나, socks5:// 링크로 추가하거나, 다음을 가져와서 추가할 수 있습니다.
- Clash 또는 Mihomo 구독(
type: socks5), - Surge 구성(
socks5와socks5-tls), - Xray 또는 V2Ray 구성(TLS 유무와 관계없는
socks아웃바운드).
SOCKS5 over TLS 서버를 직접 추가하려면 SOCKS5를 선택하고 TLS를 켭니다.
설정
| 설정 | 설명 |
|---|---|
| 서버, 포트 | 서버의 주소와 포트. IPv6 주소도 사용할 수 있습니다. |
| 인증 | 없음, 또는 사용자 이름과 암호. |
| 사용자 이름, 암호 | 각각 최대 255바이트. |
| UDP 릴레이 | 기본값은 켜짐입니다. UDP를 참고하세요. |
| TLS | SOCKS5 over TLS이면 켭니다. |
| 인증서 확인 건너뛰기 | SOCKS5 over TLS 전용. 모든 인증서를 허용합니다. 테스트할 때만 사용하세요. |
| 인증서 핀 | SOCKS5 over TLS 전용, 선택 사항. 서버 인증서의 SHA-256 지문으로, 16진수 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): 이것이 필요한 서버는 가져오지 않습니다. - ALPN 목록: Potatso는 이것 없이 서버를 가져옵니다.
UDP
UDP는 QUIC, 음성 및 영상 통화, 많은 게임이 사용합니다. UDP 릴레이를 켜면 Potatso가 UDP를 서버를 통해(UDP ASSOCIATE) IPv4 및 IPv6 주소로 보냅니다. 릴레이 주소를 0.0.0.0으로 알리는 NAT 뒤의 서버에서도 작동합니다. 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는 UDP를 TLS 바깥으로 보냅니다 |
| IPv6 서버 주소 | ✅ |
| SOCKS4 및 SOCKS4a | ❌ |
지원하는 모든 기능은 실제 SOCKS5 서버인 Xray, sing-box, Mihomo, 3proxy, microsocks로 테스트했습니다. sing-box는 socks 인바운드가 아니라 mixed 인바운드에서 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: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-DNSalice:s3cret을 Base64로 인코딩한 v2rayN 형식:
socks://YWxpY2U6czNjcmV0@proxy.example.com:1080#v2rayN이전 형식:
socks5://YWxpY2U6czNjcmV0QHByb3h5LmV4YW1wbGUuY29tOjEwODA#LegacyIPv6 주소를 쓰는 서버:
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