- allow installing with no inbounds at all, keeping only the base JSON; skip the protocol removal interaction and drop the REINSTALL=0 error
- ask for the node name again when re-adding protocols from a zero-protocol state, matching a fresh install
- clean up nginx / argo links after removing WS protocols: remove nginx config and stop the service when there is no subscription, keep fixed-tunnel argo and remove quick-tunnel argo
- reuse text 107 for the change_config guard and blank out unused E[73]/C[73], E[110]/C[110] entries
- remove dead code collect_exposed_ports and del_service_port_rule_ufw
feat: 支持完全无协议场景,精简空状态流程
- 允许一个 inbound 都没有的安装,仅保留基础配置 JSON;无协议时跳过删除交互并移除 REINSTALL=0 报错
- 0 协议状态下重新添加协议时重新询问节点名称,与全新安装一致
- 清空 WS 协议后联动处理 nginx / argo:无订阅时删除 nginx 配置并停止服务,固定隧道保留 argo,临时隧道删除 argo
- change_config 防御检查复用 text 107,清空不再使用的 E[73]/C[73]、E[110]/C[110] 条目
- 移除死代码 collect_exposed_ports 与 del_service_port_rule_ufw
- add real-time traffic stats via clash_api: total in/out shown in `sb -n` output and main menu status line
- inject `experimental.clash_api` into the base config, with a fallback patch plus SIGHUP reload for legacy configs and cleanup of stale `v2ray_api`
- add shared `find_free_port()` for both the nginx default port and the clash_api port, probing for unused ports within the script port range
- add `format_traffic()` and `ensure_stats_data()` helpers, fetching `/connections` with curl-first, wget fallback
- speed up the CDN status probe with HEAD requests and explicit timeouts in `get_code()`
v1.3.19 feat: 新增实时流量统计,加速优选地址探测
- 新增基于 clash_api 的实时流量统计:`sb -n` 输出与主菜单状态行展示总入站/出站流量
- 基础配置注入 `experimental.clash_api`,旧配置自动补全并 SIGHUP 热加载,同时清理残留的 `v2ray_api`
- 新增公共 `find_free_port()`,nginx 默认端口与 clash_api 端口共用,在脚本端口范围内探测未被占用的端口
- 新增 `format_traffic()` 与 `ensure_stats_data()` 辅助函数,优先 curl、wget 兜底拉取 `/connections` 数据
- 加速优选地址状态探测:`get_code()` 改用 HEAD 请求并显式设置超时
- Add bind_interface option in sb -d menu to bind outbound traffic to a specific NIC
- Change v2rayN Hysteria2 Realm config from Finalmask field to ProtoExtraObj
v1.3.16 feat: 支持指定网络出口,多网卡绑定
- sb -d 菜单新增「指定网络出口」选项,可为出站流量绑定特定网卡
- v2rayN 的 Hysteria2 Realm 配置从 Finalmask 字段改为 ProtoExtraObj
- add Armbian detection and mapping logic in system identification
- update error messages to include Armbian in supported systems
feat: 增加对 Armbian 系统的支持
- 在系统识别逻辑中添加对 Armbian 的检测与映射
- 更新错误提示信息,在支持系统中包含 Armbian
- parse preferred CDN input as host and optional port instead of treating the whole value as a single host
- support `IPv4 / IPv6 / domain` forms including bracketed IPv6 like `[addr]:port`
- persist CDN port for `vmess + ws` and `vless + ws + tls` config generation
- fall back to default ws ports when no port is provided: `80` for `vmess + ws` and `443` for `vless + ws + tls`
- update Clash, ShadowRocket, V2rayN, Throne, and sing-box exports to use the parsed host and port consistently
fix: 支持 ws 优选地址的 host:port 解析
- 将优选 CDN 输入解析为主机和可选端口,而不是把整串值当作单一主机
- 支持 `IPv4 / IPv6 / domain` 形式,包括 `[addr]:port` 这种带中括号的 IPv6
- 为 `vmess + ws` 和 `vless + ws + tls` 的配置生成持久化保存 CDN 端口
- 未显式填写端口时回退到默认 ws 端口:`vmess + ws` 为 `80`,`vless + ws + tls` 为 `443`
- 统一更新 Clash、ShadowRocket、V2rayN、Throne 和 sing-box 导出,确保都使用解析后的主机与端口
- Add support for enabling/disabling Hysteria2 port hopping and modifying port ranges after installation
- Allow customization of Hysteria2 upload/download bandwidth without reinstalling
- Enhance client configuration with proper Hysteria2 bandwidth (up/down) and port hopping parameters
- Improve port range input validation with automatic separator normalization
- Simplify menu option 9 description to "Change node configuration
增强 Hysteria2,支持安装后配置及客户端参数完善
- 支持安装后启用/禁用 Hysteria2 端口跳跃,并可修改端口范围
- 支持自定义 Hysteria2 上下行带宽,无需重新安装
- 完善客户端配置,补充 Hysteria2 上传/下载速率及端口跳跃参数
- 改进端口范围输入校验,自动规范分隔符格式
- 简化菜单选项 9 描述为“修改节点配置”
- Conditional Firewall Installation: Users who do not enable "Port Hopping" will no longer be forced to install firewall-related packages (e.g., iptables, firewalld) during initialization, reducing unnecessary system overhead.
- Improved Dependency Management: Reorganized the logic for checking and installing necessary software to ensure a smoother setup across different Linux distributions.
- Better Alpine Linux Support: Refined how the script handles specific tools like wget and service management on Alpine systems.
总结:优化依赖检测逻辑,并改进防火墙软件包的安装策略
- 按需安装防火墙: 对于不启用“端口跳跃”的用户,初始化时不再强制安装防火墙相关软件包(如 iptables、firewalld),减少系统冗余占用。
- 优化依赖安装:重构了必要软件的检测与安装逻辑,确保在不同 Linux 系统下运行更加顺畅。
- 增强 Alpine 系统适配:针对 Alpine 系统微调了工具检测和系统服务的处理方式,提升稳定性。
- fix cleanup exit flow by separating interrupt exit from normal exit
- add timeout fallback for CDN detection to prevent hanging
- Test GitHub CDN using `api.github.com`, and remove proxies that are unreachable.
重构: 提升稳定性
- 修复退出清理流程,分离中断退出与正常退出
- 为 CDN 检测增加超时回退,避免脚本卡死
- 测试 Github CDN 改为 api.github.com,去掉若干不能连接的代理
- Set `prefer_go: true` for the local DNS server to resolve issues where `systemd-resolved` might be unavailable or inaccessible on certain Linux distributions (e.g., Alpine Linux, lightweight Debian).
- Improve DNS resolution reliability by prioritizing Go's internal resolver over the system's C library or DBus interfaces.
功能:为本地 DNS 添加 prefer_go 选项并增强系统兼容性
- 为本地 (local) DNS 服务器设置 `prefer_go: true`,以解决在某些 Linux 发行版(如 Alpine Linux、精简版 Debian)上因缺少 `systemd-resolved` 服务而导致的解析失败或报错问题。
- 通过优先使用 Go 内置的解析器而非系统的 C 库或 DBus 接口,提升 DNS 解析的可靠性和一致性。
- Replace `${UUID}` with `${SIP022_PASSWORD}` in Clash configuration
- Ensure consistent SS password across all clients (ShadowRocket, V2rayN, NekoBox, Sing-box)
- Fix connection issues caused by inconsistent passwords
Security: Add pinnedPeerCertSha256 for Hy2/Trojan in v2rayN to prevent MITM (replaces AllowInsecure).
Compatibility: Refactor SFM/SFI/SFA configs for sing-box v1.13.0+.
1. Implement self-hosted IP API for faster data fetching and improved stability.
2. Add region-specific flag emojis to node names for a more intuitive visual experience.
- Auto-create Argo tunnels using Cloudflare API tokens with auto DNS setup
- Intelligent GitHub proxy fallback: test direct first, then cycle proxies
- Support 3 Argo auth methods: Token, Json, and API token
- Add comprehensive API token permission requirements to README
- Update documentation with Cloudflare API setup instructions
Credits: Thanks to zmlu for Cloudflare API implementation approach
- Add SNI (Server Name Indication) support to Hysteria2, Tuic, Trojan, and AnyTLS protocols for improved TLS handshake compatibility
- Update self-signed certificate public key configuration across affected protocol inbound configurations
- Add detailed documentation on handling self-signed certificates in various client applications
- Include client-specific instructions for certificate validation and bypass methods
- Improve security posture by leveraging SNI for better certificate verification workflows
- Update configuration templates and inline comments for clarity on certificate usage per protocol
Add the full GNU General Public License v3.0 text to the project root (LICENSE) and
include the SPDX identifier (SPDX-License-Identifier: GPL-3.0-or-later). Update README
to reference the LICENSE file.
s6-overlay vs supervisord — Memory Footprint Comparison
s6-overlay:
Uses only 1–2 MB of RAM. Its service processes typically consume around 200 KB RSS each.
Extremely lightweight, written in C, minimal overhead.
supervisord:
Consumes roughly 10–15 MB of RAM in real-world usage.
Implemented in Python, so it naturally has a higher baseline memory footprint (≈8–10× s6-overlay).
1. Local-First Reality Key Computation: Prioritize on-device calculation of public key from private key for faster processing; fallback to API only if local fails, reducing latency and API calls.
2. DNF Support for CentOS 8+: Replace YUM with DNF on CentOS 8 and later for improved dependency resolution and speed, with backward compatibility for older systems.
3. Ensure Supervisor runs as true PID 1 in Docker container for proper signal handling and supervision.
1. Add quick install mode to the menu for faster, automated setup.
2. Fix bug causing incorrect display of Nginx running status.
3. Resolve compatibility issues specific to CentOS 7 environments.
4. Introduce Nginx process startup in the guardian script for WS protocol (previo
usly unsupported due to missing Nginx dependency).
1. Reality Configuration Update: In Reality configurations, the original multiplexing (multiplex) has been replaced with xtls-rprx-vision flow control, improving transmission efficiency, reducing latency, and enhancing security. The original configuration conversion script command remains fully compatible and unchanged — bash <(curl -sSL https://raw.githubusercontent.com/fscarmen/tools/main/vision.sh).
2. Quick Install Mode: Added a one-click installation feature that auto-fills all parameters, simplifying the deployment process. Chinese users can use -l or -L; English users can use -k or -K. Case-insensitive support makes operations more flexible.
3. Custom Reality Key Support: In response to user feedback, you can now specify a custom Reality private key via --REALITY_PRIVATE=<privateKey>. The script will automatically compute the corresponding public key using the integrated API. If left blank, it generates a random private-public key pair in real-time.
4. Enhanced HTTP + Reality Support in Clash Clients: Added full compatibility for HTTP + Reality transport in Clash clients, improving connection stability and performance.
This commit improves the security posture for Shadowrocket, Clash, and sing-box clients by implementing certificate fingerprint validation instead of the less secure certificate skipping approach.
Key changes:
- Shadowrocket: Replaced insecure TLS validation with HPKP-based certificate fingerprint verification
- Clash: Updated configuration to use certificate fingerprints instead of skip-cert-verify flags
- sing-box: Implemented certificate_public_key_sha256 verification for enhanced TLS security
This change ensures that only connections with verified server certificates are accepted, significantly reducing the risk of man-in-the-middle attacks while maintaining compatibility with self-signed certificates.