Chute tvOS 릴리스 노트
Version 1.5.1 (90)
새로운 기능:
- 편집기에 프록시 체이닝 추가: 이제 모든 프록시 유형의 정책이
underlying-proxy를 제공하므로 그 연결이 지정한 정책을 거쳐 연결됩니다. 스트림 프로토콜은 업스트림의 스트림을 타고, Hysteria2, TUIC, MASQUE와 HTTP/3 기반 XHTTP는 업스트림의 UDP 릴레이를 타며, WireGuard와 AmneziaWG는 그 터널을 통과하고, SSH와 AnyTLS 세션은 그 위로 열립니다. 순환하거나 16홉보다 깊거나 존재하지 않는 정책을 가리키는 체인은 곧바로 연결을 시도하는 대신 로드할 때 거부됩니다. Tailscale을 제외한 모든 프록시 유형을 체이닝할 수 있으며, TUIC, Hysteria2, WireGuard, AmneziaWG, ShadowTLS 정책은 그 외에는 읽어 들인 그대로 다시 기록됩니다 - 그룹 수준 업스트림 추가: 그룹 편집기가
underlying-proxy=를 한 번 기록하며(이름에 쉼표나 공백이 있으면 따옴표로 묶음), 해당 그룹의 모든 멤버가 거기에 지정한 하나의 정책을 거쳐 서버에 도달합니다 - 「고급」 아래에 「프런트 프록시」 행 추가:
global-underlying-proxy를 기록하며, 「없음」과 프로필의 정책 및 그룹 중에서 선택하고, 자체 업스트림을 지정하지 않은 모든 노드를 포괄합니다.close-if-proxy-chain-missing은 행이 없으며 기록된 그대로 유지됩니다 - 규칙 제공자와 프록시 제공자 편집기에 「다운로드 정책」 추가:
policy=는 선택한 정책을 거쳐 해당 목록을 가져오고, 「없음」을 선택하면 직접 다운로드합니다. 프록시 제공자 편집기는 제공자의underlying-proxy도 유지합니다 - Shadowsocks 편집기에 UDP over TCP 추가:
udp-over-tcp스위치와, 스위치가 켜져 있을 때 표시되는 「UoT 버전」 선택기(1 또는 2, 버전을 적지 않으면 2를 사용)를 제공합니다. 이 프록시의 UDP가 TCP 연결 안에 실려 전달되므로, UDP를 지원하지 않는 업스트림을 거쳐도 계속 동작합니다. 서버가 UoT를 지원해야 하며, mihomo는 버전 1을 사용합니다. 선택기에 표시할 수 없는 버전은 다른 버전을 고를 때까지 기록된 그대로 유지됩니다 - 연결 상세에 「프록시 체인」 행 추가: 체인을 거친 연결은 라우팅한 정책 옆에 모든 홉(
Airport/HK-01 → Landing)을 표시합니다. 웹 콘솔의 요청 상세와 UDP 목록에도 같은 경로가 표시되며, HAR 내보내기에도 포함됩니다 - 릴레이 그룹 추가(
relay, Clash 및 mihomo와 동일): 멤버가 작성된 순서대로 체이닝됩니다. 첫 번째 멤버는 직접 연결하고, 이후의 각 멤버는 앞선 멤버들을 거쳐 연결하며, 마지막 멤버가 목적지에 연결합니다. 그룹 유형 선택기에 Relay가 추가되었으며, 릴레이 그룹은 「이름」, 「그룹 유형」, 「숨김」을 표시하고, 멤버를 그 순서대로 유지하며, 저장해도 매개변수가 보존됩니다. 동적 소스 없이 멤버가 두 개 미만이면 전용 메시지와 함께 거부됩니다 - 무작위 그룹 추가(
random, Shadowrocket과 동일): 연결마다 멤버를 무작위로 고르며, UDP는 UDP를 지원하는 멤버 중에서만 고릅니다. 무작위 그룹에는 바꿀 선택 항목이 없으므로 그룹의 정책을 고르는 화면에서는 모두 제외되며, 그룹 편집기에서도 무작위 그룹으로 유지됩니다 - VMess와 VLESS에 UDP 지원 추가: 이전에는 둘 중 어느 쪽으로 보낸 UDP든 그대로 거부되었지만(
udp-policy-not-supported-behaviour를 따랐으며 기본값은 REJECT), 이제 mihomo, sing-box, Shadowrocket처럼 목적지마다 연결 하나로 전달됩니다 - 규칙 세트를 불러오지 못한 제공자에 사유 표시 추가: 끝내 성공하지 못한 다운로드나 크기 한도를 넘은 페이로드 같은 사유가 해당 행에 빨간색으로 표시됩니다. 이전에는 이런 제공자가 정상 동작하는 제공자와 똑같아 보였지만, 이를 가리키는 규칙은 모두 아무것에도 일치하지 않았습니다
- 편집기가 표시할 수 없는 내용을 더 이상 버리지 않습니다: 규칙은 행이 없는 옵션(
notification-text,no-resolve,update-interval등)을 유지하고, 사전 매칭은 정책 뒤에 REJECT일 때만 기록하며, SUBNET 규칙의KEY:value를 불러오고, RULE-SET에서 SYSTEM, LAN, 제공자, URL을 구분하며, 올바르게 파싱되는 AND / OR / NOT 하위 규칙을 만들 수 있습니다. 그룹은 선언된 멤버를 불러오고,policy-path로 합성된 제공자는 숨기며, 필터,include-*,default=,interrupt-exist-connections와 알 수 없는 매개변수를 원래 순서대로 유지합니다. 호스트는#proxy와 주석을 포함한 서버 목록 전체를 유지하고, DoH / DoT / DoQ / DoH3 값을 표시하며, 스크립트 유형이 추가되었습니다. Map Local은 이진 본문, 데이터 유형, 상태 코드를 유지하고, 값에 콜론이 들어간 Surge 스타일 헤더도 유지합니다. 모듈은#!system_version과 다른 플랫폼용 줄을 유지합니다 - 편집기가 표시하지 못하던 설정에 행 추가: DoT / DoQ / DoH3, DIRECT용·프록시 서버용·폴백용 전용 DNS, SVCB, 규칙을 따르고 인증서 검사를 건너뛸 수 있는 암호화 DNS, 「UDP 미지원 정책」,
proxy-test-url/internet-test-url/test-timeout, MitM HTTP/2와 QUIC 차단 및 제외 호스트 이름, Replica 필터 모드, 정책 선택기의 REJECT 계열과 내장 PROXY, FINAL의dns-failed, 정책 호스트로 쓰는 IPv6 리터럴. 또한 헤더 재작성에 「헤더 교체(정규식)」가, URL 재작성에 「거부(배열)」와 「거부(투명 GIF)」가, 스크립트에 generic 유형과 이벤트 이름이 추가되었고, 포트 범위, HOSTNAME-TYPE, PROTOCOL, 제공자 형식에는 입력할 수 있는 값을 보여 주는 자리 표시자가 생겼습니다 tun-included-routes추가: 나열한 CIDR이 기본 라우트 다음으로 터널의 라우트에 추가됩니다. 시스템은 더 구체적인 라우트를 우선하므로, 원래라면 네트워크 인터페이스 자체의 서브넷이 가져갈 대역도 Chute를 거치게 됩니다. 터널을 끊어 버릴 항목(루프백, 터널 자체의 서브넷, 링크 로컬, 멀티캐스트, 브로드캐스트, 프리픽스 길이 0)은 사유를 로그에 남기고 거부되며, 사설 대역은 경고와 함께 허용되고, 편집한 목록은 터널을 재시작하지 않고 핫 리로드로 적용됩니다- 본문 재작성에 jq 추가: 구성 파일에 작성한
http-request-jq와http-response-jq가 JSON 본문에 실제 jq 프로그램을 실행합니다(Apple TV의 본문 재작성 편집기에서는 설정할 수 없습니다). 잘못된 프로그램은 오류로 보고되고 해당 규칙은 건너뛰며, JSON이 아닌 본문, 실행에 실패한 프로그램, 빈 출력의 경우에는 모두 본문을 그대로 둡니다 - 범용 스크립트 추가:
type=generic스크립트는 자동 트리거가 없으며,GET /api/scripts와POST /api/scripts/run을 통해 요청할 때만 실행됩니다 - 전용 DNS 풀 추가:
direct-dns-server는 규칙이 DIRECT로 보내는 도메인을,proxy-dns-server는 프록시 서버 자체의 호스트 이름을 해석하고,fallback-dns-server는 주 서버가 응답하지 않을 때 조회됩니다. 각 풀은 전역 서버로 폴백합니다 - DNS 업스트림에
#proxy/#proxy=<policy>추가(DoQ와 DoH3 포함): QUIC 리졸버는 정책의 UDP 릴레이를 타고, UDP를 지원하지 않는 정책은 해당 서버를 직접 조회하지 않고 건너뛰며, 정책을 거쳐 보내는 일반 리졸버는 DNS over TCP로 전환됩니다. 또한 DNS over UDP를 차단하는 경로를 위해 평문tcp://업스트림도 받아들입니다 encrypted-dns-follow-outbound-mode,allow-dns-svcb(켜지 않으면 HTTPS와 SVCB 질의에 빈 응답을 반환) 및 서버별#h3,#skip-cert-verify,#disable-ipv4,#disable-ipv6,#disable-qtype=추가- 로컬 DNS 매핑 기능 확장:
[Host]항목이 나열한 모든 서버를 유지하고 병렬로 조회하며, 하나의 도메인을 여러 주소에 매핑하고, 규칙 세트(RULE-SET:<url>)를 키로 사용할 수 있으며, 해당 도메인에 대해type=dns스크립트(script:<name>)를 실행합니다 FINAL,<policy>,dns-failed추가: 이름을 해석할 수 없을 때 연결을 닫지 않고, FINAL 정책으로 원격 해석을 사용해 연결합니다- REJECT 계열을 실제 정책으로 추가(REJECT-DROP, REJECT-NO-DROP, REJECT-TINYGIF, REJECT-IMG, REJECT-DICT, REJECT-ARRAY, REJECT-200, REJECT-VIDEO): 각각 문서에 명시된 본문으로 HTTP 요청에 응답하며, 30초 안에 50회를 넘게 거부된 호스트는 REJECT-DROP으로 격상됩니다
- 인라인 규칙 세트 추가: 구성 파일의
[Ruleset Name]섹션을RULE-SET,<name>으로 참조할 수 있으며, 인라인 규칙 세트끼리의 참조도 가능합니다(최대 8단계까지 중첩, 순환 참조는 거부). 규칙 제공자 목록에 이들이 표시되지만, 편집은 구성 파일에서 합니다 - DEST-PORT, SRC-PORT, IN-PORT 범위와 비교(
80-81,>=50000,/목록),HOSTNAME-TYPE값IPv4,IPv6,DOMAIN,SIMPLE을 추가했으며, IN-TYPE, IN-USER, IN-NAME 규칙이 제대로 동작합니다. 이 규칙들은 이제 시험 실행에서만이 아니라 실제 트래픽과도 대조됩니다 - MitM 제어 추가: HTTP/2 복호화(
h2), HTTP/3가 복호화를 우회하지 못하도록 복호화 대상 호스트로 가는 QUIC 차단(auto-quic-block), 복호화 대상에서 호스트 제외, 호스트 목록 키워드<ipv4-address>,<ipv6-address>,<simple-hostname>대조 - 도메인 기준 QUIC 라우팅 추가: 클라이언트의 QUIC Initial에서 이름을 읽고, 여러 Initial에 나뉜 ClientHello를 재조립하며, 이름을 알아낼 때까지 흐름을 보류하므로 IP 주소로 직접 향하는 HTTP/3 연결도 DOMAIN 규칙으로 라우팅됩니다
icmp-auto-reply추가(기본 켜짐): 터널 안의 ping에 시간 초과 없이 IPv4와 IPv6 모두 로컬에서 응답합니다- 가져오기 범위 확장: mihomo GEOSITE와 카테고리 GEOIP 규칙이 실제로 동작하는 규칙 세트로 확장되고,
policy-path그룹은update-interval, 필터, 포함 목록을 갖춘 제공자로 합성되며, mihomoSUB-RULE은 AND 규칙으로 확장됩니다. sing-boxdetour와 mihomodialer-proxy는 프록시 체이닝으로 가져오고, WireGuardallowed-ips는 컴파일·적용되어 분할 터널이 더 이상 모든 목적지를 삼키지 않으며, 정책의interface=/allow-other-interface=는 해당 정책의 연결을 하나의 네트워크 인터페이스에 고정합니다 - 스크립트 API 확장:
$httpAPI는 소켓을 열지 않고 엔진 자체 라우트를 호출하고,$httpClient는policy를 따르며,read-etc-hosts는 hosts 파일을 DNS에 제공하고,$event.name은 실제로 발생한 이벤트를 보고합니다
개선 사항:
- 앱이 표시하는 모든 문자열이 이제 8개 언어 모두로 제공됩니다: Tailscale 행을 비롯해 영어로 표시되던 레이블 8개가 번역되었고, 앱에 내장된 문구와 언어 파일이 서로 달랐던 텍스트 88개가 이제 일치합니다
- Chute 앱 간 용어 통일: 로그의 심각도 필터와 일곱 개 배지는 엔진의 수준 이름을 사용하고, 로드 밸런스 레이블은 Chute Mac을 따르며, 웹 콘솔, 트래픽 캡처, 모의 응답, 로컬 DNS 매핑, HTTP 제어 API가 8개 언어 각각에서 일관된 이름으로 표시됩니다
- 게시된 프로필을 가져와도 더 이상 라우팅이 사라지지 않습니다:
dns-server가 암호화 DNS URL을 받아들이고, 리스너 줄에 비밀번호를 쓸 수 있으며, 따옴표로 묶인 그룹 멤버가 유지되고, sing-box 논리 규칙이 문서대로 변환됩니다.PASS멤버는 REJECT가 되는 대신 제거되고, 지원하지 않는 프로토콜이나 그룹 유형은 그룹 전체를 무너뜨리는 대신 경고만 남깁니다. 가져온 mihomo 프로필에서 절대 일치할 수 없는 규칙이 목록의 대부분을 차지하던 상태에서 거의 없는 수준으로 줄었습니다 - 규칙 세트의 메모리 사용량 대폭 감소: 제공자를 차례대로 다운로드하므로 35번째 이후에 한꺼번에 실패하지 않고, 변환 시 최대 사용량은 62–73% 줄었으며, 색인 연결 수는 제한되고 메모리 압박 시 해제됩니다. Apple TV에 비해 너무 큰 페이로드는 거부되며, 그 사유가 해당 제공자의 행에 표시됩니다
- 리소스 한도를 두어 지나치게 큰 구성 때문에 터널 확장 프로그램이 메모리 한도를 넘지 않도록 했습니다: MitM 인증서 저장소, 캡처 백로그, 스크립트 크기와 개수, 콘솔 요청 예산, Tailscale 피어, DNS 캐시에 Apple TV에서 각각 상한이 적용됩니다
- 지연 시간 테스트가 올바른 대상을 사용합니다: 그룹의
test-url과test-timeout, 프로필의proxy-test-url, 멤버 자체의test-url과expected-status가 모두 반영되며, 체이닝된 노드는 직접이 아니라 체인을 통해 측정됩니다 - 웹 콘솔과 제어 API: 런타임에 추가한 규칙이 같은 프로필을 다시 로드한 뒤에는 남지 않고, 로그 커서가 단조 증가하므로 폴링이 항목을 건너뛰지 않습니다
- ShadowTLS가 이제
sni=가 지정된 경우 sing-box처럼 가림용 사이트의 인증서를 검사합니다.skip-cert-verify=true로 검사를 끌 수 있고(이전에는 이 옵션이 무시되었으며 인증서를 전혀 검사하지 않았습니다),sni=가 없으면 경고와 함께 검사를 건너뜁니다
버그 수정:
- 앱 업데이트 후 구성 목록이 사라지던 문제 수정: 구성은 앱의 Caches 폴더에 저장되는데, 이곳은 tvOS가 앱에 쓰기를 허용하는 유일한 위치이면서 시스템이 공간이 필요할 때마다 비우는 곳이어서, 업그레이드 후 목록이 비어 있고 그 이유를 알려 주는 화면도 없을 수 있었습니다. 이번 버전부터 모든 구성은 시스템이 지우지 않는 앱의 설정 저장소에도 보관됩니다(텍스트는 256 KB 이하일 때, 구독 주소와 새로 고침 간격은 항상). 없어진 파일은 실행 시와 앱이 포그라운드로 돌아올 때 다시 기록되고, 주소만 남아 있던 구성은 다시 다운로드되며, 메인 화면에 「N개의 구성을 복원했습니다.」가 표시됩니다. 직접 삭제한 구성은 기록에서도 지워지므로 다시 나타나지 않습니다. 이 버전을 처음 실행하기 전에 사라진 구성이나 주소에서 받지 않은 256 KB 초과 구성은 되살릴 수 없으며, 앱을 한 번도 열지 않은 상태에서 제어 센터로 터널을 시작하면 아무것도 복원되지 않습니다
- Apple TV의 SSID 설정 수정: SSID가 없는 항목(
TYPE:,BSSID:,ROUTER:)이 있으면 「SSID 일시 중단」을 열 때 예외가 발생했고, 목록은 방문할 때마다[SSID Setting]을 다시 기록했으며, SSID 및 서브넷 편집기는 행이 없는 멤버를 버렸습니다. 이제 목록은 단순한"<name>" suspend=true항목만 표시하고 나머지는 그대로 두며, ssid 그룹 편집기는 멤버를 선언 순서대로 유지하고 「일치 기준」 선택을 제공합니다. 이 중 하나를 저장하면 해당 설정은 Apple TV에서 사용할 수 없으며 iOS와 macOS에서 사용하도록 저장된다고 알려 줍니다 - 완전히 표시할 수 없는 항목을 편집기가 손상시키던 문제 수정: 주소가 여러 개인
[Host]항목은 여는 순간 첫 번째 주소만 남았고, 쉼표가 들어간[Script]값(크론0 8,20 * * *, JSON 인수)은 저장할 때마다 잘렸으며,[Body Rewrite]줄은 추가 정규식 쌍을 잃었고, 규칙·그룹·호스트·Map Local·헤더 재작성 줄은 행이 없는 옵션을 잃었으며, 「고급」은 방문할 때마다 목록 항목 안의 공백을 제거했습니다. 항목을 열지 않고 저장한 프로필은 영향을 받지 않았기 때문에 이 문제가 눈에 띄지 않았습니다 - 다운로드가 뒤섞이던 문제 수정: 이제 각 다운로드는 자체 임시 파일에 기록되고, 읽은 뒤에, 그리고 다운로드나 읽기가 실패했을 때도 삭제됩니다. 따라서 관리형 새로 고침이 첫 다운로드를 계속 다시 읽지 않고, 제안된 이름이 같은 두 주소가 서로를 덮어쓰지 않습니다. 또한 서버가 제안한 파일 이름으로 파일의 저장 위치가 정해지는 일도 없어졌습니다
- 파일 이름으로 형식을 판단하던 문제 수정: 「URL에서 다운로드」와 관리형 구성 새로 고침이 이제 주소가 제공하는 내용을 본문으로 판단하므로, Clash를 제공하는
.conf주소는 추가할 때 변환되고 새로 고침에서 그런 내용을 발견하면 파일을 그대로 둡니다. 변환은 MANAGED-CONFIG 헤더가 붙기 전에 이루어지고, 변환에 실패하면 첫 번째 오류가 표시되며, 변환 알림은 화면에 개수가 표시되고 로그에도 기록됩니다 - Wi-Fi 페이지의 업로드와 다운로드 수정:
/up이/upload와 마찬가지로 Clash와 sing-box를 변환하고, 둘 다<name>.conf로 저장하며, 다른 구성이 이미 쓰는 이름은 거부됩니다./download는 더 이상.conf.conf를 만들지 않고 인코딩된filename*를 보내며,/delete는 이름을 NFC로 비교하고 정확히 일치하는 항목을 먼저 찾습니다. 따라서 다른 유니코드 형태로 쓴 같은 이름으로 사용 중인 구성을 삭제하거나 사용 중 검사를 빠져나갈 수 없습니다 - 같은 이름의 구성 위에 묻지 않고 저장되던 문제 수정: 편집기와 「URL에서 다운로드」가 이제 먼저 묻고, 터널이 실행 중인 구성을 덮어쓰면 이를 다시 로드합니다
- 숨긴 정책 그룹이 터널의 그룹 목록과 글로벌 목록에 나타나던 문제 수정. 사용 중인 숨긴 그룹은 계속 표시되고, select 그룹을 가리키는 글로벌은 이름으로 나열·선택·복원됩니다
- Wi-Fi 업로드 페이지의 QR 인계 수정:
chute://tv?url=인계가 다시 페이지에 인라인으로 들어가, 스캔하면 페이지 안내대로 Chute iOS 앱이 열립니다. iPadOS가 데스크톱 브라우저로 보고하는 탓에 휴대폰 전용 검사에서 빠지던 iPad에서도 이제 인계됩니다. 그리고 탭 없이는 사용자 지정 스킴을 거부하는 브라우저에는 이제 「Chute 앱에서 열기」 버튼이 표시되며, 이 버튼은 페이지의 9개 언어로 현지화되어 있습니다 - 여러 충돌 수정: 설정 › 세션에서,
loglevel = none을 지정한 프로필의 구성 편집기에서, 터널이 절반만 기록한 세션에서(그 세션은 이후 열 수 없었습니다), 라이선스 서버에서 예상치 못한 응답을 받은 뒤 실행할 때마다, 라이선스를 읽을 수 없을 때 실행 시와 「라이선스 보기」에서, 그리고 공유 폴더에 불필요한 시스템 파일이 있을 때 구성 목록을 열 때마다 발생하던 충돌을 수정했습니다. 이제 설정에서 필드를 비우면 실제로 비워집니다 - 예정된 구독 새로 고침이 구성 목록 표시와 편집 저장을 최대 30초 동안 붙잡아 두던 문제 수정: 이제 새로 고침은 다운로드가 완료되면 이어서 진행되며 다른 작업을 붙잡아 두지 않습니다
- 두 스레드가 같은 데이터를 동시에 변경해 발생하던 충돌 수정(콜드 실행 중, 세션 로그를 읽는 중, 세션 목록을 새로 고치는 중)
- 재시작한 터널이 이전 실행의 첫 로컬 포트와 TCP 시퀀스 번호를 재사용해, 이전 연결을 아직 유지하던 WireGuard 피어가 리셋으로 응답하던 문제 수정: 이제 터널의 TCP 스택은 시스템의 난수 소스로 시드를 만들고 RFC 6528에 따라 초기 시퀀스 번호를 고릅니다
- 터널을 거치는 XHTTP가 앱의 첫 쓰기 이후 멈춰, TLS 핸드셰이크가 끝나지 않고 업로드가 청크 하나만 보내던 문제 수정: 이제 각 쓰기가 순서대로 완료되며, 업로드를 기다리는 데이터가 1 MB를 넘으면 그 데이터가 다 빠져나갈 때까지 다음 쓰기가 기다립니다
PROTOCOL,TCP와PROTOCOL,UDP가 한 번도 일치하지 않던 문제 수정: 이제 모든 인바운드가 자신의 전송 방식을 판정하므로, AND 규칙으로 QUIC을 차단하는 일반적인 방법이 동작합니다- AND / OR / NOT 안의
RULE-SET과DOMAIN-SET이 항상 거짓으로 평가되던 문제(그 때문에NOT,((RULE-SET,…))가 국내 트래픽까지 거부했습니다)와 논리 규칙 안의SCRIPT가 항상 참으로 평가되던 문제 수정 - 이름으로 기록한
RULE-SET,<name>,<policy>,no-resolve가no-resolve를 잃던 문제, GEOIP와 IP-ASN의UNKNOWN이 한 번도 일치하지 않던 문제, Map Local의status-code=가 HTTP/2에서 무시되던 문제, 평문 HTTP에서 응답 헤더 재작성이 경로만 대조해 전체 URL로 작성한 패턴이 절대 일치할 수 없던 문제 수정 block-quic이 Surge의 값 중 하나만 받아들이고, 다른 값으로는 QUIC 차단이 전혀 이루어지지 않던 문제 수정- 스크립트 API 수정:
$klne.getPolicyGroups()와selectPolicy()가 처음 사용할 때 더 이상 예외를 던지지 않고,reloadConfiguration()은 실제로 다시 로드하며,getActiveConnections()는 실제 호스트, 포트, id를 보고하고,closeConnection()은 실제로 연결을 닫으며,requires-body가 있는 before-send 스크립트가 마침내 본문을 받습니다 [Replica] keyword-filter가 키워드 포함 여부를 확인하지 않고 호스트 이름 전체와 비교해,keyword-filter = google이www.google.com을 포괄하지 못하던 문제 수정- Apple TV에서 PROCESS-PATH와 PROCESS-NAME-REGEX 규칙이 프로세스가 아닌 이름과 대조되던 문제 수정: PROCESS-NAME과 마찬가지로 이 규칙들은 macOS에서만 동작하며 Apple TV에서는 일치하지 않습니다
- 다양한 안정성 및 성능 개선
Version 1.4 (75)
새로운 기능:
- 제어판에 「웹 콘솔 주소」 행 추가: 콘솔 리스너가 실제로 올라온 뒤에만 나타나며, 열면 액세스 토큰이 담긴 URL의 QR 코드를 보여줍니다. 휴대폰으로 스캔하면 바로 로그인되므로, 주소와 32자리 16진수를 리모컨으로 옮겨 적을 필요가 없습니다
- 설정에 오프라인 진단 번들 추가. 터널이 실행 중이지 않아도 앱이 직접 만듭니다: 기기와 앱 정보, tvOS가 보관한 VPN 프로필 상태, 선택한 설정의 요약과 구문 오류, 네트워크 섹션(도달성, 링크 종류, DNS 서버, 로컬 주소와 인터페이스), 민감 정보를 지운 설정 앞부분, 이전 실행이 끝난 방식, 최신 세션의 로그 샤드, 업로드 대기 중인 충돌 보고서. tvOS에는 공유 시트가 없으므로 아카이브는 추측할 수 없는 경로에서 동작하는 일회용 로컬 HTTP 서버가 제공하며 QR 코드로 표시됩니다. 화면을 닫으면 링크는 더 이상 동작하지 않습니다
- 세션 로그에 심각도 필터 추가(전체, Notify+, Warning+, Fatal). 화면 키보드로 검색어를 입력하는 대신 「경고만 보기」가 한 번의 클릭으로 끝납니다. 파서가 분류하지 못한 줄은 절대 숨기지 않습니다
- 세션 상세에 재작성 출처 추가: 「REWRITES」 섹션에 요청을 라우팅한 규칙과 정책 옆으로, 요청을 바꾼 URL 재작성, 헤더 재작성, 본문 재작성 또는 모의 응답 규칙이 표시됩니다
- 설정 편집기에 「Wi-Fi 접근 허용」 행 추가. Surge의
http-listen = 0.0.0.0:…이나 sing-box의allow-lan을 가져오면 생기는 키이며, 이전 편집기로는 아예 표시할 수 없던 상태입니다. 켜져 있는 동안 두 리스너 행은 켬으로 표시되고 잠깁니다(엔진이 두 리스너를 직접 넓히므로) - 내장 언어에 프랑스어 추가, 그리고 내장 8개 언어 전부를 App Store에 선언
- 웹 콘솔에 현재/기록 탭, 연결 상세 보기(일치한 규칙, 규칙 출처, 정책, 어댑터, DNS 출처, 종료 사유, 요청과 응답 본문), 어떤 재작성 규칙이 실행됐는지 보여주는 규칙 페이지, 진단 페이지(메모리 사용량, CPU, 가동 시간, 흐름 수, 이전 실행이 끝난 방식, 거부 집계, 이벤트 로그, Tailscale 스냅샷, ping / DNS / 출구 / URL 테스트 프로브) 추가. 콘솔은 이제 9개 언어를 모두 완전히 지원합니다. TV 자체에는 파일을 둘 곳이 없으므로, tvOS 사용자는 런타임 진단 번들과 HAR 내보내기도 이 콘솔에서 받습니다
- HTTP 제어 API 엔드포인트 추가:
/api/health,/api/events,/api/tailscale,/api/diagnostics/아래의 프로브,/api/connections/export?format=har,/api/diagnostics/bundle,/api/rewrites와/api/mitm/hosts를 통한 재작성 규칙 및 MitM 호스트 관리, 규칙 테이블에 요청을 시험 대조하는POST /api/rules/match(두 번의 DNS 패스 모두 보고), 재로드 없이 로그 수준과 하위 시스템 섹션을 바꾸는GET|PUT /api/loglevel, 프로필을 적용하지 않고 검사하는POST /api/config/validate
개선 사항:
- 설정에
external-http-secret이 없으면 HTTP 제어 API가 더 이상 인증 없이 열리지 않습니다. 엔진이 토큰을 생성하고 「웹 콘솔 주소」의 QR 코드가 그 토큰을 담습니다. 익명 접근을 유지하려면external-http-secret = none을 설정하세요. 또한 와일드카드 수신 주소는 더 이상 루프백으로 취급되지 않습니다 - 큰 목록에서 규칙 매칭이 훨씬 빨라졌습니다: RULE-SET과 DOMAIN-SET 페이로드는 연결마다 스트리밍 스캔하는 대신 다운로드 또는 복원 시 색인되고, 도메인 규칙만으로 이루어진 규칙 테이블은 해시 플랜으로 대조합니다. 5만 줄 목록의 조회당 시간이 약 94 ms에서 2 ms 미만으로 줄었고, 색인당 메모리는 약 100 KB입니다
- UDP 흐름은 한 번만 대조합니다: 흐름의 판정을 60초 동안 기억하므로 이후 데이터그램은 두 번의 매칭 패스와 그 사이의 DNS 조회를 건너뜁니다
- 네트워크 전환 후 복구 개선: 업스트림 출발지 주소가 어떤 인터페이스에도 더 이상 없는 터널은 유휴 시간 초과까지 앱을 붙잡지 않고 바로 닫히며, 연결은 되지만 데이터가 흐르지 않는 경로는 블랙홀로 보고됩니다
- 세션 로그가 8 MB 샤드로 기록됩니다(실행당 최대 8개, 가장 오래된 것부터 삭제). 로그 화면은 실행 전체를 메모리로 읽는 대신 최신 샤드부터 샤드 하나 분량만 가져오고, 더 오래된 샤드를 생략했음을 알려주며, 회전을 넘어 기록 중인 샤드를 계속 따라갑니다
- 엔진은 실행 중 실행 마커를 유지하고, 다음 시작 때 이전 실행이 정상 종료됐는지 강제 종료됐는지를 로그 헤더,
/api/status, 두 진단 번들에서 보고합니다 - HAR 내보내기를 이제 엔진이 기록된 프레임으로부터 만들므로 상태 코드, 타임스탬프, 타이밍이 실제 값이며, 각 항목에는
_kl아래에 선택된 정책, 일치한 규칙, 재작성 적중이 담깁니다 - 구매 페이지에서 판매하는 세 기능(다중 설정, 로컬 프록시 서버 제어, 트래픽 레코더)만 라이선스가 필요합니다. HTTP API와 웹 콘솔 스위치, 프로토콜 스니핑, Optimus DNS, DNS 캐시 삭제, 「웹 콘솔 주소」 행은 더 이상 라이선스를 요구하지 않으며, 터널이 꺼진 무료 사용자에게는 구매 시트 대신 터널을 켜라고 안내합니다
- 콘솔이 루프백 주소에 바인딩된 경우, 열리지 않는 QR 코드를 내놓는 대신 이 Apple TV에서만 열린다는 사실과 무엇을 설정해야 하는지를 알려줍니다. 액세스 토큰도 방 안 모두가 볼 수 있는 화면에 더는 표시하지 않습니다
- 구매 안내에는 한 번의 구매가 Apple TV 3대와 iPhone 또는 iPad 3대를 포함한다고 명시했습니다. IAP 구매 복원에서 아무것도 찾지 못하면 알림에 매뉴얼 보기가 표시되어, 앱 언어로 된 크로스 플랫폼 라이선스 안내를 QR 코드로 보여줍니다
loglevel = info에서 1 MiB 이상을 옮긴 대용량 흐름은 종료 시 원격 쪽과 앱 쪽에서 각각 얼마나 기다렸는지를 한 줄로 기록합니다
버그 수정:
- TUN 모드의 MitM 수정: MitM 규칙에 일치한 호스트가 시간 초과까지 멈춰, HTTPS 헤더 재작성, 본문 재작성, 모의 응답, 복호화 캡처가 앱 트래픽에 전혀 적용되지 않았습니다(로컬 HTTP/SOCKS5 프록시를 거치는 트래픽은 영향 없음)
allow-wifi-access가 효과가 없던 문제 수정: 로컬 HTTP와 SOCKS5 리스너가 루프백에 머물러 Wi-Fi의 다른 기기가 접근할 수 없었습니다. 이제 이 플래그(그리고 가져오기 시 sing-box의allow-lan)가 두 리스너를 넓히고, 끄면 다시 바인딩합니다- 「웹 콘솔 주소」 행이 나타날 수 있게 된 뒤로 제어판 두 번째 섹션의 스위치를 켜고 끄면 앱이 충돌하던 문제 수정. 행 단위 새로 고침 도중 테이블의 행 수가 바뀌고 있었습니다
- 엔진이 일정 크기에서 로그를 회전하기 시작한 뒤로 세션 화면이 실행의 임의 구간만 보여주고, 여덟 번째 회전 이후 세션이 날짜를 잃던 문제 수정. 샤드는 이제 번호순으로 정렬되며 실시간 보기도 회전 지점에서 멈추지 않습니다
- 로그 화면이 세션의 모든 샤드를 한꺼번에 메모리로 읽던 문제(Apple TV에서 최대 64 MB의 텍스트)와, 심각도 필터가 숨겨진 항목에 속한 여러 줄 항목의 이어지는 줄을 통과시키던 문제 수정
- MitM HTTP/1.1에서 응답 헤더 재작성이 적용된 것으로 기록되면서도 클라이언트는 원래 헤더를 받던 문제와, 전체 URL로 작성한 규칙이 한 번도 일치하지 않던 문제 수정
- 모의 응답이 요청 헤더로 응답을 만들던 문제(상태 줄 자리에 요청 줄, 요청 헤더 그대로 전달, 잘못된 Content-Length)와 평문 HTTP에서 원본 서버의 헤더를 앞에 보내던 문제 수정
- 프로토콜 스니핑이 Host 헤더나 역방향 DNS 이름을 제공했을 때
no-resolveIP 규칙(IP-CIDR, GEOIP, IP-ASN)이 IP 리터럴로 향하는 연결을 건너뛰던 문제 수정. 스니핑된 IP 리터럴은 더 이상 DOMAIN 규칙에도 일치하지 않습니다 - RULE-SET 페이로드에서 내용 뒤에 옵션이 붙은 줄(
GEOIP,CN,no-resolve,DOMAIN,example.com,force-remote-dns)이 버려지거나 아무것에도 일치하지 않던 문제와, AND/OR/NOT 하위 규칙이no-resolve를 잃던 문제 수정 - HOSTNAME-TYPE이 한 번도 일치하지 않던 문제 수정: 레코드 유형은 이제 IPv4로 연결하면 A, IPv6로 연결하면 AAAA입니다. 규칙 편집기의 자리 표시자는 HOSTNAME-TYPE에 PROTOCOL의
http | https를, IN-TYPE에TCP | UDP를 보여주고 있었고, 이제 둘 다 해당 규칙이 실제로 받는 값을 안내합니다 - 스니핑된 Host 헤더의 대괄호 IPv6 리터럴(
[2001:db8::1]:8080)이 호스트 이름[2001로 읽히던 문제 수정 - select 그룹이 첫 번째 멤버가 아닌 항목으로 설정된 상태에서 터널을 시작하면 「정책 그룹 전환」 알림이 뜨고, 시작 후 재구성이 플래핑 경고를 유발하던 문제 수정. 기억된 선택이 없는 그룹은 첫 번째 멤버로 강제되지 않고 프로필의
default=를 따릅니다 - 문서화된 표기인
external-http-controller = *:9090과:::9090이 거부되어 컨트롤러가 조용히 시작되지 않던 문제 수정 - 높은 부하에서 XHTTP 전송이 간헐적으로 충돌하던 문제 수정
- 라이선스 화면이 다른 제품의 인증서를 Chute 번들로 표시하던 문제 수정. 이 앱이 정당하게 보유할 수 없는 종류는 이제 「알 수 없음」으로 표시되며 Android 라벨을 추가했습니다
- 정보 화면의 「Chute iOS」 QR 코드가 끊어진 App Store ID를 가리키던 문제와, 평가가 이 앱 대신 iOS 페이지를 열던 문제 수정
- Wi-Fi 업로드 페이지의 레이아웃 수정
- 중국어와 태국어의 재작성 계열 이름을 매뉴얼 및 설정 파일 자체의 섹션 이름과 일치하도록 수정
- 다양한 안정성 및 성능 개선
Version 1.3 (62)
새로운 기능:
- 정책 편집기에 XHTTP 전송 추가: 스위치, 모드(auto, packet-up, stream-up, stream-one), 경로, 호스트 설정 지원 — Trojan, VMess, VLESS용
- AEGIS-128L 및 AEGIS-256 Shadowsocks 암호화 방식 추가
- 누락되어 있던 Shadowsocks 2022(SS2022) 암호화 방식 추가:
2022-blake3-aes-128-gcm,2022-blake3-aes-256-gcm,2022-blake3-chacha20-poly1305 - TLS 정책용 ECH(Encrypted Client Hello) 설정 추가: 활성화 스위치, 고정 ECH 설정(
ech-config), 가림용 이름 재정의(ech-public-name) - 클라이언트 지문(uTLS)을 정책별로 설정하고 프로필 전체 기본값도 추가
- 트래픽 난독화 기능을 갖춘 WireGuard 변형인 AmneziaWG 프로토콜 추가
- 작업을 막는 알림을 대체하는 tvOS 포커스 탐색 지원 설정 오류 보고 화면 추가
- TLS 1.3용 X25519MLKEM768 양자 내성 하이브리드 키 교환 추가
개선 사항:
- 정책 편집기가 저장할 때 현재 화면에서 편집할 수 없는 기존 옵션(ECH, ALPN, 인증서 고정,
test-url,udp-relay)을 유지합니다
버그 수정:
- 잘못된
IP-CIDR규칙으로 인한 터널 충돌 수정 - SSH
idle-timeout및 REALITYspiderx설정이 잘못된 키로 기록되어 저장 시 삭제되던 문제 수정 - 언어 전환 시 충돌 수정
- 화면 컨트롤 표시 문제 수정
- 다양한 안정성 및 성능 개선
Version 1.2 (45)
새로운 기능:
- Tailscale 내장 프록시 유형 추가: Tailscale 계정을 설정하고 tailnet에 참여하여 Apple TV 트래픽을 Tailscale 노드를 통해 전달할 수 있습니다. 별도 클라이언트가 필요하지 않습니다
- Tailscale 컨트롤 패널 추가: 노드의 실시간 상태(온라인/오프라인, IP, 마지막 확인 시간)를 표시하고 리모컨에서 출구 노드를 전환할 수 있습니다
- 어두운 레벨별 세션 로그를 갖춘 전체 화면 대시보드 및 세션 보기 추가
- 활성 터널을 확인하기 위한 터널 상세 패널 추가
- 정책 편집기에 MASQUE 프록시 유형 추가
개선 사항:
- Apple TV의 TUN 처리량 향상
- Tailscale 및 WireGuard의 연결 안정성과 처리량 향상
- 목록, 전원 버튼, About 행에 걸친 홈 화면 포커스 탐색을 더 예측 가능하게 개선
- 설정 레이아웃을 iOS와 정렬(Always On 항목 제거, Twitter→X, APNs/Rate/Language 항목 다듬기)
- VPN이 꺼져 있을 때만 홈 오른쪽 목록에 기기 IP 표시
버그 수정:
- 대시보드의 잘못된 "VPN이 실행 중이 아님" 상태와 사라지지 않던 "실행 중" 라벨 수정
- 대시보드/세션을 열 때와 Tailscale 노드 목록에서 돌아올 때 포커스 손실 및 이동 수정
- 메뉴 버튼 동작을 수정하여 목록을 안정적으로 닫고 포커스를 올바르게 되돌리도록 개선
- 세션 목록 하단 문구를 "스와이프하여 삭제"에서 "길게 눌러 삭제"로 수정
- 각종 안정성 및 성능 개선
Version 1.0 (35)
- 첫 릴리스
이 페이지는 영어판의 번역본입니다. 내용이 다를 경우 영어판이 우선합니다.