mirror of
https://github.com/fscarmen/sing-box.git
synced 2026-08-10 17:55:16 +08:00
feat: Add SNI support and self-signed certificate enhancements for multiple protocols
- 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
This commit is contained in:
@@ -8,15 +8,17 @@
|
|||||||
- [2.项目特点](README.md#2项目特点)
|
- [2.项目特点](README.md#2项目特点)
|
||||||
- [3.Sing-box for VPS 运行脚本](README.md#3sing-box-for-vps-运行脚本)
|
- [3.Sing-box for VPS 运行脚本](README.md#3sing-box-for-vps-运行脚本)
|
||||||
- [4.无交互极速安装](README.md#4无交互极速安装)
|
- [4.无交互极速安装](README.md#4无交互极速安装)
|
||||||
- [5.Token Argo Tunnel 方案设置任意端口回源以使用 cdn](README.md#5token-argo-tunnel-方案设置任意端口回源以使用-cdn)
|
- [5.Json Argo Tunnel 获取 (推荐)](README.md#5json-argo-tunnel-获取-推荐)
|
||||||
- [6.Vmess / Vless 方案设置任意端口回源以使用 cdn](README.md#6vmess--vless-方案设置任意端口回源以使用-cdn)
|
- [6.Token Argo Tunnel 方案设置任意端口回源以使用 cdn](README.md#6token-argo-tunnel-方案设置任意端口回源以使用-cdn)
|
||||||
- [7.Docker 和 Docker compose 安装](README.md#7docker-和-docker-compose-安装)
|
- [7.Vmess / Vless 方案设置任意端口回源以使用 cdn](README.md#7vmess--vless-方案设置任意端口回源以使用-cdn)
|
||||||
- [8.Nekobox 设置 shadowTLS 方法](README.md#8nekobox-设置-shadowtls-方法)
|
- [8.Docker 和 Docker compose 安装](README.md#8docker-和-docker-compose-安装)
|
||||||
- [9.主体目录文件及说明](README.md#9主体目录文件及说明)
|
- [9.Nekobox 设置 shadowTLS 方法](README.md#9nekobox-设置-shadowtls-方法)
|
||||||
- [10.鸣谢下列作者的文章和项目](README.md#10鸣谢下列作者的文章和项目)
|
- [10.主体目录文件及说明](README.md#10主体目录文件及说明)
|
||||||
- [11.感谢赞助商](README.md#11感谢赞助商)
|
- [11.自签证书在不同客户端中的处理方式对比](README.md#11自签证书在不同客户端中的处理方式对比)
|
||||||
- [12.免责声明](README.md#12免责声明)
|
- [12.鸣谢下列作者的文章和项目](README.md#12鸣谢下列作者的文章和项目)
|
||||||
- [13.开源证书](README.md#13开源证书)
|
- [13.感谢赞助商](README.md#13感谢赞助商)
|
||||||
|
- [14.免责声明](README.md#14免责声明)
|
||||||
|
- [15.开源证书](README.md#15开源证书)
|
||||||
|
|
||||||
|
|
||||||
* * *
|
* * *
|
||||||
@@ -145,7 +147,6 @@ sb
|
|||||||
| -e | English 英文 |
|
| -e | English 英文 |
|
||||||
| -l | Quick deploy (Chinese version) 使用中文快速安装 |
|
| -l | Quick deploy (Chinese version) 使用中文快速安装 |
|
||||||
| -k | Quick deploy (English version) 使用英文快速安装 |
|
| -k | Quick deploy (English version) 使用英文快速安装 |
|
||||||
|
|
||||||
| -u | Uninstall 卸载 |
|
| -u | Uninstall 卸载 |
|
||||||
| -n | Export Nodes list 显示节点信息 |
|
| -n | Export Nodes list 显示节点信息 |
|
||||||
| -p <start port> | Change the nodes start port 更改节点的起始端口 |
|
| -p <start port> | Change the nodes start port 更改节点的起始端口 |
|
||||||
@@ -371,7 +372,16 @@ bash <(wget -qO- https://raw.githubusercontent.com/fscarmen/sing-box/main/sing-b
|
|||||||
| --NODE_NAME_CONFIRM | 节点名 |
|
| --NODE_NAME_CONFIRM | 节点名 |
|
||||||
|
|
||||||
|
|
||||||
## 5.Token Argo Tunnel 方案设置任意端口回源以使用 cdn
|
## 5.Json Argo Tunnel 获取 (推荐)
|
||||||
|
|
||||||
|
### 用户可以通过 Cloudflare Json 生成网轻松获取: https://fscarmen.cloudflare.now.cc
|
||||||
|
|
||||||
|
<img width="784" alt="image" src="https://github.com/fscarmen/sba/assets/62703343/fb7c6e90-fb3e-4e77-bcd4-407e4660a33c">
|
||||||
|
|
||||||
|
如想手动,可以参考,以 Debian 为例,需要用到的命令,[Deron Cheng - CloudFlare Argo Tunnel 试用](https://zhengweidong.com/try-cloudflare-argo-tunnel)
|
||||||
|
|
||||||
|
|
||||||
|
## 6.Token Argo Tunnel 方案设置任意端口回源以使用 cdn
|
||||||
详细教程: [群晖套件:Cloudflare Tunnel 内网穿透中文教程 支持DSM6、7](https://imnks.com/5984.html)
|
详细教程: [群晖套件:Cloudflare Tunnel 内网穿透中文教程 支持DSM6、7](https://imnks.com/5984.html)
|
||||||
|
|
||||||
<img width="1510" alt="image" src="https://github.com/fscarmen/sba/assets/62703343/bb2d9c43-3585-4abd-a35b-9cfd7404c87c">
|
<img width="1510" alt="image" src="https://github.com/fscarmen/sba/assets/62703343/bb2d9c43-3585-4abd-a35b-9cfd7404c87c">
|
||||||
@@ -379,7 +389,7 @@ bash <(wget -qO- https://raw.githubusercontent.com/fscarmen/sing-box/main/sing-b
|
|||||||
<img width="1638" alt="image" src="https://github.com/fscarmen/sing-box/assets/62703343/a4868388-d6ab-4dc7-929c-88bc775ca851">
|
<img width="1638" alt="image" src="https://github.com/fscarmen/sing-box/assets/62703343/a4868388-d6ab-4dc7-929c-88bc775ca851">
|
||||||
|
|
||||||
|
|
||||||
## 6.Vmess / Vless 方案设置任意端口回源以使用 cdn
|
## 7.Vmess / Vless 方案设置任意端口回源以使用 cdn
|
||||||
举例子 IPv6: vmess [2a01:4f8:272:3ae6:100b:ee7a:ad2f:1]:10006
|
举例子 IPv6: vmess [2a01:4f8:272:3ae6:100b:ee7a:ad2f:1]:10006
|
||||||
<img width="1052" alt="image" src="https://github.com/fscarmen/sing-box/assets/62703343/bc2df37a-95c4-4ba0-9c84-5d9c745c3a7b">
|
<img width="1052" alt="image" src="https://github.com/fscarmen/sing-box/assets/62703343/bc2df37a-95c4-4ba0-9c84-5d9c745c3a7b">
|
||||||
|
|
||||||
@@ -390,7 +400,7 @@ bash <(wget -qO- https://raw.githubusercontent.com/fscarmen/sing-box/main/sing-b
|
|||||||
<img width="1556" alt="image" src="https://github.com/fscarmen/sing-box/assets/62703343/164bf255-a6be-40bc-a724-56e13da7a1e6">
|
<img width="1556" alt="image" src="https://github.com/fscarmen/sing-box/assets/62703343/164bf255-a6be-40bc-a724-56e13da7a1e6">
|
||||||
|
|
||||||
|
|
||||||
## 7.Docker 和 Docker compose 安装
|
## 8.Docker 和 Docker compose 安装
|
||||||
|
|
||||||
### 说明:
|
### 说明:
|
||||||
* 支持三种 Argo 类型隧道: 临时 (不需要域名) / Json / Token
|
* 支持三种 Argo 类型隧道: 临时 (不需要域名) / Json / Token
|
||||||
@@ -483,23 +493,6 @@ services:
|
|||||||
| 停止并删除容器 | docker: `docker rm -f sing-box`</br> compose: `docker-compose down` |
|
| 停止并删除容器 | docker: `docker rm -f sing-box`</br> compose: `docker-compose down` |
|
||||||
| 删除镜像 | `docker rmi -f fscarmen/sb:latest` |
|
| 删除镜像 | `docker rmi -f fscarmen/sb:latest` |
|
||||||
|
|
||||||
|
|
||||||
### 用户可以通过 Cloudflare Json 生成网轻松获取: https://fscarmen.cloudflare.now.cc
|
|
||||||
|
|
||||||
<img width="784" alt="image" src="https://github.com/fscarmen/sba/assets/62703343/fb7c6e90-fb3e-4e77-bcd4-407e4660a33c">
|
|
||||||
|
|
||||||
如想手动,可以参考,以 Debian 为例,需要用到的命令,[Deron Cheng - CloudFlare Argo Tunnel 试用](https://zhengweidong.com/try-cloudflare-argo-tunnel)
|
|
||||||
|
|
||||||
|
|
||||||
### Argo Token 的获取
|
|
||||||
|
|
||||||
详细教程: [群晖套件:Cloudflare Tunnel 内网穿透中文教程 支持DSM6、7](https://imnks.com/5984.html)
|
|
||||||
|
|
||||||
<img width="1510" alt="image" src="https://github.com/fscarmen/sba/assets/62703343/bb2d9c43-3585-4abd-a35b-9cfd7404c87c">
|
|
||||||
|
|
||||||
<img width="1616" alt="image" src="https://github.com/fscarmen/sing-box/assets/62703343/ecb844be-1e93-4208-bb7c-6b00b9d1f00a">
|
|
||||||
|
|
||||||
|
|
||||||
### 参数说明
|
### 参数说明
|
||||||
| 参数 | 是否必须 | 说明 |
|
| 参数 | 是否必须 | 说明 |
|
||||||
| --- | ------- | --- |
|
| --- | ------- | --- |
|
||||||
@@ -525,7 +518,7 @@ services:
|
|||||||
| -e ARGO_AUTH | 否 | Argo 认证信息,可以是 Json 也可以是 Token,与 ARGO_DOMAIN 一并使用才能生效,不指定的话将使用临时隧道 |
|
| -e ARGO_AUTH | 否 | Argo 认证信息,可以是 Json 也可以是 Token,与 ARGO_DOMAIN 一并使用才能生效,不指定的话将使用临时隧道 |
|
||||||
|
|
||||||
|
|
||||||
## 8.Nekobox 设置 shadowTLS 方法
|
## 9.Nekobox 设置 shadowTLS 方法
|
||||||
1. 复制脚本输出的两个 Neko links 进去
|
1. 复制脚本输出的两个 Neko links 进去
|
||||||
<img width="630" alt="image" src="https://github.com/fscarmen/sing-box/assets/62703343/db5960f3-63b1-4145-90a5-b01066dd39be">
|
<img width="630" alt="image" src="https://github.com/fscarmen/sing-box/assets/62703343/db5960f3-63b1-4145-90a5-b01066dd39be">
|
||||||
|
|
||||||
@@ -537,7 +530,7 @@ services:
|
|||||||
<img width="408" alt="image" src="https://github.com/fscarmen/sing-box/assets/62703343/753e7159-92f9-4c88-91b5-867fdc8cca47">
|
<img width="408" alt="image" src="https://github.com/fscarmen/sing-box/assets/62703343/753e7159-92f9-4c88-91b5-867fdc8cca47">
|
||||||
|
|
||||||
|
|
||||||
## 9.主体目录文件及说明
|
## 10.主体目录文件及说明
|
||||||
|
|
||||||
```
|
```
|
||||||
/etc/sing-box/ # 项目主体目录
|
/etc/sing-box/ # 项目主体目录
|
||||||
@@ -590,11 +583,69 @@ services:
|
|||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
## 10.鸣谢下列作者的文章和项目:
|
## 11.自签证书在不同客户端中的处理方式对比
|
||||||
|
|
||||||
|
| 客户端 / 工具 | 使用的证书验证方式 | SNI 是否必须匹配 SAN | 是否依赖完整证书链 | 使用的 Hash / 指纹类型 | SNI 用途说明 |
|
||||||
|
|---------------|---------------------|------------------------|------------------------|--------------------------|----------------------|
|
||||||
|
| **V2RayN** | 标准 X.509 证书链验证 | **是**(必须匹配) | ✔ 是 | 不使用指纹 | 用于 TLS Hostname 验证(必须与 SAN 一致) |
|
||||||
|
| **NekoBox** | 标准 X.509 证书链验证 | **是**(必须匹配) | ✔ 是 | 不使用指纹 | 用于 TLS Hostname 验证(必须与 SAN 一致) |
|
||||||
|
| **ShadowRocket** | 对证书 **DER 全内容** 做 SHA-256 | ✖ 不需要匹配 | ✖ 不依赖证书链 | **SHA-256(DER)** | 仅用于伪装,可为空或任意域名 |
|
||||||
|
| **Clash Verge / Meta** | 对证书 **DER 全内容** 做 SHA-256 | ✖ 不需要匹配 | ✖ 不依赖证书链 | **SHA-256(DER)** | 仅用于伪装,可为空或任意域名 |
|
||||||
|
| **Sing-box** | 仅验证 SPKI 公钥(SPKI pin) | ✖ 不需要匹配 | ✖ 不依赖证书链 | **SHA-256(SPKI Base64)** | 仅用于伪装,可为空或任意域名 |
|
||||||
|
|
||||||
|
|
||||||
|
### 结论:
|
||||||
|
- **V2RayN、NekoBox 必须要 SAN = SNI**,否则“x509: cannot validate certificate because it doesn't contain IP SAN”。
|
||||||
|
- **ShadowRocket、Clash、Sing-box、HY2、TUIC 完全不需要 SAN**,因为用的是指纹机制。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### X.509 自签证书结构与不同指纹方式包含内容对比
|
||||||
|
|
||||||
|
| 证书字段 / 内容 | X.509 完整证书(TBSCert + Sig) | DER 指纹(SHA-256(DER)) | 公钥 SPKI(Subject Public Key Info) |
|
||||||
|
|----------------|---------------------------------|----------------------------|-------------------------------------|
|
||||||
|
| Version | ✔ 包含 | ✔ 包含 | ✖ 不包含 |
|
||||||
|
| Serial Number | ✔ | ✔ | ✖ |
|
||||||
|
| Issuer | ✔ | ✔ | ✖ |
|
||||||
|
| Validity (Not Before / Not After) | ✔ | ✔ | ✖ |
|
||||||
|
| Subject(CN) | ✔ | ✔ | ✖ |
|
||||||
|
| **SAN(Subject Alternative Name)** | ✔ | ✔ | ✖ |
|
||||||
|
| Extensions | ✔ | ✔ | ✖ |
|
||||||
|
| **Public Key** | ✔ | ✔ | ✔ |
|
||||||
|
| 公钥算法(ECC/P256 等) | ✔ | ✔ | ✔ |
|
||||||
|
| EC 曲线参数 | ✔ | ✔ | ✔ |
|
||||||
|
| Signature Algorithm | ✔ | ✔ | ✖ |
|
||||||
|
| Signature Value | ✔ | ✔ | ✖ |
|
||||||
|
| 用途场景 | V2RayN / NekoBox | ShadowRocket / Clash | Sing-box / Hysteria2 / TUIC |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 指纹方式说明
|
||||||
|
|
||||||
|
#### **1. X.509 证书链验证**
|
||||||
|
- 完整验证 CA → Leaf 证书
|
||||||
|
- **必须要求:SNI = SAN 中的一个 DNS 名称**
|
||||||
|
- 不允许 SAN 不匹配或缺失
|
||||||
|
- 用于:**V2RayN / NekoBox**
|
||||||
|
|
||||||
|
#### **2. SHA-256(DER) 指纹**
|
||||||
|
- 对证书 **整体 DER(二进制)内容** 计算 SHA-256
|
||||||
|
- 包含所有字段(版本、序列号、Subject、SAN、扩展、公钥、签名等)
|
||||||
|
- **任意字段变化 → 指纹都会改变**
|
||||||
|
- 用于:**ShadowRocket / Clash Mihomo**
|
||||||
|
|
||||||
|
#### **3. SHA-256(SPKI) 指纹**
|
||||||
|
- 只包含 **公钥 SPKI(Subject Public Key Info)**
|
||||||
|
- 证书重新签发、变更 Issuer、Subject、SAN **都不会改变**
|
||||||
|
- 更稳定、更适合自签证书
|
||||||
|
- 用于:**Sing-box**
|
||||||
|
|
||||||
|
|
||||||
|
## 12.鸣谢下列作者的文章和项目:
|
||||||
千歌 sing-box 模板: https://github.com/chika0801/sing-box-examples
|
千歌 sing-box 模板: https://github.com/chika0801/sing-box-examples
|
||||||
|
|
||||||
|
|
||||||
## 11.感谢赞助商
|
## 13.感谢赞助商
|
||||||
|
|
||||||
### 🚀 Sponsored by SharonNetworks
|
### 🚀 Sponsored by SharonNetworks
|
||||||
|
|
||||||
@@ -616,11 +667,12 @@ SharonNetworks 为您的业务起飞保驾护航!
|
|||||||
想体验同款构建环境?欢迎 [访问 Sharon 官网](https://sharon.io) 或 [加入 Telegram 群组](https://t.me/SharonNetwork) 了解更多并申请赞助。
|
想体验同款构建环境?欢迎 [访问 Sharon 官网](https://sharon.io) 或 [加入 Telegram 群组](https://t.me/SharonNetwork) 了解更多并申请赞助。
|
||||||
|
|
||||||
|
|
||||||
## 12.免责声明:
|
## 14.免责声明
|
||||||
* 本程序仅供学习了解, 非盈利目的,请于下载后 24 小时内删除, 不得用作任何商业用途, 文字、数据及图片均有所属版权, 如转载须注明来源。
|
* 本程序仅供学习了解, 非盈利目的,请于下载后 24 小时内删除, 不得用作任何商业用途, 文字、数据及图片均有所属版权, 如转载须注明来源。
|
||||||
* 使用本程序必循遵守部署免责声明。使用本程序必循遵守部署服务器所在地、所在国家和用户所在国家的法律法规, 程序作者不对使用者任何不当行为负责。
|
* 使用本程序必循遵守部署免责声明。使用本程序必循遵守部署服务器所在地、所在国家和用户所在国家的法律法规, 程序作者不对使用者任何不当行为负责。
|
||||||
|
|
||||||
## 13.开源证书
|
|
||||||
|
## 15.开源证书
|
||||||
* 本项目严格遵守 GNU GPL v3 许可证 [LICENSE](LICENSE)。
|
* 本项目严格遵守 GNU GPL v3 许可证 [LICENSE](LICENSE)。
|
||||||
* 任何形式的复制、分发、修改或衍生使用,必须完整保留原版权声明、许可证文本,并以相同许可证开源发布。违反此条款(如闭源使用、商业独占或未开源修改版)将被视为抄袭,作者保留追究法律责任的权利。
|
* 任何形式的复制、分发、修改或衍生使用,必须完整保留原版权声明、许可证文本,并以相同许可证开源发布。违反此条款(如闭源使用、商业独占或未开源修改版)将被视为抄袭,作者保留追究法律责任的权利。
|
||||||
* 鼓励社区贡献,但请通过 Pull Request 提交。
|
* 鼓励社区贡献,但请通过 Pull Request 提交。
|
||||||
+38
-51
@@ -1,6 +1,6 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# 脚本更新日期 2025.11.05
|
# 脚本更新日期 2025.12.08
|
||||||
WORK_DIR=/sing-box
|
WORK_DIR=/sing-box
|
||||||
PORT=$START_PORT
|
PORT=$START_PORT
|
||||||
SUBSCRIBE_TEMPLATE="https://raw.githubusercontent.com/fscarmen/client_template/main"
|
SUBSCRIBE_TEMPLATE="https://raw.githubusercontent.com/fscarmen/client_template/main"
|
||||||
@@ -60,9 +60,8 @@ install() {
|
|||||||
|
|
||||||
# 生成100年的自签证书,区分使用 IPv4 / IPv6 / 域名
|
# 生成100年的自签证书,区分使用 IPv4 / IPv6 / 域名
|
||||||
echo "生成自签证书 ..."
|
echo "生成自签证书 ..."
|
||||||
[[ $SERVER_IP =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$|^([0-9a-fA-F:]+)$ ]] && SAN_TYPE="IP" || SAN_TYPE="DNS"
|
|
||||||
openssl ecparam -genkey -name prime256v1 -out ${WORK_DIR}/cert/private.key
|
openssl ecparam -genkey -name prime256v1 -out ${WORK_DIR}/cert/private.key
|
||||||
openssl req -new -x509 -days 36500 -key ${WORK_DIR}/cert/private.key -out ${WORK_DIR}/cert/cert.pem -subj "/CN=mozilla.org" -addext "subjectAltName = ${SAN_TYPE}:${SERVER_IP}"
|
openssl req -new -x509 -days 36500 -key ${WORK_DIR}/cert/private.key -out ${WORK_DIR}/cert/cert.pem -subj "/CN=mozilla.org" -addext "subjectAltName = DNS:addons.mozilla.org"
|
||||||
|
|
||||||
# 检查系统是否已经安装 tcp-brutal
|
# 检查系统是否已经安装 tcp-brutal
|
||||||
IS_BRUTAL=false && [ -x "$(type -p lsmod)" ] && lsmod 2>/dev/null | grep -q 'brutal' && IS_BRUTAL=true
|
IS_BRUTAL=false && [ -x "$(type -p lsmod)" ] && lsmod 2>/dev/null | grep -q 'brutal' && IS_BRUTAL=true
|
||||||
@@ -359,7 +358,6 @@ EOF
|
|||||||
"ignore_client_bandwidth":false,
|
"ignore_client_bandwidth":false,
|
||||||
"tls":{
|
"tls":{
|
||||||
"enabled":true,
|
"enabled":true,
|
||||||
"server_name":"",
|
|
||||||
"alpn":[
|
"alpn":[
|
||||||
"h3"
|
"h3"
|
||||||
],
|
],
|
||||||
@@ -714,9 +712,7 @@ credentials-file: ${WORK_DIR}/tunnel.json
|
|||||||
|
|
||||||
ingress:
|
ingress:
|
||||||
- hostname: ${ARGO_DOMAIN}
|
- hostname: ${ARGO_DOMAIN}
|
||||||
service: https://localhost:${START_PORT}
|
service: http://localhost:${START_PORT}
|
||||||
originRequest:
|
|
||||||
noTLSVerify: false
|
|
||||||
- service: http_status:404
|
- service: http_status:404
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
@@ -727,7 +723,7 @@ EOF
|
|||||||
else
|
else
|
||||||
((PORT++))
|
((PORT++))
|
||||||
METRICS_PORT=$PORT
|
METRICS_PORT=$PORT
|
||||||
ARGO_RUNS="cloudflared tunnel --edge-ip-version auto --no-autoupdate --no-tls-verify --metrics 0.0.0.0:$METRICS_PORT --url https://localhost:$START_PORT"
|
ARGO_RUNS="cloudflared tunnel --edge-ip-version auto --no-autoupdate --no-tls-verify --metrics 0.0.0.0:$METRICS_PORT --url http://localhost:$START_PORT"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 生成 s6-overlay 服务脚本(替代 supervisord)
|
# 生成 s6-overlay 服务脚本(替代 supervisord)
|
||||||
@@ -806,17 +802,8 @@ EOF
|
|||||||
#include /etc/nginx/conf.d/*.conf;
|
#include /etc/nginx/conf.d/*.conf;
|
||||||
|
|
||||||
server {
|
server {
|
||||||
listen 127.0.0.1:$START_PORT;
|
listen 127.0.0.1:$START_PORT; # sing-box backend
|
||||||
# listen 127.0.0.1:$START_PORT ssl ; # sing-box backend
|
"
|
||||||
# http2 on;
|
|
||||||
server_name addons.mozilla.org;
|
|
||||||
|
|
||||||
# ssl_certificate ${WORK_DIR}/cert/cert.pem;
|
|
||||||
# ssl_certificate_key ${WORK_DIR}/cert/private.key;
|
|
||||||
# ssl_protocols TLSv1.3;
|
|
||||||
# ssl_session_tickets on;
|
|
||||||
# ssl_stapling off;
|
|
||||||
# ssl_stapling_verify off;"
|
|
||||||
|
|
||||||
[ "${VLESS_WS}" = 'true' ] && NGINX_CONF+="
|
[ "${VLESS_WS}" = 'true' ] && NGINX_CONF+="
|
||||||
# 反代 sing-box vless websocket
|
# 反代 sing-box vless websocket
|
||||||
@@ -885,11 +872,11 @@ EOF
|
|||||||
local CLASH_SUBSCRIBE+="
|
local CLASH_SUBSCRIBE+="
|
||||||
$CLASH_XTLS_REALITY
|
$CLASH_XTLS_REALITY
|
||||||
"
|
"
|
||||||
[ "${HYSTERIA2}" = 'true' ] && local CLASH_HYSTERIA2="- {name: \"${NODE_NAME} hysteria2\", type: hysteria2, server: ${SERVER_IP}, port: ${PORT_HYSTERIA2}, up: \"200 Mbps\", down: \"1000 Mbps\", password: ${UUID}, skip-cert-verify: false, fingerprint: ${SELF_SIGNED_FINGERPRINT_SHA256}}" &&
|
[ "${HYSTERIA2}" = 'true' ] && local CLASH_HYSTERIA2="- {name: \"${NODE_NAME} hysteria2\", type: hysteria2, server: ${SERVER_IP}, port: ${PORT_HYSTERIA2}, up: \"200 Mbps\", down: \"1000 Mbps\", password: ${UUID}, sni: addons.mozilla.org, skip-cert-verify: false, fingerprint: ${SELF_SIGNED_FINGERPRINT_SHA256}}" &&
|
||||||
local CLASH_SUBSCRIBE+="
|
local CLASH_SUBSCRIBE+="
|
||||||
$CLASH_HYSTERIA2
|
$CLASH_HYSTERIA2
|
||||||
"
|
"
|
||||||
[ "${TUIC}" = 'true' ] && local CLASH_TUIC="- {name: \"${NODE_NAME} tuic\", type: tuic, server: ${SERVER_IP}, port: ${PORT_TUIC}, uuid: ${UUID}, password: ${UUID}, alpn: [h3], disable-sni: true, reduce-rtt: true, request-timeout: 8000, udp-relay-mode: native, congestion-controller: bbr, skip-cert-verify: false, fingerprint: ${SELF_SIGNED_FINGERPRINT_SHA256}}" &&
|
[ "${TUIC}" = 'true' ] && local CLASH_TUIC="- {name: \"${NODE_NAME} tuic\", type: tuic, server: ${SERVER_IP}, port: ${PORT_TUIC}, uuid: ${UUID}, password: ${UUID}, alpn: [h3], reduce-rtt: true, request-timeout: 8000, udp-relay-mode: native, congestion-controller: bbr, sni: addons.mozilla.org, skip-cert-verify: false, fingerprint: ${SELF_SIGNED_FINGERPRINT_SHA256}}" &&
|
||||||
local CLASH_SUBSCRIBE+="
|
local CLASH_SUBSCRIBE+="
|
||||||
$CLASH_TUIC
|
$CLASH_TUIC
|
||||||
"
|
"
|
||||||
@@ -901,7 +888,7 @@ EOF
|
|||||||
local CLASH_SUBSCRIBE+="
|
local CLASH_SUBSCRIBE+="
|
||||||
$CLASH_SHADOWSOCKS
|
$CLASH_SHADOWSOCKS
|
||||||
"
|
"
|
||||||
[ "${TROJAN}" = 'true' ] && local CLASH_TROJAN="- {name: \"${NODE_NAME} trojan\", type: trojan, server: ${SERVER_IP}, port: $PORT_TROJAN, password: ${UUID}, client-fingerprint: firefox, skip-cert-verify: false, fingerprint: ${SELF_SIGNED_FINGERPRINT_SHA256}, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false }, brutal-opts: { enabled: ${IS_BRUTAL}, up: '1000 Mbps', down: '1000 Mbps' } }" &&
|
[ "${TROJAN}" = 'true' ] && local CLASH_TROJAN="- {name: \"${NODE_NAME} trojan\", type: trojan, server: ${SERVER_IP}, port: $PORT_TROJAN, password: ${UUID}, client-fingerprint: firefox, sni: addons.mozilla.org, skip-cert-verify: false, fingerprint: ${SELF_SIGNED_FINGERPRINT_SHA256}, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false }, brutal-opts: { enabled: ${IS_BRUTAL}, up: '1000 Mbps', down: '1000 Mbps' } }" &&
|
||||||
local CLASH_SUBSCRIBE+="
|
local CLASH_SUBSCRIBE+="
|
||||||
$CLASH_TROJAN
|
$CLASH_TROJAN
|
||||||
"
|
"
|
||||||
@@ -923,7 +910,7 @@ EOF
|
|||||||
local CLASH_SUBSCRIBE+="
|
local CLASH_SUBSCRIBE+="
|
||||||
$CLASH_GRPC_REALITY
|
$CLASH_GRPC_REALITY
|
||||||
"
|
"
|
||||||
[ "${ANYTLS}" = 'true' ] && local CLASH_ANYTLS="- {name: \"${NODE_NAME} anytls\", type: anytls, server: ${SERVER_IP}, port: $PORT_ANYTLS, password: ${UUID}, client-fingerprint: firefox, udp: true, idle-session-check-interval: 30, idle-session-timeout: 30, skip-cert-verify: false, fingerprint: ${SELF_SIGNED_FINGERPRINT_SHA256} }" &&
|
[ "${ANYTLS}" = 'true' ] && local CLASH_ANYTLS="- {name: \"${NODE_NAME} anytls\", type: anytls, server: ${SERVER_IP}, port: $PORT_ANYTLS, password: ${UUID}, client-fingerprint: firefox, udp: true, idle-session-check-interval: 30, idle-session-timeout: 30, sni: addons.mozilla.org, skip-cert-verify: false, fingerprint: ${SELF_SIGNED_FINGERPRINT_SHA256} }" &&
|
||||||
local CLASH_SUBSCRIBE+="
|
local CLASH_SUBSCRIBE+="
|
||||||
$CLASH_ANYTLS
|
$CLASH_ANYTLS
|
||||||
"
|
"
|
||||||
@@ -936,40 +923,40 @@ EOF
|
|||||||
|
|
||||||
# 生成 ShadowRocket 订阅配置文件
|
# 生成 ShadowRocket 订阅配置文件
|
||||||
[ "${XTLS_REALITY}" = 'true' ] && local SHADOWROCKET_SUBSCRIBE+="
|
[ "${XTLS_REALITY}" = 'true' ] && local SHADOWROCKET_SUBSCRIBE+="
|
||||||
vless://$(echo -n "auto:${UUID}@${SERVER_IP_2}:${PORT_XTLS_REALITY}" | base64 -w0)?remarks=${NODE_NAME}%20xtls-reality&obfs=none&tls=1&peer=addons.mozilla.org&xtls=2&pbk=${REALITY_PUBLIC}
|
vless://$(echo -n "auto:${UUID}@${SERVER_IP_2}:${PORT_XTLS_REALITY}" | base64 -w0)?remarks=${NODE_NAME// /%20}%20xtls-reality&obfs=none&tls=1&peer=addons.mozilla.org&xtls=2&pbk=${REALITY_PUBLIC}
|
||||||
"
|
"
|
||||||
[ "${HYSTERIA2}" = 'true' ] && local SHADOWROCKET_SUBSCRIBE+="
|
[ "${HYSTERIA2}" = 'true' ] && local SHADOWROCKET_SUBSCRIBE+="
|
||||||
hysteria2://${UUID}@${SERVER_IP_1}:${PORT_HYSTERIA2}?hpkp=${SELF_SIGNED_FINGERPRINT_SHA256}&obfs=none#${NODE_NAME}%20hysteria2
|
hysteria2://${UUID}@${SERVER_IP_1}:${PORT_HYSTERIA2}?peer=addons.mozilla.org&hpkp=${SELF_SIGNED_FINGERPRINT_SHA256}&obfs=none#${NODE_NAME// /%20}%20hysteria2
|
||||||
"
|
"
|
||||||
[ "${TUIC}" = 'true' ] && local SHADOWROCKET_SUBSCRIBE+="
|
[ "${TUIC}" = 'true' ] && local SHADOWROCKET_SUBSCRIBE+="
|
||||||
tuic://${UUID}:${UUID}@${SERVER_IP_2}:${PORT_TUIC}?congestion_control=bbr&udp_relay_mode=native&alpn=h3&hpkp=${SELF_SIGNED_FINGERPRINT_SHA256}#${NODE_NAME}%20tuic
|
tuic://${UUID}:${UUID}@${SERVER_IP_2}:${PORT_TUIC}?peer=addons.mozilla.org&congestion_control=bbr&udp_relay_mode=native&alpn=h3&hpkp=${SELF_SIGNED_FINGERPRINT_SHA256}#${NODE_NAME// /%20}%20tuic
|
||||||
"
|
"
|
||||||
[ "${SHADOWTLS}" = 'true' ] && local SHADOWROCKET_SUBSCRIBE+="
|
[ "${SHADOWTLS}" = 'true' ] && local SHADOWROCKET_SUBSCRIBE+="
|
||||||
ss://$(echo -n "2022-blake3-aes-128-gcm:${SHADOWTLS_PASSWORD}@${SERVER_IP_2}:${PORT_SHADOWTLS}" | base64 -w0)?shadow-tls=$(echo -n "{\"version\":\"3\",\"host\":\"addons.mozilla.org\",\"password\":\"${UUID}\"}" | base64 -w0)#${NODE_NAME}%20ShadowTLS
|
ss://$(echo -n "2022-blake3-aes-128-gcm:${SHADOWTLS_PASSWORD}@${SERVER_IP_2}:${PORT_SHADOWTLS}" | base64 -w0)?shadow-tls=$(echo -n "{\"version\":\"3\",\"host\":\"addons.mozilla.org\",\"password\":\"${UUID}\"}" | base64 -w0)#${NODE_NAME// /%20}%20ShadowTLS
|
||||||
"
|
"
|
||||||
[ "${SHADOWSOCKS}" = 'true' ] && local SHADOWROCKET_SUBSCRIBE+="
|
[ "${SHADOWSOCKS}" = 'true' ] && local SHADOWROCKET_SUBSCRIBE+="
|
||||||
ss://$(echo -n "aes-128-gcm:${UUID}@${SERVER_IP_2}:$PORT_SHADOWSOCKS" | base64 -w0)#${NODE_NAME}%20shadowsocks
|
ss://$(echo -n "aes-128-gcm:${UUID}@${SERVER_IP_2}:$PORT_SHADOWSOCKS" | base64 -w0)#${NODE_NAME// /%20}%20shadowsocks
|
||||||
"
|
"
|
||||||
[ "${TROJAN}" = 'true' ] && local SHADOWROCKET_SUBSCRIBE+="
|
[ "${TROJAN}" = 'true' ] && local SHADOWROCKET_SUBSCRIBE+="
|
||||||
trojan://${UUID}@${SERVER_IP_1}:$PORT_TROJAN?peer=addons.mozilla.org&hpkp=${SELF_SIGNED_FINGERPRINT_SHA256}#${NODE_NAME}%20trojan
|
trojan://${UUID}@${SERVER_IP_1}:$PORT_TROJAN?peer=addons.mozilla.org&hpkp=${SELF_SIGNED_FINGERPRINT_SHA256}#${NODE_NAME// /%20}%20trojan
|
||||||
"
|
"
|
||||||
[ "${VMESS_WS}" = 'true' ] && local SHADOWROCKET_SUBSCRIBE+="
|
[ "${VMESS_WS}" = 'true' ] && local SHADOWROCKET_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
vmess://$(echo -n "auto:${UUID}@${CDN}:80" | base64 -w0)?remarks=${NODE_NAME}%20vmess-ws&obfsParam=${ARGO_DOMAIN}&path=/${UUID}-vmess&obfs=websocket&alterId=0
|
vmess://$(echo -n "auto:${UUID}@${CDN}:80" | base64 -w0)?remarks=${NODE_NAME// /%20}%20vmess-ws&obfsParam=${ARGO_DOMAIN}&path=/${UUID}-vmess&obfs=websocket&alterId=0
|
||||||
"
|
"
|
||||||
[ "${VLESS_WS}" = 'true' ] && local SHADOWROCKET_SUBSCRIBE+="
|
[ "${VLESS_WS}" = 'true' ] && local SHADOWROCKET_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
vless://$(echo -n "auto:${UUID}@${CDN}:443" | base64 -w0)?remarks=${NODE_NAME}%20vless-ws-tls&obfsParam=${ARGO_DOMAIN}&path=/${UUID}-vless?ed=2560&obfs=websocket&tls=1&peer=${ARGO_DOMAIN}
|
vless://$(echo -n "auto:${UUID}@${CDN}:443" | base64 -w0)?remarks=${NODE_NAME// /%20}%20vless-ws-tls&obfsParam=${ARGO_DOMAIN}&path=/${UUID}-vless?ed=2560&obfs=websocket&tls=1&peer=${ARGO_DOMAIN}
|
||||||
"
|
"
|
||||||
[ "${H2_REALITY}" = 'true' ] && local SHADOWROCKET_SUBSCRIBE+="
|
[ "${H2_REALITY}" = 'true' ] && local SHADOWROCKET_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
vless://$(echo -n auto:${UUID}@${SERVER_IP_2}:${PORT_H2_REALITY} | base64 -w0)?remarks=${NODE_NAME}%20h2-reality&path=/&obfs=h2&tls=1&peer=addons.mozilla.org&alpn=h2&mux=1&pbk=${REALITY_PUBLIC}
|
vless://$(echo -n auto:${UUID}@${SERVER_IP_2}:${PORT_H2_REALITY} | base64 -w0)?remarks=${NODE_NAME// /%20}%20h2-reality&path=/&obfs=h2&tls=1&peer=addons.mozilla.org&alpn=h2&mux=1&pbk=${REALITY_PUBLIC}
|
||||||
"
|
"
|
||||||
[ "${GRPC_REALITY}" = 'true' ] && local SHADOWROCKET_SUBSCRIBE+="
|
[ "${GRPC_REALITY}" = 'true' ] && local SHADOWROCKET_SUBSCRIBE+="
|
||||||
vless://$(echo -n "auto:${UUID}@${SERVER_IP_2}:${PORT_GRPC_REALITY}" | base64 -w0)?remarks=${NODE_NAME}%20grpc-reality&path=grpc&obfs=grpc&tls=1&peer=addons.mozilla.org&pbk=${REALITY_PUBLIC}
|
vless://$(echo -n "auto:${UUID}@${SERVER_IP_2}:${PORT_GRPC_REALITY}" | base64 -w0)?remarks=${NODE_NAME// /%20}%20grpc-reality&path=grpc&obfs=grpc&tls=1&peer=addons.mozilla.org&pbk=${REALITY_PUBLIC}
|
||||||
"
|
"
|
||||||
[ "${ANYTLS}" = 'true' ] && local SHADOWROCKET_SUBSCRIBE+="
|
[ "${ANYTLS}" = 'true' ] && local SHADOWROCKET_SUBSCRIBE+="
|
||||||
anytls://${UUID}@${SERVER_IP_1}:${PORT_ANYTLS}?hpkp=${SELF_SIGNED_FINGERPRINT_SHA256}&udp=1#${NODE_NAME}%20anytls
|
anytls://${UUID}@${SERVER_IP_1}:${PORT_ANYTLS}?peer=addons.mozilla.org&udp=1&hpkp=${SELF_SIGNED_FINGERPRINT_SHA256}#${NODE_NAME// /%20}%20anytls
|
||||||
"
|
"
|
||||||
echo -n "$SHADOWROCKET_SUBSCRIBE" | sed -E '/^[ ]*#|^--/d' | sed '/^$/d' | base64 -w0 > ${WORK_DIR}/subscribe/shadowrocket
|
echo -n "$SHADOWROCKET_SUBSCRIBE" | sed -E '/^[ ]*#|^--/d' | sed '/^$/d' | base64 -w0 > ${WORK_DIR}/subscribe/shadowrocket
|
||||||
|
|
||||||
@@ -980,11 +967,11 @@ vless://${UUID}@${SERVER_IP_1}:${PORT_XTLS_REALITY}?encryption=none&flow=xtls-rp
|
|||||||
|
|
||||||
[ "${HYSTERIA2}" = 'true' ] && local V2RAYN_SUBSCRIBE+="
|
[ "${HYSTERIA2}" = 'true' ] && local V2RAYN_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
hysteria2://${UUID}@${SERVER_IP_1}:${PORT_HYSTERIA2}/?alpn=h3&insecure=1#${NODE_NAME// /%20}%20hysteria2"
|
hysteria2://${UUID}@${SERVER_IP_1}:${PORT_HYSTERIA2}?sni=addons.mozilla.org&alpn=h3&insecure=1&allowInsecure=1#${NODE_NAME// /%20}%20hysteria2"
|
||||||
|
|
||||||
[ "${TUIC}" = 'true' ] && local V2RAYN_SUBSCRIBE+="
|
[ "${TUIC}" = 'true' ] && local V2RAYN_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
tuic://${UUID}:${UUID}@${SERVER_IP_1}:${PORT_TUIC}?alpn=h3&insecure=1&congestion_control=bbr#${NODE_NAME// /%20}%20tuic"
|
tuic://${UUID}:${UUID}@${SERVER_IP_1}:${PORT_TUIC}?sni=addons.mozilla.org&alpn=h3&insecure=1&allowInsecure=1&congestion_control=bbr#${NODE_NAME// /%20}%20tuic"
|
||||||
|
|
||||||
[ "${SHADOWTLS}" = 'true' ] && local V2RAYN_SUBSCRIBE+="
|
[ "${SHADOWTLS}" = 'true' ] && local V2RAYN_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
@@ -1043,7 +1030,7 @@ ss://$(echo -n "aes-128-gcm:${UUID}@${SERVER_IP_1}:$PORT_SHADOWSOCKS" | base64 -
|
|||||||
|
|
||||||
[ "${TROJAN}" = 'true' ] && local V2RAYN_SUBSCRIBE+="
|
[ "${TROJAN}" = 'true' ] && local V2RAYN_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
trojan://${UUID}@${SERVER_IP_1}:$PORT_TROJAN?security=tls&insecure=1&type=tcp&headerType=none#${NODE_NAME// /%20}%20trojan"
|
trojan://${UUID}@${SERVER_IP_1}:$PORT_TROJAN?security=tls&sni=addons.mozilla.org&insecure=1&allowInsecure=1&type=tcp&headerType=none#${NODE_NAME// /%20}%20trojan"
|
||||||
|
|
||||||
[ "${VMESS_WS}" = 'true' ] && local V2RAYN_SUBSCRIBE+="
|
[ "${VMESS_WS}" = 'true' ] && local V2RAYN_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
@@ -1063,22 +1050,22 @@ vless://${UUID}@${SERVER_IP_1}:${PORT_GRPC_REALITY}?encryption=none&security=rea
|
|||||||
|
|
||||||
[ "${ANYTLS}" = 'true' ] && local V2RAYN_SUBSCRIBE+="
|
[ "${ANYTLS}" = 'true' ] && local V2RAYN_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
anytls://${UUID}@${SERVER_IP_1}:${PORT_ANYTLS}?security=tls&fp=firefox&insecure=1&type=tcp#${NODE_NAME// /%20}%20anytls"
|
anytls://${UUID}@${SERVER_IP_1}:${PORT_ANYTLS}?security=tls&sni=addons.mozilla.org&fp=firefox&insecure=1&allowInsecure=1&type=tcp#${NODE_NAME// /%20}%20anytls"
|
||||||
|
|
||||||
echo -n "$V2RAYN_SUBSCRIBE" | sed -E '/^[ ]*#|^[ ]+|^--|^\{|^\}/d' | sed '/^$/d' | base64 -w0 > ${WORK_DIR}/subscribe/v2rayn
|
echo -n "$V2RAYN_SUBSCRIBE" | sed -E '/^[ ]*#|^[ ]+|^--|^\{|^\}/d' | sed '/^$/d' | base64 -w0 > ${WORK_DIR}/subscribe/v2rayn
|
||||||
|
|
||||||
# 生成 NekoBox 订阅文件
|
# 生成 NekoBox 订阅文件
|
||||||
[ "${XTLS_REALITY}" = 'true' ] && local NEKOBOX_SUBSCRIBE+="
|
[ "${XTLS_REALITY}" = 'true' ] && local NEKOBOX_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
vless://${UUID}@${SERVER_IP_1}:${PORT_XTLS_REALITY}?security=reality&sni=addons.mozilla.org&fp=firefox&pbk=${REALITY_PUBLIC}&type=tcp&flow=xtls-rprx-vision&encryption=none#${NODE_NAME}%20xtls-reality"
|
vless://${UUID}@${SERVER_IP_1}:${PORT_XTLS_REALITY}?security=reality&sni=addons.mozilla.org&fp=firefox&pbk=${REALITY_PUBLIC}&type=tcp&flow=xtls-rprx-vision&encryption=none#${NODE_NAME// /%20}%20xtls-reality"
|
||||||
|
|
||||||
[ "${HYSTERIA2}" = 'true' ] && local NEKOBOX_SUBSCRIBE+="
|
[ "${HYSTERIA2}" = 'true' ] && local NEKOBOX_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
hy2://${UUID}@${SERVER_IP_1}:${PORT_HYSTERIA2}?insecure=1#${NODE_NAME}%20hysteria2"
|
hy2://${UUID}@${SERVER_IP_1}:${PORT_HYSTERIA2}?insecure=1&sni=addons.mozilla.org#${NODE_NAME// /%20}%20hysteria2"
|
||||||
|
|
||||||
[ "${TUIC}" = 'true' ] && local NEKOBOX_SUBSCRIBE+="
|
[ "${TUIC}" = 'true' ] && local NEKOBOX_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
tuic://${UUID}:${UUID}@${SERVER_IP_1}:${PORT_TUIC}?congestion_control=bbr&alpn=h3&udp_relay_mode=native&allow_insecure=1&disable_sni=1#${NODE_NAME}%20tuic"
|
tuic://${UUID}:${UUID}@${SERVER_IP_1}:${PORT_TUIC}?congestion_control=bbr&alpn=h3&sni=addons.mozilla.org&udp_relay_mode=native&allow_insecure=1#${NODE_NAME// /%20}%20tuic"
|
||||||
|
|
||||||
[ "${SHADOWTLS}" = 'true' ] && local NEKOBOX_SUBSCRIBE+="
|
[ "${SHADOWTLS}" = 'true' ] && local NEKOBOX_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
@@ -1088,11 +1075,11 @@ nekoray://shadowsocks#$(echo -n "{\"_v\":0,\"method\":\"2022-blake3-aes-128-gcm\
|
|||||||
|
|
||||||
[ "${SHADOWSOCKS}" = 'true' ] && local NEKOBOX_SUBSCRIBE+="
|
[ "${SHADOWSOCKS}" = 'true' ] && local NEKOBOX_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
ss://$(echo -n "aes-128-gcm:${UUID}" | base64 -w0)@${SERVER_IP_1}:$PORT_SHADOWSOCKS#${NODE_NAME}%20shadowsocks"
|
ss://$(echo -n "aes-128-gcm:${UUID}" | base64 -w0)@${SERVER_IP_1}:$PORT_SHADOWSOCKS#${NODE_NAME// /%20}%20shadowsocks"
|
||||||
|
|
||||||
[ "${TROJAN}" = 'true' ] && local NEKOBOX_SUBSCRIBE+="
|
[ "${TROJAN}" = 'true' ] && local NEKOBOX_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
trojan://${UUID}@${SERVER_IP_1}:$PORT_TROJAN?security=tls&allowInsecure=1&fp=firefox&type=tcp#${NODE_NAME}%20trojan"
|
trojan://${UUID}@${SERVER_IP_1}:$PORT_TROJAN?security=tls&sni=addons.mozilla.org&allowInsecure=1&fp=firefox&type=tcp#${NODE_NAME// /%20}%20trojan"
|
||||||
|
|
||||||
[ "${VMESS_WS}" = 'true' ] && local NEKOBOX_SUBSCRIBE+="
|
[ "${VMESS_WS}" = 'true' ] && local NEKOBOX_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
@@ -1101,20 +1088,20 @@ vmess://$(echo -n "{\"add\":\"${CDN}\",\"aid\":\"0\",\"host\":\"${ARGO_DOMAIN}\"
|
|||||||
|
|
||||||
[ "${VLESS_WS}" = 'true' ] && local NEKOBOX_SUBSCRIBE+="
|
[ "${VLESS_WS}" = 'true' ] && local NEKOBOX_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
vless://${UUID}@${CDN}:443?security=tls&sni=${ARGO_DOMAIN}&type=ws&path=/${UUID}-vless?ed%3D2560&host=${ARGO_DOMAIN}#${NODE_NAME}%20vless-ws-tls
|
vless://${UUID}@${CDN}:443?security=tls&sni=${ARGO_DOMAIN}&type=ws&path=/${UUID}-vless?ed%3D2560&host=${ARGO_DOMAIN}#${NODE_NAME// /%20}%20vless-ws-tls
|
||||||
"
|
"
|
||||||
|
|
||||||
[ "${H2_REALITY}" = 'true' ] && local NEKOBOX_SUBSCRIBE+="
|
[ "${H2_REALITY}" = 'true' ] && local NEKOBOX_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
vless://${UUID}@${SERVER_IP_1}:${PORT_H2_REALITY}?security=reality&sni=addons.mozilla.org&alpn=h2&fp=firefox&pbk=${REALITY_PUBLIC}&type=http&encryption=none#${NODE_NAME}%20h2-reality"
|
vless://${UUID}@${SERVER_IP_1}:${PORT_H2_REALITY}?security=reality&sni=addons.mozilla.org&alpn=h2&fp=firefox&pbk=${REALITY_PUBLIC}&type=http&encryption=none#${NODE_NAME// /%20}%20h2-reality"
|
||||||
|
|
||||||
[ "${GRPC_REALITY}" = 'true' ] && local NEKOBOX_SUBSCRIBE+="
|
[ "${GRPC_REALITY}" = 'true' ] && local NEKOBOX_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
vless://${UUID}@${SERVER_IP_1}:${PORT_GRPC_REALITY}?security=reality&sni=addons.mozilla.org&fp=firefox&pbk=${REALITY_PUBLIC}&type=grpc&serviceName=grpc&encryption=none#${NODE_NAME}%20grpc-reality"
|
vless://${UUID}@${SERVER_IP_1}:${PORT_GRPC_REALITY}?security=reality&sni=addons.mozilla.org&fp=firefox&pbk=${REALITY_PUBLIC}&type=grpc&serviceName=grpc&encryption=none#${NODE_NAME// /%20}%20grpc-reality"
|
||||||
|
|
||||||
[ "${ANYTLS}" = 'true' ] && local NEKOBOX_SUBSCRIBE+="
|
[ "${ANYTLS}" = 'true' ] && local NEKOBOX_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
anytls://${UUID}@${SERVER_IP_1}:${PORT_ANYTLS}/?insecure=1#${NODE_NAME}%20anytls"
|
anytls://${UUID}@${SERVER_IP_1}:${PORT_ANYTLS}?security=tls&sni=addons.mozilla.org&insecure=1&fp=firefox#${NODE_NAME// /%20}%20anytls"
|
||||||
|
|
||||||
echo -n "$NEKOBOX_SUBSCRIBE" | sed -E '/^[ ]*#|^--/d' | sed '/^$/d' | base64 -w0 > ${WORK_DIR}/subscribe/neko
|
echo -n "$NEKOBOX_SUBSCRIBE" | sed -E '/^[ ]*#|^--/d' | sed '/^$/d' | base64 -w0 > ${WORK_DIR}/subscribe/neko
|
||||||
|
|
||||||
@@ -1126,12 +1113,12 @@ anytls://${UUID}@${SERVER_IP_1}:${PORT_ANYTLS}/?insecure=1#${NODE_NAME}%20anytls
|
|||||||
if [ "${HYSTERIA2}" = 'true' ]; then
|
if [ "${HYSTERIA2}" = 'true' ]; then
|
||||||
local INBOUND_REPLACE+=" { \"type\": \"hysteria2\", \"tag\": \"${NODE_NAME} hysteria2\", \"server\": \"${SERVER_IP}\", \"server_port\": ${PORT_HYSTERIA2},"
|
local INBOUND_REPLACE+=" { \"type\": \"hysteria2\", \"tag\": \"${NODE_NAME} hysteria2\", \"server\": \"${SERVER_IP}\", \"server_port\": ${PORT_HYSTERIA2},"
|
||||||
[[ -n "${PORT_HOPPING_START}" && -n "${PORT_HOPPING_END}" ]] && local INBOUND_REPLACE+=" \"server_ports\": [ \"${PORT_HOPPING_START}:${PORT_HOPPING_END}\" ],"
|
[[ -n "${PORT_HOPPING_START}" && -n "${PORT_HOPPING_END}" ]] && local INBOUND_REPLACE+=" \"server_ports\": [ \"${PORT_HOPPING_START}:${PORT_HOPPING_END}\" ],"
|
||||||
local INBOUND_REPLACE+=" \"up_mbps\": 200, \"down_mbps\": 1000, \"password\": \"${UUID}\", \"tls\": { \"enabled\": true, \"certificate_public_key_sha256\": [\"$SELF_SIGNED_FINGERPRINT_BASE64\"], \"server_name\": \"\", \"alpn\": [ \"h3\" ] } },"
|
local INBOUND_REPLACE+=" \"up_mbps\": 200, \"down_mbps\": 1000, \"password\": \"${UUID}\", \"tls\": { \"enabled\": true, \"certificate_public_key_sha256\": [\"$SELF_SIGNED_FINGERPRINT_BASE64\"], \"server_name\": \"addons.mozilla.org\", \"alpn\": [ \"h3\" ] } },"
|
||||||
local NODE_REPLACE+="\"${NODE_NAME} hysteria2\","
|
local NODE_REPLACE+="\"${NODE_NAME} hysteria2\","
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[ "${TUIC}" = 'true' ] &&
|
[ "${TUIC}" = 'true' ] &&
|
||||||
local INBOUND_REPLACE+=" { \"type\": \"tuic\", \"tag\": \"${NODE_NAME} tuic\", \"server\": \"${SERVER_IP}\", \"server_port\": ${PORT_TUIC}, \"uuid\": \"${UUID}\", \"password\": \"${UUID}\", \"congestion_control\": \"bbr\", \"udp_relay_mode\": \"native\", \"zero_rtt_handshake\": false, \"heartbeat\": \"10s\", \"tls\": { \"enabled\": true, \"certificate_public_key_sha256\": [\"$SELF_SIGNED_FINGERPRINT_BASE64\"], \"server_name\": \"\", \"alpn\": [ \"h3\" ] } }," &&
|
local INBOUND_REPLACE+=" { \"type\": \"tuic\", \"tag\": \"${NODE_NAME} tuic\", \"server\": \"${SERVER_IP}\", \"server_port\": ${PORT_TUIC}, \"uuid\": \"${UUID}\", \"password\": \"${UUID}\", \"congestion_control\": \"bbr\", \"udp_relay_mode\": \"native\", \"zero_rtt_handshake\": false, \"heartbeat\": \"10s\", \"tls\": { \"enabled\": true, \"certificate_public_key_sha256\": [\"$SELF_SIGNED_FINGERPRINT_BASE64\"], \"server_name\": \"addons.mozilla.org\", \"alpn\": [ \"h3\" ] } }," &&
|
||||||
local NODE_REPLACE+="\"${NODE_NAME} tuic\","
|
local NODE_REPLACE+="\"${NODE_NAME} tuic\","
|
||||||
|
|
||||||
[ "${SHADOWTLS}" = 'true' ] &&
|
[ "${SHADOWTLS}" = 'true' ] &&
|
||||||
@@ -1143,7 +1130,7 @@ anytls://${UUID}@${SERVER_IP_1}:${PORT_ANYTLS}/?insecure=1#${NODE_NAME}%20anytls
|
|||||||
local NODE_REPLACE+="\"${NODE_NAME} shadowsocks\","
|
local NODE_REPLACE+="\"${NODE_NAME} shadowsocks\","
|
||||||
|
|
||||||
[ "${TROJAN}" = 'true' ] &&
|
[ "${TROJAN}" = 'true' ] &&
|
||||||
local INBOUND_REPLACE+=" { \"type\": \"trojan\", \"tag\": \"${NODE_NAME} trojan\", \"server\": \"${SERVER_IP}\", \"server_port\": $PORT_TROJAN, \"password\": \"${UUID}\", \"tls\": { \"enabled\":true, \"certificate_public_key_sha256\": [\"$SELF_SIGNED_FINGERPRINT_BASE64\"], \"server_name\":\"\", \"utls\": { \"enabled\":true, \"fingerprint\":\"firefox\" } }, \"multiplex\": { \"enabled\":true, \"protocol\":\"h2mux\", \"max_connections\": 8, \"min_streams\": 16, \"padding\": true, \"brutal\":{ \"enabled\":${IS_BRUTAL}, \"up_mbps\":1000, \"down_mbps\":1000 } } }," &&
|
local INBOUND_REPLACE+=" { \"type\": \"trojan\", \"tag\": \"${NODE_NAME} trojan\", \"server\": \"${SERVER_IP}\", \"server_port\": $PORT_TROJAN, \"password\": \"${UUID}\", \"tls\": { \"enabled\":true, \"certificate_public_key_sha256\": [\"$SELF_SIGNED_FINGERPRINT_BASE64\"], \"server_name\":\"addons.mozilla.org\", \"utls\": { \"enabled\":true, \"fingerprint\":\"firefox\" } }, \"multiplex\": { \"enabled\":true, \"protocol\":\"h2mux\", \"max_connections\": 8, \"min_streams\": 16, \"padding\": true, \"brutal\":{ \"enabled\":${IS_BRUTAL}, \"up_mbps\":1000, \"down_mbps\":1000 } } }," &&
|
||||||
local NODE_REPLACE+="\"${NODE_NAME} trojan\","
|
local NODE_REPLACE+="\"${NODE_NAME} trojan\","
|
||||||
|
|
||||||
[ "${VMESS_WS}" = 'true' ] &&
|
[ "${VMESS_WS}" = 'true' ] &&
|
||||||
@@ -1162,7 +1149,7 @@ anytls://${UUID}@${SERVER_IP_1}:${PORT_ANYTLS}/?insecure=1#${NODE_NAME}%20anytls
|
|||||||
local NODE_REPLACE+="\"${NODE_NAME} grpc-reality\","
|
local NODE_REPLACE+="\"${NODE_NAME} grpc-reality\","
|
||||||
|
|
||||||
[ "${ANYTLS}" = 'true' ] &&
|
[ "${ANYTLS}" = 'true' ] &&
|
||||||
local INBOUND_REPLACE+=" { \"type\": \"anytls\", \"tag\": \"${NODE_NAME} anytls\", \"server\": \"${SERVER_IP}\", \"server_port\": ${PORT_ANYTLS}, \"password\": \"${UUID}\", \"idle_session_check_interval\": \"30s\", \"idle_session_timeout\": \"30s\", \"min_idle_session\": 5, \"tls\": { \"enabled\": true, \"certificate_public_key_sha256\": [\"$SELF_SIGNED_FINGERPRINT_BASE64\"], \"server_name\": \"\" } }," &&
|
local INBOUND_REPLACE+=" { \"type\": \"anytls\", \"tag\": \"${NODE_NAME} anytls\", \"server\": \"${SERVER_IP}\", \"server_port\": ${PORT_ANYTLS}, \"password\": \"${UUID}\", \"idle_session_check_interval\": \"30s\", \"idle_session_timeout\": \"30s\", \"min_idle_session\": 5, \"tls\": { \"enabled\": true, \"certificate_public_key_sha256\": [\"$SELF_SIGNED_FINGERPRINT_BASE64\"], \"server_name\": \"addons.mozilla.org\", \"utls\": { \"enabled\": true, \"fingerprint\": \"firefox\" } } }," &&
|
||||||
local NODE_REPLACE+="\"${NODE_NAME} anytls\","
|
local NODE_REPLACE+="\"${NODE_NAME} anytls\","
|
||||||
|
|
||||||
# 模板
|
# 模板
|
||||||
|
|||||||
+33
-44
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
# 当前脚本版本号
|
# 当前脚本版本号
|
||||||
VERSION='v1.3.1 (2025.11.12)'
|
VERSION='v1.3.1 (2025.12.08)'
|
||||||
|
|
||||||
# 各变量默认值
|
# 各变量默认值
|
||||||
GH_PROXY='https://hub.glowp.xyz/'
|
GH_PROXY='https://hub.glowp.xyz/'
|
||||||
@@ -228,7 +228,7 @@ E[99]="The \${SING_BOX_SCRIPT} is detected to be installed. Script exits."
|
|||||||
C[99]="检测到已安装 \${SING_BOX_SCRIPT},脚本退出!"
|
C[99]="检测到已安装 \${SING_BOX_SCRIPT},脚本退出!"
|
||||||
E[100]="Can't get the official latest version. Script exits."
|
E[100]="Can't get the official latest version. Script exits."
|
||||||
C[100]="获取不到官方的最新版本,脚本退出!"
|
C[100]="获取不到官方的最新版本,脚本退出!"
|
||||||
E[101]=""
|
E[101]="The privateKey should be a 43-character base64url encoding; please check."
|
||||||
C[101]="privateKey 应该是43位的 base64url 编码,请检查"
|
C[101]="privateKey 应该是43位的 base64url 编码,请检查"
|
||||||
E[102]="Backing up old version sing-box to ${WORK_DIR}/sing-box.bak"
|
E[102]="Backing up old version sing-box to ${WORK_DIR}/sing-box.bak"
|
||||||
C[102]="已备份旧版本 sing-box 到 ${WORK_DIR}/sing-box.bak"
|
C[102]="已备份旧版本 sing-box 到 ${WORK_DIR}/sing-box.bak"
|
||||||
@@ -478,7 +478,7 @@ input_argo_auth() {
|
|||||||
ARGO_RUNS="${WORK_DIR}/cloudflared tunnel --edge-ip-version auto --no-autoupdate --url http://localhost:$PORT_NGINX"
|
ARGO_RUNS="${WORK_DIR}/cloudflared tunnel --edge-ip-version auto --no-autoupdate --url http://localhost:$PORT_NGINX"
|
||||||
elif [ -n "${ARGO_DOMAIN}" ]; then
|
elif [ -n "${ARGO_DOMAIN}" ]; then
|
||||||
if [ -z "${ARGO_AUTH}" ]; then
|
if [ -z "${ARGO_AUTH}" ]; then
|
||||||
until [[ "$ARGO_AUTH" =~ TunnelSecret || "$ARGO_AUTH" =~ ^[A-Z0-9a-z=]{120,250}$ || "$ARGO_AUTH" =~ .*cloudflared.*service[[:space:]]+install[[:space:]]+[A-Z0-9a-z=]{1,100} ]]; do
|
until [[ "$ARGO_AUTH" =~ TunnelSecret || "$ARGO_AUTH" =~ [A-Z0-9a-z=]{120,250}$ ]]; do
|
||||||
[ "$DOMAIN_ERROR_TIME" != 6 ] && warning "\n $(text 86) \n"
|
[ "$DOMAIN_ERROR_TIME" != 6 ] && warning "\n $(text 86) \n"
|
||||||
(( DOMAIN_ERROR_TIME-- )) || true
|
(( DOMAIN_ERROR_TIME-- )) || true
|
||||||
[ "$DOMAIN_ERROR_TIME" != 0 ] && reading "\n $(text 85) " ARGO_AUTH || error "\n $(text 3) \n"
|
[ "$DOMAIN_ERROR_TIME" != 0 ] && reading "\n $(text 85) " ARGO_AUTH || error "\n $(text 3) \n"
|
||||||
@@ -491,7 +491,7 @@ input_argo_auth() {
|
|||||||
ARGO_JSON=${ARGO_AUTH//[ ]/}
|
ARGO_JSON=${ARGO_AUTH//[ ]/}
|
||||||
[ "$IS_CHANGE_ARGO" = 'is_install' ] && export_argo_json_file $TEMP_DIR || export_argo_json_file ${WORK_DIR}
|
[ "$IS_CHANGE_ARGO" = 'is_install' ] && export_argo_json_file $TEMP_DIR || export_argo_json_file ${WORK_DIR}
|
||||||
ARGO_RUNS="${WORK_DIR}/cloudflared tunnel --edge-ip-version auto --config ${WORK_DIR}/tunnel.yml run"
|
ARGO_RUNS="${WORK_DIR}/cloudflared tunnel --edge-ip-version auto --config ${WORK_DIR}/tunnel.yml run"
|
||||||
elif [[ "${ARGO_AUTH,,}" =~ .*[a-z0-9=]{120,250}$ ]]; then
|
elif [[ "${ARGO_AUTH}" =~ [A-Z0-9a-z=]{120,250}$ ]]; then
|
||||||
ARGO_TYPE=is_token_argo
|
ARGO_TYPE=is_token_argo
|
||||||
ARGO_TOKEN=$(awk '{print $NF}' <<< "$ARGO_AUTH")
|
ARGO_TOKEN=$(awk '{print $NF}' <<< "$ARGO_AUTH")
|
||||||
ARGO_RUNS="${WORK_DIR}/cloudflared tunnel --edge-ip-version auto run --token ${ARGO_TOKEN}"
|
ARGO_RUNS="${WORK_DIR}/cloudflared tunnel --edge-ip-version auto run --token ${ARGO_TOKEN}"
|
||||||
@@ -1218,7 +1218,6 @@ EOF
|
|||||||
# 生成100年的自签证书,区分使用 IPv4 / IPv6 / 域名
|
# 生成100年的自签证书,区分使用 IPv4 / IPv6 / 域名
|
||||||
ssl_certificate() {
|
ssl_certificate() {
|
||||||
mkdir -p ${WORK_DIR}/cert
|
mkdir -p ${WORK_DIR}/cert
|
||||||
[[ $SERVER_IP =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$|^([0-9a-fA-F:]+)$ ]] && SAN_TYPE="IP" || SAN_TYPE="DNS"
|
|
||||||
openssl ecparam -genkey -name prime256v1 -out ${WORK_DIR}/cert/private.key
|
openssl ecparam -genkey -name prime256v1 -out ${WORK_DIR}/cert/private.key
|
||||||
|
|
||||||
cat > ${WORK_DIR}/cert/cert.conf << EOF
|
cat > ${WORK_DIR}/cert/cert.conf << EOF
|
||||||
@@ -1234,7 +1233,7 @@ CN = $(awk -F . '{print $(NF-1)"."$NF}' <<< "$TLS_SERVER_DEFAULT")
|
|||||||
subjectAltName = @alt_names
|
subjectAltName = @alt_names
|
||||||
|
|
||||||
[alt_names]
|
[alt_names]
|
||||||
${SAN_TYPE} = ${SERVER_IP}
|
DNS = ${TLS_SERVER_DEFAULT}
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
openssl req -new -x509 -days 36500 -key ${WORK_DIR}/cert/private.key -out ${WORK_DIR}/cert/cert.pem -config ${WORK_DIR}/cert/cert.conf -extensions v3_req
|
openssl req -new -x509 -days 36500 -key ${WORK_DIR}/cert/private.key -out ${WORK_DIR}/cert/cert.pem -config ${WORK_DIR}/cert/cert.conf -extensions v3_req
|
||||||
@@ -1291,7 +1290,7 @@ http {
|
|||||||
default /; # 默认路径
|
default /; # 默认路径
|
||||||
~*v2rayN /v2rayn; # 匹配 V2rayN 客户端
|
~*v2rayN /v2rayn; # 匹配 V2rayN 客户端
|
||||||
~*clash /clash; # 匹配 Clash 客户端
|
~*clash /clash; # 匹配 Clash 客户端
|
||||||
~*Neko|Throne /neko; # 匹配 Neko 客户端
|
~*Neko|Throne /neko; # 匹配 Neko / Throne 客户端
|
||||||
~*ShadowRocket /shadowrocket; # 匹配 ShadowRocket 客户端
|
~*ShadowRocket /shadowrocket; # 匹配 ShadowRocket 客户端
|
||||||
~*SFM /sing-box-pc; # 匹配 Sing-box pc 客户端
|
~*SFM /sing-box-pc; # 匹配 Sing-box pc 客户端
|
||||||
~*SFI|SFA /sing-box-phone; # 匹配 Sing-box phone 客户端
|
~*SFI|SFA /sing-box-phone; # 匹配 Sing-box phone 客户端
|
||||||
@@ -1331,15 +1330,7 @@ http {
|
|||||||
server {
|
server {
|
||||||
listen $PORT_NGINX ; # ipv4
|
listen $PORT_NGINX ; # ipv4
|
||||||
listen [::]:$PORT_NGINX ; # ipv6
|
listen [::]:$PORT_NGINX ; # ipv6
|
||||||
# listen $PORT_NGINX ssl http2 ; # https
|
|
||||||
server_name localhost;
|
server_name localhost;
|
||||||
|
|
||||||
# ssl_certificate ${WORK_DIR}/cert/cert.pem;
|
|
||||||
# ssl_certificate_key ${WORK_DIR}/cert/private.key;
|
|
||||||
# ssl_protocols TLSv1.3;
|
|
||||||
# ssl_session_tickets on;
|
|
||||||
# ssl_stapling off;
|
|
||||||
# ssl_stapling_verify off;
|
|
||||||
"
|
"
|
||||||
|
|
||||||
[[ -n "$PORT_VMESS_WS" && "$IS_ARGO" = 'is_argo' ]] && NGINX_CONF+="
|
[[ -n "$PORT_VMESS_WS" && "$IS_ARGO" = 'is_argo' ]] && NGINX_CONF+="
|
||||||
@@ -1688,7 +1679,6 @@ EOF
|
|||||||
"ignore_client_bandwidth":false,
|
"ignore_client_bandwidth":false,
|
||||||
"tls":{
|
"tls":{
|
||||||
"enabled":true,
|
"enabled":true,
|
||||||
"server_name":"",
|
|
||||||
"alpn":[
|
"alpn":[
|
||||||
"h3"
|
"h3"
|
||||||
],
|
],
|
||||||
@@ -2415,13 +2405,13 @@ export_list() {
|
|||||||
"
|
"
|
||||||
if [ -n "$PORT_HYSTERIA2" ]; then
|
if [ -n "$PORT_HYSTERIA2" ]; then
|
||||||
[[ -n "$PORT_HOPPING_START" && -n "$PORT_HOPPING_END" ]] && local CLASH_HOPPING=" ports: ${PORT_HOPPING_START}-${PORT_HOPPING_END}, HopInterval: 60,"
|
[[ -n "$PORT_HOPPING_START" && -n "$PORT_HOPPING_END" ]] && local CLASH_HOPPING=" ports: ${PORT_HOPPING_START}-${PORT_HOPPING_END}, HopInterval: 60,"
|
||||||
local CLASH_HYSTERIA2="- {name: \"${NODE_NAME[12]} ${NODE_TAG[1]}\", type: hysteria2, server: ${SERVER_IP}, port: ${PORT_HYSTERIA2},${CLASH_HOPPING} up: \"200 Mbps\", down: \"1000 Mbps\", password: ${UUID[12]}, skip-cert-verify: false, fingerprint: ${SELF_SIGNED_FINGERPRINT_SHA256}}" &&
|
local CLASH_HYSTERIA2="- {name: \"${NODE_NAME[12]} ${NODE_TAG[1]}\", type: hysteria2, server: ${SERVER_IP}, port: ${PORT_HYSTERIA2},${CLASH_HOPPING} up: \"200 Mbps\", down: \"1000 Mbps\", password: ${UUID[12]}, sni: ${TLS_SERVER_DEFAULT}, skip-cert-verify: false, fingerprint: ${SELF_SIGNED_FINGERPRINT_SHA256}}" &&
|
||||||
local CLASH_SUBSCRIBE+="
|
local CLASH_SUBSCRIBE+="
|
||||||
$CLASH_HYSTERIA2
|
$CLASH_HYSTERIA2
|
||||||
"
|
"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[ -n "$PORT_TUIC" ] && local CLASH_TUIC="- {name: \"${NODE_NAME[13]} ${NODE_TAG[2]}\", type: tuic, server: ${SERVER_IP}, port: ${PORT_TUIC}, uuid: ${UUID[13]}, password: ${TUIC_PASSWORD}, alpn: [h3], disable-sni: true, reduce-rtt: true, request-timeout: 8000, udp-relay-mode: native, congestion-controller: $TUIC_CONGESTION_CONTROL, skip-cert-verify: false, fingerprint: ${SELF_SIGNED_FINGERPRINT_SHA256}}" &&
|
[ -n "$PORT_TUIC" ] && local CLASH_TUIC="- {name: \"${NODE_NAME[13]} ${NODE_TAG[2]}\", type: tuic, server: ${SERVER_IP}, port: ${PORT_TUIC}, uuid: ${UUID[13]}, password: ${TUIC_PASSWORD}, alpn: [h3], reduce-rtt: true, request-timeout: 8000, udp-relay-mode: native, congestion-controller: $TUIC_CONGESTION_CONTROL, sni: ${TLS_SERVER_DEFAULT}, skip-cert-verify: false, fingerprint: ${SELF_SIGNED_FINGERPRINT_SHA256}}" &&
|
||||||
local CLASH_SUBSCRIBE+="
|
local CLASH_SUBSCRIBE+="
|
||||||
$CLASH_TUIC
|
$CLASH_TUIC
|
||||||
"
|
"
|
||||||
@@ -2434,7 +2424,7 @@ export_list() {
|
|||||||
local CLASH_SUBSCRIBE+="
|
local CLASH_SUBSCRIBE+="
|
||||||
$CLASH_SHADOWSOCKS
|
$CLASH_SHADOWSOCKS
|
||||||
"
|
"
|
||||||
[ -n "$PORT_TROJAN" ] && local CLASH_TROJAN="- {name: \"${NODE_NAME[16]} ${NODE_TAG[5]}\", type: trojan, server: ${SERVER_IP}, port: $PORT_TROJAN, password: $TROJAN_PASSWORD, client-fingerprint: firefox, skip-cert-verify: false, fingerprint: ${SELF_SIGNED_FINGERPRINT_SHA256}, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false }, brutal-opts: { enabled: ${IS_BRUTAL}, up: '1000 Mbps', down: '1000 Mbps' } }" &&
|
[ -n "$PORT_TROJAN" ] && local CLASH_TROJAN="- {name: \"${NODE_NAME[16]} ${NODE_TAG[5]}\", type: trojan, server: ${SERVER_IP}, port: $PORT_TROJAN, password: $TROJAN_PASSWORD, client-fingerprint: firefox, sni: ${TLS_SERVER_DEFAULT}, skip-cert-verify: false, fingerprint: ${SELF_SIGNED_FINGERPRINT_SHA256}, smux: { enabled: true, protocol: 'h2mux', padding: true, max-connections: '8', min-streams: '16', statistic: true, only-tcp: false }, brutal-opts: { enabled: ${IS_BRUTAL}, up: '1000 Mbps', down: '1000 Mbps' } }" &&
|
||||||
local CLASH_SUBSCRIBE+="
|
local CLASH_SUBSCRIBE+="
|
||||||
$CLASH_TROJAN
|
$CLASH_TROJAN
|
||||||
"
|
"
|
||||||
@@ -2488,7 +2478,7 @@ export_list() {
|
|||||||
$CLASH_GRPC_REALITY
|
$CLASH_GRPC_REALITY
|
||||||
"
|
"
|
||||||
|
|
||||||
[ -n "$PORT_ANYTLS" ] && local CLASH_ANYTLS="- {name: \"${NODE_NAME[21]} ${NODE_TAG[10]}\", type: anytls, server: ${SERVER_IP}, port: $PORT_ANYTLS, password: ${UUID[21]}, client-fingerprint: firefox, udp: true, idle-session-check-interval: 30, idle-session-timeout: 30, skip-cert-verify: false, fingerprint: ${SELF_SIGNED_FINGERPRINT_SHA256} }" &&
|
[ -n "$PORT_ANYTLS" ] && local CLASH_ANYTLS="- {name: \"${NODE_NAME[21]} ${NODE_TAG[10]}\", type: anytls, server: ${SERVER_IP}, port: $PORT_ANYTLS, password: ${UUID[21]}, client-fingerprint: firefox, udp: true, idle-session-check-interval: 30, idle-session-timeout: 30, sni: ${TLS_SERVER_DEFAULT}, skip-cert-verify: false, fingerprint: ${SELF_SIGNED_FINGERPRINT_SHA256} }" &&
|
||||||
local CLASH_SUBSCRIBE+="
|
local CLASH_SUBSCRIBE+="
|
||||||
$CLASH_ANYTLS
|
$CLASH_ANYTLS
|
||||||
"
|
"
|
||||||
@@ -2518,11 +2508,11 @@ vless://$(echo -n "auto:${UUID[11]}@${SERVER_IP_2}:${PORT_XTLS_REALITY}" | base6
|
|||||||
if [ -n "$PORT_HYSTERIA2" ]; then
|
if [ -n "$PORT_HYSTERIA2" ]; then
|
||||||
[[ -n "$PORT_HOPPING_START" && -n "$PORT_HOPPING_END" ]] && local SHADOWROCKET_HOPPING="&mport=${PORT_HYSTERIA2},${PORT_HOPPING_START}-${PORT_HOPPING_END}"
|
[[ -n "$PORT_HOPPING_START" && -n "$PORT_HOPPING_END" ]] && local SHADOWROCKET_HOPPING="&mport=${PORT_HYSTERIA2},${PORT_HOPPING_START}-${PORT_HOPPING_END}"
|
||||||
local SHADOWROCKET_SUBSCRIBE+="
|
local SHADOWROCKET_SUBSCRIBE+="
|
||||||
hysteria2://${UUID[12]}@${SERVER_IP_1}:${PORT_HYSTERIA2}?hpkp=${SELF_SIGNED_FINGERPRINT_SHA256}&obfs=none${SHADOWROCKET_HOPPING}#${NODE_NAME[12]// /%20}%20${NODE_TAG[1]}
|
hysteria2://${UUID[12]}@${SERVER_IP_1}:${PORT_HYSTERIA2}?peer=${TLS_SERVER_DEFAULT}&hpkp=${SELF_SIGNED_FINGERPRINT_SHA256}&obfs=none${SHADOWROCKET_HOPPING}#${NODE_NAME[12]// /%20}%20${NODE_TAG[1]}
|
||||||
"
|
"
|
||||||
fi
|
fi
|
||||||
[ -n "$PORT_TUIC" ] && local SHADOWROCKET_SUBSCRIBE+="
|
[ -n "$PORT_TUIC" ] && local SHADOWROCKET_SUBSCRIBE+="
|
||||||
tuic://${TUIC_PASSWORD}:${UUID[13]}@${SERVER_IP_2}:${PORT_TUIC}?congestion_control=$TUIC_CONGESTION_CONTROL&udp_relay_mode=native&alpn=h3&hpkp=${SELF_SIGNED_FINGERPRINT_SHA256}#${NODE_NAME[13]// /%20}%20${NODE_TAG[2]}
|
tuic://${TUIC_PASSWORD}:${UUID[13]}@${SERVER_IP_2}:${PORT_TUIC}?peer=${TLS_SERVER_DEFAULT}&congestion_control=$TUIC_CONGESTION_CONTROL&udp_relay_mode=native&alpn=h3&hpkp=${SELF_SIGNED_FINGERPRINT_SHA256}#${NODE_NAME[13]// /%20}%20${NODE_TAG[2]}
|
||||||
"
|
"
|
||||||
[ -n "$PORT_SHADOWTLS" ] && local SHADOWROCKET_SUBSCRIBE+="
|
[ -n "$PORT_SHADOWTLS" ] && local SHADOWROCKET_SUBSCRIBE+="
|
||||||
ss://$(echo -n "$SHADOWTLS_METHOD:$SHADOWTLS_PASSWORD@${SERVER_IP_2}:${PORT_SHADOWTLS}" | base64 -w0)?shadow-tls=$(echo -n "{\"version\":\"3\",\"host\":\"${TLS_SERVER[14]}\",\"password\":\"${UUID[14]}\"}" | base64 -w0)#${NODE_NAME[14]// /%20}%20${NODE_TAG[3]}
|
ss://$(echo -n "$SHADOWTLS_METHOD:$SHADOWTLS_PASSWORD@${SERVER_IP_2}:${PORT_SHADOWTLS}" | base64 -w0)?shadow-tls=$(echo -n "{\"version\":\"3\",\"host\":\"${TLS_SERVER[14]}\",\"password\":\"${UUID[14]}\"}" | base64 -w0)#${NODE_NAME[14]// /%20}%20${NODE_TAG[3]}
|
||||||
@@ -2531,7 +2521,7 @@ ss://$(echo -n "$SHADOWTLS_METHOD:$SHADOWTLS_PASSWORD@${SERVER_IP_2}:${PORT_SHAD
|
|||||||
ss://$(echo -n "${SHADOWSOCKS_METHOD}:${UUID[15]}@${SERVER_IP_2}:$PORT_SHADOWSOCKS" | base64 -w0)#${NODE_NAME[15]// /%20}%20${NODE_TAG[4]}
|
ss://$(echo -n "${SHADOWSOCKS_METHOD}:${UUID[15]}@${SERVER_IP_2}:$PORT_SHADOWSOCKS" | base64 -w0)#${NODE_NAME[15]// /%20}%20${NODE_TAG[4]}
|
||||||
"
|
"
|
||||||
[ -n "$PORT_TROJAN" ] && local SHADOWROCKET_SUBSCRIBE+="
|
[ -n "$PORT_TROJAN" ] && local SHADOWROCKET_SUBSCRIBE+="
|
||||||
trojan://$TROJAN_PASSWORD@${SERVER_IP_1}:$PORT_TROJAN?peer=${TLS_SERVER_DEFAULT}&hpkp=${SELF_SIGNED_FINGERPRINT_SHA256}#${NODE_NAME[16]// /%20}%20${NODE_TAG[5]}
|
trojan://${TROJAN_PASSWORD}@${SERVER_IP_1}:$PORT_TROJAN?peer=${TLS_SERVER_DEFAULT}&hpkp=${SELF_SIGNED_FINGERPRINT_SHA256}#${NODE_NAME[16]// /%20}%20${NODE_TAG[5]}
|
||||||
"
|
"
|
||||||
if [ -n "$PORT_VMESS_WS" ]; then
|
if [ -n "$PORT_VMESS_WS" ]; then
|
||||||
if [[ "${STATUS[1]}" =~ $(text 27)|$(text 28) ]] || [[ "$IS_ARGO" = 'is_argo' && "$NONINTERACTIVE_INSTALL" = 'noninteractive_install' ]]; then
|
if [[ "${STATUS[1]}" =~ $(text 27)|$(text 28) ]] || [[ "$IS_ARGO" = 'is_argo' && "$NONINTERACTIVE_INSTALL" = 'noninteractive_install' ]]; then
|
||||||
@@ -2579,7 +2569,7 @@ vless://$(echo -n auto:${UUID[19]}@${SERVER_IP_2}:${PORT_H2_REALITY} | base64 -w
|
|||||||
vless://$(echo -n "auto:${UUID[20]}@${SERVER_IP_2}:${PORT_GRPC_REALITY}" | base64 -w0)?remarks=${NODE_NAME[20]// /%20}%20${NODE_TAG[9]}&path=grpc&obfs=grpc&tls=1&peer=${TLS_SERVER[20]}&pbk=${REALITY_PUBLIC[20]}
|
vless://$(echo -n "auto:${UUID[20]}@${SERVER_IP_2}:${PORT_GRPC_REALITY}" | base64 -w0)?remarks=${NODE_NAME[20]// /%20}%20${NODE_TAG[9]}&path=grpc&obfs=grpc&tls=1&peer=${TLS_SERVER[20]}&pbk=${REALITY_PUBLIC[20]}
|
||||||
"
|
"
|
||||||
[ -n "$PORT_ANYTLS" ] && local SHADOWROCKET_SUBSCRIBE+="
|
[ -n "$PORT_ANYTLS" ] && local SHADOWROCKET_SUBSCRIBE+="
|
||||||
anytls://${UUID[21]}@${SERVER_IP_1}:${PORT_ANYTLS}?udp=1&hpkp=${SELF_SIGNED_FINGERPRINT_SHA256}#${NODE_NAME[21]// /%20}%20${NODE_TAG[10]}
|
anytls://${UUID[21]}@${SERVER_IP_1}:${PORT_ANYTLS}?peer=${TLS_SERVER_DEFAULT}&udp=1&hpkp=${SELF_SIGNED_FINGERPRINT_SHA256}#${NODE_NAME[21]// /%20}%20${NODE_TAG[10]}
|
||||||
"
|
"
|
||||||
echo -n "$SHADOWROCKET_SUBSCRIBE" | sed -E '/^[ ]*#|^--/d' | sed '/^$/d' | base64 -w0 > ${WORK_DIR}/subscribe/shadowrocket
|
echo -n "$SHADOWROCKET_SUBSCRIBE" | sed -E '/^[ ]*#|^--/d' | sed '/^$/d' | base64 -w0 > ${WORK_DIR}/subscribe/shadowrocket
|
||||||
|
|
||||||
@@ -2590,11 +2580,11 @@ vless://${UUID[11]}@${SERVER_IP_1}:${PORT_XTLS_REALITY}?encryption=none${VISION_
|
|||||||
|
|
||||||
[ -n "$PORT_HYSTERIA2" ] && local V2RAYN_SUBSCRIBE+="
|
[ -n "$PORT_HYSTERIA2" ] && local V2RAYN_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
hysteria2://${UUID[12]}@${SERVER_IP_1}:${PORT_HYSTERIA2}/?alpn=h3&insecure=1#${NODE_NAME[12]// /%20}%20${NODE_TAG[1]}"
|
hysteria2://${UUID[12]}@${SERVER_IP_1}:${PORT_HYSTERIA2}?sni=${TLS_SERVER_DEFAULT}&alpn=h3&insecure=1&allowInsecure=1#${NODE_NAME[12]// /%20}%20${NODE_TAG[1]}"
|
||||||
|
|
||||||
[ -n "$PORT_TUIC" ] && local V2RAYN_SUBSCRIBE+="
|
[ -n "$PORT_TUIC" ] && local V2RAYN_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
tuic://${UUID[13]}:${TUIC_PASSWORD}@${SERVER_IP_1}:${PORT_TUIC}?alpn=h3&insecure=1&congestion_control=$TUIC_CONGESTION_CONTROL#${NODE_NAME[13]// /%20}%20${NODE_TAG[2]}"
|
tuic://${UUID[13]}:${TUIC_PASSWORD}@${SERVER_IP_1}:${PORT_TUIC}?sni=${TLS_SERVER_DEFAULT}&alpn=h3&insecure=1&allowInsecure=1&congestion_control=$TUIC_CONGESTION_CONTROL#${NODE_NAME[13]// /%20}%20${NODE_TAG[2]}"
|
||||||
|
|
||||||
[ -n "$PORT_SHADOWTLS" ] && local V2RAYN_SUBSCRIBE+="
|
[ -n "$PORT_SHADOWTLS" ] && local V2RAYN_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
@@ -2653,7 +2643,7 @@ ss://$(echo -n "${SHADOWSOCKS_METHOD}:${UUID[15]}@${SERVER_IP_1}:$PORT_SHADOWSOC
|
|||||||
|
|
||||||
[ -n "$PORT_TROJAN" ] && local V2RAYN_SUBSCRIBE+="
|
[ -n "$PORT_TROJAN" ] && local V2RAYN_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
trojan://$TROJAN_PASSWORD@${SERVER_IP_1}:$PORT_TROJAN?security=tls&insecure=1&type=tcp&headerType=none#${NODE_NAME[16]// /%20}%20${NODE_TAG[5]}"
|
trojan://$TROJAN_PASSWORD@${SERVER_IP_1}:$PORT_TROJAN?security=tls&sni=${TLS_SERVER_DEFAULT}&insecure=1&type=tcp&headerType=none#${NODE_NAME[16]// /%20}%20${NODE_TAG[5]}"
|
||||||
|
|
||||||
if [ -n "$PORT_VMESS_WS" ]; then
|
if [ -n "$PORT_VMESS_WS" ]; then
|
||||||
if [[ "${STATUS[1]}" =~ $(text 27)|$(text 28) ]] || [[ "$IS_ARGO" = 'is_argo' && "$NONINTERACTIVE_INSTALL" = 'noninteractive_install' ]]; then
|
if [[ "${STATUS[1]}" =~ $(text 27)|$(text 28) ]] || [[ "$IS_ARGO" = 'is_argo' && "$NONINTERACTIVE_INSTALL" = 'noninteractive_install' ]]; then
|
||||||
@@ -2701,26 +2691,25 @@ vless://${UUID[20]}@${SERVER_IP_1}:${PORT_GRPC_REALITY}?encryption=none&security
|
|||||||
|
|
||||||
[ -n "$PORT_ANYTLS" ] && local V2RAYN_SUBSCRIBE+="
|
[ -n "$PORT_ANYTLS" ] && local V2RAYN_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
anytls://${UUID[21]}@${SERVER_IP_1}:${PORT_ANYTLS}?security=tls&fp=firefox&insecure=1&type=tcp#${NODE_NAME[21]// /%20}%20${NODE_TAG[10]}"
|
anytls://${UUID[21]}@${SERVER_IP_1}:${PORT_ANYTLS}?security=tls&sni=${TLS_SERVER_DEFAULT}&fp=firefox&insecure=1&allowInsecure=1&type=tcp#${NODE_NAME[21]// /%20}%20${NODE_TAG[10]}"
|
||||||
|
|
||||||
echo -n "$V2RAYN_SUBSCRIBE" | sed -E '/^[ ]*#|^[ ]+|^--|^\{|^\}/d' | sed '/^$/d' | base64 -w0 > ${WORK_DIR}/subscribe/v2rayn
|
echo -n "$V2RAYN_SUBSCRIBE" | sed -E '/^[ ]*#|^[ ]+|^--|^\{|^\}/d' | sed '/^$/d' | base64 -w0 > ${WORK_DIR}/subscribe/v2rayn
|
||||||
|
|
||||||
# 生成 NekoBox 订阅文件
|
# 生成 NekoBox 订阅文件
|
||||||
[ -n "$PORT_XTLS_REALITY" ] && local NEKOBOX_SUBSCRIBE+="
|
[ -n "$PORT_XTLS_REALITY" ] && local NEKOBOX_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
vless://${UUID[11]}@${SERVER_IP_1}:${PORT_XTLS_REALITY}?security=reality&sni=${TLS_SERVER[11]}&fp=firefox&pbk=${REALITY_PUBLIC[11]}&type=tcp${VISION_FLOW}&encryption=none#${NODE_NAME[11]}%20${NODE_TAG[0]}"
|
vless://${UUID[11]}@${SERVER_IP_1}:${PORT_XTLS_REALITY}?security=reality&sni=${TLS_SERVER[11]}&fp=firefox&pbk=${REALITY_PUBLIC[11]}&type=tcp${VISION_FLOW}&encryption=none#${NODE_NAME[11]// /%20}%20${NODE_TAG[0]}"
|
||||||
|
|
||||||
if [ -n "$PORT_HYSTERIA2" ]; then
|
if [ -n "$PORT_HYSTERIA2" ]; then
|
||||||
[[ -n "$PORT_HOPPING_START" && -n "$PORT_HOPPING_END" ]] && NEKOBOX_HOPPING="mport=${PORT_HOPPING_START}-${PORT_HOPPING_END}&"
|
[[ -n "$PORT_HOPPING_START" && -n "$PORT_HOPPING_END" ]] && NEKOBOX_HOPPING="mport=${PORT_HOPPING_START}-${PORT_HOPPING_END}&"
|
||||||
local NEKOBOX_SUBSCRIBE+="
|
local NEKOBOX_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
hy2://${UUID[12]}@${SERVER_IP_1}:${PORT_HYSTERIA2}?${NEKOBOX_HOPPING}insecure=1#${NODE_NAME[12]}%20${NODE_TAG[1]}"
|
hy2://${UUID[12]}@${SERVER_IP_1}:${PORT_HYSTERIA2}?${NEKOBOX_HOPPING}insecure=1&sni=${TLS_SERVER_DEFAULT}#${NODE_NAME[12]// /%20}%20${NODE_TAG[1]}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[ -n "$PORT_TUIC" ] && local NEKOBOX_SUBSCRIBE+="
|
[ -n "$PORT_TUIC" ] && local NEKOBOX_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
tuic://${TUIC_PASSWORD}:${UUID[13]}@${SERVER_IP_1}:${PORT_TUIC}?congestion_control=$TUIC_CONGESTION_CONTROL&alpn=h3&udp_relay_mode=native&allow_insecure=1&disable_sni=1#${NODE_NAME[13]}%20${NODE_TAG[2]}"
|
tuic://${TUIC_PASSWORD}:${UUID[13]}@${SERVER_IP_1}:${PORT_TUIC}?congestion_control=$TUIC_CONGESTION_CONTROL&alpn=h3&sni=${TLS_SERVER_DEFAULT}&udp_relay_mode=native&allow_insecure=1#${NODE_NAME[13]// /%20}%20${NODE_TAG[2]}"
|
||||||
|
|
||||||
[ -n "$PORT_SHADOWTLS" ] && local NEKOBOX_SUBSCRIBE+="
|
[ -n "$PORT_SHADOWTLS" ] && local NEKOBOX_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
nekoray://custom#$(echo -n "{\"_v\":0,\"addr\":\"127.0.0.1\",\"cmd\":[\"\"],\"core\":\"internal\",\"cs\":\"{\n \\\"password\\\": \\\"${UUID[14]}\\\",\n \\\"server\\\": \\\"${SERVER_IP_1}\\\",\n \\\"server_port\\\": ${PORT_SHADOWTLS},\n \\\"tag\\\": \\\"shadowtls-out\\\",\n \\\"tls\\\": {\n \\\"enabled\\\": true,\n \\\"server_name\\\": \\\"${TLS_SERVER[14]}\\\"\n },\n \\\"type\\\": \\\"shadowtls\\\",\n \\\"version\\\": 3\n}\n\",\"mapping_port\":0,\"name\":\"1-tls-not-use\",\"port\":1080,\"socks_port\":0}" | base64 -w0)
|
nekoray://custom#$(echo -n "{\"_v\":0,\"addr\":\"127.0.0.1\",\"cmd\":[\"\"],\"core\":\"internal\",\"cs\":\"{\n \\\"password\\\": \\\"${UUID[14]}\\\",\n \\\"server\\\": \\\"${SERVER_IP_1}\\\",\n \\\"server_port\\\": ${PORT_SHADOWTLS},\n \\\"tag\\\": \\\"shadowtls-out\\\",\n \\\"tls\\\": {\n \\\"enabled\\\": true,\n \\\"server_name\\\": \\\"${TLS_SERVER[14]}\\\"\n },\n \\\"type\\\": \\\"shadowtls\\\",\n \\\"version\\\": 3\n}\n\",\"mapping_port\":0,\"name\":\"1-tls-not-use\",\"port\":1080,\"socks_port\":0}" | base64 -w0)
|
||||||
@@ -2729,11 +2718,11 @@ nekoray://shadowsocks#$(echo -n "{\"_v\":0,\"method\":\"$SHADOWTLS_METHOD\",\"na
|
|||||||
|
|
||||||
[ -n "$PORT_SHADOWSOCKS" ] && local NEKOBOX_SUBSCRIBE+="
|
[ -n "$PORT_SHADOWSOCKS" ] && local NEKOBOX_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
ss://$(echo -n "${SHADOWSOCKS_METHOD}:${UUID[15]}" | base64 -w0)@${SERVER_IP_1}:$PORT_SHADOWSOCKS#${NODE_NAME[15]}%20${NODE_TAG[4]}"
|
ss://$(echo -n "${SHADOWSOCKS_METHOD}:${UUID[15]}" | base64 -w0)@${SERVER_IP_1}:$PORT_SHADOWSOCKS#${NODE_NAME[15]// /%20}%20${NODE_TAG[4]}"
|
||||||
|
|
||||||
[ -n "$PORT_TROJAN" ] && local NEKOBOX_SUBSCRIBE+="
|
[ -n "$PORT_TROJAN" ] && local NEKOBOX_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
trojan://$TROJAN_PASSWORD@${SERVER_IP_1}:$PORT_TROJAN?security=tls&allowInsecure=1&fp=firefox&type=tcp#${NODE_NAME[16]}%20${NODE_TAG[5]}"
|
trojan://${TROJAN_PASSWORD}@${SERVER_IP_1}:$PORT_TROJAN?security=tls&sni=${TLS_SERVER_DEFAULT}&allowInsecure=1&fp=firefox&type=tcp#${NODE_NAME[16]// /%20}%20${NODE_TAG[5]}"
|
||||||
|
|
||||||
if [ -n "$PORT_VMESS_WS" ]; then
|
if [ -n "$PORT_VMESS_WS" ]; then
|
||||||
if [[ "${STATUS[1]}" =~ $(text 27)|$(text 28) ]] || [[ "$IS_ARGO" = 'is_argo' && "$NONINTERACTIVE_INSTALL" = 'noninteractive_install' ]]; then
|
if [[ "${STATUS[1]}" =~ $(text 27)|$(text 28) ]] || [[ "$IS_ARGO" = 'is_argo' && "$NONINTERACTIVE_INSTALL" = 'noninteractive_install' ]]; then
|
||||||
@@ -2757,7 +2746,7 @@ vmess://$(echo -n "{\"add\":\"${CDN[17]}\",\"aid\":\"0\",\"host\":\"$VMESS_HOST_
|
|||||||
if [[ "${STATUS[1]}" =~ $(text 27)|$(text 28) ]] || [[ "$IS_ARGO" = 'is_argo' && "$NONINTERACTIVE_INSTALL" = 'noninteractive_install' ]]; then
|
if [[ "${STATUS[1]}" =~ $(text 27)|$(text 28) ]] || [[ "$IS_ARGO" = 'is_argo' && "$NONINTERACTIVE_INSTALL" = 'noninteractive_install' ]]; then
|
||||||
local NEKOBOX_SUBSCRIBE+="
|
local NEKOBOX_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
vless://${UUID[18]}@${CDN[18]}:443?security=tls&sni=$ARGO_DOMAIN&type=ws&path=/$VLESS_WS_PATH?ed%3D2560&host=$ARGO_DOMAIN&encryption=zero#${NODE_NAME[18]}%20${NODE_TAG[7]}"
|
vless://${UUID[18]}@${CDN[18]}:443?security=tls&sni=$ARGO_DOMAIN&type=ws&path=/$VLESS_WS_PATH?ed%3D2560&host=$ARGO_DOMAIN&encryption=zero#${NODE_NAME[18]// /%20}%20${NODE_TAG[7]}"
|
||||||
[ "$ARGO_TYPE" = 'is_token_argo' ] && NEKOBOX_SUBSCRIBE+="
|
[ "$ARGO_TYPE" = 'is_token_argo' ] && NEKOBOX_SUBSCRIBE+="
|
||||||
|
|
||||||
# $(text 94)
|
# $(text 94)
|
||||||
@@ -2765,7 +2754,7 @@ vless://${UUID[18]}@${CDN[18]}:443?security=tls&sni=$ARGO_DOMAIN&type=ws&path=/$
|
|||||||
else
|
else
|
||||||
WS_SERVER_IP_SHOW=${WS_SERVER_IP[18]} && TYPE_HOST_DOMAIN=$VLESS_HOST_DOMAIN && TYPE_PORT_WS=$PORT_VLESS_WS && local NEKOBOX_SUBSCRIBE+="
|
WS_SERVER_IP_SHOW=${WS_SERVER_IP[18]} && TYPE_HOST_DOMAIN=$VLESS_HOST_DOMAIN && TYPE_PORT_WS=$PORT_VLESS_WS && local NEKOBOX_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
vless://${UUID[18]}@${CDN[18]}:443?security=tls&sni=$VLESS_HOST_DOMAIN&type=ws&path=/$VLESS_WS_PATH?ed%3D2560&host=$VLESS_HOST_DOMAIN&encryption=zero#${NODE_NAME[18]}%20${NODE_TAG[7]}
|
vless://${UUID[18]}@${CDN[18]}:443?security=tls&sni=$VLESS_HOST_DOMAIN&type=ws&path=/$VLESS_WS_PATH?ed%3D2560&host=$VLESS_HOST_DOMAIN&encryption=zero#${NODE_NAME[18]// /%20}%20${NODE_TAG[7]}
|
||||||
|
|
||||||
# $(text 52)"
|
# $(text 52)"
|
||||||
fi
|
fi
|
||||||
@@ -2773,15 +2762,15 @@ vless://${UUID[18]}@${CDN[18]}:443?security=tls&sni=$VLESS_HOST_DOMAIN&type=ws&p
|
|||||||
|
|
||||||
[ -n "$PORT_H2_REALITY" ] && local NEKOBOX_SUBSCRIBE+="
|
[ -n "$PORT_H2_REALITY" ] && local NEKOBOX_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
vless://${UUID[19]}@${SERVER_IP_1}:${PORT_H2_REALITY}?security=reality&sni=${TLS_SERVER[19]}&alpn=h2&fp=firefox&pbk=${REALITY_PUBLIC[19]}&type=http&encryption=none#${NODE_NAME[19]}%20${NODE_TAG[8]}"
|
vless://${UUID[19]}@${SERVER_IP_1}:${PORT_H2_REALITY}?security=reality&sni=${TLS_SERVER[19]}&alpn=h2&fp=firefox&pbk=${REALITY_PUBLIC[19]// /%20}&type=http&encryption=none#${NODE_NAME[19]// /%20}%20${NODE_TAG[8]}"
|
||||||
|
|
||||||
[ -n "$PORT_GRPC_REALITY" ] && local NEKOBOX_SUBSCRIBE+="
|
[ -n "$PORT_GRPC_REALITY" ] && local NEKOBOX_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
vless://${UUID[20]}@${SERVER_IP_1}:${PORT_GRPC_REALITY}?security=reality&sni=${TLS_SERVER[20]}&fp=firefox&pbk=${REALITY_PUBLIC[20]}&type=grpc&serviceName=grpc&encryption=none#${NODE_NAME[20]}%20${NODE_TAG[9]}"
|
vless://${UUID[20]}@${SERVER_IP_1}:${PORT_GRPC_REALITY}?security=reality&sni=${TLS_SERVER[20]}&fp=firefox&pbk=${REALITY_PUBLIC[20]// /%20}&type=grpc&serviceName=grpc&encryption=none#${NODE_NAME[20]// /%20}%20${NODE_TAG[9]}"
|
||||||
|
|
||||||
[ -n "$PORT_ANYTLS" ] && local NEKOBOX_SUBSCRIBE+="
|
[ -n "$PORT_ANYTLS" ] && local NEKOBOX_SUBSCRIBE+="
|
||||||
----------------------------
|
----------------------------
|
||||||
anytls://${UUID[21]}@${SERVER_IP_1}:${PORT_ANYTLS}/?insecure=1#${NODE_NAME[21]}%20${NODE_TAG[10]}"
|
anytls://${UUID[21]}@${SERVER_IP_1}:${PORT_ANYTLS}?security=tls&sni=${TLS_SERVER_DEFAULT}&insecure=1&fp=firefox#${NODE_NAME[21]// /%20}%20${NODE_TAG[10]}"
|
||||||
|
|
||||||
echo -n "$NEKOBOX_SUBSCRIBE" | sed -E '/^[ ]*#|^--/d' | sed '/^$/d' | base64 -w0 > ${WORK_DIR}/subscribe/neko
|
echo -n "$NEKOBOX_SUBSCRIBE" | sed -E '/^[ ]*#|^--/d' | sed '/^$/d' | base64 -w0 > ${WORK_DIR}/subscribe/neko
|
||||||
|
|
||||||
@@ -2793,12 +2782,12 @@ anytls://${UUID[21]}@${SERVER_IP_1}:${PORT_ANYTLS}/?insecure=1#${NODE_NAME[21]}%
|
|||||||
if [ -n "$PORT_HYSTERIA2" ]; then
|
if [ -n "$PORT_HYSTERIA2" ]; then
|
||||||
local INBOUND_REPLACE+=" { \"type\": \"hysteria2\", \"tag\": \"${NODE_NAME[12]} ${NODE_TAG[1]}\", \"server\": \"${SERVER_IP}\", \"server_port\": ${PORT_HYSTERIA2},"
|
local INBOUND_REPLACE+=" { \"type\": \"hysteria2\", \"tag\": \"${NODE_NAME[12]} ${NODE_TAG[1]}\", \"server\": \"${SERVER_IP}\", \"server_port\": ${PORT_HYSTERIA2},"
|
||||||
[[ -n "${PORT_HOPPING_START}" && -n "${PORT_HOPPING_END}" ]] && local INBOUND_REPLACE+=" \"server_ports\": [ \"${PORT_HOPPING_START}:${PORT_HOPPING_END}\" ],"
|
[[ -n "${PORT_HOPPING_START}" && -n "${PORT_HOPPING_END}" ]] && local INBOUND_REPLACE+=" \"server_ports\": [ \"${PORT_HOPPING_START}:${PORT_HOPPING_END}\" ],"
|
||||||
local INBOUND_REPLACE+=" \"up_mbps\": 200, \"down_mbps\": 1000, \"password\": \"${UUID[12]}\", \"tls\": { \"enabled\": true, \"certificate_public_key_sha256\": [\"$SELF_SIGNED_FINGERPRINT_BASE64\"], \"server_name\": \"\", \"alpn\": [ \"h3\" ] } },"
|
local INBOUND_REPLACE+=" \"up_mbps\": 200, \"down_mbps\": 1000, \"password\": \"${UUID[12]}\", \"tls\": { \"enabled\": true, \"server_name\": \"${TLS_SERVER_DEFAULT}\", \"certificate_public_key_sha256\": [\"$SELF_SIGNED_FINGERPRINT_BASE64\"], \"alpn\": [ \"h3\" ] } },"
|
||||||
local NODE_REPLACE+="\"${NODE_NAME[12]} ${NODE_TAG[1]}\","
|
local NODE_REPLACE+="\"${NODE_NAME[12]} ${NODE_TAG[1]}\","
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[ -n "$PORT_TUIC" ] &&
|
[ -n "$PORT_TUIC" ] &&
|
||||||
local TUIC_INBOUND=" { \"type\": \"tuic\", \"tag\": \"${NODE_NAME[13]} ${NODE_TAG[2]}\", \"server\": \"${SERVER_IP}\", \"server_port\": ${PORT_TUIC}, \"uuid\": \"${UUID[13]}\", \"password\": \"${TUIC_PASSWORD}\", \"congestion_control\": \"$TUIC_CONGESTION_CONTROL\", \"udp_relay_mode\": \"native\", \"zero_rtt_handshake\": false, \"heartbeat\": \"10s\", \"tls\": { \"enabled\": true, \"certificate_public_key_sha256\": [\"$SELF_SIGNED_FINGERPRINT_BASE64\"], \"server_name\": \"\", \"alpn\": [ \"h3\" ] } }," &&
|
local TUIC_INBOUND=" { \"type\": \"tuic\", \"tag\": \"${NODE_NAME[13]} ${NODE_TAG[2]}\", \"server\": \"${SERVER_IP}\", \"server_port\": ${PORT_TUIC}, \"uuid\": \"${UUID[13]}\", \"password\": \"${TUIC_PASSWORD}\", \"congestion_control\": \"$TUIC_CONGESTION_CONTROL\", \"udp_relay_mode\": \"native\", \"zero_rtt_handshake\": false, \"heartbeat\": \"10s\", \"tls\": { \"enabled\": true, \"server_name\": \"${TLS_SERVER_DEFAULT}\", \"certificate_public_key_sha256\": [\"$SELF_SIGNED_FINGERPRINT_BASE64\"], \"alpn\": [ \"h3\" ] } }," &&
|
||||||
local INBOUND_REPLACE+="${TUIC_INBOUND}" &&
|
local INBOUND_REPLACE+="${TUIC_INBOUND}" &&
|
||||||
local NODE_REPLACE+="\"${NODE_NAME[13]} ${NODE_TAG[2]}\","
|
local NODE_REPLACE+="\"${NODE_NAME[13]} ${NODE_TAG[2]}\","
|
||||||
|
|
||||||
@@ -2812,7 +2801,7 @@ anytls://${UUID[21]}@${SERVER_IP_1}:${PORT_ANYTLS}/?insecure=1#${NODE_NAME[21]}%
|
|||||||
local NODE_REPLACE+="\"${NODE_NAME[15]} ${NODE_TAG[4]}\","
|
local NODE_REPLACE+="\"${NODE_NAME[15]} ${NODE_TAG[4]}\","
|
||||||
|
|
||||||
[ -n "$PORT_TROJAN" ] &&
|
[ -n "$PORT_TROJAN" ] &&
|
||||||
local INBOUND_REPLACE+=" { \"type\": \"trojan\", \"tag\": \"${NODE_NAME[16]} ${NODE_TAG[5]}\", \"server\": \"${SERVER_IP}\", \"server_port\": $PORT_TROJAN, \"password\": \"$TROJAN_PASSWORD\", \"tls\": { \"enabled\": true, \"certificate_public_key_sha256\": [\"$SELF_SIGNED_FINGERPRINT_BASE64\"], \"server_name\":\"\", \"utls\": { \"enabled\":true, \"fingerprint\":\"firefox\" } }, \"multiplex\": { \"enabled\":true, \"protocol\":\"h2mux\", \"max_connections\": 8, \"min_streams\": 16, \"padding\": true, \"brutal\":{ \"enabled\":${IS_BRUTAL}, \"up_mbps\":1000, \"down_mbps\":1000 } } }," &&
|
local INBOUND_REPLACE+=" { \"type\": \"trojan\", \"tag\": \"${NODE_NAME[16]} ${NODE_TAG[5]}\", \"server\": \"${SERVER_IP}\", \"server_port\": $PORT_TROJAN, \"password\": \"$TROJAN_PASSWORD\", \"tls\": { \"enabled\": true, \"certificate_public_key_sha256\": [\"$SELF_SIGNED_FINGERPRINT_BASE64\"], \"server_name\":\"${TLS_SERVER_DEFAULT}\", \"utls\": { \"enabled\":true, \"fingerprint\":\"firefox\" } }, \"multiplex\": { \"enabled\":true, \"protocol\":\"h2mux\", \"max_connections\": 8, \"min_streams\": 16, \"padding\": true, \"brutal\":{ \"enabled\":${IS_BRUTAL}, \"up_mbps\":1000, \"down_mbps\":1000 } } }," &&
|
||||||
local NODE_REPLACE+="\"${NODE_NAME[16]} ${NODE_TAG[5]}\","
|
local NODE_REPLACE+="\"${NODE_NAME[16]} ${NODE_TAG[5]}\","
|
||||||
|
|
||||||
if [ -n "$PORT_VMESS_WS" ]; then
|
if [ -n "$PORT_VMESS_WS" ]; then
|
||||||
@@ -2858,7 +2847,7 @@ anytls://${UUID[21]}@${SERVER_IP_1}:${PORT_ANYTLS}/?insecure=1#${NODE_NAME[21]}%
|
|||||||
local NODE_REPLACE+="\"${NODE_NAME[20]} ${NODE_TAG[9]}\","
|
local NODE_REPLACE+="\"${NODE_NAME[20]} ${NODE_TAG[9]}\","
|
||||||
|
|
||||||
[ -n "$PORT_ANYTLS" ] &&
|
[ -n "$PORT_ANYTLS" ] &&
|
||||||
local INBOUND_REPLACE+=" { \"type\": \"anytls\", \"tag\": \"${NODE_NAME[21]} ${NODE_TAG[10]}\", \"server\": \"${SERVER_IP}\", \"server_port\": ${PORT_ANYTLS}, \"password\": \"${UUID[21]}\", \"idle_session_check_interval\": \"30s\", \"idle_session_timeout\": \"30s\", \"min_idle_session\": 5, \"tls\": { \"enabled\": true, \"certificate_public_key_sha256\": [\"$SELF_SIGNED_FINGERPRINT_BASE64\"], \"server_name\": \"\" } }," &&
|
local INBOUND_REPLACE+=" { \"type\": \"anytls\", \"tag\": \"${NODE_NAME[21]} ${NODE_TAG[10]}\", \"server\": \"${SERVER_IP}\", \"server_port\": ${PORT_ANYTLS}, \"password\": \"${UUID[21]}\", \"idle_session_check_interval\": \"30s\", \"idle_session_timeout\": \"30s\", \"min_idle_session\": 5, \"tls\": { \"enabled\": true, \"certificate_public_key_sha256\": [\"$SELF_SIGNED_FINGERPRINT_BASE64\"], \"server_name\": \"${TLS_SERVER_DEFAULT}\", \"utls\": { \"enabled\": true, \"fingerprint\": \"firefox\" } } }," &&
|
||||||
local NODE_REPLACE+="\"${NODE_NAME[21]} ${NODE_TAG[10]}\","
|
local NODE_REPLACE+="\"${NODE_NAME[21]} ${NODE_TAG[10]}\","
|
||||||
|
|
||||||
# 模板1
|
# 模板1
|
||||||
@@ -3556,7 +3545,7 @@ menu_setting() {
|
|||||||
OPTION[8]="8. $(text 69)"
|
OPTION[8]="8. $(text 69)"
|
||||||
OPTION[9]="9. $(text 76)"
|
OPTION[9]="9. $(text 76)"
|
||||||
|
|
||||||
ACTION[1]() { IS_FAST_INSTALL='is_fast_install'; CHOOSE_PROTOCOLS=${CHOOSE_PROTOCOLS:-'a'}; START_PORT=${START_PORT:-"$START_PORT_DEFAULT"}; CDN=${CDN:-"${CDN_DOMAIN[0]}"}; IS_SUB='is_sub'; IS_ARGO='is_argo'; PORT_HOPPING_RANGE=${PORT_HOPPING_RANGE:-'50000:51000'}; install_sing-box; export_list install; create_shortcut; exit; }
|
ACTION[1]() { IS_FAST_INSTALL='is_fast_install'; CHOOSE_PROTOCOLS=${CHOOSE_PROTOCOLS:-'a'}; START_PORT=${START_PORT:-"$START_PORT_DEFAULT"}; CDN=${CDN:-"${CDN_DOMAIN[0]}"}; IS_SUB='is_sub'; IS_ARGO='is_argo'; PORT_HOPPING_RANGE=${PORT_HOPPING_RANGE:-'50000:51000'}; install_sing-box; export_list install; create_shortcut; exit; }
|
||||||
ACTION[2]() { IS_SUB=is_sub; IS_ARGO=is_argo; install_sing-box; export_list install; create_shortcut; exit; }
|
ACTION[2]() { IS_SUB=is_sub; IS_ARGO=is_argo; install_sing-box; export_list install; create_shortcut; exit; }
|
||||||
ACTION[3]() { IS_SUB=no_sub; IS_ARGO=is_argo; install_sing-box; export_list install; create_shortcut; exit; }
|
ACTION[3]() { IS_SUB=no_sub; IS_ARGO=is_argo; install_sing-box; export_list install; create_shortcut; exit; }
|
||||||
ACTION[4]() { IS_SUB=is_sub; IS_ARGO=no_argo; install_sing-box; export_list install; create_shortcut; exit; }
|
ACTION[4]() { IS_SUB=is_sub; IS_ARGO=no_argo; install_sing-box; export_list install; create_shortcut; exit; }
|
||||||
|
|||||||
Reference in New Issue
Block a user