---
title: "VMess"
description: "Potatso가 지원하는 VMess 암호화 방식, 전송, 링크, 기능입니다."
---

> 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.

# VMess

VMess 서버는 **UUID**, 트래픽을 암호화하는 **암호화 방식**, 그리고 TLS 유무와 관계없이 WebSocket이나 gRPC처럼 연결을 전달하는 **전송**으로 정의됩니다. Potatso는 서버의 암호화 방식, 전송, TLS 설정을 지원할 때 서버에 연결합니다. 제공업체가 알려 준 내용이나 `vmess://` 링크에 나온 서버 설정을 아래 표로 확인하세요.

VMess 서버는 직접 추가하거나, [`vmess://` 링크](#links)로 추가하거나, 다음을 가져와서 추가할 수 있습니다.

- Clash 또는 Mihomo 구독,
- Xray 또는 V2Ray 구성,
- Surge 구성.

Potatso는 아직 sing-box 구성에서 VMess 서버를 가져오지 않습니다. 대신 서버의 `vmess://` 링크를 사용하세요.

## 암호화 방식 {#ciphers}

| 암호화 방식 | 지원 |
| --- | --- |
| `auto` | ✅ Potatso가 모든 Apple 기기가 하드웨어로 실행하는 `aes-128-gcm`을 선택합니다. |
| `aes-128-gcm` | ✅ |
| `chacha20-poly1305` | ✅ |
| `none` | ✅ |
| `zero` | ❌ |
| `aes-128-cfb`(레거시) | ❌ |

`none`과 `zero`는 트래픽을 암호화하지 않고 보냅니다. `none`은 연결을 암호화하는 TLS와 함께 쓸 때만 사용하세요. Potatso는 변조 방지 보호까지 없애는 `zero`로는 연결하지 않습니다. 서버에서 다른 암호화 방식을 선택하세요.

### alterId {#alterid}

Potatso는 `alterId` 0과 같은 현재의 VMess 인증을 항상 사용합니다. 사용자에게 `alterId`가 0보다 크게 설정된 서버도 이를 받아들이므로 서버는 그대로 두어도 됩니다. Potatso는 `alterId`가 0보다 클 때만 쓰던 이전 인증을 지원하지 않으며, 서버들은 2022년부터 이를 지원 중단했습니다.

## 전송 {#transports}

| 전송 | 링크 `net` / `type` | 지원 | 테스트 환경 |
| --- | --- | --- | --- |
| 없음(일반 TCP) | `tcp` 또는 없음 | ✅ TLS 유무 무관 | Xray, sing-box, V2Ray |
| WebSocket | `ws` | ✅ TLS 및 얼리 데이터 유무 무관 | Xray, sing-box, V2Ray |
| gRPC | `grpc` | ✅ TLS 유무 무관 | Xray, sing-box, V2Ray |
| HTTP/2 | `h2` 또는 `http` | ✅ TLS와 함께 | sing-box, V2Ray |
| HTTP Upgrade | `httpupgrade` | ✅ TLS 유무 무관 | Xray, sing-box |
| HTTP 헤더를 쓰는 TCP | `type=http`인 `tcp` | ❌ | |
| XHTTP | `xhttp` | ❌ | |
| mKCP, QUIC | `kcp`, `quic` | ❌ | |

지원하는 모든 전송은 UDP와 함께 작동합니다. Potatso는 지원하지 않는 전송을 쓰는 서버를 가져오지 않습니다.

WebSocket 얼리 데이터는 연결의 첫 바이트를 WebSocket 핸드셰이크와 함께 보내 왕복 한 번을 줄입니다. 링크 경로 끝의 `?ed=2048` 또는 Clash 구독의 `max-early-data`로 설정합니다.

Xray는 더 이상 HTTP/2를 제공하지 않습니다. 이를 쓰던 Xray 서버는 이제 XHTTP를 쓰며, Potatso는 아직 이를 지원하지 않습니다.

## TLS {#tls}

| 설정 | Clash 키 | 링크 필드 | 지원 |
| --- | --- | --- | --- |
| 서버 이름(SNI) | `servername` | `sni` | ✅ 없으면 Potatso는 서버 주소를 사용합니다. |
| ALPN | `alpn` | `alpn` | ✅ 없으면 Potatso는 WebSocket에는 `http/1.1`, gRPC와 HTTP/2에는 `h2`를 보냅니다. |
| 인증서 확인 건너뛰기 | `skip-cert-verify` | `allowInsecure` | ✅ |
| 브라우저 지문 | `client-fingerprint` | `fp` | ✅ `chrome`, `firefox`, `safari`, `ios`, `android`, `edge`, `random`. 다른 이름은 기본 핸드셰이크로 연결됩니다. |
| 인증서 핀 | `fingerprint` | `pcs` | ❌ |
| REALITY | `reality-opts` | `security=reality` | ❌ |
| Encrypted Client Hello(ECH) | `ech-opts` | `ech` | ❌ |
| 사용자 지정 CA 인증서 | | | ❌ |

인증서 확인을 끄면 나와 서버 사이에 있는 누구든 트래픽을 읽을 수 있습니다. Potatso는 REALITY, ECH, 인증서 핀이 필요한 VMess 서버에는 연결하지 않습니다. 그것들 없이 연결하면 서버가 요구하는 보호를 받을 수 없기 때문입니다. REALITY에는 VLESS나 Trojan을 사용하세요.

브라우저 지문은 연결의 TLS 핸드셰이크가 해당 브라우저의 핸드셰이크처럼 보이게 합니다. 서버가 지원해야 하는 항목은 바뀌지 않습니다.

## UDP {#udp}

VMess 서버는 UDP가 기본으로 꺼져 있습니다. 서버 설정에서 **UDP 릴레이**를 켜거나 Clash 구독에서 `udp: true`로 설정하세요.

Potatso는 각 UDP 흐름을 자체 VMess 연결로 보내며, 모든 VMess 서버가 이를 받아들입니다. 하나의 연결에서 많은 UDP 흐름을 전달하는 XUDP와 PacketAddr 인코딩(링크의 `packetEncoding`, Clash 구독의 `packet-encoding` 또는 `xudp`)은 지원하지 않습니다. 이것으로 설정된 서버도 계속 작동하며, Potatso는 가져올 때 자체 UDP를 대신 사용한다고 알려 줍니다. 일부 게임처럼 full-cone NAT가 필요한 앱은 작동하지 않을 수 있습니다.

[멀티플렉싱](#mux)을 켜면 UDP는 대신 공유 연결로 전송됩니다.

## 멀티플렉싱 {#mux}

Potatso는 하나의 VMess 연결에서 여러 연결을 실행할 수 있으며, Clash 구독에서는 `smux`로 설정합니다.

| 프로토콜 | `smux` `protocol` | 서버 |
| --- | --- | --- |
| Mux.Cool | `muxcool` | Xray, V2Ray, sing-box. 서버 설정 불필요 |
| sing-mux | `h2mux`, `smux`, `yamux` | 멀티플렉싱을 켠 sing-box |

TCP와 UDP 모두 작동합니다. Mux.Cool은 연결의 양방향을 함께 닫으므로, 전송을 멈춘 뒤 응답을 기다리는 앱은 멀티플렉싱이 없는 서버를 사용해야 합니다.

## 요청 옵션 {#request-options}

VMess 클라이언트는 연결마다 몇 가지 옵션을 선택하며, 서버는 어떤 옵션이든 받아들입니다. Potatso는 항상 트래픽을 암호화된 청크로 보내고 각 업로드의 끝을 표시하며, 다른 옵션은 설정하지 않습니다.

| 옵션 | Clash 키 | Potatso |
| --- | --- | --- |
| 청크 스트림 | | 항상 켜짐 |
| 청크 마스킹 | | 꺼짐 |
| 글로벌 패딩 | `global-padding` | 꺼짐. 이를 설정한 서버를 가져올 때 Potatso가 경고합니다. |
| 인증된 길이 | `authenticated-length` | 꺼짐. 이를 설정한 서버를 가져올 때 Potatso가 경고합니다. |

청크 마스킹과 글로벌 패딩은 지켜보는 쪽에서 각 청크의 크기를 알 수 없게 숨깁니다. 이것이 없어도 트래픽을 읽을 수는 없지만 패턴은 더 쉽게 알아볼 수 있습니다.

### 대용량 업로드 {#large-uploads}

VMess 연결 하나로는 약 1GiB를 업로드할 수 있습니다. VMess는 암호화된 청크에 카운터로 번호를 매기는데 그 정도가 지나면 카운터가 바닥나고, 계속하면 암호화가 약해지므로 Potatso는 대신 연결을 닫습니다. 다운로드에는 제한이 없습니다. 한 연결에서 1GiB보다 큰 업로드에는 VLESS나 Trojan 서버를 사용하세요.

## 기능 지원 {#features}

| 기능 | 지원 |
| --- | --- |
| [AEAD 인증](https://www.v2fly.org/en_US/developer/protocols/vmess.html)(`alterId` 0) | ✅ |
| 레거시 MD5 인증(`alterId` 0 초과) | ❌ `alterId`가 0보다 큰 서버도 AEAD 인증을 받아들입니다. |
| 암호화 방식 `aes-128-gcm`, `chacha20-poly1305`, `none`, `auto` | ✅ |
| 암호화 방식 `zero` 및 레거시 `aes-128-cfb` | ❌ |
| 청크 스트림, 업로드 종료 표시 | ✅ |
| 청크 마스킹, 글로벌 패딩, 인증된 길이 | ❌ 서버는 이것 없는 연결도 받아들입니다 |
| UDP | ✅ 흐름당 연결 하나 |
| 한 연결에서 약 1GiB를 넘는 업로드 | ❌ [대용량 업로드](#large-uploads) 참고 |
| XUDP, PacketAddr | ❌ |
| Mux.Cool | ✅ TCP와 UDP |
| sing-mux(h2mux, smux, yamux) | ✅ TCP와 UDP |
| 전송 | [전송](#transports) 참고 |
| TLS | [TLS](#tls) 참고 |
| [v2rayN 공유 링크](#links)(버전 2) | ✅ |
| [Xray 공유 링크](https://github.com/XTLS/Xray-core/discussions/716) | ✅ |
| Shadowrocket 공유 링크 | 가져오기만 지원 |

## `vmess://` 링크 {#links}

`vmess://` 링크는 서버 전체를 한 줄에 담습니다. Potatso는 세 가지 형식을 가져오며 앞의 두 가지를 공유합니다.

가장 흔한 v2rayN 형식은 Base64로 인코딩한 JSON 객체입니다.

```text
vmess://base64({"v":"2","ps":"name","add":"host","port":"443","id":"uuid",…})
```

| 필드 | 설명 |
| --- | --- |
| `v` | 형식 버전, `2`. |
| `ps` | 선택 사항. Potatso에서 표시할 서버 이름. |
| `add` | 서버 주소. |
| `port` | 서버 포트. |
| `id` | UUID. |
| `aid` | `alterId`. [alterId](#alterid)를 참고하세요. |
| `scy` | [암호화 방식](#ciphers). 없으면 `auto`. |
| `net` | [전송](#transports): `tcp`, `ws`, `grpc`, `h2`, `httpupgrade`. |
| `type` | `none`, 또는 TCP HTTP 헤더를 뜻하는 `http`(Potatso는 지원하지 않음). |
| `host` | WebSocket, HTTP/2, HTTP Upgrade의 `Host` 헤더. |
| `path` | WebSocket, HTTP/2, HTTP Upgrade의 경로 또는 gRPC의 서비스 이름. WebSocket 경로는 `?ed=2048`로 끝나 얼리 데이터를 담을 수 있습니다. |
| `tls` | TLS를 쓰려면 `tls`, 아니면 빈 값. |
| `sni`, `alpn`, `fp` | [TLS](#tls) 서버 이름, ALPN 목록, 브라우저 지문. |

Xray 형식은 URL이며, `encryption`에 암호화 방식을 담고 전송 및 TLS 설정은 쿼리 매개변수로 씁니다.

```text
vmess://uuid@host:port?type=ws&security=tls&sni=…&host=…&path=…&encryption=auto#name
```

| 매개변수 | 설명 |
| --- | --- |
| `type` | [전송](#transports). |
| `encryption` | [암호화 방식](#ciphers). 없으면 `auto`. |
| `security` | `tls` 또는 `none`. |
| `sni`, `alpn`, `fp` | [TLS](#tls) 서버 이름, ALPN 목록, 브라우저 지문. |
| `host`, `path` | v2rayN 형식과 같은 `Host` 헤더와 경로. |
| `serviceName` | gRPC 서비스 이름. |
| `ed` | 바이트 단위의 WebSocket 얼리 데이터. |

Potatso는 Shadowrocket 형식 `vmess://base64(cipher:uuid@host:port)?remarks=…&obfs=websocket&…`도 가져옵니다.

### 예시 {#link-examples}

각 예시는 가져올 링크를 보여 줍니다. UUID는 `b831381d-6324-4d53-ad4f-8cda48b30811`입니다.

`cdn.example.com`을 거치고 Chrome 지문을 쓰는, TLS와 얼리 데이터를 사용한 WebSocket:

```text
vmess://eyJ2IjoiMiIsInBzIjoiV1MgVExTIiwiYWRkIjoidm1lc3MuZXhhbXBsZS5jb20iLCJwb3J0IjoiNDQzIiwiaWQiOiJiODMxMzgxZC02MzI0LTRkNTMtYWQ0Zi04Y2RhNDhiMzA4MTEiLCJhaWQiOiIwIiwic2N5IjoiYXV0byIsIm5ldCI6IndzIiwidHlwZSI6Im5vbmUiLCJob3N0IjoiY2RuLmV4YW1wbGUuY29tIiwicGF0aCI6Ii9yYXk/ZWQ9MjA0OCIsInRscyI6InRscyIsInNuaSI6ImNkbi5leGFtcGxlLmNvbSIsImFscG4iOiJodHRwLzEuMSIsImZwIjoiY2hyb21lIn0=
```

TLS와 `aes-128-gcm`을 쓰고 서비스 이름이 `vmess-grpc`인 gRPC:

```text
vmess://eyJ2IjoiMiIsInBzIjoiZ1JQQyIsImFkZCI6InZtZXNzLmV4YW1wbGUuY29tIiwicG9ydCI6IjQ0MyIsImlkIjoiYjgzMTM4MWQtNjMyNC00ZDUzLWFkNGYtOGNkYTQ4YjMwODExIiwiYWlkIjoiMCIsInNjeSI6ImFlcy0xMjgtZ2NtIiwibmV0IjoiZ3JwYyIsInBhdGgiOiJ2bWVzcy1ncnBjIiwidGxzIjoidGxzIiwic25pIjoidm1lc3MuZXhhbXBsZS5jb20ifQ==
```

`chacha20-poly1305`를 쓰는 일반 TCP, Xray 형식:

```text
vmess://b831381d-6324-4d53-ad4f-8cda48b30811@vmess.example.com:8080?type=tcp&encryption=chacha20-poly1305#Plain%20TCP
```

TLS를 쓰는 HTTP Upgrade, Xray 형식:

```text
vmess://b831381d-6324-4d53-ad4f-8cda48b30811@vmess.example.com:443?type=httpupgrade&security=tls&sni=cdn.example.com&host=cdn.example.com&path=%2Fupgrade&encryption=auto#HTTP%20Upgrade
```

### Clash 구독에서 {#clash}

```yaml
proxies:
  - name: VMess WS
    type: vmess
    server: vmess.example.com
    port: 443
    uuid: b831381d-6324-4d53-ad4f-8cda48b30811
    alterId: 0
    cipher: auto
    udp: true
    tls: true
    servername: cdn.example.com
    network: ws
    ws-opts:
      path: /ray
      headers:
        Host: cdn.example.com
      max-early-data: 2048
      early-data-header-name: Sec-WebSocket-Protocol
```

Source: https://potatso.com/docs/ko/protocols/vmess/index.mdx
