프록시 프로토콜 · Clash 문서

Trojan

현재 Mihomo 필드를 기준으로 Clash 생태계의 Trojan 아웃바운드를 설정하고 비밀번호, 필수 TLS, SNI, 인증서, Reality, UDP, 전송 계층을 확인합니다.

  • password
  • TLS
  • SNI
  • Reality
  • UDP
프록시 프로토콜

Trojan 아웃바운드 필드

이 페이지에서는 Clash 생태계 클라이언트의 proxies 배열의 Trojan 아웃바운드 필드입니다. Trojan은 비밀번호 인증을 사용하고 TLS를 강제로 활성화하므로 클라이언트는 서버 주소, 포트, 비밀번호 및 TLS 이름을 모두 일치시켜야 합니다.

최소 설정은 네 개의 일반 필수 필드와 password 로 구성됩니다. SNI는 비워 두어 server 주소로 폴백할 수 있지만 도메인 인증서, CDN 또는 Reality를 사용할 때는 일반적으로 명시적으로 입력해야 합니다.

name필수
같은 설정 안에서 중복될 수 없는 노드 이름입니다.
type필수
고정값 trojan
server필수
Trojan 서버의 도메인 또는 IP 주소입니다.
port필수
서버 수신 포트로 443이 일반적이지만 실제 서버 설정을 기준으로 확인해야 합니다.
password필수
Trojan 서버 비밀번호이며 서버에서 할당한 값과 정확히 일치해야 합니다.

TLS, SNI 및 인증서 검증

현재 코어에서 Trojan은 TLS를 강제로 활성화하므로 tls: true 에 의존해 TLS 노드가 되는 것이 아닙니다. 아래 필드는 핸드셰이크 이름, ALPN, 클라이언트 지문 및 인증서 검증 방식을 결정합니다.

sni선택 사항
TLS 서버 이름입니다. 비워 두면 server 주소를 사용하며 도메인 인증서나 CDN 환경에서는 일반적으로 정확히 일치시켜야 합니다.
alpn선택 사항
TLS 애플리케이션 계층 프로토콜 목록이며 서버와 선택한 전송 계층에 호환되어야 합니다.
client-fingerprint선택 사항
uTLS 클라이언트 지문(예: chrome 또는 random이며 인증서 지문이 아닙니다.
fingerprint선택 사항
서버 인증서의 SHA-256 지문이며 client-fingerprint 와는 의미가 다릅니다.
skip-cert-verify주의
다음 값으로 설정하면 true 은 인증서 검증을 건너뛰므로 장기적인 문제 해결 방식으로 사용해서는 안 됩니다.
name-cert-verify선택 사항
인증서 DNSName 검증 대상만 변경하며 전송되는 SNI는 변경하지 않습니다.
certificate / private-key선택 사항
두 항목을 함께 입력하면 클라이언트 mTLS가 활성화됩니다. 일반 Trojan 노드에는 대개 필요하지 않습니다.

Reality 및 기타 TLS 전달 방식

Reality, ShadowTLS, Restls 및 JLS는 모두 TLS 연결 계층 확장입니다. 서버에서 해당 기능을 명확히 활성화한 경우에만 추가하고 서로 충돌하는 여러 연결 계층 설정을 동시에 활성화하지 마세요.

reality-opts.public-keyReality
서버 Reality 개인 키에 해당하는 공개 키입니다.
reality-opts.short-idReality
서버에서 허용하는 short ID 중 하나를 입력합니다.
reality-opts.support-x25519mlkem768선택 사항
X25519-MLKEM768 키 교환 지원을 선언할 때 사용하며 서버도 이를 지원해야 합니다.
shadow-tls-opts서버 설정 기준
서버에서 ShadowTLS를 사용할 때만 버전과 비밀번호를 입력하고 계속 sni 을 핸드셰이크 이름으로 사용합니다.
restls-opts서버 설정 기준
서버에서 Restls를 사용할 때만 비밀번호와 TLS 버전 힌트를 입력합니다.
jls-opts서버 설정 기준
서버에서 JLS를 사용할 때만 사용자 이름과 비밀번호를 입력합니다.

Trojan 전송 계층 선택

현재 Trojan은 WebSocket과 gRPC만 선택적 전송 계층으로 표시합니다. 다음을 입력하지 않거나 network 다른 값을 입력하면 TCP로 처리합니다.

현재 Trojan 전송 계층 값
network연계 필드적용 설명
tcp전용 opts 없음기본 전송 계층
wsws-optsWebSocket 경로, Host 및 Early Data
grpcgrpc-optsgRPC 서비스 이름 및 연결 매개변수
network선택 사항
다음만 사용합니다: ws 또는 grpc다른 값은 TCP로 처리합니다.
ws-optsWebSocket
경로, Host 및 Early Data 필드는 서버나 리버스 프록시와 일치해야 합니다.
grpc-optsgRPC
grpc-service-name 및 연결 매개변수는 서버와 일치해야 합니다.
smuxTCP 전용
범용 sing-mux는 TCP 전송에만 적용됩니다. gRPC 자체의 다중화 개념과 혼용하지 마세요.

UDP 및 trojan-go AEAD 확장

UDP 옵션과 trojan-go의 Shadowsocks AEAD 확장은 서로 관련이 없습니다. 일반 Trojan 노드에는 다음 항목이 필요하지 않으며 ss-opts

udp선택 사항
범용 필드이며 기본값은 false입니다. UDP를 프록시해야 할 때는 다음 값으로 설정하고 true서버가 이를 지원하는지도 확인하세요.
ss-opts.enabled선택 사항
trojan-go 서버에서 Shadowsocks AEAD 확장을 활성화했을 때만 다음 값으로 설정합니다: true
ss-opts.method기본값 aes-128-gcm
사용 가능 aes-128-gcmaes-256-gcm 또는 chacha20-ietf-poly1305
ss-opts.password활성화 시 필수
trojan-go AEAD 확장 비밀번호는 비어 있으면 안 되며 최상위의 다음 항목을 대체하지 않습니다: password

기본 설정 및 오류 확인

이 예시는 일반 Trojan over TLS 노드를 보여 줍니다. 서버에서 WebSocket, gRPC, Reality 또는 다음 항목을 활성화하지 않았다면 ss-opts 이 필드들을 임의로 추가하지 마세요.

  • 설정에서 network 값을 h2로 입력한 뒤 alpn: [h2] 항목과 같은 설정으로 오해합니다.
  • SNI, 인증서 검증 이름 및 리버스 프록시 도메인이 일치하지 않아 TLS 핸드셰이크에 실패합니다.
  • 다음 항목만 입력하고 ss-opts.password최상위 필수 Trojan 항목을 누락합니다: password
  • 서버가 gRPC인데 클라이언트는 계속 기본 TCP로 연결하거나 grpc-service-name 이 일치하지 않습니다.
YAML
proxies:
  - name: trojan-tls
    type: trojan
    server: edge.example.com
    port: 443
    password: your-trojan-password
    sni: origin.example.com
    alpn:
      - h2
      - http/1.1
    client-fingerprint: chrome
    udp: true
    network: tcp