🚀 Xray-knife v11.5.0 (JOIN THE TELEGRAM CHANNEL)
Links that carry an xray finalmask (fm=) now get tested with it, and xray-core moves to 26.10.29. 🛠️
⚠️ After upgrading
- 📡 Plain
type=kcplinks use the original mKCP obfuscation again. That is what mKCP always did before finalmask, what older xray and v2fly servers expect, and what v2rayN sends. A server on a recent xray-core whose kcp inbound has no finalmask wants bare mKCP: addfm=%7B%7D(fm={}) to those links. - 🔐 Links with
fmstay on xray-core. sing-box would drop the masks, so-z autono longer moves them there forinsecure=1or for plaintext to a public server. xray-core can't skip certificate checks, so a self-signed server needspcs=/pinSHA256=. One exception: a Hysteria2 link that asks for insecure and whosefmonly addsnoiseorquicParamsstays on sing-box, because the server never sees those masks.
🎭 Finalmask in share links
xray shares finalmask as fm= (URL-encoded JSON, the same as v2rayN). xray-knife used to ignore it, so a link whose server needs a mask failed even when the server was fine.
- 🔗 Read and write
fmon VLESS, VMess, Trojan, Shadowsocks, Hysteria2 and WireGuard links. Exported and regenerated links keep it. - 🧩 Every xray-core mask works:
fragment,xmc,noise,salamander(gecko too, withpacketSize),mkcp-legacy,xdns,xicmp,realm,udphop,header-custom,sudoku,filter, andquicParams. - 📥
proxy inbound --inbound-configappliesfmtoo, so a masked link works as the local inbound. - 🔄
fmis the whole finalmask. As in v2rayN, it replaces the salamander fromobfsand anything the old mKCP params imply, so the mask order matches the server's. - 🕰️ Old mKCP params work again. xray-core 26.x silently ignored
headerTypeandseedon kcp links; they now map tomkcp-legacymasks, as v2rayN does. - 📦 xray JSON subscriptions keep their
finalmaskwhen imported. A Hysteria2 salamander still goes inobfstoo, so clients that don't readfmkeep working. - 🧭 Hysteria2 picks its core by
fm. A link whosefmonly repeatsobfsstays on sing-box; anything more (gecko, another password, more masks) runs on xray-core. - ✂️
--fragmentworks with masked links. Its noise goes in just before audphoporxicmpmask, which xray-core requires to come last.
Thanks @ranthe21 for the PR (#75), tested against a live xray server across every mask type and transport. 🙏
🆙 xray-core 26.10.29
- 🌐 WebSocket links end cleanly when the server sends a normal close frame, instead of reporting an error.
- 🍎 macOS: TCP keepalive idle and interval were swapped.
- 🪟 Windows:
--bindworks on an interface that has only IPv4 or only IPv6. - 🏷️ The private address list follows the IANA registries. That changes which servers may take plaintext VLESS/Trojan on xray-core: 6to4 (
2002::/16), Teredo (2001::/32) and NAT64 (64:ff9b::/96) now count as private, and most of192.0.0.0/24no longer does.
📦 Install
Grab a prebuilt binary from the assets below (verify with sha256sum -c --ignore-missing SHA256SUMS), or install with Go. The tags match the release binaries:
go install -tags "with_gvisor,with_quic,with_wireguard,with_utls,with_clash_api,with_grpc" \
github.com/lilendian0x00/xray-knife/v11@latestFull Changelog: v11.4.1...v11.5.0