프록시 프로토콜 · Clash 문서

TUIC

현재 Mihomo 필드를 기준으로 Clash 생태계의 TUIC 아웃바운드를 설정합니다. v4와 v5 인증을 구분하고 TLS, QUIC, UDP 릴레이, 연결 매개변수를 확인합니다.

  • uuid
  • password
  • TLS
  • QUIC
  • UDP
프록시 프로토콜

인증 필드로 버전 결정

TUIC는 QUIC 및 TLS 1.3에서 작동합니다. 현재 코어에는 별도의 version 필드가 없으며 인증 필드에 따라 프로토콜 분기를 선택합니다. 비어 있지 않은 token 이 있으면 v4를, 없으면 v5를 사용합니다.

두 버전 모두 이름,type: tuic, 서버 및 포트가 필요합니다. v4에는 token을 추가하고 v5에는 UUID와 비밀번호를 추가합니다. 클라이언트 버전은 서버와 일치해야 합니다.

TUIC v4 및 v5 인증 필드
프로토콜 버전필수 입력반드시 생략현재 구현의 선택 조건
TUIC v4tokenuuidpasswordtoken이 비어 있지 않음
TUIC v5uuidpasswordtokentoken이 비어 있음
name필수
정책 그룹과 규칙에서 참조하는 노드 이름입니다.
type: tuic필수
TUIC 아웃바운드를 선택합니다.
server / port필수
서버 주소와 단일 UDP 수신 포트를 입력합니다.
tokenTUIC v4
v4의 사용자 식별자입니다. v5를 사용할 때는 입력하면 안 됩니다.
uuid / passwordTUIC v5
v5의 사용자 UUID와 비밀번호입니다. v4를 사용할 때는 입력하면 안 됩니다.

서버 주소 및 TLS 검증

TUIC는 TLS 1.3을 사용합니다. 서버 이름 설정에서 sni 값이 없으면 server 값을 사용합니다. 애플리케이션 프로토콜 설정에서 alpn 값이 없으면 클라이언트가 h3를 사용합니다. 연결 주소, SNI 및 인증서 이름을 각각 제어할 수 있지만 설명 가능한 일관성을 유지해야 합니다.

ip선택 사항
server의 DNS 조회 결과를 덮어씁니다. 실제 연결 IP만 바꾸며 기본 SNI는 변경하지 않습니다.
sniTLS
TLS Server Name을 설정합니다. 연결 IP와 인증서 도메인이 다를 때 특히 중요합니다.
alpn기본값 h3
서버에서 지원하는 ALPN 목록을 입력하며 일반적으로 기본값을 덮어쓸 필요가 없습니다.
skip-cert-verify위험
인증서 검증을 건너뜁니다. 위험을 명확히 이해한 경우에만 활성화하세요.
name-cert-verifyTLS
인증서 이름 검증 대상을 별도로 지정합니다.
fingerprintTLS
서버 인증서 지문을 고정합니다.
certificate / private-keymTLS
서버에서 클라이언트 인증서를 요구할 때 두 항목을 함께 입력합니다.
ech-opts현재 적용되지 않음
TUIC 옵션은 이 필드를 파싱할 수 있지만 현재 다이얼 구현은 TLS 핸드셰이크에 적용하지 않습니다. 필드를 입력했다고 ECH가 활성화되었다고 판단하지 마세요.
disable-sni높은 위험
TLS Server Name을 비웁니다. 현재 구현은 SNI를 숨기는 데 그치지 않고 인증서 검증도 강제로 건너뜁니다.

QUIC 연결 설정 및 연결 수명 주기

TUIC의 지연 관련 옵션은 QUIC 핸드셰이크, 시간 초과 및 동시 스트림 동작을 바꿉니다. 기본값이 일반적인 환경을 이미 처리하므로 서버 설정이나 문제 해결 결과에 근거가 있을 때만 덮어쓰세요.

heartbeat-interval기본값 10000밀리초
QUIC 연결 유지 신호를 보내는 간격입니다. 단위는 초가 아니라 밀리초입니다.
reduce-rtt0-RTT
QUIC 0-RTT를 허용해 연결 시간을 줄이지만 초기 데이터에는 재전송 공격 위험이 있을 수 있습니다.
request-timeout기본값 8000밀리초
TUIC 프록시 요청을 설정하는 시간 초과입니다. 현재 구현에서는 v4 클라이언트 분기만 읽고 v5에서는 무시합니다.
congestion-controller선택 사항
cubic, new_reno 또는 bbr를 선택할 수 있으며 생략하면 QUIC 라이브러리의 기본 동작을 유지합니다.
bbr-profileBBR 전용
BBR에서 standard, conservative 또는 aggressive 프리셋을 선택합니다.
max-open-streams기본값 100
동시에 열 수 있는 QUIC 스트림 수를 제한합니다. 너무 크면 메모리와 스케줄링 부담이 늘어날 수 있습니다.
fast-open선택 사항
프록시 요청 설정 대기 시간을 줄이며 현재 TUIC v4 클라이언트 분기에서 이 필드를 직접 사용합니다.

UDP 릴레이 및 패킷 크기

TUIC는 TCP 스트림과 UDP 릴레이를 모두 지원합니다. UDP 릴레이 모드는 서버 구현과 호환되어야 하며 패킷 크기는 경로 MTU를 따라야 합니다. 더 큰 값이 더 높은 처리량을 뜻한다고 해석하면 안 됩니다.

udp-relay-mode기본값 native
native 또는 quic을 선택할 수 있습니다. quic을 명시적으로 입력하지 않으면 현재 구현은 native를 사용합니다.
max-udp-relay-packet-size기본값 1252
UDP 릴레이 페이로드 상한입니다. 클라이언트는 QUIC Datagram 상한과 v4/v5 헤더 오버헤드에 맞춰 다시 조정합니다.
max-datagram-frame-size고급
QUIC Datagram 프레임 상한을 제어하며 현재 구현의 최대 제한은 1400바이트입니다.
disable-mtu-discovery고급
경로 MTU 탐색을 비활성화합니다. 연결에 MTU 문제가 있음을 확인한 경우에만 사용하세요.
recv-window-conn / recv-window고급
개별 스트림과 연결 수준의 QUIC 수신 창을 각각 제어하며 일반적으로 기본값을 유지합니다.

포트, 난독화 및 세션 적용 범위

TUIC와 Hysteria2는 모두 QUIC를 사용하지만 설정 가능한 기능은 같지 않습니다. 다른 프로토콜의 필드를 이름만 보고 추측해 복사하지 마세요.

TUIC에서 지원하지 않는 프로토콜 간 필드
기능TUIC 적용 범위사용하지 마세요
포트단일 portHysteria2의 portshop-interval
난독화프로토콜 전용 obfs 필드 없음salamander、gecko、obfs-password
연결 유지heartbeat-interval 및 QUIC 스트림AnyTLS의 idle-session-*
인증v4 token 또는 v5 UUID와 비밀번호Hysteria의 auth-str

v5 및 v4 설정 예시

아래에는 두 개의 독립된 노드를 함께 제시합니다. 실제로 사용할 때는 서버 버전과 일치하는 인증 필드 한 세트만 남기세요.

  • v5 노드에 token이 남아 있으면 현재 구현은 v4 분기로 클라이언트를 생성합니다.
  • UUID 형식이 유효하지 않아 파싱 결과가 v5 서버 인증을 통과하지 못합니다.
  • heartbeat-interval을 초 단위로 오해해 10을 입력하면 실제로는 10밀리초가 됩니다.
  • disable-sni를 활성화하면서 인증서가 정상적으로 검증될 것이라 생각하지만 현재 구현은 인증서 검증도 함께 건너뜁니다.
YAML
proxies:
  - name: tuic-v5
    type: tuic
    server: server.example.com
    port: 10443
    uuid: 00000000-0000-0000-0000-000000000001
    password: replace-with-v5-password
    sni: server.example.com
    alpn:
      - h3
    udp-relay-mode: native

  - name: tuic-v4
    type: tuic
    server: server.example.com
    port: 10443
    token: replace-with-v4-token
    sni: server.example.com
    alpn:
      - h3
    udp-relay-mode: native