Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
215 commits
Select commit Hold shift + click to select a range
cb88d94
Remove client metadata from AnyTLS requests by default
nekohasekai Aug 2, 2026
256d42a
Update sing-quic
nekohasekai Aug 3, 2026
a29b4ea
Fix AnyTLS URLTest results
makt28 Aug 3, 2026
d763884
Fix tailscale panic with IP control URL
nekohasekai Aug 3, 2026
fd7cd31
Fix tailscale DNS transport missing DNS-only netmap updates
nekohasekai Aug 3, 2026
6849e26
tailscale: Fix system interface network category on Windows
nekohasekai Aug 3, 2026
17ec3c7
Bump version
nekohasekai Aug 3, 2026
ff11b53
Add MAC and hostname rule items
nekohasekai Mar 3, 2026
eb914f8
Add Android support for MAC and hostname rule items
nekohasekai Mar 4, 2026
66c243e
Add macOS support for MAC and hostname rule items
nekohasekai Mar 6, 2026
efa18f7
documentation: Update descriptions for neighbor rules
nekohasekai Mar 6, 2026
0a7891f
Refactor ACME support to certificate provider
nekohasekai Mar 23, 2026
ddf26b2
Add BBR profile and hop interval randomization for Hysteria2
nekohasekai Mar 30, 2026
f585c5b
platform: Add OOM Report & Crash Report
nekohasekai Apr 2, 2026
08135c2
Also enable certificate store by default on Apple platforms
nekohasekai Apr 7, 2026
a01c177
Add evaluate DNS rule action and related rule items
nekohasekai Apr 7, 2026
9443ba9
platform: Fix set local
nekohasekai Apr 7, 2026
9542773
Fix deprecated warning double-formatting on localized clients
nekohasekai Apr 7, 2026
c4cf020
oom-killer: Free memory on pressure notification and use gradual inte…
nekohasekai Apr 7, 2026
b7b2347
tools: Network Quality & STUN
nekohasekai Apr 8, 2026
43169e3
platform: Fix darwin signal handler
nekohasekai Apr 9, 2026
c5f585a
tools: Tailscale status
nekohasekai Apr 9, 2026
2f87587
Revert "Also enable certificate store by default on Apple platforms"
nekohasekai Apr 9, 2026
9aade5a
Fix rules lock
nekohasekai Apr 9, 2026
d279587
Fix darwin local DNS transport
nekohasekai Apr 10, 2026
906b43b
tools: Tailscale status
nekohasekai Apr 10, 2026
901f843
Un-deprecate `ip_accept_any` DNS rule item
nekohasekai Apr 10, 2026
9fd53f2
documentation: Fixes
nekohasekai Apr 10, 2026
48ced35
Add `package_name_regex` route, DNS and headless rule item
nekohasekai Apr 10, 2026
552f95d
platform: Wrap command RPC error returns with E.Cause
nekohasekai Apr 10, 2026
d981ba8
Fix lint errors
nekohasekai Apr 10, 2026
df1990d
Add cloudflared inbound
nekohasekai Apr 10, 2026
fc7927e
documentation: Fix missing update for `ip_version` and `query_type`
nekohasekai Apr 10, 2026
3d30209
Fix stun test
nekohasekai Apr 10, 2026
4d42e13
Fix darwin cgo DNS again
nekohasekai Apr 10, 2026
3d7ff70
Fix tailscale error
nekohasekai Apr 11, 2026
13594ff
Add optimistic DNS cache
nekohasekai Apr 11, 2026
580061c
oom-killer: Record report before reset network
nekohasekai Apr 14, 2026
9d5ccfe
Refactor: HTTP clients, unified HTTP2/QUIC options, Apple engines
nekohasekai Apr 14, 2026
982a4e4
Standardize hosts path
nekohasekai Apr 15, 2026
2a8dc4f
Add TLS spoof support
nekohasekai Apr 15, 2026
275c827
Fix legacy rule-set download_detour blocked by empty direct check
nekohasekai Apr 15, 2026
9b04b7b
Reject pure-IP rule-set references without match_response
nekohasekai Apr 15, 2026
418d244
Fix use-after-free of pooled value buffers in bbolt Batch writes
nekohasekai Apr 15, 2026
d033789
Reject IP literal server name with TLS spoof
nekohasekai Apr 16, 2026
3999a4e
Fix macOS tlsspoof
nekohasekai Apr 17, 2026
a830789
Scope HTTP/2 fallback and HTTP/3 broken state per authority
nekohasekai Apr 17, 2026
d8041fc
Defer implicit default HTTP client fallback to first use
nekohasekai Apr 17, 2026
2a0227c
Strip EDNS padding from upstream DNS responses
nekohasekai Apr 17, 2026
b1d4b59
Fix Apple TLS metadata capture
nekohasekai Apr 18, 2026
8926fd6
Fix tls-spoof
nekohasekai Apr 17, 2026
217eb0d
Add search domain support for Tailscale DNS
nekohasekai Apr 20, 2026
3eeede6
Log DNS optimistic background refresh outcomes
nekohasekai Apr 21, 2026
cbbefe3
Fix Tailscale search domain response name mismatch
nekohasekai Apr 21, 2026
f9ee14f
Fix goroutine leak in networkquality tool
nekohasekai Apr 21, 2026
8dafbfc
Add ACME profile support for IP address certificates
nekohasekai Mar 26, 2026
0f87741
platform: Improve oom-killer
nekohasekai Apr 21, 2026
21f8992
Fix darwin cgo DNS again
nekohasekai Apr 22, 2026
c63e134
Improve UDP batch support
nekohasekai Apr 24, 2026
e06d678
Add Windows TLS engine
nekohasekai Apr 24, 2026
2bd48bd
Preserve comments between formatting
nekohasekai Apr 28, 2026
34d0056
Improve oom-killer
nekohasekai Apr 28, 2026
a76fc2c
ssh: Add cipher, MAC, and key exchange configuration
nekohasekai Apr 28, 2026
83a6522
dns: Add timeout configuration
nekohasekai Apr 28, 2026
44664bf
Fix tailscale start dependencies
nekohasekai Apr 28, 2026
1cedef7
dns: Add neighbor-based hostname resolution to local server
nekohasekai Apr 29, 2026
6d43944
dns: Add preferred_by rule item
nekohasekai Apr 29, 2026
ab3eaaa
dns: Add mDNS server
nekohasekai Apr 30, 2026
e42dd60
Allow customizing TUN DNS mode and hijack interface DNS by default
nekohasekai May 2, 2026
704102d
Add more spoof method
macronut Apr 29, 2026
8b3bba5
Fix reset network
nekohasekai May 5, 2026
581eeea
Add hysteria2 realm service and support
nekohasekai May 10, 2026
9d439d5
Update hysteria2 realm
nekohasekai May 11, 2026
bd80416
Fix TLS server close
nekohasekai May 12, 2026
290a3f7
Fix hysteria2 realm server
nekohasekai May 12, 2026
0742076
Fix lint errors
nekohasekai May 14, 2026
89512ca
Rebase wireguard-go to official
nekohasekai May 17, 2026
d3dbab5
oom-killer: Remove log "OOM draft discarded"
nekohasekai May 19, 2026
8f190ae
tailscale: Revert dialer deprecation and remove control_http_client
nekohasekai May 20, 2026
c5dbab3
tailscale: Fix handle peer DNS query
nekohasekai May 20, 2026
d662ae6
tailscale: Add runtime exit node API
nekohasekai May 21, 2026
b3a7f40
tailscale: Expose more peer info fields
nekohasekai May 21, 2026
6514ad6
Fix tailscale dns
nekohasekai May 21, 2026
e902480
daemon: Add Tailssh
nekohasekai May 25, 2026
958f130
hysteria2: Add gecko obfs
nekohasekai May 25, 2026
7b32bb7
tools: Fix mising cleanup
nekohasekai May 26, 2026
b9ed440
tailscale: Add tailssh server
nekohasekai May 28, 2026
49be84a
tailssh: fix platform SFTP session teardown
nekohasekai Jun 1, 2026
e961639
platform: Add tailscale device name and logout
nekohasekai Jun 2, 2026
fb7fff2
platform: Add shell support for iOS
nekohasekai Jun 10, 2026
d7e7b52
daemon: Split host operations into ManagedService
nekohasekai Jun 11, 2026
42e9a6f
Add sing-box API service
nekohasekai Jun 11, 2026
f15579a
tailscale: Fix auth URL not refreshed after logout
nekohasekai Jun 12, 2026
74308ec
Fix group status updates broken by API service
nekohasekai Jun 13, 2026
c191c66
release: Fix apple release
nekohasekai Jun 13, 2026
3a1602e
dns: Remove unused files
nekohasekai Jun 13, 2026
68d8863
Improve remote rule-set update
nekohasekai Jun 13, 2026
b1ce685
Add dashboard support for API service
nekohasekai Jun 13, 2026
7be0e1b
Fix remote control when Clash server is unavailable
nekohasekai Jun 15, 2026
0dd0096
Add USB/IP service
nekohasekai Jun 14, 2026
c57c81a
Add USB/IP support for macOS
nekohasekai Jun 16, 2026
41f6ccc
documentation: Add USB/IP server and client
nekohasekai Jun 17, 2026
2cefda4
Fix Cloudflared edge discovery ignoring configured resolver
nekohasekai Jun 20, 2026
577edf6
Add iOS jailbreak release
nekohasekai Jun 20, 2026
f4a7d20
certificate: Replace platform bridge with CGO JNI
nekohasekai Jun 21, 2026
19bcc01
platform: Fix missing api version check for usb/ip
nekohasekai Jun 21, 2026
f47b760
Fix oom draft flood
nekohasekai Jun 23, 2026
f88a6f2
release: Fix upload ios deb
nekohasekai Jun 25, 2026
7b9be31
Refactor darwin local DNS to raw mDNSResponder call
nekohasekai Jun 27, 2026
e375105
Write logs to oom report
nekohasekai Jun 28, 2026
27ad5fd
Add age support for report export
nekohasekai Jun 28, 2026
592f8c1
Improve DHCP DNS server initialize
nekohasekai Jun 28, 2026
1602160
Fix linux ping
nekohasekai Jun 29, 2026
f2155ee
tls: Fix read wait buffer sizing
nekohasekai Jul 2, 2026
089cbca
dialer: Dial directly when only one interface is available
nekohasekai Jul 4, 2026
9d8fc9c
Add snell protocol
nekohasekai Jul 3, 2026
d49fc87
Add L3 forwarding support
nekohasekai Jul 6, 2026
297f2ab
Fix local DNS transport on darwin
nekohasekai Jul 6, 2026
906d3bf
Imrpove flow tracking & sniff action
nekohasekai Jul 6, 2026
e55b3ca
daemon: Release memory to OS on service reload
nekohasekai Jul 7, 2026
48a0791
Add bridge outbound
nekohasekai Jul 7, 2026
265dd77
Improve bridge
nekohasekai Jul 8, 2026
7200a77
Add windows bridge
nekohasekai Jul 8, 2026
cade101
Improve darwin bridge
nekohasekai Jul 8, 2026
fea0ea7
Fix bridge MTU
nekohasekai Jul 8, 2026
06c5d15
Improve windivert syscall
nekohasekai Jul 8, 2026
ef16009
Fix windows bridge forwarding to connected subnets
nekohasekai Jul 8, 2026
1def249
Fix macOS bridge with includeAllNetworks
nekohasekai Jul 8, 2026
bbaf599
Fix macOS bridge kernel panic
nekohasekai Jul 8, 2026
eef9bb4
Fix process and neighbor rules not matched in pre-match
nekohasekai Jul 8, 2026
845425b
Add hysteria2 realm ip_version and port_mapping options
nekohasekai Jul 9, 2026
f500f2a
Add connections to OOM report
nekohasekai Jul 9, 2026
74b3b76
Fix tailscale version
nekohasekai Jul 10, 2026
2c77aff
Add netns and unshare support
nekohasekai Jul 10, 2026
9f63c8f
Fix netns manager
nekohasekai Jul 11, 2026
857b673
windivert: Verify cached driver against embedded asset before load
nekohasekai Jul 11, 2026
802b299
platform: Export tester and reporter
nekohasekai Jul 11, 2026
a88f052
Fix windivert open
nekohasekai Jul 12, 2026
e43c8d1
bridge: Raise accept_ra to 2 when enabling IPv6 forwarding
nekohasekai Jul 12, 2026
1b7cc09
Fix daemon groups
nekohasekai Jul 12, 2026
c852960
platform: Add boxdd
nekohasekai Jul 13, 2026
76f3d24
platform: Fix daemon data
nekohasekai Jul 13, 2026
9e164fc
platform: Add http proxy support for Windows
nekohasekai Jul 13, 2026
4a65f8d
documentation: Update icon svg
nekohasekai Jul 13, 2026
026c1f1
Fix nfqueue options
nekohasekai Jul 14, 2026
54ab3cc
windivert: stabilize Windows driver lifecycle
nekohasekai Jul 14, 2026
517bd42
Fix SetGroupExpand race
nekohasekai Jul 14, 2026
0c3d61d
Fix tun gso check
nekohasekai Jul 14, 2026
fbf619f
Fix nftables flush
nekohasekai Jul 14, 2026
fb486ac
Fix windows bridge
nekohasekai Jul 14, 2026
daea8e3
Add windows build
nekohasekai Jul 14, 2026
4a5ec03
boxdd: Fix log format
nekohasekai Jul 14, 2026
a978d34
boxxx: Add update API
nekohasekai Jul 14, 2026
ca390fd
boxdd: Add custom working directory support
nekohasekai Jul 15, 2026
78339a4
tailscale: support Windows SSH user sessions
nekohasekai Jul 15, 2026
6b62e89
Update windows build
nekohasekai Jul 15, 2026
249d1c9
boxdd: Add insecure mode
nekohasekai Jul 15, 2026
700ca03
Fix start lifecycle
nekohasekai Jul 15, 2026
d9604a9
platform: Fix version compare
nekohasekai Jul 16, 2026
1a4c069
Fix oomkiller
nekohasekai Jul 16, 2026
40bcc08
Fix iOS brdige
nekohasekai Jul 16, 2026
d72c431
Add multiple tags support to rule-sets
nekohasekai Jul 16, 2026
98e3d61
boxx: Fix unsafe installation
nekohasekai Jul 16, 2026
d36ec12
refactor: New tun udpnat
nekohasekai Jul 16, 2026
2961779
Refactor endpoint listen
nekohasekai Jul 17, 2026
85af347
Update Go to 1.25.12
nekohasekai Jul 17, 2026
35ecbd0
Add openvpn and openconnect
nekohasekai Jul 17, 2026
2785608
Fix bind control for auto redirect
nekohasekai Jul 17, 2026
975d281
Refactor endpoint in started interface
nekohasekai Jul 17, 2026
b167240
Refactor OpenVPN and OpenConnect endpoints
nekohasekai Jul 18, 2026
366ea6f
Fix SSO support for anyconnect
nekohasekai Jul 18, 2026
83fe887
Refactor UDP DNS hijack
nekohasekai Jul 19, 2026
47fb6d9
refactor: Async DNS
nekohasekai Jul 19, 2026
7c70a40
Fix DNS route suffix matching
nekohasekai Jul 19, 2026
1d074c1
boxdd: Fix linux permission
nekohasekai Jul 19, 2026
edeb401
Improve network reset
nekohasekai Jul 19, 2026
da6e562
boxdd: Implement linux http proxy
nekohasekai Jul 19, 2026
d77237a
desktop: Pin dependencies
nekohasekai Jul 19, 2026
ec05c41
Add linux desktop build
nekohasekai Jul 19, 2026
5012a1a
openconnect: Fix Fortinet SSO
nekohasekai Jul 20, 2026
e770bb1
Fix wg detour
nekohasekai Jul 20, 2026
edd34c4
boxdd: Fix unsafe permission check
nekohasekai Jul 20, 2026
b6fda57
openvpn: Fix certificate verification compatibility
nekohasekai Jul 20, 2026
922cb6e
Fix security check message
nekohasekai Jul 20, 2026
4b68b65
Improve OpenVPN & OpenConnect interoperability
nekohasekai Jul 21, 2026
b54fc9f
build: Refactor workflow
nekohasekai Jul 21, 2026
bacdfaf
boxdd: Fix windows update
nekohasekai Jul 21, 2026
bd211e4
Fix TCP DNS retry
nekohasekai Jul 21, 2026
621b47e
Update uTLS to v1.8.7
flyzstu Jul 21, 2026
a2248f4
Update issue template for new clients
nekohasekai Jul 21, 2026
eb5d82d
Add Fortinet hostcheck support
nekohasekai Jul 21, 2026
4445685
release: Improve release workflow
nekohasekai Jul 21, 2026
e9342cb
Fix Tailscale 4via6 subnet routing
nekohasekai Jul 22, 2026
1faabd8
dns: Cache responses with client subnet
nekohasekai Jul 22, 2026
7aa4641
dns: Probe connection reuse support for TCP transports
nekohasekai Jul 22, 2026
33d6956
Fix Fortinet SSO again
nekohasekai Jul 22, 2026
1705689
platform: Fix WIFI state on reload
nekohasekai Jul 23, 2026
cbe3e75
route: simplify rule_set matching semantics
nekohasekai Jul 23, 2026
cd75025
dns: Add namespace and parallel support for evaluate
nekohasekai Jul 23, 2026
a537935
Add JSON schema support
nekohasekai Jul 24, 2026
52e8a6f
release: Fix linux sign
nekohasekai Jul 24, 2026
9af975b
Add initial_path option to remote rule-sets
nekohasekai Jul 24, 2026
3e921ae
daemon: Improve URLTest
nekohasekai Jul 24, 2026
7c728ed
Fix inconsistent URLTest results
nekohasekai Jul 25, 2026
0018b4d
Fix string type
nekohasekai Jul 25, 2026
f24ea3a
Fix TUN dispatcher deadlock
nekohasekai Jul 29, 2026
df9e71e
Fix openvpn
nekohasekai Jul 29, 2026
802f8fd
release: Fix rpm package format for desktop client
nekohasekai Jul 29, 2026
ca16c0d
dns: Fix completed race rule blocked by earlier armed rule
nekohasekai Jul 31, 2026
b66d42f
wireguard: Fix system device configures DNS for interface
nekohasekai Jul 31, 2026
73e7130
Fix TLS fragment ACK wait on Windows without TCP estats
nekohasekai Jul 31, 2026
62e832e
Update naiveproxy to v150.0.7871.63-1
nekohasekai Jul 31, 2026
9429935
Remove client metadata from AnyTLS requests by default
nekohasekai Aug 3, 2026
115dbec
Bump version
nekohasekai Aug 3, 2026
4309f8c
merge: sync upstream v1.14.0-beta.5
github-actions[bot] Aug 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/CRONET_GO_VERSION
Original file line number Diff line number Diff line change
@@ -1 +1 @@
617d38f41f935b46a68f550d9add2e38abb3f168
cfbca3ad7edb3f8c1bd78b4bcb7c4c1a1ae3d195
2 changes: 1 addition & 1 deletion clients/android
Submodule android updated 1 files
+2 −2 version.properties
2 changes: 1 addition & 1 deletion clients/apple
27 changes: 27 additions & 0 deletions docs/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,33 @@
icon: material/alert-decagram
---

#### 1.14.0-beta.5

* Remove client metadata from AnyTLS requests by default **1**
* Update naiveproxy to v150.0.7871.63-1
* Fixes and improvements

**1**:

We found that the AnyTLS client implementation uploads metadata that is
**not used by the open-source server**, and there are reports of vendors using
it to profile and discriminate against users. We now leave it empty by default
and allow you to customize it, see
[AnyTLS client metadata](/manual/misc/anytls-client-metadata/).

#### 1.13.16

* Remove client metadata from AnyTLS requests by default **1**
* Fixes and improvements

**1**:

We found that the AnyTLS client implementation uploads metadata that is
**not used by the open-source server**, and there are reports of vendors using
it to profile and discriminate against users. We now leave it empty by default
and allow you to customize it, see
[AnyTLS client metadata](/manual/misc/anytls-client-metadata/).

#### 1.14.0-beta.4

* Fixes and improvements
Expand Down
7 changes: 7 additions & 0 deletions docs/configuration/outbound/anytls.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ icon: material/new-box
"idle_session_check_interval": "30s",
"idle_session_timeout": "30s",
"min_idle_session": 5,
"client_metadata": "",
"tls": {},

... // Dial Fields
Expand Down Expand Up @@ -55,6 +56,12 @@ In the check, close sessions that have been idle for longer than this. Default:

In the check, at least the first `n` idle sessions are kept open. Default value: `n`=0

#### client_metadata

!!! question "Since sing-box 1.13.16"

Check [AnyTLS client metadata](/manual/misc/anytls-client-metadata/).

#### tls

==Required==
Expand Down
7 changes: 7 additions & 0 deletions docs/configuration/outbound/anytls.zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ icon: material/new-box
"idle_session_check_interval": "30s",
"idle_session_timeout": "30s",
"min_idle_session": 5,
"client_metadata": "",
"tls": {},

... // 拨号字段
Expand Down Expand Up @@ -55,6 +56,12 @@ AnyTLS 密码。

在检查中,至少前 `n` 个空闲会话保持打开状态。默认值:`n`=0

#### client_metadata

!!! question "自 sing-box 1.13.16 起"

参阅 [AnyTLS 客户端元数据](/zh/manual/misc/anytls-client-metadata/)。

#### tls

==必填==
Expand Down
67 changes: 67 additions & 0 deletions docs/manual/misc/anytls-client-metadata.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
---
icon: material/incognito
---

# AnyTLS client metadata

The AnyTLS protocol has a design flaw: its settings frame requires the client
to send its software name and version to the server, and the protocol
specification requires that clients not disguise this information.

This field serves no protocol purpose — AnyTLS already has a separate version
field for compatibility negotiation, and the open-source server implementation
does not use client metadata. However, the field allows vendors to collect and track client types, and for
platform-specific clients, potentially infer private information such as the operating system type and version range —
something that should not, and is not expected by users to, appear in an
anti-censorship protocol. We have received reports that
commercial proxy providers use this information to identify and block
connections from the official library provided by AnyTLS for sing-box
integration, reportedly because abusive users connect to their servers with
sing-box or with clients using the same official library. This indicates that
client metadata is being collected and used for discrimination in practice.

The protocol specification states that "disguising it has no value." We
disagree: the situation is analogous to browsers implementing TLS ECH GREASE —
without it, privacy-protecting clients can be fingerprinted and treated
differently.

## Status

### 2025-02-20

We merged the
[pull request adding this protocol](https://github.com/SagerNet/sing-box/pull/2615).
Since the metadata was fixed at `sing-anytls/<library version>` in the
implementation provided for our use, and we did not carefully review the
protocol specification and other implementations, we wrongly believed that it
was not private information.

### 2025-04-05

The protocol document
[added](https://github.com/anytls/anytls-go/commit/8812aae7ab29dd88bb89067b9ca676e2e7e29171)
the requirement that third-party implementations fill in the real software
name and version, claiming that "disguising it has no value".

### 2026-07-18

A [pull request submitted to sing-box](https://github.com/SagerNet/sing-box/pull/4311)
was found to additionally upload the `sing-box` name and the actual version;
the change was subsequently reverted and was never released.

### 2026-08-03

sing-box 1.13.16 and 1.14.0-beta.5 have been released; the client metadata in
AnyTLS requests is now empty by default. For compatibility, the
[client_metadata](/configuration/outbound/anytls/#client_metadata) outbound
option allows users to set a custom value.

Since the open-source server implementation does not use this information and
it has no legitimate use, this is not considered a breaking change.

## Recommendations

We recommend that the AnyTLS protocol remove the client metadata, or replace
it with an option that is not sent by default and can be customized by the
user; and that other client implementations also take action, to jointly stop
statistics collection and discrimination based on client metadata.
35 changes: 35 additions & 0 deletions docs/manual/misc/anytls-client-metadata.zh.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
---
icon: material/incognito
---

# AnyTLS 客户端元数据

AnyTLS 协议具有设计缺陷:其 settings 帧要求客户端向服务器发送软件名称和版本,且协议规范要求客户端不得伪装此信息。

此字段不承担协议功能——AnyTLS 已有独立的版本字段用于兼容性协商,且开源服务端实现不使用客户端元数据。然而,此字段使得供应商可以收集并统计客户端类型,对于某些平台特定的客户端,还可能推断出操作系统类型与版本范围等隐私信息,而这不应该,也不是被用户预期的,在一个反审查协议中出现。我们收到报告,有商业代理提供商利用此信息识别和阻止来自 sing-box 使用的、由 AnyTLS 提供的用于 sing-box 集成的官方代码库的连接,据传原因是恶意用户使用 sing-box 或使用相同官方代码库的客户端连接到服务器,这表明客户端元数据在实践中已被用于收集和区别对待。

协议规范称「伪装它没有任何意义」。我们不同意:这类似于浏览器实现 TLS ECH GREASE——如果没有这一机制,保护隐私的客户端会被识别并受到差别对待。

## 状态

### 2025-02-20

我们合并了[添加此协议的 PR](https://github.com/SagerNet/sing-box/pull/2615)。由于在供我们使用的实现中,metadata 被固定在 `sing-anytls/<library version>`,且我们没有仔细审查协议规范和其他实现,我们错误地认为这不是隐私信息。

### 2025-04-05

协议文档[加入](https://github.com/anytls/anytls-go/commit/8812aae7ab29dd88bb89067b9ca676e2e7e29171)了要求第三方实现填写真实软件名称与版本号的条款,并声称「伪装它没有任何意义」。

### 2026-07-18

[向 sing-box 提出的 PR](https://github.com/SagerNet/sing-box/pull/4311) 被发现额外上传了 `sing-box` 和实际版本的字符串,随后此更改被回退,没有发布。

### 2026-08-03

发布了 sing-box 1.13.16 和 1.14.0-beta.5,现在 AnyTLS 请求中的客户端元数据默认为空。出于兼容性考虑,[client_metadata](/zh/configuration/outbound/anytls/#client_metadata) 出站选项允许用户自定义此值。

由于开源服务端实现不使用此信息,且它没有合理用途,这不被视为破坏性更改。

## 建议

我们建议 AnyTLS 协议移除客户端元数据,或将其替换为非默认提供、且用户可以自定义的选项;并建议其他客户端实现也采取行动,共同阻止基于客户端元数据的统计和区别对待。
3 changes: 3 additions & 0 deletions docs/schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -10805,6 +10805,9 @@
},
"min_idle_session": {
"type": "integer"
},
"client_metadata": {
"type": "string"
}
},
"required": [
Expand Down
68 changes: 34 additions & 34 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ require (
github.com/creack/pty v1.1.24
github.com/cretz/bine v0.2.0
github.com/database64128/tfo-go/v2 v2.3.2
github.com/dblohm7/wingoes v0.0.0-20240119213807-a09d6be7affa
github.com/go-chi/chi/v5 v5.2.5
github.com/go-chi/render v1.0.3
github.com/godbus/dbus/v5 v5.2.2
Expand All @@ -34,8 +35,8 @@ require (
github.com/sagernet/asc-go v0.0.0-20241217030726-d563060fe4e1
github.com/sagernet/bbolt v0.0.0-20231014093535-ea5cb2fe9f0a
github.com/sagernet/cors v1.2.1
github.com/sagernet/cronet-go v0.0.0-20260712143338-d22f2ea3630e
github.com/sagernet/cronet-go/all v0.0.0-20260712143338-d22f2ea3630e
github.com/sagernet/cronet-go v0.0.0-20260731162621-4185d471b2e4
github.com/sagernet/cronet-go/all v0.0.0-20260731162621-4185d471b2e4
github.com/sagernet/fswatch v0.1.2
github.com/sagernet/gliderssh v0.3.4-0.20260531100337-2194faca5648
github.com/sagernet/gomobile v0.1.12
Expand All @@ -48,7 +49,7 @@ require (
github.com/sagernet/sing-mux v0.3.5
github.com/sagernet/sing-openconnect v0.0.0-20260722140139-e0c977659ca2
github.com/sagernet/sing-openvpn v0.0.0-20260729104525-103eb5fe5eb6
github.com/sagernet/sing-quic v0.6.4-0.20260727030926-0b32a5074a40
github.com/sagernet/sing-quic v0.6.4-0.20260803041931-6c84c468bea2
github.com/sagernet/sing-shadowsocks v0.2.8
github.com/sagernet/sing-shadowsocks2 v0.2.1
github.com/sagernet/sing-shadowtls v0.2.1
Expand All @@ -57,7 +58,7 @@ require (
github.com/sagernet/sing-usbip v0.0.0-20260616101517-efb91521eddb
github.com/sagernet/sing-vmess v0.2.8-0.20250909125414-3aed155119a1
github.com/sagernet/smux v1.5.50-sing-box-mod.1
github.com/sagernet/tailscale v1.92.4-sing-box-1.13-mod.7.0.20260717155615-b353b93d194a
github.com/sagernet/tailscale v1.92.4-sing-box-1.13-mod.8.0.20260803091221-867c1f0012d9
github.com/sagernet/wireguard-go v0.0.5-0.20260717024847-6f5e8b1947ae
github.com/sagernet/ws v0.0.0-20231204124109-acfe8907c854
github.com/spf13/cobra v1.10.2
Expand Down Expand Up @@ -94,7 +95,6 @@ require (
github.com/coreos/go-oidc/v3 v3.17.0 // indirect
github.com/database64128/netx-go v0.1.1 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/dblohm7/wingoes v0.0.0-20240119213807-a09d6be7affa // indirect
github.com/dgrijalva/jwt-go/v4 v4.0.0-preview1 // indirect
github.com/dgryski/go-camellia v0.0.0-20191119043421-69a8a13fb23d // indirect
github.com/ebitengine/purego v0.10.0 // indirect
Expand Down Expand Up @@ -138,35 +138,35 @@ require (
github.com/prometheus-community/pro-bing v0.4.0 // indirect
github.com/quic-go/qpack v0.6.0 // indirect
github.com/safchain/ethtool v0.3.0 // indirect
github.com/sagernet/cronet-go/lib/android_386 v0.0.0-20260712142643-1e5048bd5587 // indirect
github.com/sagernet/cronet-go/lib/android_amd64 v0.0.0-20260712142643-1e5048bd5587 // indirect
github.com/sagernet/cronet-go/lib/android_arm v0.0.0-20260712142643-1e5048bd5587 // indirect
github.com/sagernet/cronet-go/lib/android_arm64 v0.0.0-20260712142643-1e5048bd5587 // indirect
github.com/sagernet/cronet-go/lib/darwin_amd64 v0.0.0-20260712142643-1e5048bd5587 // indirect
github.com/sagernet/cronet-go/lib/darwin_arm64 v0.0.0-20260712142643-1e5048bd5587 // indirect
github.com/sagernet/cronet-go/lib/ios_amd64_simulator v0.0.0-20260712142643-1e5048bd5587 // indirect
github.com/sagernet/cronet-go/lib/ios_arm64 v0.0.0-20260712142643-1e5048bd5587 // indirect
github.com/sagernet/cronet-go/lib/ios_arm64_simulator v0.0.0-20260712142643-1e5048bd5587 // indirect
github.com/sagernet/cronet-go/lib/linux_386 v0.0.0-20260712142643-1e5048bd5587 // indirect
github.com/sagernet/cronet-go/lib/linux_386_musl v0.0.0-20260712142643-1e5048bd5587 // indirect
github.com/sagernet/cronet-go/lib/linux_amd64 v0.0.0-20260712142643-1e5048bd5587 // indirect
github.com/sagernet/cronet-go/lib/linux_amd64_musl v0.0.0-20260712142643-1e5048bd5587 // indirect
github.com/sagernet/cronet-go/lib/linux_arm v0.0.0-20260712142643-1e5048bd5587 // indirect
github.com/sagernet/cronet-go/lib/linux_arm64 v0.0.0-20260712142643-1e5048bd5587 // indirect
github.com/sagernet/cronet-go/lib/linux_arm64_musl v0.0.0-20260712142643-1e5048bd5587 // indirect
github.com/sagernet/cronet-go/lib/linux_arm_musl v0.0.0-20260712142643-1e5048bd5587 // indirect
github.com/sagernet/cronet-go/lib/linux_loong64 v0.0.0-20260712142643-1e5048bd5587 // indirect
github.com/sagernet/cronet-go/lib/linux_loong64_musl v0.0.0-20260712142643-1e5048bd5587 // indirect
github.com/sagernet/cronet-go/lib/linux_mips64le v0.0.0-20260712142643-1e5048bd5587 // indirect
github.com/sagernet/cronet-go/lib/linux_mipsle v0.0.0-20260712142643-1e5048bd5587 // indirect
github.com/sagernet/cronet-go/lib/linux_mipsle_musl v0.0.0-20260712142643-1e5048bd5587 // indirect
github.com/sagernet/cronet-go/lib/linux_riscv64 v0.0.0-20260712142643-1e5048bd5587 // indirect
github.com/sagernet/cronet-go/lib/linux_riscv64_musl v0.0.0-20260712142643-1e5048bd5587 // indirect
github.com/sagernet/cronet-go/lib/tvos_amd64_simulator v0.0.0-20260712142643-1e5048bd5587 // indirect
github.com/sagernet/cronet-go/lib/tvos_arm64 v0.0.0-20260712142643-1e5048bd5587 // indirect
github.com/sagernet/cronet-go/lib/tvos_arm64_simulator v0.0.0-20260712142643-1e5048bd5587 // indirect
github.com/sagernet/cronet-go/lib/windows_amd64 v0.0.0-20260712142643-1e5048bd5587 // indirect
github.com/sagernet/cronet-go/lib/windows_arm64 v0.0.0-20260712142643-1e5048bd5587 // indirect
github.com/sagernet/cronet-go/lib/android_386 v0.0.0-20260731161755-38229fb700f6 // indirect
github.com/sagernet/cronet-go/lib/android_amd64 v0.0.0-20260731161755-38229fb700f6 // indirect
github.com/sagernet/cronet-go/lib/android_arm v0.0.0-20260731161755-38229fb700f6 // indirect
github.com/sagernet/cronet-go/lib/android_arm64 v0.0.0-20260731161755-38229fb700f6 // indirect
github.com/sagernet/cronet-go/lib/darwin_amd64 v0.0.0-20260731161755-38229fb700f6 // indirect
github.com/sagernet/cronet-go/lib/darwin_arm64 v0.0.0-20260731161755-38229fb700f6 // indirect
github.com/sagernet/cronet-go/lib/ios_amd64_simulator v0.0.0-20260731161755-38229fb700f6 // indirect
github.com/sagernet/cronet-go/lib/ios_arm64 v0.0.0-20260731161755-38229fb700f6 // indirect
github.com/sagernet/cronet-go/lib/ios_arm64_simulator v0.0.0-20260731161755-38229fb700f6 // indirect
github.com/sagernet/cronet-go/lib/linux_386 v0.0.0-20260731161755-38229fb700f6 // indirect
github.com/sagernet/cronet-go/lib/linux_386_musl v0.0.0-20260731161755-38229fb700f6 // indirect
github.com/sagernet/cronet-go/lib/linux_amd64 v0.0.0-20260731161755-38229fb700f6 // indirect
github.com/sagernet/cronet-go/lib/linux_amd64_musl v0.0.0-20260731161755-38229fb700f6 // indirect
github.com/sagernet/cronet-go/lib/linux_arm v0.0.0-20260731161755-38229fb700f6 // indirect
github.com/sagernet/cronet-go/lib/linux_arm64 v0.0.0-20260731161755-38229fb700f6 // indirect
github.com/sagernet/cronet-go/lib/linux_arm64_musl v0.0.0-20260731161755-38229fb700f6 // indirect
github.com/sagernet/cronet-go/lib/linux_arm_musl v0.0.0-20260731161755-38229fb700f6 // indirect
github.com/sagernet/cronet-go/lib/linux_loong64 v0.0.0-20260731161755-38229fb700f6 // indirect
github.com/sagernet/cronet-go/lib/linux_loong64_musl v0.0.0-20260731161755-38229fb700f6 // indirect
github.com/sagernet/cronet-go/lib/linux_mips64le v0.0.0-20260731161755-38229fb700f6 // indirect
github.com/sagernet/cronet-go/lib/linux_mipsle v0.0.0-20260731161755-38229fb700f6 // indirect
github.com/sagernet/cronet-go/lib/linux_mipsle_musl v0.0.0-20260731161755-38229fb700f6 // indirect
github.com/sagernet/cronet-go/lib/linux_riscv64 v0.0.0-20260731161755-38229fb700f6 // indirect
github.com/sagernet/cronet-go/lib/linux_riscv64_musl v0.0.0-20260731161755-38229fb700f6 // indirect
github.com/sagernet/cronet-go/lib/tvos_amd64_simulator v0.0.0-20260731161755-38229fb700f6 // indirect
github.com/sagernet/cronet-go/lib/tvos_arm64 v0.0.0-20260731161755-38229fb700f6 // indirect
github.com/sagernet/cronet-go/lib/tvos_arm64_simulator v0.0.0-20260731161755-38229fb700f6 // indirect
github.com/sagernet/cronet-go/lib/windows_amd64 v0.0.0-20260731161755-38229fb700f6 // indirect
github.com/sagernet/cronet-go/lib/windows_arm64 v0.0.0-20260731161755-38229fb700f6 // indirect
github.com/smallstep/pkcs7 v0.1.1 // indirect
github.com/spf13/pflag v1.0.9 // indirect
github.com/tailscale/certstore v0.1.1-0.20231202035212-d3fa0460f47e // indirect
Expand Down
Loading