Releases: harodggg/xray-wasm
Release list
v0.7.0
产物
| 文件 | 说明 |
|---|---|
xt-wasm-cli.wasm |
wasm32-wasip2 模块(wasmtime 直接可跑) |
xt-wasm-cli.wasm.sha256 |
上述文件的 SHA-256 |
wasm 模块 SHA-256:0d591e78700df0997af16380641cbaa39189523a63fb4e38f09291a923534d67
同一个模块跑两种模式:默认是客户端(socket → REALITY),
server 子命令是服务端(REALITY 入站)。
客户端:本地 SOCKS5 → REALITY 隧道
wasmtime run -C cache=n \
-S tcp=y -S inherit-network=y -S allow-ip-name-lookup=y -S inherit-env=y \
xt-wasm-cli.wasm \
--server <ip:port> --pbk <公钥> --sid <shortId> \
--sni <伪装域名> --uuid <uuid> --listen 127.0.0.1:1080服务端:REALITY 入站(k3s 用)
wasmtime run -C cache=n \
-S tcp=y -S inherit-network=y -S allow-ip-name-lookup=y -S inherit-env=y \
xt-wasm-cli.wasm server \
--listen 0.0.0.0:8443 \
--private-key <xray x25519 的 PrivateKey> \
--short-ids <hex> \
--server-names <伪装域名> \
--dest <同一个域名的 host:port> \
--users <uuid>全部参数都有对应的 XT_* 环境变量(命令行优先),便于 k8s 用 Secret 注入。
互操作(四种组合都通)
| 客户端 | 服务端 | 结果 |
|---|---|---|
官方 Xray(v2rayN / 小火箭 / xray 二进制) |
本工程 wasm 服务端 | ✅ flow: "xtls-rprx-vision" 直接可用 |
| 本工程 wasm 客户端(默认,带 Vision) | 官方 Xray 服务端 | ✅ |
| 本工程 wasm 客户端(默认,带 Vision) | 本工程 wasm 服务端 | ✅ |
本工程 wasm 客户端 --no-flow |
本工程 wasm 服务端 | ✅ |
不认识的
flow名仍会被明确拒绝,不会静默降级。
--no-flow(或XT_NO_FLOW=1)只在「对端只认空 flow」时需要 ——
它同时关掉 flow 声明和客户端侧 Vision 分帧,两者必须同进同退
(只关一半会得到「连上了但数据是坏的」)。
客户端 ClientHello 指纹伪装(v0.7.0 新增)
客户端默认不再发那个「1 个 cipher、无 GREASE」的最小 ClientHello,而是按
profile 组装,默认 chrome:cipher 列表、扩展集合、GREASE 模式、
GREASE ECH、ALPS、默认 ALPN 都对齐官方 Xray fingerprint: chrome 的形状
(权威对照是仓库里一份真实抓到的官方 ClientHello)。
# 默认就是 chrome;要关掉伪装用 plain
--fingerprint chrome | plain # 或 XT_FINGERPRINT
XT_CHECK=1 … # 自检里可见生效 profile 与 ALPN判据是可计算的(全部在 CI 里常态化跑):JA4 与官方夹包全等、
逐字段差分只剩已声明的偏差;另有「真机裸 TCP 探针」证明线上字节确实是
浏览器形状(chrome:16 cipher / 18 扩展 / 含 ECH 与 ALPS / ALPN h2+http/1.1)。
能力边界(请按这个理解,不要当成「完整 Chrome 指纹」):
- 只对齐可观测字段。真 Chrome 会声明
X25519MLKEM768并带上它 1216 字节的
key_share,我们两者都不发 —— 声明了却不提供对应 key_share 会触发对端
HelloRetryRequest(RFC 8446 §4.1.1),而本实现不支持 HRR,握手会直接失败
(实测 5/5 命中)。 - 因此纯 X25519 是真实的密码学降级:不具备抗「先存后解」的后量子性。
- ECH 只是 GREASE 占位(不是真 ECH,也不能解密);形状等价于
「PQ 尚未默认开启的 Chrome」,版本年代假设未验证。 - 真 Chrome 的 JA3 每次连接都不同(扩展顺序被打乱),所以我们同样按连接
随机化扩展顺序 —— 否则「JA3 恒定」本身就是一个真 Chrome 没有的跨连接标签。 - 它不改变 TLS 之外的特征(包长分布、时序、SNI、DNS),也不改证书链。
- 细节与残余风险:
docs/fingerprint-plan.md、docs/fingerprint-security.md。
服务端 XTLS-Vision(v0.6.0 新增)
服务端现在双向实现了 XTLS-Vision 流控(解帧 + 组帧),官方客户端
带 flow: "xtls-rprx-vision" 经本服务端取真实网页拿到 HTTP 200:
[server] ts=… dir=in sni=www.cloudflare.com ver=26.3.27 target=example.com:443 \
outcome=Forwarded dur_ms=1022 up_bytes=578 down_bytes=4894
两个关键语义(都写进了单测,改回去立刻变红):
- 收到对端的
DIRECT只切读侧,写侧必须继续组帧直到我们自己发终止帧; DIRECT帧的 padding 走完之前不能去读内层(否则会拿裸字节喂外层 TLS)。
服务端可观测性
一次请求一行,字段固定;outcome= 取值
Forwarded | FellBack | Rejected | ResolveFailed | ConnectFailed(外加 Error):
[server] ts=2026-09-15T11:41:12Z dir=in src=10.0.0.5:51234 sni=www.example.com \
ver=26.3.27 sid=0011223344556677 target=example.com:443 outcome=Forwarded \
dur_ms=1320 up_bytes=585 down_bytes=4867
配置自检(不监听,只打印生效配置并退出):
XT_CHECK=1 <上面的 XT_* 变量> wasmtime run … xt-wasm-cli.wasm server
⚠️ wasmtime 会把 guest 的退出码塌缩成 1(实测exit(2)/exit(42)都得到 1)。
--check的契约可观察到的只有 0 / 非 0;写成== 2的断言在宿主上过、
在 wasm 上必红。
四个
-Sflag 缺一不可。尤其inherit-network=y缺失时报的是
PermissionDenied,很容易被误读成「网络被墙」。
inherit-env=y是安全相关的:缺了它,凭据无法通过环境变量传入。
容器镜像(k8s)
ghcr.io/harodggg/xray-wasm:v0.7.0
ghcr.io/harodggg/xray-wasm:latest
# 客户端
docker run --rm -e XT_SERVER=… -e XT_PBK=… ghcr.io/harodggg/xray-wasm:v0.7.0
# 服务端(子命令写在镜像名之后)
docker run --rm -e XT_PRIVATE_KEY=… ghcr.io/harodggg/xray-wasm:v0.7.0 server部署清单(客户端与服务端各一套)与安全须知见仓库 deploy/k8s/。
校验
sha256sum -c xt-wasm-cli.wasm.sha256Full Changelog: v0.6.0...v0.7.0
v0.6.0
产物
| 文件 | 说明 |
|---|---|
xt-wasm-cli.wasm |
wasm32-wasip2 模块(wasmtime 直接可跑) |
xt-wasm-cli.wasm.sha256 |
上述文件的 SHA-256 |
wasm 模块 SHA-256:8466fd0d6084215c2cb2ddf653650b140c2268b607f8bc2e1972e07a76487956
同一个模块跑两种模式:默认是客户端(socket → REALITY),
server 子命令是服务端(REALITY 入站)。
客户端:本地 SOCKS5 → REALITY 隧道
wasmtime run -C cache=n \
-S tcp=y -S inherit-network=y -S allow-ip-name-lookup=y -S inherit-env=y \
xt-wasm-cli.wasm \
--server <ip:port> --pbk <公钥> --sid <shortId> \
--sni <伪装域名> --uuid <uuid> --listen 127.0.0.1:1080服务端:REALITY 入站(k3s 用)
wasmtime run -C cache=n \
-S tcp=y -S inherit-network=y -S allow-ip-name-lookup=y -S inherit-env=y \
xt-wasm-cli.wasm server \
--listen 0.0.0.0:8443 \
--private-key <xray x25519 的 PrivateKey> \
--short-ids <hex> \
--server-names <伪装域名> \
--dest <同一个域名的 host:port> \
--users <uuid>全部参数都有对应的 XT_* 环境变量(命令行优先),便于 k8s 用 Secret 注入。
互操作(四种组合都通)
| 客户端 | 服务端 | 结果 |
|---|---|---|
官方 Xray(v2rayN / 小火箭 / xray 二进制) |
本工程 wasm 服务端 | ✅ flow: "xtls-rprx-vision" 直接可用 |
| 本工程 wasm 客户端(默认,带 Vision) | 官方 Xray 服务端 | ✅ |
| 本工程 wasm 客户端(默认,带 Vision) | 本工程 wasm 服务端 | ✅ |
本工程 wasm 客户端 --no-flow |
本工程 wasm 服务端 | ✅ |
不认识的
flow名仍会被明确拒绝,不会静默降级。
--no-flow(或XT_NO_FLOW=1)只在「对端只认空 flow」时需要 ——
它同时关掉 flow 声明和客户端侧 Vision 分帧,两者必须同进同退
(只关一半会得到「连上了但数据是坏的」)。
服务端 XTLS-Vision(本版新增)
服务端现在双向实现了 XTLS-Vision 流控(解帧 + 组帧),官方客户端
带 flow: "xtls-rprx-vision" 经本服务端取真实网页拿到 HTTP 200:
[server] ts=… dir=in sni=www.cloudflare.com ver=26.3.27 target=example.com:443 \
outcome=Forwarded dur_ms=1022 up_bytes=578 down_bytes=4894
两个关键语义(都写进了单测,改回去立刻变红):
- 收到对端的
DIRECT只切读侧,写侧必须继续组帧直到我们自己发终止帧; DIRECT帧的 padding 走完之前不能去读内层(否则会拿裸字节喂外层 TLS)。
服务端可观测性
一次请求一行,字段固定;outcome= 取值
Forwarded | FellBack | Rejected | ResolveFailed | ConnectFailed(外加 Error):
[server] ts=2026-09-15T11:41:12Z dir=in src=10.0.0.5:51234 sni=www.example.com \
ver=26.3.27 sid=0011223344556677 target=example.com:443 outcome=Forwarded \
dur_ms=1320 up_bytes=585 down_bytes=4867
配置自检(不监听,只打印生效配置并退出):
XT_CHECK=1 <上面的 XT_* 变量> wasmtime run … xt-wasm-cli.wasm server
⚠️ wasmtime 会把 guest 的退出码塌缩成 1(实测exit(2)/exit(42)都得到 1)。
--check的契约可观察到的只有 0 / 非 0;写成== 2的断言在宿主上过、
在 wasm 上必红。
四个
-Sflag 缺一不可。尤其inherit-network=y缺失时报的是
PermissionDenied,很容易被误读成「网络被墙」。
inherit-env=y是安全相关的:缺了它,凭据无法通过环境变量传入。
容器镜像(k8s)
ghcr.io/harodggg/xray-wasm:v0.6.0
ghcr.io/harodggg/xray-wasm:latest
# 客户端
docker run --rm -e XT_SERVER=… -e XT_PBK=… ghcr.io/harodggg/xray-wasm:v0.6.0
# 服务端(子命令写在镜像名之后)
docker run --rm -e XT_PRIVATE_KEY=… ghcr.io/harodggg/xray-wasm:v0.6.0 server部署清单(客户端与服务端各一套)与安全须知见仓库 deploy/k8s/。
校验
sha256sum -c xt-wasm-cli.wasm.sha256Full Changelog: v0.5.2...v0.6.0
v0.5.2
产物
| 文件 | 说明 |
|---|---|
xt-wasm-cli.wasm |
wasm32-wasip2 模块(wasmtime 直接可跑) |
xt-wasm-cli.wasm.sha256 |
上述文件的 SHA-256 |
wasm 模块 SHA-256:aa6cd6650cf936b9f13a5a07987d8651e418a380a210b1221c05499fe6df2292
同一个模块跑两种模式:默认是客户端(socket → REALITY),
server 子命令是服务端(REALITY 入站)。
客户端:本地 SOCKS5 → REALITY 隧道
wasmtime run -C cache=n \
-S tcp=y -S inherit-network=y -S allow-ip-name-lookup=y -S inherit-env=y \
xt-wasm-cli.wasm \
--server <ip:port> --pbk <公钥> --sid <shortId> \
--sni <伪装域名> --uuid <uuid> --listen 127.0.0.1:1080服务端:REALITY 入站(k3s 用)
wasmtime run -C cache=n \
-S tcp=y -S inherit-network=y -S allow-ip-name-lookup=y -S inherit-env=y \
xt-wasm-cli.wasm server \
--listen 0.0.0.0:8443 \
--private-key <xray x25519 的 PrivateKey> \
--short-ids <hex> \
--server-names <伪装域名> \
--dest <同一个域名的 host:port> \
--users <uuid>全部参数都有对应的 XT_* 环境变量(命令行优先),便于 k8s 用 Secret 注入。
互操作(哪两端、要不要 --no-flow)
| 客户端 | 服务端 | 结果 |
|---|---|---|
官方 Xray(v2rayN / 小火箭 / xray 二进制) |
本工程 wasm 服务端 | ✅ 配置里 flow 必须留空 |
| 本工程 wasm 客户端(默认) | 官方 Xray 服务端 | ✅ |
本工程 wasm 客户端 --no-flow |
本工程 wasm 服务端 | ✅ |
| 本工程 wasm 客户端(默认带 Vision) | 本工程 wasm 服务端 | ❌ 被明确拒绝,不静默降级 |
--no-flow(或XT_NO_FLOW=1)同时关掉 flow 声明和客户端侧 Vision 分帧。
只关一半会得到「连上了但数据是坏的」—— 两者必须同进同退。
服务端侧 XTLS-Vision 尚未实现:带非空 flow 的请求会被明确拒绝,
reason里会写清客户端该怎么改。
服务端可观测性
一次请求一行,字段固定;outcome= 取值
Forwarded | FellBack | Rejected | ResolveFailed | ConnectFailed(外加 Error):
[server] ts=2026-09-15T11:41:12Z dir=in src=10.0.0.5:51234 sni=www.example.com \
ver=26.3.27 sid=0011223344556677 target=example.com:443 outcome=Forwarded \
dur_ms=1320 up_bytes=585 down_bytes=4867
配置自检(不监听,只打印生效配置并退出):
XT_CHECK=1 <上面的 XT_* 变量> wasmtime run … xt-wasm-cli.wasm server
⚠️ wasmtime 会把 guest 的退出码塌缩成 1(实测exit(2)/exit(42)都得到 1)。
--check的契约可观察到的只有 0 / 非 0;写成== 2的断言在宿主上过、
在 wasm 上必红。
四个
-Sflag 缺一不可。尤其inherit-network=y缺失时报的是
PermissionDenied,很容易被误读成「网络被墙」。
inherit-env=y是安全相关的:缺了它,凭据无法通过环境变量传入。
容器镜像(k8s)
ghcr.io/harodggg/xray-wasm:v0.5.2
ghcr.io/harodggg/xray-wasm:latest
# 客户端
docker run --rm -e XT_SERVER=… -e XT_PBK=… ghcr.io/harodggg/xray-wasm:v0.5.2
# 服务端(子命令写在镜像名之后)
docker run --rm -e XT_PRIVATE_KEY=… ghcr.io/harodggg/xray-wasm:v0.5.2 server部署清单(客户端与服务端各一套)与安全须知见仓库 deploy/k8s/。
校验
sha256sum -c xt-wasm-cli.wasm.sha256Full Changelog: v0.5.1...v0.5.2
v0.5.1
产物
| 文件 | 说明 |
|---|---|
xt-wasm-cli.wasm |
wasm32-wasip2 模块(wasmtime 直接可跑) |
xt-wasm-cli.wasm.sha256 |
上述文件的 SHA-256 |
wasm 模块 SHA-256:2c8550c6aaccd79e78ed1b2e1ec2c66391695e360ee5db7160a064d5ab8c93f0
同一个模块跑两种模式:默认是客户端(socket → REALITY),
server 子命令是服务端(REALITY 入站)。
客户端:本地 SOCKS5 → REALITY 隧道
wasmtime run -C cache=n \
-S tcp=y -S inherit-network=y -S allow-ip-name-lookup=y -S inherit-env=y \
xt-wasm-cli.wasm \
--server <ip:port> --pbk <公钥> --sid <shortId> \
--sni <伪装域名> --uuid <uuid> --listen 127.0.0.1:1080服务端:REALITY 入站(k3s 用)
wasmtime run -C cache=n \
-S tcp=y -S inherit-network=y -S allow-ip-name-lookup=y -S inherit-env=y \
xt-wasm-cli.wasm server \
--listen 0.0.0.0:8443 \
--private-key <xray x25519 的 PrivateKey> \
--short-ids <hex> \
--server-names <伪装域名> \
--dest <同一个域名的 host:port> \
--users <uuid>全部参数都有对应的 XT_* 环境变量(命令行优先),便于 k8s 用 Secret 注入。
互操作(哪两端、要不要 --no-flow)
| 客户端 | 服务端 | 结果 |
|---|---|---|
官方 Xray(v2rayN / 小火箭 / xray 二进制) |
本工程 wasm 服务端 | ✅ 配置里 flow 必须留空 |
| 本工程 wasm 客户端(默认) | 官方 Xray 服务端 | ✅ |
本工程 wasm 客户端 --no-flow |
本工程 wasm 服务端 | ✅ |
| 本工程 wasm 客户端(默认带 Vision) | 本工程 wasm 服务端 | ❌ 被明确拒绝,不静默降级 |
--no-flow(或XT_NO_FLOW=1)同时关掉 flow 声明和客户端侧 Vision 分帧。
只关一半会得到「连上了但数据是坏的」—— 两者必须同进同退。
服务端侧 XTLS-Vision 尚未实现:带非空 flow 的请求会被明确拒绝,
reason里会写清客户端该怎么改。
服务端可观测性
一次请求一行,字段固定;outcome= 取值
Forwarded | FellBack | Rejected | ResolveFailed | ConnectFailed(外加 Error):
[server] ts=2026-09-15T11:41:12Z dir=in src=10.0.0.5:51234 sni=www.example.com \
ver=26.3.27 sid=0011223344556677 target=example.com:443 outcome=Forwarded \
dur_ms=1320 up_bytes=585 down_bytes=4867
配置自检(不监听,只打印生效配置并退出):
XT_CHECK=1 <上面的 XT_* 变量> wasmtime run … xt-wasm-cli.wasm server
⚠️ wasmtime 会把 guest 的退出码塌缩成 1(实测exit(2)/exit(42)都得到 1)。
--check的契约可观察到的只有 0 / 非 0;写成== 2的断言在宿主上过、
在 wasm 上必红。
四个
-Sflag 缺一不可。尤其inherit-network=y缺失时报的是
PermissionDenied,很容易被误读成「网络被墙」。
inherit-env=y是安全相关的:缺了它,凭据无法通过环境变量传入。
容器镜像(k8s)
ghcr.io/harodggg/xray-wasm:v0.5.1
ghcr.io/harodggg/xray-wasm:latest
# 客户端
docker run --rm -e XT_SERVER=… -e XT_PBK=… ghcr.io/harodggg/xray-wasm:v0.5.1
# 服务端(子命令写在镜像名之后)
docker run --rm -e XT_PRIVATE_KEY=… ghcr.io/harodggg/xray-wasm:v0.5.1 server部署清单(客户端与服务端各一套)与安全须知见仓库 deploy/k8s/。
校验
sha256sum -c xt-wasm-cli.wasm.sha256Full Changelog: v0.5.0...v0.5.1
v0.5.0
产物
| 文件 | 说明 |
|---|---|
xt-wasm-cli.wasm |
wasm32-wasip2 模块(wasmtime 直接可跑) |
xt-wasm-cli.wasm.sha256 |
上述文件的 SHA-256 |
wasm 模块 SHA-256:fb4a52bb4c4dd97c9aa0541969638b2029dc475d77b4c2ab48b7d7276fda3932
同一个模块跑两种模式:默认是客户端(socket → REALITY),
server 子命令是服务端(REALITY 入站)。
客户端:本地 SOCKS5 → REALITY 隧道
wasmtime run -C cache=n \
-S tcp=y -S inherit-network=y -S allow-ip-name-lookup=y -S inherit-env=y \
xt-wasm-cli.wasm \
--server <ip:port> --pbk <公钥> --sid <shortId> \
--sni <伪装域名> --uuid <uuid> --listen 127.0.0.1:1080服务端:REALITY 入站(k3s 用)
wasmtime run -C cache=n \
-S tcp=y -S inherit-network=y -S allow-ip-name-lookup=y -S inherit-env=y \
xt-wasm-cli.wasm server \
--listen 0.0.0.0:8443 \
--private-key <xray x25519 的 PrivateKey> \
--short-ids <hex> \
--server-names <伪装域名> \
--dest <同一个域名的 host:port> \
--users <uuid>全部参数都有对应的 XT_* 环境变量(命令行优先),便于 k8s 用 Secret 注入。
互操作(哪两端、要不要 --no-flow)
| 客户端 | 服务端 | 结果 |
|---|---|---|
官方 Xray(v2rayN / 小火箭 / xray 二进制) |
本工程 wasm 服务端 | ✅ 配置里 flow 必须留空 |
| 本工程 wasm 客户端(默认) | 官方 Xray 服务端 | ✅ |
本工程 wasm 客户端 --no-flow |
本工程 wasm 服务端 | ✅ |
| 本工程 wasm 客户端(默认带 Vision) | 本工程 wasm 服务端 | ❌ 被明确拒绝,不静默降级 |
--no-flow(或XT_NO_FLOW=1)同时关掉 flow 声明和客户端侧 Vision 分帧。
只关一半会得到「连上了但数据是坏的」—— 两者必须同进同退。
服务端侧 XTLS-Vision 尚未实现:带非空 flow 的请求会被明确拒绝,
reason里会写清客户端该怎么改。
服务端可观测性
一次请求一行,字段固定;outcome= 取值
Forwarded | FellBack | Rejected | ResolveFailed | ConnectFailed(外加 Error):
[server] ts=2026-09-15T11:41:12Z dir=in src=10.0.0.5:51234 sni=www.example.com \
ver=26.3.27 sid=0011223344556677 target=example.com:443 outcome=Forwarded \
dur_ms=1320 up_bytes=585 down_bytes=4867
配置自检(不监听,只打印生效配置并退出):
XT_CHECK=1 <上面的 XT_* 变量> wasmtime run … xt-wasm-cli.wasm server
⚠️ wasmtime 会把 guest 的退出码塌缩成 1(实测exit(2)/exit(42)都得到 1)。
--check的契约可观察到的只有 0 / 非 0;写成== 2的断言在宿主上过、
在 wasm 上必红。
四个
-Sflag 缺一不可。尤其inherit-network=y缺失时报的是
PermissionDenied,很容易被误读成「网络被墙」。
inherit-env=y是安全相关的:缺了它,凭据无法通过环境变量传入。
容器镜像(k8s)
ghcr.io/harodggg/xray-wasm:v0.5.0
ghcr.io/harodggg/xray-wasm:latest
# 客户端
docker run --rm -e XT_SERVER=… -e XT_PBK=… ghcr.io/harodggg/xray-wasm:v0.5.0
# 服务端(子命令写在镜像名之后)
docker run --rm -e XT_PRIVATE_KEY=… ghcr.io/harodggg/xray-wasm:v0.5.0 server部署清单(客户端与服务端各一套)与安全须知见仓库 deploy/k8s/。
校验
sha256sum -c xt-wasm-cli.wasm.sha256Full Changelog: v0.4.0...v0.5.0
v0.4.0
产物
| 文件 | 说明 |
|---|---|
xt-wasm-cli.wasm |
wasm32-wasip2 模块(wasmtime 直接可跑) |
xt-wasm-cli.wasm.sha256 |
上述文件的 SHA-256 |
wasm 模块 SHA-256:0bab8c0a41f8910c1eafaebb3586b1a1c61ed06362be4b8c43a178f7bd16f992
同一个模块跑两种模式:默认是客户端(socket → REALITY),
server 子命令是服务端(REALITY 入站)。
客户端:本地 SOCKS5 → REALITY 隧道
wasmtime run -C cache=n \
-S tcp=y -S inherit-network=y -S allow-ip-name-lookup=y -S inherit-env=y \
xt-wasm-cli.wasm \
--server <ip:port> --pbk <公钥> --sid <shortId> \
--sni <伪装域名> --uuid <uuid> --listen 127.0.0.1:1080服务端:REALITY 入站(k3s 用)
wasmtime run -C cache=n \
-S tcp=y -S inherit-network=y -S allow-ip-name-lookup=y -S inherit-env=y \
xt-wasm-cli.wasm server \
--listen 0.0.0.0:8443 \
--private-key <xray x25519 的 PrivateKey> \
--short-ids <hex> \
--server-names <伪装域名> \
--dest <同一个域名的 host:port> \
--users <uuid>全部参数都有对应的 XT_* 环境变量(命令行优先),便于 k8s 用 Secret 注入。
客户端
flow必须留空:服务端侧 XTLS-Vision 尚未实现,
带非空 flow 的请求会被明确拒绝(不是静默降级)。
四个
-Sflag 缺一不可。尤其inherit-network=y缺失时报的是
PermissionDenied,很容易被误读成「网络被墙」。
inherit-env=y是安全相关的:缺了它,凭据无法通过环境变量传入。
容器镜像(k8s)
ghcr.io/harodggg/xray-wasm:v0.4.0
ghcr.io/harodggg/xray-wasm:latest
# 客户端
docker run --rm -e XT_SERVER=… -e XT_PBK=… ghcr.io/harodggg/xray-wasm:v0.4.0
# 服务端(子命令写在镜像名之后)
docker run --rm -e XT_PRIVATE_KEY=… ghcr.io/harodggg/xray-wasm:v0.4.0 server部署清单(客户端与服务端各一套)与安全须知见仓库 deploy/k8s/。
校验
sha256sum -c xt-wasm-cli.wasm.sha256Full Changelog: v0.3.0...v0.4.0
v0.3.0
产物
| 文件 | 说明 |
|---|---|
xt-wasm-cli.wasm |
wasm32-wasip2 模块(wasmtime 直接可跑) |
xt-wasm-cli.wasm.sha256 |
上述文件的 SHA-256 |
wasm 模块 SHA-256:c0f114e7d58797fa81b4ad9cc999f112d0786af7fa3b65c4678a56c959bfbbc0
直接运行 wasm 模块
wasmtime run -C cache=n \
-S tcp=y -S inherit-network=y -S allow-ip-name-lookup=y -S inherit-env=y \
xt-wasm-cli.wasm \
--server <ip:port> --pbk <公钥> --sid <shortId> \
--sni <伪装域名> --uuid <uuid> --listen 127.0.0.1:1080四个
-Sflag 缺一不可。尤其inherit-network=y缺失时报的是
PermissionDenied,很容易被误读成「网络被墙」。
inherit-env=y是安全相关的:缺了它,凭据无法通过环境变量传入。
容器镜像(k8s)
ghcr.io/harodggg/xray-wasm:v0.3.0
ghcr.io/harodggg/xray-wasm:latest
部署清单与安全须知见仓库 deploy/k8s/。
校验
sha256sum -c xt-wasm-cli.wasm.sha256Full Changelog: v0.2.0...v0.3.0
v0.2.0
产物
| 文件 | 说明 |
|---|---|
xt-wasm-cli.wasm |
wasm32-wasip2 模块(wasmtime 直接可跑) |
xt-wasm-cli.wasm.sha256 |
上述文件的 SHA-256 |
wasm 模块 SHA-256:0f7f6c41d50ee884ad9c990118f7f0a1b2f1695df6de79aed3de01b4c175782b
直接运行 wasm 模块
wasmtime run -C cache=n \
-S tcp=y -S inherit-network=y -S allow-ip-name-lookup=y -S inherit-env=y \
xt-wasm-cli.wasm \
--server <ip:port> --pbk <公钥> --sid <shortId> \
--sni <伪装域名> --uuid <uuid> --listen 127.0.0.1:1080四个
-Sflag 缺一不可。尤其inherit-network=y缺失时报的是
PermissionDenied,很容易被误读成「网络被墙」。
inherit-env=y是安全相关的:缺了它,凭据无法通过环境变量传入。
容器镜像(k8s)
ghcr.io/harodggg/xray-wasm:v0.2.0
ghcr.io/harodggg/xray-wasm:latest
部署清单与安全须知见仓库 deploy/k8s/。
校验
sha256sum -c xt-wasm-cli.wasm.sha256Full Changelog: v0.1.0...v0.2.0
v0.1.0
产物
| 文件 | 说明 |
|---|---|
xt-wasm-cli.wasm |
wasm32-wasip2 模块(wasmtime 直接可跑) |
xt-wasm-cli.wasm.sha256 |
上述文件的 SHA-256 |
wasm 模块 SHA-256:2017196b5aebf14877815e7c5a9f961e909768052116c1cd83a02bae5450d424
直接运行 wasm 模块
wasmtime run -C cache=n \
-S tcp=y -S inherit-network=y -S allow-ip-name-lookup=y -S inherit-env=y \
xt-wasm-cli.wasm \
--server <ip:port> --pbk <公钥> --sid <shortId> \
--sni <伪装域名> --uuid <uuid> --listen 127.0.0.1:1080四个
-Sflag 缺一不可。尤其inherit-network=y缺失时报的是
PermissionDenied,很容易被误读成「网络被墙」。
inherit-env=y是安全相关的:缺了它,凭据无法通过环境变量传入。
容器镜像(k8s)
ghcr.io/harodggg/xray-wasm:v0.1.0
ghcr.io/harodggg/xray-wasm:latest
部署清单与安全须知见仓库 deploy/k8s/。
校验
sha256sum -c xt-wasm-cli.wasm.sha256Full Changelog: https://github.com/harodggg/xray-wasm/commits/v0.1.0