Notes de version de Chute tvOS
Version 1.5.1 (90)
Nouvelles fonctionnalités :
- Ajout du chaînage de proxys aux éditeurs : une politique propose désormais
underlying-proxypour tous les types de proxy, si bien que sa connexion est établie à travers la politique nommée — les protocoles de flux passent par le flux de l'amont, Hysteria2, TUIC, MASQUE et XHTTP sur HTTP/3 passent par son relais UDP, les tunnels WireGuard et AmneziaWG passent par lui, et les sessions SSH et AnyTLS s'ouvrent à travers lui — et une chaîne qui boucle, dépasse 16 niveaux ou nomme une politique inexistante est refusée au chargement au lieu de se connecter directement. Tous les types de proxy sauf Tailscale peuvent être chaînés, et les politiques TUIC, Hysteria2, WireGuard, AmneziaWG et ShadowTLS sont pour le reste réécrites exactement telles qu'elles ont été lues - Ajout de l'amont au niveau du groupe : un éditeur de groupe écrit
underlying-proxy=une seule fois — entre guillemets quand le nom contient une virgule ou une espace — afin que chaque membre de ce groupe joigne son serveur à travers l'unique politique qui y est nommée - Ajout de la ligne « Proxy frontal » sous Avancé : elle écrit
global-underlying-proxy, choisi parmi Aucun et les politiques et groupes du profil, et couvre chaque nœud qui ne définit pas d'amont propre ;close-if-proxy-chain-missingn'a pas de ligne et est conservé exactement tel qu'écrit - Ajout de « Télécharger via » aux éditeurs de fournisseur de règles et de fournisseur de proxy :
policy=récupère cette liste à travers la politique choisie, et « Aucun » la télécharge directement ; l'éditeur de fournisseur de proxy conserve aussi leunderlying-proxydu fournisseur - Ajout d'UDP sur TCP à l'éditeur Shadowsocks : un interrupteur
udp-over-tcpet, tant qu'il est activé, un sélecteur « Version UoT » (1 ou 2 ; la version 2 est utilisée quand aucune n'est indiquée), afin que l'UDP de ce proxy circule à l'intérieur de ses connexions TCP et continue de fonctionner à travers un amont qui ne transporte pas d'UDP. Le serveur doit prendre en charge UoT, et mihomo utilise la version 1. Une version que le sélecteur ne peut pas afficher est conservée telle qu'écrite jusqu'à ce que vous en choisissiez une autre - Ajout de la ligne « Chaîne de proxys » au détail de connexion : une connexion passée par une chaîne nomme chaque saut —
Airport/HK-01 → Landing— à côté de la politique qui l'a routée ; le détail de requête et la liste UDP de la console web affichent le même chemin, et l'export HAR l'inclut - Ajout des groupes de relais (
relay, comme dans Clash et mihomo) : les membres sont chaînés dans l'ordre où ils sont écrits — le premier est joint directement, chacun des suivants à travers ceux qui le précèdent, et le dernier se connecte à la destination. Relay figure dans le sélecteur de type de groupe ; un groupe de relais affiche « Nom », « Type de groupe » et « Masqué », conserve ses membres dans cet ordre et garde ses paramètres lors d'un enregistrement, et un groupe de moins de deux membres sans source dynamique est refusé avec un message dédié - Ajout des groupes aléatoires (
random, comme dans Shadowrocket) : chaque connexion choisit un membre au hasard, et pour l'UDP uniquement parmi les membres qui transportent l'UDP. Un groupe aléatoire n'a pas de sélection à modifier : il n'apparaît donc nulle part où l'on choisit la politique d'un groupe, et l'éditeur de groupe le conserve en tant que groupe aléatoire - Ajout de l'UDP à VMess et VLESS : l'UDP envoyé à l'un ou l'autre était jusqu'ici refusé d'emblée (il suivait
udp-policy-not-supported-behaviour, REJECT par défaut) ; il circule désormais sur une connexion par destination, comme dans mihomo, sing-box et Shadowrocket - Ajout du motif d'échec pour un fournisseur dont le jeu de règles n'a pas pu être chargé — téléchargement jamais abouti, ou charge utile dépassant la limite de taille — affiché en rouge sur sa ligne ; un tel fournisseur ressemblait auparavant en tout point à un fournisseur fonctionnel, alors qu'aucune règle le nommant ne correspondait à quoi que ce soit
- Les éditeurs ne perdent plus ce qu'ils ne peuvent pas afficher : les règles conservent les options sans ligne (
notification-text,no-resolve,update-intervalet les autres), écrivent la pré-correspondance après la politique et uniquement pour REJECT, chargent leKEY:valued'une règle SUBNET, distinguent SYSTEM, LAN, fournisseur et URL dans RULE-SET et savent construire des sous-règles AND / OR / NOT que l'analyseur accepte ; les groupes chargent leurs membres déclarés, masquent le fournisseur qu'unpolicy-pathsynthétise et conservent les filtres,include-*,default=,interrupt-exist-connectionset les paramètres inconnus dans leur ordre d'origine ; les hôtes conservent la liste complète des serveurs avec#proxyet le commentaire, affichent les valeurs DoH / DoT / DoQ / DoH3 et gagnent un type Script ; Map Local conserve les corps binaires, son type de données et son code de statut, ainsi qu'un en-tête de style Surge dont la valeur contient un deux-points ; les modules conservent leur#!system_versionet leurs lignes destinées à d'autres plateformes - Ajout de lignes pour les réglages que les éditeurs ne pouvaient pas afficher : DoT / DoQ / DoH3, DNS dédiés des connexions directes / des serveurs proxy / de secours, SVCB, DNS chiffré qui suit les règles et peut ignorer les vérifications de certificat, UDP sans relais,
proxy-test-url/internet-test-url/test-timeout, MitM HTTP/2 et blocage QUIC avec noms d'hôte exclus, le mode de filtre de Replica, les variantes REJECT et le PROXY intégré dans les sélecteurs de politiques,dns-failedsur FINAL, et les littéraux IPv6 comme hôtes de politique ; la réécriture d'en-tête gagne « Remplacer l'en-tête (regex) », la réécriture d'URL gagne « Rejeter avec tableau » et « Rejeter avec mini GIF », les scripts gagnent le type générique et un nom d'événement, et les plages de ports, HOSTNAME-TYPE, PROTOCOL et les formats de fournisseur reçoivent des espaces réservés qui indiquent ce qu'ils acceptent - Ajout de
tun-included-routes: les CIDR listés rejoignent les routes du tunnel après sa route par défaut, si bien qu'une plage que prendrait sinon le sous-réseau propre de l'interface réseau — le système préfère la route la plus spécifique — passe par Chute. Les entrées qui couperaient le tunnel (boucle locale, sous-réseaux propres au tunnel, link-local, multicast, broadcast, longueur de préfixe de 0) sont refusées, le motif étant journalisé, les plages privées sont acceptées avec un avertissement, et une liste modifiée s'applique lors d'un rechargement à chaud sans redémarrer le tunnel - Ajout de jq à la réécriture de corps :
http-request-jqethttp-response-jq, écrits dans le fichier de configuration, exécutent un véritable programme jq sur un corps JSON (l'éditeur de réécriture de corps de l'Apple TV ne les propose pas) ; un programme invalide est signalé et sa règle ignorée, et un corps non JSON, un programme qui échoue ou une sortie vide laissent tous le corps intact - Ajout des scripts génériques : un script
type=genericn'a aucun déclencheur automatique et ne s'exécute qu'à la demande, viaGET /api/scriptsetPOST /api/scripts/run - Ajout de pools DNS dédiés :
direct-dns-serverrésout les domaines qu'une règle envoie en DIRECT,proxy-dns-serverrésout les noms d'hôte de vos propres serveurs proxy, etfallback-dns-serverest interrogé quand les serveurs principaux ne donnent aucune réponse ; chacun se rabat sur les serveurs globaux - Ajout de
#proxy/#proxy=<policy>aux amonts DNS, DoQ et DoH3 compris : un résolveur QUIC passe par le relais UDP de la politique, une politique qui ne peut pas transporter d'UDP saute ce serveur au lieu de l'interroger directement, un résolveur classique envoyé à travers une politique bascule vers DNS sur TCP, et les amontstcp://simples sont acceptés pour les chemins où DNS sur UDP est abandonné - Ajout de
encrypted-dns-follow-outbound-mode,allow-dns-svcb— les questions HTTPS et SVCB reçoivent une réponse vide tant qu'il n'est pas activé — et, par serveur, de#h3,#skip-cert-verify,#disable-ipv4,#disable-ipv6et#disable-qtype= - Enrichissement du mappage DNS local : une entrée
[Host]conserve tous les serveurs qu'elle liste et les interroge en parallèle, associe un domaine à plusieurs adresses, peut avoir pour clé un jeu de règles (RULE-SET:<url>) et exécute un scripttype=dnspour ce domaine (script:<name>) - Ajout de
FINAL,<policy>,dns-failed: quand un nom ne peut pas être résolu, la connexion est ouverte sur la politique FINAL avec résolution distante au lieu d'être fermée - Ajout de la famille REJECT comme vraies politiques — REJECT-DROP, REJECT-NO-DROP, REJECT-TINYGIF, REJECT-IMG, REJECT-DICT, REJECT-ARRAY, REJECT-200 et REJECT-VIDEO — chacune répondant à une requête HTTP avec son corps documenté, un hôte rejeté plus de 50 fois en 30 secondes étant promu en REJECT-DROP
- Ajout des jeux de règles intégrés : les sections
[Ruleset Name]du fichier de configuration sont référencées commeRULE-SET,<name>, y compris entre elles — jusqu'à huit niveaux de profondeur, les boucles étant refusées ; la liste des fournisseurs de règles les affiche et en laisse la modification au fichier de configuration - Ajout des plages et comparaisons DEST-PORT, SRC-PORT et IN-PORT (
80-81,>=50000, listes avec/), des valeursIPv4,IPv6,DOMAINetSIMPLEdeHOSTNAME-TYPE, et de règles IN-TYPE, IN-USER et IN-NAME fonctionnelles, qui correspondent désormais au trafic réel au lieu du seul essai à blanc - Ajout de réglages MitM : déchiffrer HTTP/2 (
h2), bloquer le QUIC vers les hôtes déchiffrés pour qu'HTTP/3 ne contourne pas le déchiffrement (auto-quic-block), exclure des hôtes du déchiffrement, et reconnaître les mots-clés<ipv4-address>,<ipv6-address>et<simple-hostname>dans la liste d'hôtes - Ajout du routage QUIC par domaine : le nom est lu depuis le QUIC Initial du client, un ClientHello réparti sur plusieurs Initials est réassemblé, et le flux est retenu jusqu'à ce que le nom soit connu, si bien que les règles DOMAIN routent les connexions HTTP/3 établies vers une adresse nue
- Ajout de
icmp-auto-reply, activé par défaut : un ping à l'intérieur du tunnel reçoit une réponse locale, en IPv4 comme en IPv6, au lieu d'expirer - Élargissement de l'import : les règles GEOSITE et GEOIP de catégorie de mihomo se déploient en jeux de règles qui fonctionnent, les groupes
policy-pathsynthétisent un fournisseur avecupdate-interval, filtres et listes d'inclusion, leSUB-RULEde mihomo se développe en règles AND, ledetourde sing-box et ledialer-proxyde mihomo s'importent comme chaînage, l'allowed-ipsde WireGuard est compilé et appliqué afin qu'un tunnel scindé n'engloutisse plus toutes les destinations, et l'interface=/allow-other-interface=d'une politique lie ses connexions à une seule interface réseau - Élargissement de l'API de script :
$httpAPIappelle les routes du moteur lui-même sans ouvrir de socket,$httpClienthonore unepolicy,read-etc-hostsfournit le fichier hosts au DNS, et$event.namerapporte l'événement qui s'est réellement déclenché
Améliorations :
- Chaque texte affiché par l'app existe désormais dans les huit langues : huit libellés qui retombaient sur l'anglais, dont les lignes Tailscale, sont traduits, et 88 textes pour lesquels le libellé intégré de l'app différait de ses fichiers de langue concordent désormais
- La terminologie est désormais la même dans toutes les apps Chute : le filtre par gravité du journal et ses sept badges reprennent les noms de niveau du moteur, les libellés d'équilibrage de charge suivent Chute Mac, et Console web, Capture du trafic, Réponse simulée, Mappage DNS local et API de contrôle HTTP sont nommés de manière cohérente dans chacune des huit langues
- L'import d'un profil publié ne perd plus le routage :
dns-serveraccepte les URL de DNS chiffré, les lignes d'écoute acceptent un mot de passe, les membres de groupe entre guillemets sont conservés, les règles logiques sing-box se convertissent comme documenté, les membresPASSsont écartés au lieu de devenir REJECT, et un protocole ou un type de groupe non pris en charge émet un avertissement au lieu de faire tomber tout son groupe — dans les profils mihomo importés, les règles qui ne peuvent jamais correspondre sont passées de la majeure partie de la liste à presque aucune - Les jeux de règles consomment bien moins de mémoire : les fournisseurs se téléchargent l'un après l'autre au lieu d'échouer purement et simplement après le 35e, les pics de conversion ont baissé de 62–73 %, les connexions d'index sont plafonnées et libérées sous pression mémoire, et une charge utile trop volumineuse pour l'Apple TV est refusée, la raison étant affichée sur la ligne de son fournisseur
- Des limites de ressources empêchent une configuration surdimensionnée de pousser l'extension du tunnel au-delà de son plafond de mémoire : le magasin de certificats MitM, l'arriéré de captures, la taille et le nombre des scripts, le budget de requêtes de la console, les pairs Tailscale et le cache DNS sont chacun plafonnés sur l'Apple TV
- Les tests de latence visent la bonne cible : le
test-urlet letest-timeoutd'un groupe, leproxy-test-urldu profil et lestest-urletexpected-statuspropres à un membre sont tous pris en compte, et un nœud chaîné est sondé à travers sa chaîne au lieu d'être sondé directement - La console web et l'API de contrôle : une règle ajoutée à l'exécution ne subsiste plus après le rechargement du même profil, et les curseurs de journal restent monotones si bien que l'interrogation ne saute jamais une entrée
- ShadowTLS vérifie désormais le certificat du site de camouflage quand
sni=est renseigné, comme le fait sing-box ;skip-cert-verify=truedésactive la vérification (l'option était auparavant ignorée, et aucun certificat n'était vérifié du tout), et sanssni=la vérification est sautée avec un avertissement
Corrections de bugs :
- Correction de la liste de configurations qui disparaissait après une mise à jour de l'app : les configurations résident dans le dossier Caches de l'app — le seul endroit où tvOS laisse une app écrire, et que le système vide dès qu'il veut récupérer de l'espace — si bien qu'une mise à niveau pouvait laisser une liste vide sans aucune explication à l'écran. À partir de cette version, chaque configuration est aussi conservée dans le stockage des réglages de l'app, que le système ne vide pas (son texte tant qu'il fait 256 Ko ou moins, son adresse d'abonnement et son intervalle de rafraîchissement dans tous les cas) ; les fichiers manquants sont réécrits au lancement et quand l'app revient au premier plan, les configurations dont seule l'adresse a été conservée sont téléchargées à nouveau, et l'écran principal indique « N configuration(s) restaurée(s). » Une configuration que vous supprimez est oubliée et ne revient donc pas. Ce mécanisme ne peut pas faire revenir les configurations perdues avant le premier lancement de cette version, ni une configuration de plus de 256 Ko qui ne provient d'aucune adresse, et rien n'est restauré quand le tunnel est démarré depuis le Centre de contrôle avant que l'app ait jamais été ouverte
- Correction des réglages SSID sur l'Apple TV : ouvrir Suspension SSID levait une erreur pour toute entrée dépourvue de SSID (
TYPE:,BSSID:ouROUTER:), la liste réécrivait[SSID Setting]à chaque visite, et les éditeurs SSID et de sous-réseau laissaient tomber les membres sans ligne. La liste n'affiche plus que les entrées simples"<name>" suspend=trueet garde tout le reste en place, l'éditeur de groupe ssid conserve ses membres dans l'ordre de déclaration avec un choix Correspondance par, et enregistrer l'un d'eux indique que les réglages ne sont pas disponibles sur l'Apple TV et sont enregistrés pour un usage sur iOS et macOS - Correction des éditeurs qui endommageaient les entrées qu'ils ne pouvaient pas afficher entièrement : une entrée
[Host]à plusieurs adresses était réduite à la première dès son ouverture, une valeur[Script]contenant une virgule (une expression cron0 8,20 * * *, un argument JSON) était tronquée à chaque enregistrement, une ligne[Body Rewrite]perdait ses paires de regex supplémentaires, une ligne de règle, de groupe, d'hôte, de Map Local ou de réécriture d'en-tête perdait les options sans ligne, et Avancé supprimait les espaces à l'intérieur de ses entrées de liste à chaque visite. Un profil enregistré sans ouvrir l'entrée n'a jamais été concerné, c'est pourquoi le problème est passé inaperçu - Correction des téléchargements qui se mélangeaient : chaque téléchargement va désormais dans son propre fichier temporaire, supprimé une fois lu ainsi qu'en cas d'échec du téléchargement ou de la lecture, si bien qu'un rafraîchissement géré ne relit plus indéfiniment son premier téléchargement et que deux adresses au même nom suggéré ne s'écrasent plus l'une l'autre — et un nom de fichier suggéré par le serveur ne peut plus déterminer où le fichier est écrit
- Correction du format décidé par le nom de fichier : « Télécharger depuis une URL » et le rafraîchissement des configurations gérées jugent désormais ce que sert une adresse d'après son corps, si bien qu'une adresse
.confqui sert du Clash est convertie à son ajout et qu'un rafraîchissement qui en trouve une laisse le fichier tel quel ; la conversion a lieu avant l'ajout de tout en-tête MANAGED-CONFIG, une conversion qui échoue affiche sa première erreur, et ses avertissements sont comptés à l'écran et écrits au journal - Correction du téléversement et du téléchargement de la page Wi-Fi :
/upconvertit Clash et sing-box comme/upload, les deux enregistrent<name>.conf, un nom déjà pris par une autre configuration est refusé,/downloadne produit plus.conf.confet envoie désormais unfilename*encodé, et/deletecompare les noms en NFC en cherchant d'abord une correspondance exacte — si bien que la configuration en cours d'utilisation ne peut ni être supprimée ni échapper à la vérification d'utilisation par le biais du même nom écrit sous une autre forme Unicode - Correction de l'enregistrement par-dessus une configuration de même nom qui se faisait en silence : l'éditeur et « Télécharger depuis une URL » demandent désormais d'abord, et écraser la configuration que le tunnel exécute le recharge
- Correction des groupes de politiques masqués qui apparaissaient dans les listes de groupes et Global du tunnel ; un groupe masqué qui est utilisé reste, et un Global pointant vers un groupe select est listé, coché et restauré par son nom
- Correction du passage par QR code de la page d'envoi par Wi-Fi : le passage
chute://tv?url=vit à nouveau en ligne dans la page, si bien que le scanner fait s'ouvrir l'app Chute iOS comme la page le promet ; un iPad effectue aussi le passage, car iPadOS se présente comme un navigateur de bureau, ce que la vérification réservée aux téléphones ne détectait pas ; et un navigateur qui refuse un schéma personnalisé sans appui obtient désormais un bouton « Ouvrir dans Chute », localisé dans les neuf langues de la page - Correction de plusieurs plantages : dans Réglages › Sessions, dans l'éditeur de configuration pour un profil qui définit
loglevel = none, sur une session que le tunnel avait laissée à moitié écrite (et qui ne pouvait ensuite plus jamais être ouverte), à chaque lancement après une réponse inattendue du serveur de licences, au lancement et dans « Afficher la licence » quand une licence ne pouvait pas être lue, et à chaque visite de la liste de configurations quand le dossier partagé contenait un fichier système égaré. Effacer un champ dans les réglages l'efface désormais réellement - Correction d'un rafraîchissement d'abonnement arrivé à échéance qui retardait jusqu'à 30 secondes la liste des configurations et l'enregistrement des modifications ; le rafraîchissement se poursuit désormais à la fin de son téléchargement, sans rien retarder
- Correction de plantages causés par deux fils d'exécution modifiant les mêmes données en même temps — lors d'un lancement à froid, pendant la lecture du journal de session et pendant l'actualisation de la liste des sessions
- Correction d'un tunnel redémarré qui réutilisait le premier port local et les numéros de séquence TCP de l'exécution précédente, auxquels un pair WireGuard détenant encore l'ancienne connexion répondait par des réinitialisations ; la pile TCP du tunnel s'initialise désormais à partir de la source aléatoire du système et choisit les numéros de séquence initiaux comme le décrit la RFC 6528
- Correction de XHTTP qui se bloquait à travers le tunnel après la première écriture de l'app, si bien qu'une poignée de main TLS n'aboutissait jamais et qu'un envoi n'expédiait qu'un seul bloc ; chaque écriture se termine désormais dans l'ordre, et dès que plus de 1 Mo est en attente d'envoi, l'écriture suivante patiente jusqu'à ce que cette file se vide
- Correction de
PROTOCOL,TCPetPROTOCOL,UDPqui ne correspondaient jamais : chaque flux entrant décide désormais de son transport, si bien que la façon habituelle de bloquer QUIC avec une règle AND fonctionne - Correction de
RULE-SETetDOMAIN-SETdans AND / OR / NOT qui s'évaluaient toujours à faux — ce qui faisait aussi rejeter le trafic domestique parNOT,((RULE-SET,…))— et deSCRIPTdans une règle logique qui s'évaluait toujours à vrai - Correction de
RULE-SET,<name>,<policy>,no-resolvequi perdaitno-resolvequand il était écrit par nom, d'UNKNOWNpour GEOIP et IP-ASN qui ne correspondait jamais, dustatus-code=de Map Local ignoré en HTTP/2, et d'une réécriture d'en-tête de réponse en HTTP en clair qui ne correspondait qu'au chemin, si bien qu'un motif écrit contre l'URL complète ne pouvait jamais correspondre - Correction de
block-quicqui n'acceptait qu'une seule des valeurs de Surge, toute autre valeur signifiant l'absence totale de blocage de QUIC - Correction de l'API de script :
$klne.getPolicyGroups()etselectPolicy()ne lèvent plus d'erreur la première fois qu'on les utilise,reloadConfiguration()recharge,getActiveConnections()rapporte le vrai hôte, port et id,closeConnection()ferme, et un script before-send avecrequires-bodyreçoit enfin le corps - Correction de
[Replica] keyword-filterqui comparait le nom d'hôte entier au lieu de vérifier qu'il contient le mot-clé, si bien quekeyword-filter = googlene couvrait paswww.google.com - Correction des règles PROCESS-PATH et PROCESS-NAME-REGEX, évaluées sur l'Apple TV par rapport à un nom qui n'est pas un processus ; comme PROCESS-NAME, elles ne fonctionnent que sur macOS et ne correspondent jamais ici
- Diverses améliorations de stabilité et de performances
Version 1.4 (75)
Nouvelles fonctionnalités :
- Ajout d'une ligne « Adresse de la console web » au panneau de configuration : elle apparaît une fois l'écouteur de la console réellement en place, et l'ouvrir affiche un QR code dont l'URL transporte le jeton d'accès — le scanner avec un téléphone suffit à se connecter, sans recopier une adresse et 32 caractères hexadécimaux à la télécommande
- Ajout d'un « Ensemble de diagnostic hors ligne » dans Réglages, construit par l'app sans tunnel : détails de l'appareil et de l'app, le profil VPN tel que tvOS le détient, un résumé de la configuration sélectionnée et de ses erreurs d'analyse, une section réseau (accessibilité, type de lien, serveurs DNS, adresses et interfaces locales), le début expurgé de la configuration, la façon dont l'exécution précédente s'est terminée, les fragments de journal de la session la plus récente et les rapports de plantage en attente. tvOS n'ayant pas de feuille de partage, l'archive est servie par un serveur HTTP local à usage unique sur un chemin impossible à deviner et présentée en QR code ; le lien cesse de fonctionner dès que l'écran est quitté
- Ajout d'un filtre par gravité au journal de session — Tous, Notify+, Warning+, Fatal — pour que « montre-moi les avertissements » tienne en un clic plutôt qu'en une recherche tapée au clavier virtuel ; les lignes que l'analyseur ne sait pas classer ne sont jamais masquées
- Ajout de l'attribution des réécritures au détail de session : une section « REWRITES » nomme, à côté de la règle et de la politique qui ont routé une requête, la règle de réécriture d'URL, d'en-tête ou de corps, ou de réponse simulée, qui l'a modifiée
- Ajout d'une ligne « Autoriser l'accès Wi-Fi » à l'éditeur de configuration — la clé que produit l'import d'un
http-listen = 0.0.0.0:…de Surge ou d'unallow-lande sing-box, et un état que l'éditeur ne savait pas afficher du tout ; tant qu'elle est activée, les deux lignes d'écoute affichent Activé et sont verrouillées, car le moteur élargit lui-même les deux écouteurs - Ajout du français comme langue intégrée, et déclaration des huit langues intégrées à l'App Store
- Ajout à la console web des onglets Actuel et Historique, d'une vue d'inspection (règle correspondante, source de la règle, politique, adaptateur, source DNS, motif de fermeture, corps de requête et de réponse), d'une page Règles qui indique quelles règles de réécriture ont été déclenchées, et d'une page Diagnostic (empreinte mémoire, CPU, durée de fonctionnement, flux, fin de l'exécution précédente, décompte des refus, journal des événements, instantané Tailscale, et sondes ping / DNS / sortie / test d'URL) ; la console est désormais complète dans les neuf langues — et comme le téléviseur n'a nulle part où poser un fichier, c'est aussi là qu'un utilisateur tvOS télécharge l'ensemble de diagnostic d'exécution ou un export HAR
- Ajout de points d'accès à l'API de contrôle HTTP :
/api/health,/api/events,/api/tailscale, les sondes sous/api/diagnostics/,/api/connections/export?format=har,/api/diagnostics/bundle, la gestion des règles de réécriture et des hôtes MitM sous/api/rewriteset/api/mitm/hosts,POST /api/rules/matchpour tester une requête à blanc contre la table de règles (les deux passes DNS sont rapportées),GET|PUT /api/loglevelpour changer le niveau de journal et les sections de sous-système sans rechargement, etPOST /api/config/validatepour vérifier un profil sans l'appliquer
Améliorations :
- L'API de contrôle HTTP n'est plus servie sans authentification quand la configuration ne nomme aucun
external-http-secret: le moteur génère un jeton, que transporte le QR code de l'adresse de la console web ; réglezexternal-http-secret = nonepour conserver l'accès anonyme, et une adresse d'écoute joker n'est plus traitée comme une boucle locale - La correspondance des règles est bien plus rapide sur les grandes listes : les contenus RULE-SET et DOMAIN-SET sont indexés au téléchargement ou à la restauration au lieu d'être parcourus en flux à chaque connexion, et une table de règles composée uniquement de règles de domaine est évaluée par un plan haché — une liste de 50 000 lignes passe d'environ 94 ms à moins de 2 ms par recherche, pour environ 100 Ko de mémoire par index
- Les flux UDP ne sont évalués qu'une fois : la décision d'un flux est mémorisée 60 secondes, si bien que les datagrammes suivants sautent les deux passes de correspondance et la requête DNS entre elles
- Meilleure reprise après un changement de réseau : les tunnels dont l'adresse source amont n'existe plus sur aucune interface sont fermés au lieu de bloquer les apps jusqu'au délai d'inactivité, et un chemin qui accepte les connexions sans faire passer de données est signalé comme trou noir
- Les journaux de session sont écrits en fragments de 8 Mo (jusqu'à huit par exécution, les plus anciens supprimés) ; la vue du journal prend les fragments les plus récents à hauteur d'un fragment au lieu de charger toute une exécution en mémoire, signale quand des fragments plus anciens ont été laissés de côté, et continue de suivre le fragment en cours d'écriture par-delà une rotation
- Le moteur tient un marqueur d'exécution pendant qu'il tourne et, au démarrage suivant, indique si l'exécution précédente s'est arrêtée proprement ou a été tuée — dans l'en-tête du journal,
/api/statuset les deux ensembles de diagnostic - L'export HAR est désormais construit par le moteur à partir des trames enregistrées, si bien que codes d'état, horodatages et durées sont réels, et chaque entrée porte sous
_klla politique choisie, la règle correspondante et les réécritures déclenchées - Seules les trois fonctionnalités vendues sur la page d'achat exigent une licence — Plusieurs configurations, Contrôle du serveur proxy local et Enregistreur de trafic ; les interrupteurs HTTP API et Console web, la Détection de protocole, l'Optimus DNS, Purger le cache DNS et la ligne « Adresse de la console web » n'en demandent plus, et un utilisateur sans licence dont le tunnel est arrêté est invité à le démarrer plutôt que renvoyé vers une page d'achat
- Une console liée à une adresse de boucle locale indique désormais qu'elle ne s'ouvre que sur cet Apple TV, et ce qu'il faut régler à la place, au lieu de proposer un QR code qui ne mène nulle part ; le jeton d'accès ne s'affiche plus sur un écran que toute la pièce peut lire
- L'avis d'achat précise désormais qu'un achat couvre trois Apple TV et trois iPhone ou iPad ; quand « Restaurer l'achat intégré » ne trouve rien, l'alerte propose « Voir le manuel » et présente un QR code vers les instructions de licence multiplateforme dans la langue de l'app
- Avec
loglevel = info, un flux volumineux ayant transféré au moins 1 Mio écrit à sa fermeture une ligne indiquant combien de temps il a attendu côté distant et côté app
Corrections de bugs :
- Correction du MitM en mode TUN : un hôte correspondant à une règle MitM restait bloqué jusqu'au délai d'expiration, si bien que la réécriture d'en-tête, la réécriture de corps, la réponse simulée et les captures déchiffrées en HTTPS ne s'appliquaient jamais au trafic des apps (le trafic passant par le proxy HTTP/SOCKS5 local n'était pas concerné)
- Correction de
allow-wifi-accesssans effet : les écouteurs HTTP et SOCKS5 locaux restaient sur la boucle locale, si bien que rien sur le Wi-Fi ne pouvait les joindre ; l'option (etallow-lande sing-box à l'import) élargit désormais les deux écouteurs, et la désactiver les relie à nouveau - Correction du plantage provoqué par n'importe quel interrupteur de la deuxième section du panneau de configuration dès lors que la ligne « Adresse de la console web » pouvait apparaître, le nombre de lignes du tableau changeant sous un rechargement ligne par ligne
- Correction de la vue de session qui ne montrait qu'une tranche arbitraire d'une exécution, et d'une session perdant sa date après la huitième rotation, depuis que le moteur fait tourner son journal à taille fixe ; les fragments sont désormais ordonnés par indice et la vue en direct ne se fige plus à une rotation
- Correction de la vue du journal qui chargeait en mémoire tous les fragments d'une session à la fois — jusqu'à 64 Mo de texte sur un Apple TV — et du filtre par gravité qui laissait passer les lignes de continuation d'une entrée multiligne alors qu'il masquait l'entrée elle-même
- Correction d'une réécriture d'en-tête de réponse en MitM HTTP/1.1 enregistrée comme appliquée alors que le client recevait l'en-tête d'origine, et qui ne correspondait jamais à une règle écrite contre l'URL complète
- Correction de la réponse simulée qui bâtissait sa réponse à partir de l'en-tête de requête — ligne de requête à la place de la ligne d'état, en-têtes de requête reportés, Content-Length erroné — et qui, en HTTP en clair, envoyait d'abord l'en-tête du serveur d'origine
- Correction des règles IP
no-resolve(IP-CIDR, GEOIP, IP-ASN) qui ignoraient une connexion vers un littéral IP quand la détection de protocole avait fourni un en-tête Host ou un nom DNS inverse ; un littéral IP détecté ne correspond plus non plus aux règles DOMAIN - Correction des lignes RULE-SET portant des options après le contenu (
GEOIP,CN,no-resolve,DOMAIN,example.com,force-remote-dns) qui étaient ignorées ou ne correspondaient à rien, et des sous-règles AND/OR/NOT qui perdaientno-resolve - Correction de HOSTNAME-TYPE qui ne correspondait jamais : le type d'enregistrement est désormais A pour une connexion établie en IPv4 et AAAA en IPv6. L'espace réservé de l'éditeur de règles affichait pour cette règle
http | https, qui appartient à PROTOCOL, etTCP | UDPpour IN-TYPE ; tous deux indiquent maintenant ce que la règle accepte réellement - Correction d'un littéral IPv6 entre crochets dans un en-tête Host détecté (
[2001:db8::1]:8080) lu comme le nom d'hôte[2001 - Correction du démarrage du tunnel avec un groupe select réglé sur autre chose que son premier membre, qui publiait une notification « groupe de politiques changé », et des reconstructions suivant le démarrage qui déclenchaient l'avertissement d'instabilité ; un groupe sans choix mémorisé respecte désormais le
default=du profil au lieu d'être forcé sur son premier membre - Correction de
external-http-controller = *:9090et:::9090— deux graphies documentées — rejetés, si bien que le contrôleur ne démarrait pas en silence - Correction d'un plantage occasionnel du transport XHTTP sous charge
- Correction de l'écran de licence qui étiquetait le certificat d'un autre produit comme un bundle Chute ; ce que cette app ne peut légitimement pas détenir s'affiche désormais comme « Inconnu », et l'étiquette Android a été ajoutée
- Correction du QR code « Chute iOS » de l'écran À propos qui pointait vers un identifiant App Store mort, et de « Évaluer » qui ouvrait la fiche iOS au lieu de celle de cette app
- Correction de la mise en page de la page d'envoi par Wi-Fi
- Correction des noms chinois et thaïlandais des familles de réécriture, pour qu'ils correspondent au manuel et aux noms de sections du fichier de configuration
- Diverses améliorations de stabilité et de performances
Version 1.3 (62)
Nouvelles fonctionnalités :
- Ajout du transport XHTTP à l'éditeur de politiques — interrupteur d'activation, mode (auto, packet-up, stream-up, stream-one), chemin et hôte — pour Trojan, VMess et VLESS
- Ajout des méthodes de chiffrement Shadowsocks AEGIS-128L et AEGIS-256
- Ajout des méthodes de chiffrement Shadowsocks 2022 (SS2022) jusqu'ici manquantes :
2022-blake3-aes-128-gcm,2022-blake3-aes-256-gcmet2022-blake3-chacha20-poly1305 - Ajout des réglages ECH (Encrypted Client Hello) pour les politiques TLS — interrupteur d'activation, configuration ECH épinglée (
ech-config) et remplacement du nom de couverture (ech-public-name) - Ajout de l'empreinte client (uTLS) par politique, ainsi qu'une valeur par défaut pour tout le profil
- Ajout de la prise en charge du protocole AmneziaWG, une variante de WireGuard avec obfuscation du trafic
- Ajout d'un écran de rapport d'erreurs de configuration avec navigation au focus tvOS, en remplacement de l'alerte qui bloquait l'interaction
- Ajout de l'échange de clés hybride post-quantique X25519MLKEM768 pour TLS 1.3
Améliorations :
- Lors de l'enregistrement, l'éditeur de politiques conserve désormais les options existantes non modifiables (ECH, ALPN, épinglage de certificat,
test-url,udp-relay)
Corrections de bugs :
- Correction d'un plantage du tunnel provoqué par des règles
IP-CIDRmal formées - Correction des réglages SSH
idle-timeoutet REALITYspiderxqui étaient écrits sous de mauvaises clés et perdus à l'enregistrement - Correction d'un plantage lors du changement de langue
- Correction de problèmes d'affichage des commandes à l'écran
- Diverses améliorations de stabilité et de performance
Version 1.2 (45)
Nouvelles fonctionnalités :
- Ajout de Tailscale comme type de proxy intégré : configurez un compte Tailscale, rejoignez un tailnet et acheminez le trafic de l'Apple TV via des nœuds Tailscale — sans client distinct
- Ajout d'un panneau de configuration Tailscale affichant l'état des nœuds en temps réel (en ligne/hors ligne, IP, dernière activité) et permettant de changer de nœud de sortie depuis la télécommande
- Ajout d'une vue Tableau de bord et Sessions en plein écran, avec un journal de session sombre par niveau
- Ajout d'un panneau de détail de tunnel pour inspecter les tunnels actifs
- Ajout du type de proxy MASQUE à l'éditeur de politiques
Améliorations :
- Amélioration du débit TUN sur Apple TV
- Amélioration de la stabilité et du débit des connexions Tailscale et WireGuard
- Affinage de la navigation au focus sur l'écran d'accueil (listes, bouton d'alimentation et ligne À propos) pour un comportement plus prévisible
- Alignement des Réglages sur la disposition iOS (suppression de l'entrée Toujours actif, Twitter → X, et amélioration des lignes APNs, Noter et Langue)
- Affichage de l'IP de l'appareil dans la liste de droite de l'accueil uniquement lorsque le VPN est désactivé
Corrections de bugs :
- Correction du faux statut « VPN inactif » et des libellés « En cours d'exécution » obsolètes sur le tableau de bord
- Correction des pertes et sauts de focus à l'ouverture du Tableau de bord/Sessions et au retour depuis la liste des nœuds Tailscale
- Correction du comportement du bouton Menu, qui referme désormais les listes et rend le focus de manière fiable
- Correction du texte de pied de la liste de sessions, qui indique « appui long pour supprimer » au lieu de « balayer »
- Diverses améliorations de stabilité et de performance
Version 1.0 (35)
- Première version