인증 필드로 버전 결정
TUIC는 QUIC 및 TLS 1.3에서 작동합니다. 현재 코어에는 별도의 version 필드가 없으며 인증 필드에 따라 프로토콜 분기를 선택합니다. 비어 있지 않은 token 이 있으면 v4를, 없으면 v5를 사용합니다.
두 버전 모두 이름,type: tuic, 서버 및 포트가 필요합니다. v4에는 token을 추가하고 v5에는 UUID와 비밀번호를 추가합니다. 클라이언트 버전은 서버와 일치해야 합니다.
| 프로토콜 버전 | 필수 입력 | 반드시 생략 | 현재 구현의 선택 조건 |
|---|---|---|---|
| TUIC v4 | token | uuid、password | token이 비어 있지 않음 |
| TUIC v5 | uuid、password | token | token이 비어 있음 |
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 적용 범위 | 사용하지 마세요 |
|---|---|---|
| 포트 | 단일 port | Hysteria2의 ports、hop-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를 활성화하면서 인증서가 정상적으로 검증될 것이라 생각하지만 현재 구현은 인증서 검증도 함께 건너뜁니다.
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