{"id":116,"date":"2023-12-18T11:42:58","date_gmt":"2023-12-18T03:42:58","guid":{"rendered":"https:\/\/my.oindalvi.eu.org\/?p=116"},"modified":"2023-12-18T17:09:03","modified_gmt":"2023-12-18T09:09:03","slug":"sing-box-%e5%85%a8%e5%ae%b6%e6%a1%b6","status":"publish","type":"post","link":"https:\/\/my.di.cloudns.asia\/index.php\/2023\/12\/18\/116.html","title":{"rendered":"Sing-box \u5168\u5bb6\u6876"},"content":{"rendered":"<h1>\u3010Sing-box \u5168\u5bb6\u6876\u3011<\/h1>\n<hr \/>\n<h2>\u76ee\u5f55<\/h2>\n<ul>\n<li><a href=\"#header-id-3\">\u66f4\u65b0\u4fe1\u606f<\/a><\/li>\n<li><a href=\"#header-id-4\">\u9879\u76ee\u7279\u70b9<\/a><\/li>\n<li><a href=\"#header-id-5\">Sing-box for VPS \u8fd0\u884c\u811a\u672c<\/a><\/li>\n<li><a href=\"#header-id-6\">Vmess \/ Vless \u65b9\u6848\u8bbe\u7f6e\u4efb\u610f\u7aef\u53e3\u56de\u6e90\u4ee5\u4f7f\u7528 cdn<\/a><\/li>\n<li><a href=\"#header-id-7\">Nekobox \u8bbe\u7f6e shadowTLS \u65b9\u6cd5<\/a><\/li>\n<li><a href=\"#header-id-8\">\u4e3b\u4f53\u76ee\u5f55\u6587\u4ef6\u53ca\u8bf4\u660e<\/a><\/li>\n<li><a href=\"#header-id-9\">\u9e23\u8c22\u4e0b\u5217\u4f5c\u8005\u7684\u6587\u7ae0\u548c\u9879\u76ee<\/a><\/li>\n<li><a href=\"#header-id-10\">\u514d\u8d23\u58f0\u660e<\/a><\/li>\n<\/ul>\n<hr \/>\n<h2>\u66f4\u65b0\u4fe1\u606f<\/h2>\n<p>2023.11.21 v1.1.1 1. XTLS + REALITY remove flow: xtls-reality-vision to support multiplexing and TCP brutal (requires reinstallation); 2. Clash meta add multiplexing parameter. 1. XTLS + REALITY \u53bb\u6389 xtls-reality-vision \u6d41\u63a7\u4ee5\u652f\u6301\u591a\u8def\u590d\u7528\u548c TCP brutal (\u9700\u8981\u91cd\u65b0\u5b89\u88c5); 2. Clash meta \u589e\u52a0\u591a\u8def\u590d\u7528\u53c2\u6570<\/p>\n<p>2023.11.17 v1.1.0 1. Add [ H2 + Reality ] and [ gRPC + Reality ]. Reinstall is required; 2. Use beta verion instead of alpha; 3. Support TCP brutal and add the official install script; 1. \u589e\u52a0 [ H2 + Reality ] \u548c [ gRPC + Reality ]\uff0c\u9700\u8981\u91cd\u65b0\u5b89\u88c5; 2. \u7531\u4e8e Sing-box \u66f4\u65b0\u6781\u5feb\uff0c\u5c06\u4f7f\u7528 beta \u7248\u672c\u66ff\u4ee3 alpha 3. \u652f\u6301 TCP brutal\uff0c\u5e76\u63d0\u4f9b\u5b98\u65b9\u5b89\u88c5\u811a\u672c<\/p>\n<p>2023.11.15 v1.0.1 1. Support TCP brutal. Reinstall is required; 2. Use alpha verion instead of latest; 3. Change the default CDN to [ cn.azhz.eu.org ]; 1. \u652f\u6301 TCP brutal\uff0c\u9700\u8981\u91cd\u65b0\u5b89\u88c5; 2. \u7531\u4e8e Sing-box \u66f4\u65b0\u6781\u5feb\uff0c\u5c06\u4f7f\u7528 alpha \u7248\u672c\u66ff\u4ee3 latest; 3. \u9ed8\u8ba4\u4f18\u9009\u6539\u4e3a [ cn.azhz.eu.org ]<\/p>\n<p>2023.10.29 v1.0 \u6b63\u5f0f\u7248 1. Sing-box Family bucket v1.0; 2. After installing, add [sb] shortcut; 3. Output the configuration for Sing-box Client; 1. Sing-box \u5168\u5bb6\u6876 v1.0; 2. \u5b89\u88c5\u540e\uff0c\u589e\u52a0 [sb] \u7684\u5feb\u6377\u8fd0\u884c\u65b9\u5f0f; 3. \u8f93\u51fa Sing-box Client \u914d\u7f6e<\/p>\n<details>\n<summary>\u5386\u53f2\u66f4\u65b0 history\uff08\u70b9\u51fb\u5373\u53ef\u5c55\u5f00\u6216\u6536\u8d77\uff09<\/summary>\n<p><\/p>\n<p>&gt;2023.10.18 beta7 1. You can add and remove protocols at any time, need to reinstall script; 2. Adjusted the order of some protocols; 1. \u53ef\u4ee5\u968f\u65f6\u6dfb\u52a0\u548c\u5220\u9664\u534f\u8bae\uff0c\u9700\u8981\u91cd\u65b0\u5b89\u88c5\u811a\u672c; 2. \u8c03\u6574\u4e86\u90e8\u5206\u534f\u8bae\u7684\u5148\u540e\u987a\u5e8f<br \/>\n&gt;<br \/>\n&gt;2023.10.16 beta6 1. Support Alpine; 2. Add Sing-box PID, runtime, and memory usage to the menu; 3. Remove the option of using warp on returning to China; \u652f\u6301 Alpine; 2. \u83dc\u5355\u4e2d\u589e\u52a0 sing-box \u5185\u5b58\u5360\u7528\u663e\u793a; 3. \u53bb\u6389\u4f7f\u7528 warp \u56de\u56fd\u7684\u9009\u9879<br \/>\n&gt;<br \/>\n&gt;2023.10.10 beta5 1. Add the option of blocking on returning to China; 2. Add a number of quality cdn&#8217;s that are collected online; 1. \u589e\u52a0\u7981\u6b62\u5f52\u56fd\u9009\u9879; 2. \u589e\u52a0\u7ebf\u4e0a\u6536\u5f55\u7684\u82e5\u5e72\u4f18\u8d28 cdn<br \/>\n&gt;<br \/>\n&gt;2023.10.9 beta4 1. Add v2rayN client, ShadowTLS and Tuic based on sing-box kernel configuration file output; 2. Shadowsocks encryption from aes-256-gcm to aes-128-gcm; 3. Optimize the routing and dns of sing-box on the server side; 1. \u8865\u5145 v2rayN \u5ba2\u6237\u7aef\u4e2d\uff0cShadowTLS \u548c Tuic \u57fa\u4e8e sing-box \u5185\u6838\u7684\u914d\u7f6e\u6587\u4ef6\u8f93\u51fa; 2. Shadowsocks \u52a0\u5bc6\u4ece aes-256-gcm \u6539\u4e3a aes-128-gcm; 3. \u4f18\u5316\u670d\u52a1\u7aef sing-box \u7684 \u8def\u7531\u548c dns<br \/>\n&gt;<br \/>\n&gt;2023.10.6 beta3 1. Add vmess + ws \/ vless + ws + tls protocols; 2. Hysteria2 add obfuscated verification of obfs; 1. \u589e\u52a0 vmess + ws \/ vless + ws + tls \u534f\u8bae; 2. Hysteria2 \u589e\u52a0 obfs \u6df7\u6dc6\u9a8c\u8bc1<br \/>\n&gt;<br \/>\n&gt;2023.10.3 beta2 1. Single-select, multi-select or select all the required protocols; 2. Support according to the order of selection, the definition of the corresponding protocol listen port number; 1. \u53ef\u4ee5\u5355\u9009\u3001\u591a\u9009\u6216\u5168\u9009\u9700\u8981\u7684\u534f\u8bae; 2. \u652f\u6301\u6839\u636e\u9009\u62e9\u7684\u5148\u540e\u6b21\u5e8f\uff0c\u5b9a\u4e49\u76f8\u5e94\u534f\u8bae\u76d1\u542c\u7aef\u53e3\u53f7<br \/>\n&gt;<br \/>\n&gt;2023.9.30 beta1 Sing-box \u5168\u5bb6\u6876\u4e00\u952e\u811a\u672c for vps<br \/>\n<\/details>\n<h2>\u9879\u76ee\u7279\u70b9:<\/h2>\n<ul>\n<li>\u4e00\u952e\u90e8\u7f72\u591a\u534f\u8bae\uff0c\u53ef\u4ee5\u5355\u9009\u3001\u591a\u9009\u6216\u5168\u9009 ShadowTLS v3 \/ XTLS Reality \/ Hysteria2 \/ Tuic V5 \/ ShadowSocks \/ Trojan \/ Vmess + ws \/ Vless + ws + tls \/ H2 Reality \/ gRPC Reality, \u603b\u6709\u4e00\u6b3e\u9002\u5408\u4f60<\/li>\n<li>\u8282\u70b9\u4fe1\u606f\u8f93\u51fa\u5230 V2rayN \/ Clash Meta \/ \u5c0f\u706b\u7bad \/ Nekobox \/ Sing-box<\/li>\n<li>\u81ea\u5b9a\u4e49\u7aef\u53e3\uff0c\u9002\u5408\u6709\u9650\u5f00\u653e\u7aef\u53e3\u7684 nat \u5c0f\u9e21<\/li>\n<li>\u5185\u7f6e warp \u94fe\u5f0f\u4ee3\u7406\u89e3\u9501 chatGPT<\/li>\n<li>\u4e0d\u9700\u8981\u57df\u540d ( vmess \/ vless \u65b9\u6848\u4f8b\u5916)<\/li>\n<li>\u667a\u80fd\u5224\u65ad\u64cd\u4f5c\u7cfb\u7edf: Ubuntu \u3001Debian \u3001CentOS \u3001Alpine \u548c Arch Linux,\u8bf7\u52a1\u5fc5\u9009\u62e9 LTS \u7cfb\u7edf<\/li>\n<li>\u652f\u6301\u786c\u4ef6\u7ed3\u6784\u7c7b\u578b: AMD \u548c ARM\uff0c\u652f\u6301 IPv4 \u548c IPv6<\/li>\n<\/ul>\n<h2>Sing-box for VPS \u8fd0\u884c\u811a\u672c:<\/h2>\n<pre><code>bash &lt;(wget -qO- https:\/\/raw.githubusercontent.com\/fscarmen\/sing-box\/main\/sing-box.sh)<\/code><\/pre>\n<table>\n<thead>\n<tr>\n<th>Option \u53c2\u6570<\/th>\n<th>Remark \u5907\u6ce8<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>-c<\/td>\n<td>Chinese \u4e2d\u6587<\/td>\n<\/tr>\n<tr>\n<td>-e<\/td>\n<td>English \u82f1\u6587<\/td>\n<\/tr>\n<tr>\n<td>-u<\/td>\n<td>Uninstall \u5378\u8f7d<\/td>\n<\/tr>\n<tr>\n<td>-n<\/td>\n<td>Export Nodes list \u663e\u793a\u8282\u70b9\u4fe1\u606f<\/td>\n<\/tr>\n<tr>\n<td>-p <start port><\/td>\n<td>Change the nodes start port \u66f4\u6539\u8282\u70b9\u7684\u8d77\u59cb\u7aef\u53e3<\/td>\n<\/tr>\n<tr>\n<td>-o<\/td>\n<td>Stop \/ Start the Sing-box service \u505c\u6b62\/\u5f00\u542f Sing-box \u670d\u52a1<\/td>\n<\/tr>\n<tr>\n<td>-v<\/td>\n<td>Sync Argo Xray to the newest \u540c\u6b65 Argo Xray \u5230\u6700\u65b0\u7248\u672c<\/td>\n<\/tr>\n<tr>\n<td>-b<\/td>\n<td>Upgrade kernel, turn on BBR, change Linux system \u5347\u7ea7\u5185\u6838\u3001\u5b89\u88c5BBR\u3001DD\u811a\u672c<\/td>\n<\/tr>\n<tr>\n<td>-r<\/td>\n<td>Add and remove protocols \u6dfb\u52a0\u548c\u5220\u9664\u534f\u8bae<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Vmess \/ Vless \u65b9\u6848\u8bbe\u7f6e\u4efb\u610f\u7aef\u53e3\u56de\u6e90\u4ee5\u4f7f\u7528 cdn<\/h2>\n<p>\u4e3e\u4f8b\u5b50 IPv6: vmess [2a01:4f8:272:3ae6:100b:ee7a:ad2f:1]:10006<\/p>\n<p><img decoding=\"async\" width=\"1052\" alt=\"image\" src=\"\/wp-content\/uploads\/2023\/12\/post-116-657fdf1c67b3c.png\"><\/p>\n<ol>\n<li>\n<p>\u89e3\u6790\u57df\u540d<\/p>\n<p><img decoding=\"async\" width=\"1605\" alt=\"image\" src=\"\/wp-content\/uploads\/2023\/12\/post-116-657fdf2002e4b.png\">\n<\/li>\n<li>\n<p>\u8bbe\u7f6e Origin rule<\/p>\n<p><img decoding=\"async\" width=\"1556\" alt=\"image\" src=\"\/wp-content\/uploads\/2023\/12\/post-116-657fdf23bda51.png\">\n<\/li>\n<\/ol>\n<h2>Nekobox \u8bbe\u7f6e shadowTLS \u65b9\u6cd5<\/h2>\n<ol>\n<li>\u590d\u5236\u811a\u672c\u8f93\u51fa\u7684\u4e24\u4e2a Neko links \u8fdb\u53bb<\/li>\n<\/ol>\n<p><img decoding=\"async\" width=\"630\" alt=\"image\" src=\"\/wp-content\/uploads\/2023\/12\/post-116-657fdf266f53e.png\"><\/p>\n<ol start=\"2\">\n<li>\n<p>\u8bbe\u7f6e\u94fe\u5f0f\u4ee3\u7406\uff0c\u5e76\u542f\u7528<br \/>\n\u53f3\u952e -&gt; \u624b\u52a8\u8f93\u5165\u914d\u7f6e -&gt; \u7c7b\u578b\u9009\u62e9\u4e3a &quot;\u94fe\u5f0f\u4ee3\u7406&quot;\u3002<\/p>\n<p>\u70b9\u51fb &quot;\u9009\u62e9\u914d\u7f6e&quot; \u540e\uff0c\u7ed9\u8282\u70b9\u8d77\u4e2a\u540d\u5b57\uff0c\u5148\u540e\u9009 1-tls-not-use \u548c 2-ss-not-use\uff0c\u6309 enter \u6216 \u53cc\u51fb \u4f7f\u7528\u8fd9\u4e2a\u670d\u52a1\u5668\u3002\u4e00\u5b9a\u8981\u6ce8\u610f\u987a\u5e8f\u4e0d\u80fd\u53cd\u4e86\uff0c\u903b\u8f91\u4e3a ShadowTLS -&gt; ShadowSocks\u3002<\/p>\n<\/li>\n<\/ol>\n<p><img decoding=\"async\" width=\"408\" alt=\"image\" src=\"\/wp-content\/uploads\/2023\/12\/post-116-657fdf28d0e44.png\"><\/p>\n<h2>\u4e3b\u4f53\u76ee\u5f55\u6587\u4ef6\u53ca\u8bf4\u660e<\/h2>\n<pre><code>\/etc\/sing-box\/                               # \u9879\u76ee\u4e3b\u4f53\u76ee\u5f55\n|-- cert                                     # \u5b58\u653e\u8bc1\u4e66\u6587\u4ef6\u76ee\u5f55\n|   |-- cert.pem                             # SSL\/TLS \u5b89\u5168\u8bc1\u4e66\u6587\u4ef6\n|   `-- private.key                          # SSL\/TLS \u8bc1\u4e66\u7684\u79c1\u94a5\u4fe1\u606f\n|-- conf                                     # sing-box server \u914d\u7f6e\u6587\u4ef6\u76ee\u5f55\n|   |-- 00_log.json                          # \u65e5\u5fd7\u914d\u7f6e\u6587\u4ef6\n|   |-- 01_outbounds.json                    # \u670d\u52a1\u7aef\u51fa\u7ad9\u914d\u7f6e\u6587\u4ef6\uff0c\u5df2\u52a0\u4e86 warp \u8d26\u6237\u4fe1\u606f\n|   |-- 02_route.json                        # \u8def\u7531\u914d\u7f6e\u6587\u4ef6\uff0cchatGPT \u4f7f\u7528 warp ipv6\u94fe\u5f0f\u4ee3\u7406\u51fa\u7ad9\n|   |-- 11_SHADOWTLS_inbounds.json           # ShadowTLS \u534f\u8bae\u914d\u7f6e\u6587\u4ef6\n|   |-- 12_REALITY_inbounds.json             # Reality \u534f\u8bae\u914d\u7f6e\u6587\u4ef6\n|   |-- 13_HYSTERIA2_inbounds.json           # Hysteria2 \u534f\u8bae\u914d\u7f6e\u6587\u4ef6\n|   |-- 14_TUIC_inbounds.json                # Tuic V5 \u534f\u8bae\u914d\u7f6e\u6587\u4ef6\n|   |-- 15_SHADOWSOCKS_inbounds.json         # Shadowsocks \u534f\u8bae\u914d\u7f6e\u6587\u4ef6\n|   |-- 16_TROJAN_inbounds.json              # Trojan \u534f\u8bae\u914d\u7f6e\u6587\u4ef6\n|   |-- 17_VMESS_WS_inbounds.json            # vmess + ws \u534f\u8bae\u914d\u7f6e\u6587\u4ef6\n|   `-- 18_VLESS_WS_inbounds.json            # vless + ws + tls \u534f\u8bae\u914d\u7f6e\u6587\u4ef6\n|-- logs\n|   `-- box.log                              # sing-box \u8fd0\u884c\u65e5\u5fd7\u6587\u4ef6\n|-- geosite.db                               # \u7528\u4e8e\u57fa\u4e8e\u57df\u540d\u6216\u7f51\u7ad9\u5206\u7c7b\u6765\u8fdb\u884c\u8bbf\u95ee\u63a7\u5236\u3001\u5185\u5bb9\u8fc7\u6ee4\u6216\u5b89\u5168\u7b56\u7565\n|-- geoip.db                                 # \u7528\u4e8e\u6839\u636e IP \u5730\u5740\u6765\u8fdb\u884c\u5730\u7406\u4f4d\u7f6e\u7b56\u7565\u6216\u8bbf\u95ee\u63a7\u5236\n|-- language                                 # \u5b58\u653e\u811a\u672c\u8bed\u8a00\u6587\u4ef6\uff0cE \u4e3a\u82f1\u6587\uff0cC \u4e3a\u4e2d\u6587\n|-- list                                     # \u8282\u70b9\u4fe1\u606f\u5217\u8868\n|-- sing-box                                 # sing-box \u4e3b\u7a0b\u5e8f\n`-- sb.sh                                    # \u5feb\u6377\u65b9\u5f0f\u811a\u672c\u6587\u4ef6<\/code><\/pre>\n<h2>\u9e23\u8c22\u4e0b\u5217\u4f5c\u8005\u7684\u6587\u7ae0\u548c\u9879\u76ee:<\/h2>\n<p>\u5343\u6b4c sing-box \u6a21\u677f: <a href=\"https:\/\/github.com\/chika0801\/sing-box-examples\">https:\/\/github.com\/chika0801\/sing-box-examples<\/a><br \/>\n\u778e\u6298\u817e sing-box \u6a21\u677f: <a href=\"https:\/\/t.me\/ztvps\/37\">https:\/\/t.me\/ztvps\/37<\/a><\/p>\n<h2>\u514d\u8d23\u58f0\u660e:<\/h2>\n<ul>\n<li>\u672c\u7a0b\u5e8f\u4ec5\u4f9b\u5b66\u4e60\u4e86\u89e3, \u975e\u76c8\u5229\u76ee\u7684\uff0c\u8bf7\u4e8e\u4e0b\u8f7d\u540e 24 \u5c0f\u65f6\u5185\u5220\u9664, \u4e0d\u5f97\u7528\u4f5c\u4efb\u4f55\u5546\u4e1a\u7528\u9014, \u6587\u5b57\u3001\u6570\u636e\u53ca\u56fe\u7247\u5747\u6709\u6240\u5c5e\u7248\u6743, \u5982\u8f6c\u8f7d\u987b\u6ce8\u660e\u6765\u6e90\u3002<\/li>\n<li>\u4f7f\u7528\u672c\u7a0b\u5e8f\u5fc5\u5faa\u9075\u5b88\u90e8\u7f72\u514d\u8d23\u58f0\u660e\u3002\u4f7f\u7528\u672c\u7a0b\u5e8f\u5fc5\u5faa\u9075\u5b88\u90e8\u7f72\u670d\u52a1\u5668\u6240\u5728\u5730\u3001\u6240\u5728\u56fd\u5bb6\u548c\u7528\u6237\u6240\u5728\u56fd\u5bb6\u7684\u6cd5\u5f8b\u6cd5\u89c4, \u7a0b\u5e8f\u4f5c\u8005\u4e0d\u5bf9\u4f7f\u7528\u8005\u4efb\u4f55\u4e0d\u5f53\u884c\u4e3a\u8d1f\u8d23\u3002<\/li>\n<\/ul>\n<p>sh<\/p>\n<pre><code class=\"language-shell\">#!\/usr\/bin\/env bash\n\n# \u5f53\u524d\u811a\u672c\u7248\u672c\u53f7\nVERSION=&#039;v1.1.1&#039;\n\n# \u5404\u53d8\u91cf\u9ed8\u8ba4\u503c\nGH_PROXY=&#039;https:\/\/mirror.ghproxy.com\/&#039;\nTEMP_DIR=&#039;\/tmp\/sing-box&#039;\nWORK_DIR=&#039;\/etc\/sing-box&#039;\nSTART_PORT_DEFAULT=&#039;8881&#039;\nMIN_PORT=1000\nMAX_PORT=65520\nTLS_SERVER=addons.mozilla.org\nCDN_DEFAULT=cn.azhz.eu.org\nPROTOCOL_LIST=(&quot;XTLS + reality&quot; &quot;hysteria2&quot; &quot;tuic&quot; &quot;shadowTLS&quot; &quot;shadowsocks&quot; &quot;trojan&quot; &quot;vmess + ws&quot; &quot;vless + ws + tls&quot; &quot;H2 + reality&quot; &quot;gRPC + reality&quot;)\nCONSECUTIVE_PORTS=${#PROTOCOL_LIST[@]}\nCDN_DOMAIN=(&quot;cn.azhz.eu.org&quot; &quot;www.who.int&quot; &quot;cdn.anycast.eu.org&quot; &quot;443.cf.bestl.de&quot; &quot;cfip.gay&quot;)\n\ntrap &quot;rm -rf $TEMP_DIR &gt;\/dev\/null 2&gt;&amp;1 ; echo -e &#039;\\n&#039; ;exit 1&quot; INT QUIT TERM EXIT\n\nmkdir -p $TEMP_DIR\n\nE[0]=&quot;Language:\\n 1. English (default) \\n 2. \u7b80\u4f53\u4e2d\u6587&quot;\nC[0]=&quot;${E[0]}&quot;\nE[1]=&quot;1. XTLS + REALITY remove flow: xtls-reality-vision to support multiplexing and TCP brutal (requires reinstallation); 2. Clash meta add multiplexing parameter.&quot;\nC[1]=&quot;1. XTLS + REALITY \u53bb\u6389 xtls-reality-vision \u6d41\u63a7\u4ee5\u652f\u6301\u591a\u8def\u590d\u7528\u548c TCP brutal (\u9700\u8981\u91cd\u65b0\u5b89\u88c5); 2. Clash meta \u589e\u52a0\u591a\u8def\u590d\u7528\u53c2\u6570&quot;\nE[2]=&quot;This project is designed to add sing-box support for multiple protocols to VPS, details: [https:\/\/github.com\/fscarmen\/sing-box]\\n Script Features:\\n\\t \u2022 Deploy multiple protocols with one click, there is always one for you!\\n\\t \u2022 Custom ports for nat machine with limited open ports.\\n\\t \u2022 Built-in warp chained proxy to unlock chatGPT.\\n\\t \u2022 No domain name is required.\\n\\t \u2022 Support system: Ubuntu, Debian, CentOS, Alpine and Arch Linux 3.\\n\\t \u2022 Support architecture: AMD,ARM and s390x\\n&quot;\nC[2]=&quot;\u672c\u9879\u76ee\u4e13\u4e3a VPS \u6dfb\u52a0 sing-box \u652f\u6301\u7684\u591a\u79cd\u534f\u8bae, \u8be6\u7ec6\u8bf4\u660e: [https:\/\/github.com\/fscarmen\/sing-box]\\n \u811a\u672c\u7279\u70b9:\\n\\t \u2022 \u4e00\u952e\u90e8\u7f72\u591a\u534f\u8bae\uff0c\u603b\u6709\u4e00\u6b3e\u9002\u5408\u4f60\\n\\t \u2022 \u81ea\u5b9a\u4e49\u7aef\u53e3\uff0c\u9002\u5408\u6709\u9650\u5f00\u653e\u7aef\u53e3\u7684 nat \u5c0f\u9e21\\n\\t \u2022 \u5185\u7f6e warp \u94fe\u5f0f\u4ee3\u7406\u89e3\u9501 chatGPT\\n\\t \u2022 \u4e0d\u9700\u8981\u57df\u540d\\n\\t \u2022 \u667a\u80fd\u5224\u65ad\u64cd\u4f5c\u7cfb\u7edf: Ubuntu \u3001Debian \u3001CentOS \u3001Alpine \u548c Arch Linux,\u8bf7\u52a1\u5fc5\u9009\u62e9 LTS \u7cfb\u7edf\\n\\t \u2022 \u652f\u6301\u786c\u4ef6\u7ed3\u6784\u7c7b\u578b: AMD \u548c ARM\\n&quot;\nE[3]=&quot;Input errors up to 5 times.The script is aborted.&quot;\nC[3]=&quot;\u8f93\u5165\u9519\u8bef\u8fbe5\u6b21,\u811a\u672c\u9000\u51fa&quot;\nE[4]=&quot;UUID should be 36 characters, please re-enter \\(\\${UUID_ERROR_TIME} times remaining\\):&quot;\nC[4]=&quot;UUID \u5e94\u4e3a36\u4f4d\u5b57\u7b26,\u8bf7\u91cd\u65b0\u8f93\u5165 \\(\u5269\u4f59\\${UUID_ERROR_TIME}\u6b21\\):&quot;\nE[5]=&quot;The script supports Debian, Ubuntu, CentOS, Alpine, Fedora or Arch systems only. Feedback: [https:\/\/github.com\/fscarmen\/sing-box\/issues]&quot;\nC[5]=&quot;\u672c\u811a\u672c\u53ea\u652f\u6301 Debian\u3001Ubuntu\u3001CentOS\u3001Alpine\u3001Fedora \u6216 Arch \u7cfb\u7edf,\u95ee\u9898\u53cd\u9988:[https:\/\/github.com\/fscarmen\/sing-box\/issues]&quot;\nE[6]=&quot;Curren operating system is \\$SYS.\\\\\\n The system lower than \\$SYSTEM \\${MAJOR[int]} is not supported. Feedback: [https:\/\/github.com\/fscarmen\/sing-box\/issues]&quot;\nC[6]=&quot;\u5f53\u524d\u64cd\u4f5c\u662f \\$SYS\\\\\\n \u4e0d\u652f\u6301 \\$SYSTEM \\${MAJOR[int]} \u4ee5\u4e0b\u7cfb\u7edf,\u95ee\u9898\u53cd\u9988:[https:\/\/github.com\/fscarmen\/sing-box\/issues]&quot;\nE[7]=&quot;Install dependence-list:&quot;\nC[7]=&quot;\u5b89\u88c5\u4f9d\u8d56\u5217\u8868:&quot;\nE[8]=&quot;All dependencies already exist and do not need to be installed additionally.&quot;\nC[8]=&quot;\u6240\u6709\u4f9d\u8d56\u5df2\u5b58\u5728\uff0c\u4e0d\u9700\u8981\u989d\u5916\u5b89\u88c5&quot;\nE[9]=&quot;To upgrade, press [y]. No upgrade by default:&quot;\nC[9]=&quot;\u5347\u7ea7\u8bf7\u6309 [y]\uff0c\u9ed8\u8ba4\u4e0d\u5347\u7ea7:&quot;\nE[10]=&quot;Please enter VPS IP \\(Default is: \\${SERVER_IP_DEFAULT}\\):&quot;\nC[10]=&quot;\u8bf7\u8f93\u5165 VPS IP \\(\u9ed8\u8ba4\u4e3a: \\${SERVER_IP_DEFAULT}\\):&quot;\nE[11]=&quot;Please enter the starting port number. Must be \\${MIN_PORT} - \\${MAX_PORT}, consecutive \\${NUM} free ports are required \\(Default is: \\${START_PORT_DEFAULT}\\):&quot;\nC[11]=&quot;\u8bf7\u8f93\u5165\u5f00\u59cb\u7684\u7aef\u53e3\u53f7\uff0c\u5fc5\u987b\u662f \\${MIN_PORT} - \\${MAX_PORT}\uff0c\u9700\u8981\u8fde\u7eed\\${NUM}\u4e2a\u7a7a\u95f2\u7684\u7aef\u53e3 \\(\u9ed8\u8ba4\u4e3a: \\${START_PORT_DEFAULT}\\):&quot;\nE[12]=&quot;Please enter UUID \\(Default is \\${UUID_DEFAULT}\\):&quot;\nC[12]=&quot;\u8bf7\u8f93\u5165 UUID \\(\u9ed8\u8ba4\u4e3a \\${UUID_DEFAULT}\\):&quot;\nE[13]=&quot;Please enter the node name. \\(Default is \\${NODE_NAME_DEFAULT}\\):&quot;\nC[13]=&quot;\u8bf7\u8f93\u5165\u8282\u70b9\u540d\u79f0 \\(\u9ed8\u8ba4\u4e3a \\${NODE_NAME_DEFAULT}\\):&quot;\nE[14]=&quot;Node name only allow uppercase and lowercase letters and numeric characters, please re-enter \\(\\${a} times remaining\\):&quot;\nC[14]=&quot;\u8282\u70b9\u540d\u79f0\u53ea\u5141\u8bb8\u82f1\u6587\u5927\u5c0f\u5199\u53ca\u6570\u5b57\u5b57\u7b26\uff0c\u8bf7\u91cd\u65b0\u8f93\u5165 \\(\u5269\u4f59\\${a}\u6b21\\):&quot;\nE[15]=&quot;Sing-box script has not been installed yet.&quot;\nC[15]=&quot;Sing-box \u811a\u672c\u8fd8\u6ca1\u6709\u5b89\u88c5&quot;\nE[16]=&quot;Sing-box is completely uninstalled.&quot;\nC[16]=&quot;Sing-box \u5df2\u5f7b\u5e95\u5378\u8f7d&quot;\nE[17]=&quot;Version&quot;\nC[17]=&quot;\u811a\u672c\u7248\u672c&quot;\nE[18]=&quot;New features&quot;\nC[18]=&quot;\u529f\u80fd\u65b0\u589e&quot;\nE[19]=&quot;System infomation&quot;\nC[19]=&quot;\u7cfb\u7edf\u4fe1\u606f&quot;\nE[20]=&quot;Operating System&quot;\nC[20]=&quot;\u5f53\u524d\u64cd\u4f5c\u7cfb\u7edf&quot;\nE[21]=&quot;Kernel&quot;\nC[21]=&quot;\u5185\u6838&quot;\nE[22]=&quot;Architecture&quot;\nC[22]=&quot;\u5904\u7406\u5668\u67b6\u6784&quot;\nE[23]=&quot;Virtualization&quot;\nC[23]=&quot;\u865a\u62df\u5316&quot;\nE[24]=&quot;Choose:&quot;\nC[24]=&quot;\u8bf7\u9009\u62e9:&quot;\nE[25]=&quot;Curren architecture \\$(uname -m) is not supported. Feedback: [https:\/\/github.com\/fscarmen\/sing-box\/issues]&quot;\nC[25]=&quot;\u5f53\u524d\u67b6\u6784 \\$(uname -m) \u6682\u4e0d\u652f\u6301,\u95ee\u9898\u53cd\u9988:[https:\/\/github.com\/fscarmen\/sing-box\/issues]&quot;\nE[26]=&quot;Not install&quot;\nC[26]=&quot;\u672a\u5b89\u88c5&quot;\nE[27]=&quot;close&quot;\nC[27]=&quot;\u5173\u95ed&quot;\nE[28]=&quot;open&quot;\nC[28]=&quot;\u5f00\u542f&quot;\nE[29]=&quot;View links (sb -n)&quot;\nC[29]=&quot;\u67e5\u770b\u8282\u70b9\u4fe1\u606f (sb -n)&quot;\nE[30]=&quot;Change listen ports (sb -p)&quot;\nC[30]=&quot;\u66f4\u6362\u76d1\u542c\u7aef\u53e3 (sb -p)&quot;\nE[31]=&quot;Sync Sing-box to the latest version (sb -v)&quot;\nC[31]=&quot;\u540c\u6b65 Sing-box \u81f3\u6700\u65b0\u7248\u672c (sb -v)&quot;\nE[32]=&quot;Upgrade kernel, turn on BBR, change Linux system (sb -b)&quot;\nC[32]=&quot;\u5347\u7ea7\u5185\u6838\u3001\u5b89\u88c5BBR\u3001DD\u811a\u672c (sb -b)&quot;\nE[33]=&quot;Uninstall (sb -u)&quot;\nC[33]=&quot;\u5378\u8f7d (sb -u)&quot;\nE[34]=&quot;Install script&quot;\nC[34]=&quot;\u5b89\u88c5\u811a\u672c&quot;\nE[35]=&quot;Exit&quot;\nC[35]=&quot;\u9000\u51fa&quot;\nE[36]=&quot;Please enter the correct number&quot;\nC[36]=&quot;\u8bf7\u8f93\u5165\u6b63\u786e\u6570\u5b57&quot;\nE[37]=&quot;successful&quot;\nC[37]=&quot;\u6210\u529f&quot;\nE[38]=&quot;failed&quot;\nC[38]=&quot;\u5931\u8d25&quot;\nE[39]=&quot;Sing-box is not installed.&quot;\nC[39]=&quot;Sing-box \u672a\u5b89\u88c5&quot;\nE[40]=&quot;Sing-box local verion: \\$LOCAL.\\\\\\t The newest verion: \\$ONLINE&quot;\nC[40]=&quot;Sing-box \u672c\u5730\u7248\u672c: \\$LOCAL.\\\\\\t \u6700\u65b0\u7248\u672c: \\$ONLINE&quot;\nE[41]=&quot;No upgrade required.&quot;\nC[41]=&quot;\u4e0d\u9700\u8981\u5347\u7ea7&quot;\nE[42]=&quot;Downloading the latest version Sing-box failed, script exits. Feedback:[https:\/\/github.com\/fscarmen\/sing-box\/issues]&quot;\nC[42]=&quot;\u4e0b\u8f7d\u6700\u65b0\u7248\u672c Sing-box \u5931\u8d25\uff0c\u811a\u672c\u9000\u51fa\uff0c\u95ee\u9898\u53cd\u9988:[https:\/\/github.com\/fscarmen\/sing-box\/issues]&quot;\nE[43]=&quot;The script must be run as root, you can enter sudo -i and then download and run again. Feedback:[https:\/\/github.com\/fscarmen\/sing-box\/issues]&quot;\nC[43]=&quot;\u5fc5\u987b\u4ee5root\u65b9\u5f0f\u8fd0\u884c\u811a\u672c\uff0c\u53ef\u4ee5\u8f93\u5165 sudo -i \u540e\u91cd\u65b0\u4e0b\u8f7d\u8fd0\u884c\uff0c\u95ee\u9898\u53cd\u9988:[https:\/\/github.com\/fscarmen\/sing-box\/issues]&quot;\nE[44]=&quot;Ports are in used:  \\${IN_USED[*]}&quot;\nC[44]=&quot;\u6b63\u5728\u4f7f\u7528\u4e2d\u7684\u7aef\u53e3: \\${IN_USED[*]}&quot;\nE[45]=&quot;Ports used: \\${NOW_START_PORT} - \\$((NOW_START_PORT+NOW_CONSECUTIVE_PORTS-1))&quot;\nC[45]=&quot;\u4f7f\u7528\u7aef\u53e3: \\${NOW_START_PORT} - \\$((NOW_START_PORT+NOW_CONSECUTIVE_PORTS-1))&quot;\nE[46]=&quot;Warp \/ warp-go was detected to be running. Please enter the correct server IP:&quot;\nC[46]=&quot;\u68c0\u6d4b\u5230 warp \/ warp-go \u6b63\u5728\u8fd0\u884c\uff0c\u8bf7\u8f93\u5165\u786e\u8ba4\u7684\u670d\u52a1\u5668 IP:&quot;\nE[47]=&quot;No server ip, script exits. Feedback:[https:\/\/github.com\/fscarmen\/sing-box\/issues]&quot;\nC[47]=&quot;\u6ca1\u6709 server ip\uff0c\u811a\u672c\u9000\u51fa\uff0c\u95ee\u9898\u53cd\u9988:[https:\/\/github.com\/fscarmen\/sing-box\/issues]&quot;\nE[48]=&quot;ShadowTLS - Copy the above two Neko links and manually set up the chained proxies in order. Tutorial: https:\/\/github.com\/fscarmen\/sing-box\/blob\/main\/README.md#sekobox-%E8%AE%BE%E7%BD%AE-shadowtls-%E6%96%B9%E6%B3%95&quot;\nC[48]=&quot;ShadowTLS - \u590d\u5236\u4e0a\u9762\u4e24\u6761 Neko links \u8fdb\u53bb\uff0c\u5e76\u6309\u987a\u5e8f\u624b\u52a8\u8bbe\u7f6e\u94fe\u5f0f\u4ee3\u7406\uff0c\u8be6\u7ec6\u6559\u7a0b: https:\/\/github.com\/fscarmen\/sing-box\/blob\/main\/README.md#sekobox-%E8%AE%BE%E7%BD%AE-shadowtls-%E6%96%B9%E6%B3%95&quot;\nE[49]=&quot;Select more protocols to install (e.g. hgbd):\\n a. all (default)&quot;\nC[49]=&quot;\u591a\u9009\u9700\u8981\u5b89\u88c5\u534f\u8bae(\u6bd4\u5982 hgbd):\\n a. all (\u9ed8\u8ba4)&quot;\nE[50]=&quot;Please enter the \\$TYPE domain name:&quot;\nC[50]=&quot;\u8bf7\u8f93\u5165 \\$TYPE \u57df\u540d:&quot;\nE[51]=&quot;Please choose or custom a cdn, http support is required:&quot;\nC[51]=&quot;\u8bf7\u9009\u62e9\u6216\u8f93\u5165 cdn\uff0c\u8981\u6c42\u652f\u6301 http:&quot;\nE[52]=&quot;Please set the ip \\[\\${WS_SERVER_IP}] to domain \\[\\${TYPE_HOST_DOMAIN}], and set the origin rule to \\[\\${TYPE_PORT_WS}] in Cloudflare.&quot;\nC[52]=&quot;\u8bf7\u5728 Cloudflare \u7ed1\u5b9a \\[\\${WS_SERVER_IP}] \u7684\u57df\u540d\u4e3a \\[\\${TYPE_HOST_DOMAIN}], \u5e76\u8bbe\u7f6e origin rule \u4e3a \\[\\${TYPE_PORT_WS}]&quot;\nE[53]=&quot;Please select or enter the preferred domain, the default is \\${CDN_DOMAIN[0]}:&quot;\nC[53]=&quot;\u8bf7\u9009\u62e9\u6216\u8005\u586b\u5165\u4f18\u9009\u57df\u540d\uff0c\u9ed8\u8ba4\u4e3a \\${CDN_DOMAIN[0]}:&quot;\nE[54]=&quot;The contents of the \\$V2RAYN_PROTOCOL configuration file need to be updated for the \\$V2RAYN_KERNEL kernel.&quot;\nC[54]=&quot;\\$V2RAYN_PROTOCOL \u914d\u7f6e\u6587\u4ef6\u5185\u5bb9\uff0c\u9700\u8981\u66f4\u65b0 \\$V2RAYN_KERNEL \u5185\u6838&quot;\nE[55]=&quot;The script runs today: \\$TODAY. Total: \\$TOTAL&quot;\nC[55]=&quot;\u811a\u672c\u5f53\u5929\u8fd0\u884c\u6b21\u6570: \\$TODAY\uff0c\u7d2f\u8ba1\u8fd0\u884c\u6b21\u6570: \\$TOTAL&quot;\nE[56]=&quot;Process ID&quot;\nC[56]=&quot;\u8fdb\u7a0bID&quot;\nE[57]=&quot;Runtime&quot;\nC[57]=&quot;\u8fd0\u884c\u65f6\u957f&quot;\nE[58]=&quot;Memory Usage&quot;\nC[58]=&quot;\u5185\u5b58\u5360\u7528&quot;\nE[59]=&quot;Install ArgoX scripts (argo + xray) [https:\/\/github.com\/fscarmen\/argox]&quot;\nC[59]=&quot;\u5b89\u88c5 ArgoX \u811a\u672c (argo + xray) [https:\/\/github.com\/fscarmen\/argox]&quot;\nE[60]=&quot;The order of the selected protocols and ports is as follows:&quot;\nC[60]=&quot;\u9009\u62e9\u7684\u534f\u8bae\u53ca\u7aef\u53e3\u6b21\u5e8f\u5982\u4e0b:&quot;\nE[61]=&quot;(DNS your own domain in Cloudflare is required.)&quot;\nC[61]=&quot;(\u5fc5\u987b\u5728 Cloudflare \u89e3\u6790\u81ea\u6709\u57df\u540d)&quot;\nE[62]=&quot;Add \/ Remove protocols (sb -r)&quot;\nC[62]=&quot;\u589e\u52a0 \/ \u5220\u9664\u534f\u8bae (sb -r)&quot;\nE[63]=&quot;(1\/3) Installed protocols.&quot;\nC[63]=&quot;(1\/3) \u5df2\u5b89\u88c5\u7684\u534f\u8bae&quot;\nE[64]=&quot;Please select the protocols to be removed (multiple selections possible):&quot;\nC[64]=&quot;\u8bf7\u9009\u62e9\u9700\u8981\u5220\u9664\u7684\u534f\u8bae\uff08\u53ef\u4ee5\u591a\u9009\uff09:&quot;\nE[65]=&quot;(2\/3) Uninstalled protocols.&quot;\nC[65]=&quot;(2\/3) \u672a\u5b89\u88c5\u7684\u534f\u8bae&quot;\nE[66]=&quot;Please select the protocols to be added (multiple choices possible):&quot;\nC[66]=&quot;\u8bf7\u9009\u62e9\u9700\u8981\u589e\u52a0\u7684\u534f\u8bae\uff08\u53ef\u4ee5\u591a\u9009\uff09:&quot;\nE[67]=&quot;(3\/3) Confirm all protocols for reloading.&quot;\nC[67]=&quot;(3\/3) \u786e\u8ba4\u91cd\u88c5\u7684\u6240\u6709\u534f\u8bae&quot;\nE[68]=&quot;Press [n] if there is an error, other keys to continue:&quot;\nC[68]=&quot;\u5982\u6709\u9519\u8bef\u8bf7\u6309 [n]\uff0c\u5176\u4ed6\u952e\u7ee7\u7eed:&quot;\nE[69]=&quot;Install sba scripts (argo + sing-box) [https:\/\/github.com\/fscarmen\/sba]&quot;\nC[69]=&quot;\u5b89\u88c5 sba \u811a\u672c (argo + sing-box) [https:\/\/github.com\/fscarmen\/sba]&quot;\nE[70]=&quot;Please set inSecure in tls to true.&quot;\nC[70]=&quot;\u8bf7\u628a tls \u91cc\u7684 inSecure \u8bbe\u7f6e\u4e3a true&quot;\nE[71]=&quot;Create shortcut [ sb ] successfully.&quot;\nC[71]=&quot;\u521b\u5efa\u5feb\u6377 [ sb ] \u6307\u4ee4\u6210\u529f!&quot;\nE[72]=&quot;The full template can be found at: https:\/\/t.me\/ztvps\/37&quot;\nC[72]=&quot;\u5b8c\u6574\u6a21\u677f\u53ef\u53c2\u7167: https:\/\/t.me\/ztvps\/37&quot;\nE[73]=&quot;There is no protocol left, if you are sure please re-run [ sb -u ] to uninstall all.&quot;\nC[73]=&quot;\u6ca1\u6709\u534f\u8bae\u5269\u4e0b\uff0c\u5982\u786e\u5b9a\u8bf7\u91cd\u65b0\u6267\u884c [ sb -u ] \u5378\u8f7d\u6240\u6709&quot;\nE[74]=&quot;Keep protocols&quot;\nC[74]=&quot;\u4fdd\u7559\u534f\u8bae&quot;\nE[75]=&quot;Add protocols&quot;\nC[75]=&quot;\u65b0\u589e\u534f\u8bae&quot;\nE[76]=&quot;Install TCP brutal&quot;\nC[76]=&quot;\u5b89\u88c5 TCP brutal&quot;\n\n# \u81ea\u5b9a\u4e49\u5b57\u4f53\u5f69\u8272\uff0cread \u51fd\u6570\nwarning() { echo -e &quot;\\033[31m\\033[01m$*\\033[0m&quot;; }  # \u7ea2\u8272\nerror() { echo -e &quot;\\033[31m\\033[01m$*\\033[0m&quot; &amp;&amp; exit 1; } # \u7ea2\u8272\ninfo() { echo -e &quot;\\033[32m\\033[01m$*\\033[0m&quot;; }   # \u7eff\u8272\nhint() { echo -e &quot;\\033[33m\\033[01m$*\\033[0m&quot;; }   # \u9ec4\u8272\nreading() { read -rp &quot;$(info &quot;$1&quot;)&quot; &quot;$2&quot;; }\ntext() { grep -q &#039;\\$&#039; &lt;&lt;&lt; &quot;${E[$*]}&quot; &amp;&amp; eval echo &quot;\\$(eval echo &quot;\\${${L}[$*]}&quot;)&quot; || eval echo &quot;\\${${L}[$*]}&quot;; }\n\n# \u81ea\u5b9a\u4e49\u53cb\u9053\u6216\u8c37\u6b4c\u7ffb\u8bd1\u51fd\u6570\ntranslate() {\n  [ -n &quot;$@&quot; ] &amp;&amp; EN=&quot;$@&quot;\n  ZH=$(wget --no-check-certificate -qO- --tries=1 --timeout=2 &quot;https:\/\/translate.google.com\/translate_a\/t?client=any_client_id_works&amp;sl=en&amp;tl=zh&amp;q=${EN\/\/[[:space:]]\/}&quot;)\n  [[ &quot;$ZH&quot; =~ ^\\[\\&quot;.+\\&quot;\\]$ ]] &amp;&amp; cut -d \\&quot; -f2 &lt;&lt;&lt; &quot;$ZH&quot;\n}\n\n# \u811a\u672c\u5f53\u5929\u53ca\u7d2f\u8ba1\u8fd0\u884c\u6b21\u6570\u7edf\u8ba1\nstatistics_of_run-times() {\n  local COUNT=$(wget --no-check-certificate -qO- --tries=2 --timeout=2 &quot;https:\/\/hits.seeyoufarm.com\/api\/count\/incr\/badge.svg?url=https%3A%2F%2Fraw.githubusercontent.com%2Ffscarmen%2Fsing-box%2Fmain%2Fsing-box.sh&quot; 2&gt;&amp;1 | grep -m1 -oE &quot;[0-9]+[ ]+\/[ ]+[0-9]+&quot;) &amp;&amp;\n  TODAY=$(cut -d &quot; &quot; -f1 &lt;&lt;&lt; &quot;$COUNT&quot;) &amp;&amp;\n  TOTAL=$(cut -d &quot; &quot; -f3 &lt;&lt;&lt; &quot;$COUNT&quot;)\n}\n\n# \u9009\u62e9\u4e2d\u82f1\u8bed\u8a00\nselect_language() {\n  if [ -z &quot;$L&quot; ]; then\n    case $(cat $WORK_DIR\/language 2&gt;&amp;1) in\n      E ) L=E ;;\n      C ) L=C ;;\n      * ) [ -z &quot;$L&quot; ] &amp;&amp; L=E &amp;&amp; hint &quot;\\n $(text 0) \\n&quot; &amp;&amp; reading &quot; $(text 24) &quot; LANGUAGE\n      [ &quot;$LANGUAGE&quot; = 2 ] &amp;&amp; L=C ;;\n    esac\n  fi\n}\n\n# \u5b57\u6bcd\u4e0e\u6570\u5b57\u7684 ASCII \u7801\u503c\u8f6c\u6362\nasc(){\n  if [[ &quot;$1&quot; = [a-z] ]]; then\n    [ &quot;$2&quot; = &#039;++&#039; ] &amp;&amp; printf &quot;\\\\$(printf &#039;%03o&#039; &quot;$[ $(printf &quot;%d&quot; &quot;&#039;$1&#039;&quot;) + 1 ]&quot;)&quot; || printf &quot;%d&quot; &quot;&#039;$1&#039;&quot;\n  else\n    [[ &quot;$1&quot; =~ ^[0-9]+$ ]] &amp;&amp; printf &quot;\\\\$(printf &#039;%03o&#039; &quot;$1&quot;)&quot;\n  fi\n}\n\ninput_cdn() {\n  # \u63d0\u4f9b\u7f51\u4e0a\u70ed\u5fc3\u7f51\u53cb\u7684anycast\u57df\u540d\n  if [[ -z &quot;$CDN&quot; &amp;&amp; -n &quot;$VMESS_HOST_DOMAIN$VLESS_HOST_DOMAIN&quot; ]]; then\n    echo &quot;&quot;\n    for c in &quot;${!CDN_DOMAIN[@]}&quot;; do hint &quot; $[c+1]. ${CDN_DOMAIN[c]} &quot;; done\n\n    reading &quot;\\n $(text 53) &quot; CUSTOM_CDN\n    case &quot;$CUSTOM_CDN&quot; in\n      [1-${#CDN_DOMAIN[@]}] )\n        CDN=&quot;${CDN_DOMAIN[$((CUSTOM_CDN-1))]}&quot;\n      ;;\n      ?????* )\n        CDN=&quot;$CUSTOM_CDN&quot;\n      ;;\n      * )\n        CDN=&quot;${CDN_DOMAIN[0]}&quot;\n    esac\n  fi\n}\n\ncheck_root() {\n  [ &quot;$(id -u)&quot; != 0 ] &amp;&amp; error &quot;\\n $(text 43) \\n&quot;\n}\n\ncheck_arch() {\n  # \u5224\u65ad\u5904\u7406\u5668\u67b6\u6784\n  case $(uname -m) in\n    aarch64|arm64 ) SING_BOX_ARCH=arm64 ;;\n    x86_64|amd64 ) [[ &quot;$(awk -F &#039;:&#039; &#039;\/flags\/{print $2; exit}&#039; \/proc\/cpuinfo)&quot; =~ avx2 ]] &amp;&amp; SING_BOX_ARCH=amd64v3 || SING_BOX_ARCH=amd64 ;;\n    armv7l ) SING_BOX_ARCH=armv7 ;;\n    * ) error &quot; $(text 25) &quot;\n  esac\n}\n\n# \u67e5\u5b89\u88c5\u53ca\u8fd0\u884c\u72b6\u6001\uff1b\u72b6\u6001\u7801: 26 \u672a\u5b89\u88c5\uff0c 27 \u5df2\u5b89\u88c5\u672a\u8fd0\u884c\uff0c 28 \u8fd0\u884c\u4e2d\ncheck_install() {\n  STATUS=$(text 26) &amp;&amp; [ -s \/etc\/systemd\/system\/sing-box.service ] &amp;&amp; STATUS=$(text 27) &amp;&amp; [ &quot;$(systemctl is-active sing-box)&quot; = &#039;active&#039; ] &amp;&amp; STATUS=$(text 28)\n  if [[ $STATUS = &quot;$(text 26)&quot; ]] &amp;&amp; [ ! -s $WORK_DIR\/sing-box ]; then\n    {\n    local ONLINE=$(wget --no-check-certificate -qO- &quot;https:\/\/api.github.com\/repos\/SagerNet\/sing-box\/releases&quot; | awk -F &#039;[&quot;v]&#039; &#039;\/tag_name.*beta\/{print $5; exit}&#039;)\n    ONLINE=${ONLINE:-&#039;1.7.0-beta.5&#039;}\n    wget --no-check-certificate -c ${GH_PROXY}https:\/\/github.com\/SagerNet\/sing-box\/releases\/download\/v$ONLINE\/sing-box-$ONLINE-linux-$SING_BOX_ARCH.tar.gz -qO- | tar xz -C $TEMP_DIR sing-box-$ONLINE-linux-$SING_BOX_ARCH\/sing-box\n    [ -s $TEMP_DIR\/sing-box-$ONLINE-linux-$SING_BOX_ARCH\/sing-box ] &amp;&amp; mv $TEMP_DIR\/sing-box-$ONLINE-linux-$SING_BOX_ARCH\/sing-box $TEMP_DIR\n    }&amp;\n  fi\n}\n\n# \u68c0\u6d4b sing-box \u7684\u72b6\u6001\ncheck_sing-box_stats(){\n  case &quot;$STATUS&quot; in\n    &quot;$(text 26)&quot; )\n      error &quot;\\n Sing-box $(text 28) $(text 38) \\n&quot;\n      ;;\n    &quot;$(text 27)&quot; )\n      cmd_systemctl enable sing-box &amp;&amp; info &quot;\\n Sing-box $(text 28) $(text 37) \\n&quot; || error &quot;\\n Sing-box $(text 28) $(text 38) \\n&quot;\n      ;;\n    &quot;$(text 28)&quot; )\n      info &quot;\\n Sing-box $(text 28) $(text 37) \\n&quot;\n  esac\n}\n\n# \u4e3a\u4e86\u9002\u914d alpine\uff0c\u5b9a\u4e49 cmd_systemctl \u7684\u51fd\u6570\ncmd_systemctl() {\n  local ENABLE_DISABLE=$1\n  local APP=$2\n  if [ &quot;$ENABLE_DISABLE&quot; = &#039;enable&#039; ]; then\n    if [ &quot;$SYSTEM&quot; = &#039;Alpine&#039; ]; then\n      systemctl start $APP\n      cat &gt; \/etc\/local.d\/$APP.start &lt;&lt; EOF\n#!\/usr\/bin\/env bash\n\nsystemctl start $APP\nEOF\n      chmod +x \/etc\/local.d\/$APP.start\n      rc-update add local &gt;\/dev\/null 2&gt;&amp;1\n    else\n      systemctl enable --now $APP\n    fi\n\n  elif [ &quot;$ENABLE_DISABLE&quot; = &#039;disable&#039; ]; then\n    if [ &quot;$SYSTEM&quot; = &#039;Alpine&#039; ]; then\n      systemctl stop $APP\n      rm -f \/etc\/local.d\/$APP.start\n    else\n      systemctl disable --now $APP\n    fi\n  fi\n}\n\ncheck_system_info() {\n  # \u5224\u65ad\u865a\u62df\u5316\n  if [ $(type -p systemd-detect-virt) ]; then\n    VIRT=$(systemd-detect-virt)\n  elif [ $(type -p hostnamectl) ]; then\n    VIRT=$(hostnamectl | awk &#039;\/Virtualization\/{print $NF}&#039;)\n  elif [ $(type -p virt-what) ]; then\n    VIRT=$(virt-what)\n  fi\n\n  [ -s \/etc\/os-release ] &amp;&amp; SYS=&quot;$(grep -i pretty_name \/etc\/os-release | cut -d \\&quot; -f2)&quot;\n  [[ -z &quot;$SYS&quot; &amp;&amp; $(type -p hostnamectl) ]] &amp;&amp; SYS=&quot;$(hostnamectl | grep -i system | cut -d : -f2)&quot;\n  [[ -z &quot;$SYS&quot; &amp;&amp; $(type -p lsb_release) ]] &amp;&amp; SYS=&quot;$(lsb_release -sd)&quot;\n  [[ -z &quot;$SYS&quot; &amp;&amp; -s \/etc\/lsb-release ]] &amp;&amp; SYS=&quot;$(grep -i description \/etc\/lsb-release | cut -d \\&quot; -f2)&quot;\n  [[ -z &quot;$SYS&quot; &amp;&amp; -s \/etc\/redhat-release ]] &amp;&amp; SYS=&quot;$(grep . \/etc\/redhat-release)&quot;\n  [[ -z &quot;$SYS&quot; &amp;&amp; -s \/etc\/issue ]] &amp;&amp; SYS=&quot;$(grep . \/etc\/issue | cut -d &#039;\\&#039; -f1 | sed &#039;\/^[ ]*$\/d&#039;)&quot;\n\n  REGEX=(&quot;debian&quot; &quot;ubuntu&quot; &quot;centos|red hat|kernel|oracle linux|alma|rocky&quot; &quot;amazon linux&quot; &quot;arch linux&quot; &quot;alpine&quot; &quot;fedora&quot;)\n  RELEASE=(&quot;Debian&quot; &quot;Ubuntu&quot; &quot;CentOS&quot; &quot;CentOS&quot; &quot;Arch&quot; &quot;Alpine&quot; &quot;Fedora&quot;)\n  EXCLUDE=(&quot;&quot;)\n  MAJOR=(&quot;9&quot; &quot;16&quot; &quot;7&quot; &quot;7&quot; &quot;3&quot; &quot;&quot; &quot;37&quot;)\n  PACKAGE_UPDATE=(&quot;apt -y update&quot; &quot;apt -y update&quot; &quot;yum -y update&quot; &quot;yum -y update&quot; &quot;pacman -Sy&quot; &quot;apk update -f&quot; &quot;dnf -y update&quot;)\n  PACKAGE_INSTALL=(&quot;apt -y install&quot; &quot;apt -y install&quot; &quot;yum -y install&quot; &quot;yum -y install&quot; &quot;pacman -S --noconfirm&quot; &quot;apk add --no-cache&quot; &quot;dnf -y install&quot;)\n  PACKAGE_UNINSTALL=(&quot;apt -y autoremove&quot; &quot;apt -y autoremove&quot; &quot;yum -y autoremove&quot; &quot;yum -y autoremove&quot; &quot;pacman -Rcnsu --noconfirm&quot; &quot;apk del -f&quot; &quot;dnf -y autoremove&quot;)\n\n  for int in &quot;${!REGEX[@]}&quot;; do [[ $(tr &#039;A-Z&#039; &#039;a-z&#039; &lt;&lt;&lt; &quot;$SYS&quot;) =~ ${REGEX[int]} ]] &amp;&amp; SYSTEM=&quot;${RELEASE[int]}&quot; &amp;&amp; break; done\n  [ -z &quot;$SYSTEM&quot; ] &amp;&amp; error &quot; $(text 5) &quot;\n\n  # \u5148\u6392\u9664 EXCLUDE \u91cc\u5305\u62ec\u7684\u7279\u5b9a\u7cfb\u7edf\uff0c\u5176\u4ed6\u7cfb\u7edf\u9700\u8981\u4f5c\u5927\u53d1\u884c\u7248\u672c\u7684\u6bd4\u8f83\n  for ex in &quot;${EXCLUDE[@]}&quot;; do [[ ! $(tr &#039;A-Z&#039; &#039;a-z&#039; &lt;&lt;&lt; &quot;$SYS&quot;)  =~ $ex ]]; done &amp;&amp;\n  [[ &quot;$(echo &quot;$SYS&quot; | sed &quot;s\/[^0-9.]\/\/g&quot; | cut -d. -f1)&quot; -lt &quot;${MAJOR[int]}&quot; ]] &amp;&amp; error &quot; $(text 6) &quot;\n}\n\n# \u68c0\u6d4b IPv4 IPv6 \u4fe1\u606f\ncheck_system_ip() {\n  IP4=$(wget -4 -qO- --no-check-certificate --user-agent=Mozilla --tries=2 --timeout=1 http:\/\/ip-api.com\/json\/) &amp;&amp;\n  WAN4=$(expr &quot;$IP4&quot; : &#039;.*query\\&quot;:[ ]*\\&quot;\\([^&quot;]*\\).*&#039;) &amp;&amp;\n  COUNTRY4=$(expr &quot;$IP4&quot; : &#039;.*country\\&quot;:[ ]*\\&quot;\\([^&quot;]*\\).*&#039;) &amp;&amp;\n  ASNORG4=$(expr &quot;$IP4&quot; : &#039;.*isp\\&quot;:[ ]*\\&quot;\\([^&quot;]*\\).*&#039;) &amp;&amp;\n  [[ &quot;$L&quot; = C &amp;&amp; -n &quot;$COUNTRY4&quot; ]] &amp;&amp; COUNTRY4=$(translate &quot;$COUNTRY4&quot;)\n\n  IP6=$(wget -6 -qO- --no-check-certificate --user-agent=Mozilla --tries=2 --timeout=1 https:\/\/api.ip.sb\/geoip) &amp;&amp;\n  WAN6=$(expr &quot;$IP6&quot; : &#039;.*ip\\&quot;:[ ]*\\&quot;\\([^&quot;]*\\).*&#039;) &amp;&amp;\n  COUNTRY6=$(expr &quot;$IP6&quot; : &#039;.*country\\&quot;:[ ]*\\&quot;\\([^&quot;]*\\).*&#039;) &amp;&amp;\n  ASNORG6=$(expr &quot;$IP6&quot; : &#039;.*isp\\&quot;:[ ]*\\&quot;\\([^&quot;]*\\).*&#039;) &amp;&amp;\n  [[ &quot;$L&quot; = C &amp;&amp; -n &quot;$COUNTRY6&quot; ]] &amp;&amp; COUNTRY6=$(translate &quot;$COUNTRY6&quot;)\n}\n\n# \u8f93\u5165\u8d77\u59cb port \u51fd\u6570\nenter_start_port() {\n  local NUM=$1\n  local PORT_ERROR_TIME=6\n  while true; do\n    [ &quot;$PORT_ERROR_TIME&quot; -lt 6 ] &amp;&amp; unset IN_USED START_PORT\n    (( PORT_ERROR_TIME-- )) || true\n    if [ &quot;$PORT_ERROR_TIME&quot; = 0 ]; then\n      error &quot;\\n $(text 3) \\n&quot;\n    else\n      [ -z &quot;$START_PORT&quot; ] &amp;&amp; reading &quot;\\n $(text 11) &quot; START_PORT\n    fi\n    START_PORT=${START_PORT:-&quot;$START_PORT_DEFAULT&quot;}\n    if [[ &quot;$START_PORT&quot; =~ ^[1-9][0-9]{3,4}$ &amp;&amp; &quot;$START_PORT&quot; -ge &quot;$MIN_PORT&quot; &amp;&amp; &quot;$START_PORT&quot; -le &quot;$MAX_PORT&quot; ]]; then\n      for port in $(eval echo {$START_PORT..$[START_PORT+NUM-1]}); do\n        if [ &quot;$SYSTEM&quot; = &#039;Alpine&#039; ]; then\n          netstat -an | awk &#039;\/:[0-9]+\/{print $4}&#039; | awk -F &quot;:&quot; &#039;{print $NF}&#039; | grep -q $port &amp;&amp; IN_USED+=(&quot;$port&quot;)\n        else\n          lsof -i:$port &gt;\/dev\/null 2&gt;&amp;1 &amp;&amp; IN_USED+=(&quot;$port&quot;)\n        fi\n      done\n      [ &quot;${#IN_USED[*]}&quot; -eq 0 ] &amp;&amp; break || warning &quot;\\n $(text 44) \\n&quot;\n    fi\n  done\n}\n\n# \u5b9a\u4e49 Sing-box \u53d8\u91cf\nsing-box_variable() {\n  if grep -qi &#039;cloudflare&#039; &lt;&lt;&lt; &quot;$ASNORG4$ASNORG6&quot;; then\n    local a=6\n    until [ -n &quot;$SERVER_IP&quot; ]; do\n      ((a--)) || true\n      [ &quot;$a&quot; = 0 ] &amp;&amp; error &quot;\\n $(text 3) \\n&quot;\n      reading &quot;\\n $(text 46) &quot; SERVER_IP\n    done\n    if [[ &quot;$SERVER_IP&quot; =~ : ]]; then\n      WARP_ENDPOINT=2606:4700:d0::a29f:c101\n      DOMAIN_STRATEG=prefer_ipv6\n    else\n      WARP_ENDPOINT=162.159.193.10\n      DOMAIN_STRATEG=prefer_ipv4\n    fi\n  elif [ -n &quot;$WAN4&quot; ]; then\n    SERVER_IP_DEFAULT=$WAN4\n    WARP_ENDPOINT=162.159.193.10\n    DOMAIN_STRATEG=prefer_ipv4\n  elif [ -n &quot;$WAN6&quot; ]; then\n    SERVER_IP_DEFAULT=$WAN6\n    WARP_ENDPOINT=2606:4700:d0::a29f:c101\n    DOMAIN_STRATEG=prefer_ipv6\n  fi\n\n  # \u9009\u62e9\u5b89\u88c5\u7684\u534f\u8bae\uff0c\u7531\u4e8e\u9009\u9879 a \u4e3a\u5168\u90e8\u534f\u8bae\uff0c\u6240\u4ee5\u9009\u9879\u6570\u4e0d\u662f\u4ece a \u5f00\u59cb\uff0c\u800c\u662f\u4ece b \u5f00\u59cb\uff0c\u5904\u7406\u8f93\u5165\uff1a\u628a\u5927\u5199\u5168\u90e8\u53d8\u4e3a\u5c0f\u5199\uff0c\u628a\u4e0d\u7b26\u5408\u7684\u9009\u9879\u53bb\u6389\uff0c\u628a\u91cd\u590d\u7684\u9009\u9879\u5408\u5e76\n  MAX_CHOOSE_PROTOCOLS=$(asc $[CONSECUTIVE_PORTS+96+1])\n  if [ -z &quot;$CHOOSE_PROTOCOLS&quot; ]; then\n    hint &quot;\\n $(text 49) &quot;\n    for e in &quot;${!PROTOCOL_LIST[@]}&quot;; do\n      [[ &quot;$e&quot; =~ &#039;6&#039;|&#039;7&#039; ]] &amp;&amp; hint &quot; $(asc $[e+98]). ${PROTOCOL_LIST[e]} $(text 61) &quot; || hint &quot; $(asc $[e+98]). ${PROTOCOL_LIST[e]} &quot;\n    done\n    reading &quot;\\n $(text 24) &quot; CHOOSE_PROTOCOLS\n  fi\n\n  # \u5bf9\u9009\u62e9\u534f\u8bae\u7684\u8f93\u5165\u5904\u7406\u903b\u8f91\uff1a\u5148\u628a\u6240\u6709\u7684\u5927\u5199\u8f6c\u4e3a\u5c0f\u5199\uff0c\u5e76\u628a\u6240\u6709\u6ca1\u6709\u53bb\u9009\u9879\u5254\u9664\u6389\uff0c\u6700\u540e\u6309\u8f93\u5165\u7684\u6b21\u5e8f\u6392\u5e8f\u3002\u5982\u679c\u9009\u9879\u4e3a a(all) \u548c\u5176\u4ed6\u9009\u9879\u5e76\u5b58\uff0c\u5c06\u4f1a\u5ffd\u7565 a\uff0c\u5982 abc \u5219\u4f1a\u5904\u7406\u4e3a bc\n  CHOOSE_PROTOCOLS=$(tr &#039;[:upper:]&#039; &#039;[:lower:]&#039; &lt;&lt;&lt; &quot;$CHOOSE_PROTOCOLS&quot;)\n  [[ ! &quot;$CHOOSE_PROTOCOLS&quot; =~ [b-$MAX_CHOOSE_PROTOCOLS] ]] &amp;&amp; INSTALL_PROTOCOLS=($(eval echo {b..$MAX_CHOOSE_PROTOCOLS})) || INSTALL_PROTOCOLS=($(grep -o . &lt;&lt;&lt; &quot;$CHOOSE_PROTOCOLS&quot; | sed &quot;\/[^b-$MAX_CHOOSE_PROTOCOLS]\/d&quot; | awk &#039;!seen[$0]++&#039;))\n\n  # \u663e\u793a\u9009\u62e9\u534f\u8bae\u53ca\u5176\u6b21\u5e8f\uff0c\u8f93\u5165\u5f00\u59cb\u7aef\u53e3\u53f7\n  if [ -z &quot;$START_PORT&quot; ]; then\n    hint &quot;\\n $(text 60) &quot;\n    for d in &quot;${!INSTALL_PROTOCOLS[@]}&quot;; do\n      [ &quot;$d&quot; -ge 9 ] &amp;&amp; hint &quot; $[d+1]. ${PROTOCOL_LIST[$(($(asc ${INSTALL_PROTOCOLS[d]}) - 98))]} &quot; || hint &quot; $[d+1] . ${PROTOCOL_LIST[$(($(asc ${INSTALL_PROTOCOLS[d]}) - 98))]} &quot;\n    done\n    enter_start_port ${#INSTALL_PROTOCOLS[@]}\n  fi\n\n  # \u8f93\u5165\u670d\u52a1\u5668 IP,\u9ed8\u8ba4\u4e3a\u68c0\u6d4b\u5230\u7684\u670d\u52a1\u5668 IP\uff0c\u5982\u679c\u5168\u90e8\u4e3a\u7a7a\uff0c\u5219\u63d0\u793a\u5e76\u9000\u51fa\u811a\u672c\n  [ -z &quot;$SERVER_IP&quot; ] &amp;&amp; reading &quot;\\n $(text 10) &quot; SERVER_IP\n  SERVER_IP=${SERVER_IP:-&quot;$SERVER_IP_DEFAULT&quot;} &amp;&amp; WS_SERVER_IP=$SERVER_IP\n  [ -z &quot;$SERVER_IP&quot; ] &amp;&amp; error &quot; $(text 47) &quot;\n\n  # \u5982\u9009\u62e9\u6709 h. vmess + ws \u6216 i. vless + ws \u65f6\uff0c\u5148\u68c0\u6d4b\u662f\u5426\u6709\u652f\u6301\u7684 http \u7aef\u53e3\u53ef\u7528\uff0c\u5982\u6709\u5219\u8981\u6c42\u8f93\u5165\u57df\u540d\u548c cdn\n  if [[ &quot;${INSTALL_PROTOCOLS[@]}&quot; =~ &#039;h&#039; ]]; then\n    local DOMAIN_ERROR_TIME=5\n    until [ -n &quot;$VMESS_HOST_DOMAIN&quot; ]; do\n      (( DOMAIN_ERROR_TIME-- )) || true\n      [ &quot;$DOMAIN_ERROR_TIME&quot; != 0 ] &amp;&amp; TYPE=VMESS &amp;&amp; reading &quot;\\n $(text 50) &quot; VMESS_HOST_DOMAIN || error &quot;\\n $(text 3) \\n&quot;\n    done\n  fi\n\n  if [[ &quot;${INSTALL_PROTOCOLS[@]}&quot; =~ &#039;i&#039; ]]; then\n    local DOMAIN_ERROR_TIME=5\n    until [ -n &quot;$VLESS_HOST_DOMAIN&quot; ]; do\n      (( DOMAIN_ERROR_TIME-- )) || true\n      [ &quot;$DOMAIN_ERROR_TIME&quot; != 0 ] &amp;&amp; TYPE=VLESS &amp;&amp; reading &quot;\\n $(text 50) &quot; VLESS_HOST_DOMAIN || error &quot;\\n $(text 3) \\n&quot;\n    done\n  fi\n\n  # \u9009\u62e9\u6216\u8005\u8f93\u5165 cdn\n  input_cdn\n\n  wait\n\n  # \u8f93\u5165 UUID \uff0c\u9519\u8bef\u8d85\u8fc7 5 \u6b21\u5c06\u4f1a\u9000\u51fa\n  UUID_DEFAULT=$($TEMP_DIR\/sing-box generate uuid)\n  [ -z &quot;$UUID&quot; ] &amp;&amp; reading &quot;\\n $(text 12) &quot; UUID\n  local UUID_ERROR_TIME=5\n  until [[ -z &quot;$UUID&quot; || &quot;$UUID&quot; =~ ^[A-F0-9a-f]{8}-[A-F0-9a-f]{4}-[A-F0-9a-f]{4}-[A-F0-9a-f]{4}-[A-F0-9a-f]{12}$ ]]; do\n    (( UUID_ERROR_TIME-- )) || true\n    [ &quot;$UUID_ERROR_TIME&quot; = 0 ] &amp;&amp; error &quot;\\n $(text 3) \\n&quot; || reading &quot;\\n $(text 4) \\n&quot; UUID\n  done\n  UUID=${UUID:-&quot;$UUID_DEFAULT&quot;}\n\n  # \u8f93\u5165\u8282\u70b9\u540d\uff0c\u4ee5\u7cfb\u7edf\u7684 hostname \u4f5c\u4e3a\u9ed8\u8ba4\n  if [ -s \/etc\/hostname ]; then\n    NODE_NAME_DEFAULT=&quot;$(cat \/etc\/hostname)&quot;\n  elif [ $(type -p hostname) ]; then\n    NODE_NAME_DEFAULT=&quot;$(hostname)&quot;\n  else\n    NODE_NAME_DEFAULT=&quot;Sing-Box&quot;\n  fi\n  reading &quot;\\n $(text 13) &quot; NODE_NAME\n  NODE_NAME=&quot;${NODE_NAME:-&quot;$NODE_NAME_DEFAULT&quot;}&quot;\n}\n\ncheck_dependencies() {\n  # \u5982\u679c\u662f Alpine\uff0c\u5148\u5347\u7ea7 wget \uff0c\u5b89\u88c5 systemctl-py \u7248\n  if [ &quot;$SYSTEM&quot; = &#039;Alpine&#039; ]; then\n    CHECK_WGET=$(wget 2&gt;&amp;1 | head -n 1)\n    grep -qi &#039;busybox&#039; &lt;&lt;&lt; &quot;$CHECK_WGET&quot; &amp;&amp; ${PACKAGE_INSTALL[int]} wget &gt;\/dev\/null 2&gt;&amp;1\n\n    DEPS_CHECK=(&quot;bash&quot; &quot;python3&quot; &quot;rc-update&quot; &quot;openssl&quot; &quot;virt-what&quot;)\n    DEPS_INSTALL=(&quot;bash&quot; &quot;python3&quot; &quot;openrc&quot; &quot;openssl&quot; &quot;virt-what&quot;)\n    for g in &quot;${!DEPS_CHECK[@]}&quot;; do [ ! $(type -p ${DEPS_CHECK[g]}) ] &amp;&amp; [[ ! &quot;${DEPS[@]}&quot; =~ &quot;${DEPS_INSTALL[g]}&quot; ]] &amp;&amp; DEPS+=(${DEPS_INSTALL[g]}); done\n    if [ &quot;${#DEPS[@]}&quot; -ge 1 ]; then\n      info &quot;\\n $(text 7) ${DEPS[@]} \\n&quot;\n      ${PACKAGE_UPDATE[int]} &gt;\/dev\/null 2&gt;&amp;1\n      ${PACKAGE_INSTALL[int]} ${DEPS[@]} &gt;\/dev\/null 2&gt;&amp;1\n    fi\n\n    [ ! $(type -p systemctl) ] &amp;&amp; wget --no-check-certificate https:\/\/raw.githubusercontent.com\/gdraheim\/docker-systemctl-replacement\/master\/files\/docker\/systemctl3.py -O \/bin\/systemctl &amp;&amp; chmod a+x \/bin\/systemctl\n  fi\n\n  # \u68c0\u6d4b Linux \u7cfb\u7edf\u7684\u4f9d\u8d56\uff0c\u5347\u7ea7\u5e93\u5e76\u91cd\u65b0\u5b89\u88c5\u4f9d\u8d56\n  unset DEPS_CHECK DEPS_INSTALL DEPS\n  DEPS_CHECK=(&quot;wget&quot; &quot;systemctl&quot; &quot;ip&quot; &quot;unzip&quot; &quot;lsof&quot; &quot;bash&quot; &quot;openssl&quot;)\n  DEPS_INSTALL=(&quot;wget&quot; &quot;systemctl&quot; &quot;iproute2&quot; &quot;unzip&quot; &quot;lsof&quot; &quot;bash&quot; &quot;openssl&quot;)\n  for g in &quot;${!DEPS_CHECK[@]}&quot;; do [ ! $(type -p ${DEPS_CHECK[g]}) ] &amp;&amp; [[ ! &quot;${DEPS[@]}&quot; =~ &quot;${DEPS_INSTALL[g]}&quot; ]] &amp;&amp; DEPS+=(${DEPS_INSTALL[g]}); done\n  if [ &quot;${#DEPS[@]}&quot; -ge 1 ]; then\n    info &quot;\\n $(text 7) ${DEPS[@]} \\n&quot;\n    ${PACKAGE_UPDATE[int]} &gt;\/dev\/null 2&gt;&amp;1\n    ${PACKAGE_INSTALL[int]} ${DEPS[@]} &gt;\/dev\/null 2&gt;&amp;1\n  else\n    info &quot;\\n $(text 8) \\n&quot;\n  fi\n}\n\n# \u751f\u6210100\u5e74\u7684\u81ea\u7b7e\u8bc1\u4e66\nssl_certificate() {\n  mkdir -p $WORK_DIR\/cert\n  openssl ecparam -genkey -name prime256v1 -out $WORK_DIR\/cert\/private.key &amp;&amp; openssl req -new -x509 -days 36500 -key $WORK_DIR\/cert\/private.key -out $WORK_DIR\/cert\/cert.pem -subj &quot;\/CN=$(awk -F . &#039;{print $(NF-1)&quot;.&quot;$NF}&#039; &lt;&lt;&lt; &quot;$TLS_SERVER&quot;)&quot;\n}\n\n# \u751f\u6210 sing-box \u914d\u7f6e\u6587\u4ef6\nsing-box_json() {\n  local IS_CHANGE=$1\n  mkdir -p $WORK_DIR\/conf $WORK_DIR\/logs\n\n  # \u751f\u6210 dns \u914d\u7f6e\n  [ &quot;$IS_CHANGE&quot; != &#039;change&#039; ] &amp;&amp; cat &gt; $WORK_DIR\/conf\/00_log.json &lt;&lt; EOF\n{\n    &quot;log&quot;:{\n        &quot;disabled&quot;:false,\n        &quot;level&quot;:&quot;error&quot;,\n        &quot;output&quot;:&quot;$WORK_DIR\/logs\/box.log&quot;,\n        &quot;timestamp&quot;:true\n    }\n}\nEOF\n  # \u751f\u6210 outbound \u914d\u7f6e\n  [ &quot;$IS_CHANGE&quot; != &#039;change&#039; ] &amp;&amp; cat &gt; $WORK_DIR\/conf\/01_outbounds.json &lt;&lt; EOF\n{\n    &quot;outbounds&quot;:[\n        {\n            &quot;type&quot;:&quot;direct&quot;,\n            &quot;tag&quot;:&quot;direct&quot;,\n            &quot;domain_strategy&quot;:&quot;$DOMAIN_STRATEG&quot;\n        },\n        {\n            &quot;type&quot;:&quot;direct&quot;,\n            &quot;tag&quot;:&quot;warp-IPv4-out&quot;,\n            &quot;detour&quot;:&quot;wireguard-out&quot;,\n            &quot;domain_strategy&quot;:&quot;ipv4_only&quot;\n        },\n        {\n            &quot;type&quot;:&quot;direct&quot;,\n            &quot;tag&quot;:&quot;warp-IPv6-out&quot;,\n            &quot;detour&quot;:&quot;wireguard-out&quot;,\n            &quot;domain_strategy&quot;:&quot;ipv6_only&quot;\n        },\n        {\n            &quot;type&quot;:&quot;wireguard&quot;,\n            &quot;tag&quot;:&quot;wireguard-out&quot;,\n            &quot;server&quot;:&quot;${WARP_ENDPOINT}&quot;,\n            &quot;server_port&quot;:2408,\n            &quot;local_address&quot;:[\n                &quot;172.16.0.2\/32&quot;,\n                &quot;2606:4700:110:8a36:df92:102a:9602:fa18\/128&quot;\n            ],\n            &quot;private_key&quot;:&quot;YFYOAdbw1bKTHlNNi+aEjBM3BO7unuFC5rOkMRAz9XY=&quot;,\n            &quot;peer_public_key&quot;:&quot;bmXOC+F1FxEMF9dyiK2H5\/1SUtzH0JuVo51h2wPfgyo=&quot;,\n            &quot;reserved&quot;:[\n                78,\n                135,\n                76\n            ],\n            &quot;mtu&quot;:1280\n        },\n        {\n            &quot;type&quot;:&quot;block&quot;,\n            &quot;tag&quot;:&quot;block&quot;\n        }\n    ]\n}\nEOF\n\n  # \u751f\u6210 route \u914d\u7f6e\n  [ &quot;$IS_CHANGE&quot; != &#039;change&#039; ] &amp;&amp; cat &gt; $WORK_DIR\/conf\/02_route.json &lt;&lt; EOF\n{\n    &quot;route&quot;:{\n        &quot;geoip&quot;:{\n            &quot;download_url&quot;:&quot;https:\/\/github.com\/SagerNet\/sing-geoip\/releases\/latest\/download\/geoip.db&quot;,\n            &quot;download_detour&quot;:&quot;direct&quot;\n        },\n        &quot;geosite&quot;:{\n            &quot;download_url&quot;:&quot;https:\/\/github.com\/SagerNet\/sing-geosite\/releases\/latest\/download\/geosite.db&quot;,\n            &quot;download_detour&quot;:&quot;direct&quot;\n        },\n        &quot;rules&quot;:[\n            {\n                &quot;geosite&quot;:[\n                    &quot;openai&quot;\n                ],\n                &quot;outbound&quot;:&quot;warp-IPv6-out&quot;\n            }\n        ]\n    }\n}\nEOF\n\n  # \u7b2c1\u4e2a\u534f\u8bae\u4e3a b  (a\u4e3a\u5168\u90e8)\uff0c\u751f\u6210 XTLS + Reality \u914d\u7f6e\n  CHECK_PROTOCOLS=b\n  if [[ &quot;${INSTALL_PROTOCOLS[@]}&quot; =~ &quot;$CHECK_PROTOCOLS&quot; ]]; then\n    [[ -z &quot;$REALITY_PRIVATE&quot; || -z &quot;$REALITY_PUBLIC&quot; ]] &amp;&amp; REALITY_KEYPAIR=$($TEMP_DIR\/sing-box generate reality-keypair)\n    [ -z &quot;$REALITY_PRIVATE&quot; ] &amp;&amp; REALITY_PRIVATE=$(awk &#039;\/PrivateKey\/{print $NF}&#039; &lt;&lt;&lt; &quot;$REALITY_KEYPAIR&quot;)\n    [ -z &quot;$REALITY_PUBLIC&quot; ] &amp;&amp; REALITY_PUBLIC=$(awk &#039;\/PublicKey\/{print $NF}&#039; &lt;&lt;&lt; &quot;$REALITY_KEYPAIR&quot;)\n    [ -z &quot;$PORT_XTLS_REALITY&quot; ] &amp;&amp; PORT_XTLS_REALITY=$[START_PORT+$(awk -v target=$CHECK_PROTOCOLS &#039;{ for(i=1; i&lt;=NF; i++) if($i == target) { print i-1; break } }&#039; &lt;&lt;&lt; &quot;${INSTALL_PROTOCOLS[*]}&quot;)]\n    cat &gt; $WORK_DIR\/conf\/11_XTLS_REALITY_inbounds.json &lt;&lt; EOF\n{\n    &quot;inbounds&quot;:[\n        {\n            &quot;type&quot;:&quot;vless&quot;,\n            &quot;sniff&quot;:true,\n            &quot;sniff_override_destination&quot;:true,\n            &quot;tag&quot;:&quot;xtls-reality-in&quot;,\n            &quot;listen&quot;:&quot;::&quot;,\n            &quot;listen_port&quot;:$PORT_XTLS_REALITY,\n            &quot;users&quot;:[\n                {\n                    &quot;uuid&quot;:&quot;$UUID&quot;,\n                    &quot;flow&quot;:&quot;&quot;\n                }\n            ],\n            &quot;tls&quot;:{\n                &quot;enabled&quot;:true,\n                &quot;server_name&quot;:&quot;$TLS_SERVER&quot;,\n                &quot;reality&quot;:{\n                    &quot;enabled&quot;:true,\n                    &quot;handshake&quot;:{\n                        &quot;server&quot;:&quot;$TLS_SERVER&quot;,\n                        &quot;server_port&quot;:443\n                    },\n                    &quot;private_key&quot;:&quot;$REALITY_PRIVATE&quot;,\n                    &quot;short_id&quot;:[\n                        &quot;&quot;\n                    ]\n                }\n            },\n            &quot;multiplex&quot;:{\n                &quot;enabled&quot;:true,\n                &quot;padding&quot;:true,\n                &quot;brutal&quot;:{\n                    &quot;enabled&quot;:true,\n                    &quot;up_mbps&quot;:1000,\n                    &quot;down_mbps&quot;:1000\n                }\n            }\n        }\n    ]\n}\nEOF\n  fi\n\n  # \u751f\u6210 Hysteria2 \u914d\u7f6e\n  CHECK_PROTOCOLS=$(asc &quot;$CHECK_PROTOCOLS&quot; ++)\n  if [[ &quot;${INSTALL_PROTOCOLS[@]}&quot; =~ &quot;$CHECK_PROTOCOLS&quot; ]]; then\n    [ -z &quot;$PORT_HYSTERIA2&quot; ] &amp;&amp; PORT_HYSTERIA2=$[START_PORT+$(awk -v target=$CHECK_PROTOCOLS &#039;{ for(i=1; i&lt;=NF; i++) if($i == target) { print i-1; break } }&#039; &lt;&lt;&lt; &quot;${INSTALL_PROTOCOLS[*]}&quot;)]\n    cat &gt; $WORK_DIR\/conf\/12_HYSTERIA2_inbounds.json &lt;&lt; EOF\n{\n    &quot;inbounds&quot;:[\n        {\n            &quot;type&quot;:&quot;hysteria2&quot;,\n            &quot;sniff&quot;:true,\n            &quot;sniff_override_destination&quot;:true,\n            &quot;tag&quot;:&quot;hysteria2-in&quot;,\n            &quot;listen&quot;:&quot;::&quot;,\n            &quot;listen_port&quot;:$PORT_HYSTERIA2,\n            &quot;users&quot;:[\n                {\n                    &quot;password&quot;:&quot;$UUID&quot;\n                }\n            ],\n            &quot;ignore_client_bandwidth&quot;:false,\n            &quot;obfs&quot;:{\n                &quot;type&quot;:&quot;salamander&quot;,\n                &quot;password&quot;:&quot;$UUID&quot;\n            },\n            &quot;tls&quot;:{\n                &quot;enabled&quot;:true,\n                &quot;server_name&quot;:&quot;&quot;,\n                &quot;alpn&quot;:[\n                    &quot;h3&quot;\n                ],\n                &quot;min_version&quot;:&quot;1.3&quot;,\n                &quot;max_version&quot;:&quot;1.3&quot;,\n                &quot;certificate_path&quot;:&quot;$WORK_DIR\/cert\/cert.pem&quot;,\n                &quot;key_path&quot;:&quot;$WORK_DIR\/cert\/private.key&quot;\n            }\n        }\n    ]\n}\nEOF\n  fi\n\n  # \u751f\u6210 Tuic V5 \u914d\u7f6e\n  CHECK_PROTOCOLS=$(asc &quot;$CHECK_PROTOCOLS&quot; ++)\n  if [[ &quot;${INSTALL_PROTOCOLS[@]}&quot; =~ &quot;$CHECK_PROTOCOLS&quot; ]]; then\n    [ -z &quot;$PORT_TUIC&quot; ] &amp;&amp; PORT_TUIC=$[START_PORT+$(awk -v target=$CHECK_PROTOCOLS &#039;{ for(i=1; i&lt;=NF; i++) if($i == target) { print i-1; break } }&#039; &lt;&lt;&lt; &quot;${INSTALL_PROTOCOLS[*]}&quot;)]\n    cat &gt; $WORK_DIR\/conf\/13_TUIC_inbounds.json &lt;&lt; EOF\n{\n    &quot;inbounds&quot;:[\n        {\n            &quot;type&quot;:&quot;tuic&quot;,\n            &quot;sniff&quot;:true,\n            &quot;tag&quot;:&quot;tuic-in&quot;,\n            &quot;sniff_override_destination&quot;:true,\n            &quot;listen&quot;:&quot;::&quot;,\n            &quot;listen_port&quot;:$PORT_TUIC,\n            &quot;users&quot;:[\n                {\n                    &quot;uuid&quot;:&quot;$UUID&quot;,\n                    &quot;password&quot;:&quot;$UUID&quot;\n                }\n            ],\n            &quot;congestion_control&quot;: &quot;bbr&quot;,\n            &quot;zero_rtt_handshake&quot;: false,\n            &quot;tls&quot;:{\n                &quot;enabled&quot;:true,\n                &quot;alpn&quot;:[\n                    &quot;h3&quot;\n                ],\n                &quot;certificate_path&quot;:&quot;$WORK_DIR\/cert\/cert.pem&quot;,\n                &quot;key_path&quot;:&quot;$WORK_DIR\/cert\/private.key&quot;\n            }\n        }\n    ]\n}\nEOF\n  fi\n\n  # \u751f\u6210 shadowTLS V5 \u914d\u7f6e\n  CHECK_PROTOCOLS=$(asc &quot;$CHECK_PROTOCOLS&quot; ++)\n  if [[ &quot;${INSTALL_PROTOCOLS[@]}&quot; =~ &quot;$CHECK_PROTOCOLS&quot; ]]; then\n    [ -z &quot;$SHADOWTLS_PASSWORD&quot; ] &amp;&amp; SHADOWTLS_PASSWORD=$($TEMP_DIR\/sing-box generate rand --base64 16)\n    [ -z &quot;$PORT_SHADOWTLS&quot; ] &amp;&amp; PORT_SHADOWTLS=$[START_PORT+$(awk -v target=$CHECK_PROTOCOLS &#039;{ for(i=1; i&lt;=NF; i++) if($i == target) { print i-1; break } }&#039; &lt;&lt;&lt; &quot;${INSTALL_PROTOCOLS[*]}&quot;)]\n    cat &gt; $WORK_DIR\/conf\/14_SHADOWTLS_inbounds.json &lt;&lt; EOF\n{\n    &quot;inbounds&quot;:[\n        {\n            &quot;type&quot;:&quot;shadowtls&quot;,\n            &quot;sniff&quot;:true,\n            &quot;sniff_override_destination&quot;:true,\n            &quot;listen&quot;:&quot;::&quot;,\n            &quot;listen_port&quot;:$PORT_SHADOWTLS,\n            &quot;detour&quot;:&quot;shadowtls-in&quot;,\n            &quot;version&quot;:3,\n            &quot;users&quot;:[\n                {\n                    &quot;password&quot;:&quot;$UUID&quot;\n                }\n            ],\n            &quot;handshake&quot;:{\n                &quot;server&quot;:&quot;$TLS_SERVER&quot;,\n                &quot;server_port&quot;:443\n            },\n            &quot;strict_mode&quot;:true\n        },\n        {\n            &quot;type&quot;:&quot;shadowsocks&quot;,\n            &quot;tag&quot;:&quot;shadowtls-in&quot;,\n            &quot;listen&quot;:&quot;127.0.0.1&quot;,\n            &quot;network&quot;:&quot;tcp&quot;,\n            &quot;method&quot;:&quot;2022-blake3-aes-128-gcm&quot;,\n            &quot;password&quot;:&quot;$SHADOWTLS_PASSWORD&quot;,\n            &quot;multiplex&quot;:{\n                &quot;enabled&quot;:true,\n                &quot;padding&quot;:true,\n                &quot;brutal&quot;:{\n                    &quot;enabled&quot;:true,\n                    &quot;up_mbps&quot;:1000,\n                    &quot;down_mbps&quot;:1000\n                }\n            }\n        }\n    ]\n}\nEOF\n  fi\n\n  # \u751f\u6210 Shadowsocks \u914d\u7f6e\n  CHECK_PROTOCOLS=$(asc &quot;$CHECK_PROTOCOLS&quot; ++)\n  if [[ &quot;${INSTALL_PROTOCOLS[@]}&quot; =~ &quot;$CHECK_PROTOCOLS&quot; ]]; then\n    [ -z &quot;$PORT_SHADOWSOCKS&quot; ] &amp;&amp; PORT_SHADOWSOCKS=$[START_PORT+$(awk -v target=$CHECK_PROTOCOLS &#039;{ for(i=1; i&lt;=NF; i++) if($i == target) { print i-1; break } }&#039; &lt;&lt;&lt; &quot;${INSTALL_PROTOCOLS[*]}&quot;)]\n    cat &gt; $WORK_DIR\/conf\/15_SHADOWSOCKS_inbounds.json &lt;&lt; EOF\n{\n    &quot;inbounds&quot;:[\n        {\n            &quot;type&quot;:&quot;shadowsocks&quot;,\n            &quot;sniff&quot;:true,\n            &quot;sniff_override_destination&quot;:true,\n            &quot;tag&quot;:&quot;shadowsocks-in&quot;,\n            &quot;listen&quot;:&quot;::&quot;,\n            &quot;listen_port&quot;:$PORT_SHADOWSOCKS,\n            &quot;method&quot;:&quot;aes-128-gcm&quot;,\n            &quot;password&quot;:&quot;$UUID&quot;,\n            &quot;multiplex&quot;:{\n                &quot;enabled&quot;:true,\n                &quot;padding&quot;:true,\n                &quot;brutal&quot;:{\n                    &quot;enabled&quot;:true,\n                    &quot;up_mbps&quot;:1000,\n                    &quot;down_mbps&quot;:1000\n                }\n            }\n        }\n    ]\n}\nEOF\n  fi\n\n  # \u751f\u6210 Trojan \u914d\u7f6e\n  CHECK_PROTOCOLS=$(asc &quot;$CHECK_PROTOCOLS&quot; ++)\n  if [[ &quot;${INSTALL_PROTOCOLS[@]}&quot; =~ &quot;$CHECK_PROTOCOLS&quot; ]]; then\n    [ -z &quot;$PORT_TROJAN&quot; ] &amp;&amp; PORT_TROJAN=$[START_PORT+$(awk -v target=$CHECK_PROTOCOLS &#039;{ for(i=1; i&lt;=NF; i++) if($i == target) { print i-1; break } }&#039; &lt;&lt;&lt; &quot;${INSTALL_PROTOCOLS[*]}&quot;)]\n    cat &gt; $WORK_DIR\/conf\/16_TROJAN_inbounds.json &lt;&lt; EOF\n{\n    &quot;inbounds&quot;:[\n        {\n            &quot;type&quot;:&quot;trojan&quot;,\n            &quot;sniff&quot;:true,\n            &quot;sniff_override_destination&quot;:true,\n            &quot;tag&quot;:&quot;trojan-in&quot;,\n            &quot;listen&quot;:&quot;::&quot;,\n            &quot;listen_port&quot;:$PORT_TROJAN,\n            &quot;users&quot;:[\n                {\n                    &quot;password&quot;:&quot;$UUID&quot;\n                }\n            ],\n            &quot;tls&quot;:{\n                &quot;enabled&quot;:true,\n                &quot;certificate_path&quot;:&quot;$WORK_DIR\/cert\/cert.pem&quot;,\n                &quot;key_path&quot;:&quot;$WORK_DIR\/cert\/private.key&quot;\n            },\n            &quot;multiplex&quot;:{\n                &quot;enabled&quot;:true,\n                &quot;padding&quot;:true,\n                &quot;brutal&quot;:{\n                    &quot;enabled&quot;:true,\n                    &quot;up_mbps&quot;:1000,\n                    &quot;down_mbps&quot;:1000\n                }\n            }\n        }\n    ]\n}\nEOF\n  fi\n\n  # \u751f\u6210 vmess + ws \u914d\u7f6e\n  CHECK_PROTOCOLS=$(asc &quot;$CHECK_PROTOCOLS&quot; ++)\n  if [[ &quot;${INSTALL_PROTOCOLS[@]}&quot; =~ &quot;$CHECK_PROTOCOLS&quot; ]]; then\n    [ -z &quot;$PORT_VMESS_WS&quot; ] &amp;&amp; PORT_VMESS_WS=$[START_PORT+$(awk -v target=$CHECK_PROTOCOLS &#039;{ for(i=1; i&lt;=NF; i++) if($i == target) { print i-1; break } }&#039; &lt;&lt;&lt; &quot;${INSTALL_PROTOCOLS[*]}&quot;)]\n    cat &gt; $WORK_DIR\/conf\/17_VMESS_WS_inbounds.json &lt;&lt; EOF\n{\n    &quot;inbounds&quot;:[\n        {\n            &quot;type&quot;:&quot;vmess&quot;,\n            &quot;sniff&quot;:true,\n            &quot;sniff_override_destination&quot;:true,\n            &quot;tag&quot;:&quot;vmess-ws-in&quot;,\n            &quot;listen&quot;:&quot;::&quot;,\n            &quot;listen_port&quot;:${PORT_VMESS_WS},\n            &quot;tcp_fast_open&quot;:false,\n            &quot;proxy_protocol&quot;:false,\n            &quot;users&quot;:[\n                {\n                    &quot;uuid&quot;:&quot;${UUID}&quot;,\n                    &quot;alterId&quot;:0\n                }\n            ],\n            &quot;transport&quot;:{\n                &quot;type&quot;:&quot;ws&quot;,\n                &quot;path&quot;:&quot;\/${UUID}-vmess&quot;,\n                &quot;max_early_data&quot;:2048,\n                &quot;early_data_header_name&quot;:&quot;Sec-WebSocket-Protocol&quot;\n            },\n            &quot;multiplex&quot;:{\n                &quot;enabled&quot;:true,\n                &quot;padding&quot;:true,\n                &quot;brutal&quot;:{\n                    &quot;enabled&quot;:true,\n                    &quot;up_mbps&quot;:1000,\n                    &quot;down_mbps&quot;:1000\n                }\n            }\n        }\n    ]\n}\nEOF\n  fi\n\n  # \u751f\u6210 vless + ws + tls \u914d\u7f6e\n  CHECK_PROTOCOLS=$(asc &quot;$CHECK_PROTOCOLS&quot; ++)\n  if [[ &quot;${INSTALL_PROTOCOLS[@]}&quot; =~ &quot;$CHECK_PROTOCOLS&quot; ]]; then\n    [ -z &quot;$PORT_VLESS_WS&quot; ] &amp;&amp; PORT_VLESS_WS=$[START_PORT+$(awk -v target=$CHECK_PROTOCOLS &#039;{ for(i=1; i&lt;=NF; i++) if($i == target) { print i-1; break } }&#039; &lt;&lt;&lt; &quot;${INSTALL_PROTOCOLS[*]}&quot;)]\n    cat &gt; $WORK_DIR\/conf\/18_VLESS_WS_inbounds.json &lt;&lt; EOF\n{\n    &quot;inbounds&quot;:[\n        {\n            &quot;type&quot;:&quot;vless&quot;,\n            &quot;sniff_override_destination&quot;:true,\n            &quot;sniff&quot;:true,\n            &quot;tag&quot;:&quot;vless-ws-in&quot;,\n            &quot;listen&quot;:&quot;::&quot;,\n            &quot;listen_port&quot;:${PORT_VLESS_WS},\n            &quot;tcp_fast_open&quot;:false,\n            &quot;proxy_protocol&quot;:false,\n            &quot;users&quot;:[\n                {\n                    &quot;name&quot;:&quot;sing-box&quot;,\n                    &quot;uuid&quot;:&quot;${UUID}&quot;\n                }\n            ],\n            &quot;transport&quot;:{\n                &quot;type&quot;:&quot;ws&quot;,\n                &quot;path&quot;:&quot;\/${UUID}-vless&quot;,\n                &quot;max_early_data&quot;:2048,\n                &quot;early_data_header_name&quot;:&quot;Sec-WebSocket-Protocol&quot;\n            },\n            &quot;tls&quot;:{\n                &quot;enabled&quot;:true,\n                &quot;server_name&quot;:&quot;${VLESS_HOST_DOMAIN}&quot;,\n                &quot;min_version&quot;:&quot;1.3&quot;,\n                &quot;max_version&quot;:&quot;1.3&quot;,\n                &quot;certificate_path&quot;:&quot;${WORK_DIR}\/cert\/cert.pem&quot;,\n                &quot;key_path&quot;:&quot;${WORK_DIR}\/cert\/private.key&quot;\n            },\n            &quot;multiplex&quot;:{\n                &quot;enabled&quot;:true,\n                &quot;padding&quot;:true,\n                &quot;brutal&quot;:{\n                    &quot;enabled&quot;:true,\n                    &quot;up_mbps&quot;:1000,\n                    &quot;down_mbps&quot;:1000\n                }\n            }\n        }\n    ]\n}\nEOF\n  fi\n\n  # \u751f\u6210 H2 + Reality \u914d\u7f6e\n  CHECK_PROTOCOLS=$(asc &quot;$CHECK_PROTOCOLS&quot; ++)\n  if [[ &quot;${INSTALL_PROTOCOLS[@]}&quot; =~ &quot;$CHECK_PROTOCOLS&quot; ]]; then\n    [[ -z &quot;$REALITY_PRIVATE&quot; || -z &quot;$REALITY_PUBLIC&quot; ]] &amp;&amp; REALITY_KEYPAIR=$($TEMP_DIR\/sing-box generate reality-keypair)\n    [ -z &quot;$REALITY_PRIVATE&quot; ] &amp;&amp; REALITY_PRIVATE=$(awk &#039;\/PrivateKey\/{print $NF}&#039; &lt;&lt;&lt; &quot;$REALITY_KEYPAIR&quot;)\n    [ -z &quot;$REALITY_PUBLIC&quot; ] &amp;&amp; REALITY_PUBLIC=$(awk &#039;\/PublicKey\/{print $NF}&#039; &lt;&lt;&lt; &quot;$REALITY_KEYPAIR&quot;)\n    [ -z &quot;$PORT_H2_REALITY&quot; ] &amp;&amp; PORT_H2_REALITY=$[START_PORT+$(awk -v target=$CHECK_PROTOCOLS &#039;{ for(i=1; i&lt;=NF; i++) if($i == target) { print i-1; break } }&#039; &lt;&lt;&lt; &quot;${INSTALL_PROTOCOLS[*]}&quot;)]\n    cat &gt; $WORK_DIR\/conf\/19_H2_REALITY_inbounds.json &lt;&lt; EOF\n{\n    &quot;inbounds&quot;:[\n        {\n            &quot;type&quot;:&quot;vless&quot;,\n            &quot;sniff&quot;:true,\n            &quot;sniff_override_destination&quot;:true,\n            &quot;tag&quot;:&quot;h2-reality-in&quot;,\n            &quot;listen&quot;:&quot;::&quot;,\n            &quot;listen_port&quot;:$PORT_H2_REALITY,\n            &quot;users&quot;:[\n                {\n                    &quot;uuid&quot;:&quot;$UUID&quot;\n                }\n            ],\n            &quot;tls&quot;:{\n                &quot;enabled&quot;:true,\n                &quot;server_name&quot;:&quot;$TLS_SERVER&quot;,\n                &quot;reality&quot;:{\n                    &quot;enabled&quot;:true,\n                    &quot;handshake&quot;:{\n                        &quot;server&quot;:&quot;$TLS_SERVER&quot;,\n                        &quot;server_port&quot;:443\n                    },\n                    &quot;private_key&quot;:&quot;$REALITY_PRIVATE&quot;,\n                    &quot;short_id&quot;:[\n                        &quot;&quot;\n                    ]\n                }\n            },\n            &quot;transport&quot;: {\n                &quot;type&quot;: &quot;http&quot;\n            },\n            &quot;multiplex&quot;:{\n                &quot;enabled&quot;:true,\n                &quot;padding&quot;:true,\n                &quot;brutal&quot;:{\n                    &quot;enabled&quot;:true,\n                    &quot;up_mbps&quot;:1000,\n                    &quot;down_mbps&quot;:1000\n                }\n            }\n        }\n    ]\n}\nEOF\n  fi\n\n  # \u751f\u6210 gRPC + Reality \u914d\u7f6e\n  CHECK_PROTOCOLS=$(asc &quot;$CHECK_PROTOCOLS&quot; ++)\n  if [[ &quot;${INSTALL_PROTOCOLS[@]}&quot; =~ &quot;$CHECK_PROTOCOLS&quot; ]]; then\n    [[ -z &quot;$REALITY_PRIVATE&quot; || -z &quot;$REALITY_PUBLIC&quot; ]] &amp;&amp; REALITY_KEYPAIR=$($TEMP_DIR\/sing-box generate reality-keypair)\n    [ -z &quot;$REALITY_PRIVATE&quot; ] &amp;&amp; REALITY_PRIVATE=$(awk &#039;\/PrivateKey\/{print $NF}&#039; &lt;&lt;&lt; &quot;$REALITY_KEYPAIR&quot;)\n    [ -z &quot;$REALITY_PUBLIC&quot; ] &amp;&amp; REALITY_PUBLIC=$(awk &#039;\/PublicKey\/{print $NF}&#039; &lt;&lt;&lt; &quot;$REALITY_KEYPAIR&quot;)\n    [ -z &quot;$PORT_GRPC_REALITY&quot; ] &amp;&amp; PORT_GRPC_REALITY=$[START_PORT+$(awk -v target=$CHECK_PROTOCOLS &#039;{ for(i=1; i&lt;=NF; i++) if($i == target) { print i-1; break } }&#039; &lt;&lt;&lt; &quot;${INSTALL_PROTOCOLS[*]}&quot;)]\n    cat &gt; $WORK_DIR\/conf\/20_GRPC_REALITY_inbounds.json &lt;&lt; EOF\n{\n    &quot;inbounds&quot;:[\n        {\n            &quot;type&quot;:&quot;vless&quot;,\n            &quot;sniff&quot;:true,\n            &quot;sniff_override_destination&quot;:true,\n            &quot;tag&quot;:&quot;grpc-reality-in&quot;,\n            &quot;listen&quot;:&quot;::&quot;,\n            &quot;listen_port&quot;:$PORT_GRPC_REALITY,\n            &quot;users&quot;:[\n                {\n                    &quot;uuid&quot;:&quot;$UUID&quot;\n                }\n            ],\n            &quot;tls&quot;:{\n                &quot;enabled&quot;:true,\n                &quot;server_name&quot;:&quot;$TLS_SERVER&quot;,\n                &quot;reality&quot;:{\n                    &quot;enabled&quot;:true,\n                    &quot;handshake&quot;:{\n                        &quot;server&quot;:&quot;$TLS_SERVER&quot;,\n                        &quot;server_port&quot;:443\n                    },\n                    &quot;private_key&quot;:&quot;$REALITY_PRIVATE&quot;,\n                    &quot;short_id&quot;:[\n                        &quot;&quot;\n                    ]\n                }\n            },\n            &quot;transport&quot;: {\n                &quot;type&quot;: &quot;grpc&quot;,\n                &quot;service_name&quot;: &quot;grpc&quot;\n            }\n        }\n    ]\n}\nEOF\n  fi\n}\n\n# Sing-box \u751f\u6210\u5b88\u62a4\u8fdb\u7a0b\u6587\u4ef6\nsing-box_systemd() {\n  cat &gt; \/etc\/systemd\/system\/sing-box.service &lt;&lt; EOF\n[Unit]\nDescription=sing-box service\nDocumentation=https:\/\/sing-box.sagernet.org\nAfter=network.target nss-lookup.target\n\n[Service]\nUser=root\nWorkingDirectory=$WORK_DIR\nCapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW CAP_SYS_PTRACE CAP_DAC_READ_SEARCH\nAmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE CAP_NET_RAW CAP_SYS_PTRACE CAP_DAC_READ_SEARCH\nExecStart=$WORK_DIR\/sing-box run -C $WORK_DIR\/conf\/\nExecReload=\/bin\/kill -HUP \\$MAINPID\nRestart=on-failure\nRestartSec=10\nLimitNOFILE=infinity\n\n[Install]\nWantedBy=multi-user.target\nEOF\n}\n\ninstall_sing-box() {\n  sing-box_variable\n  [ ! -d \/etc\/systemd\/system ] &amp;&amp; mkdir -p \/etc\/systemd\/system\n  [ ! -d $WORK_DIR\/logs ] &amp;&amp; mkdir -p $WORK_DIR\/logs\n  ssl_certificate\n  sing-box_json\n  echo &quot;$L&quot; &gt; $WORK_DIR\/language\n  cp $TEMP_DIR\/sing-box $WORK_DIR\n  sing-box_systemd\n\n  # \u5982\u679c Alpine \u7cfb\u7edf\uff0c\u653e\u5230\u5f00\u673a\u81ea\u542f\u52a8\n  if [ &quot;$SYSTEM&quot; = &#039;Alpine&#039; ]; then\n    cat &gt; \/etc\/local.d\/sing-box.start &lt;&lt; EOF\n#!\/usr\/bin\/env bash\n\nsystemctl start sing-box\nEOF\n    chmod +x \/etc\/local.d\/sing-box.start\n    rc-update add local &gt;\/dev\/null 2&gt;&amp;1\n  fi\n\n  # \u518d\u6b21\u68c0\u6d4b\u72b6\u6001\uff0c\u8fd0\u884c Sing-box\n  check_install\n\n  check_sing-box_stats\n}\n\nexport_list() {\n  check_install\n  if [ -s $WORK_DIR\/list ]; then\n    SERVER_IP=${SERVER_IP:-&quot;$(sed -r &quot;s\/\\x1B\\[[0-9;]*[mG]\/\/g&quot; $WORK_DIR\/list | sed -n &quot;s\/.*{name.*server:[ ]*\\([^,]\\+\\).*\/\\1\/pg&quot; | sed -n &#039;1p&#039;)&quot;}\n    UUID=${UUID:-&quot;$(sed -r &quot;s\/\\x1B\\[[0-9;]*[mG]\/\/g&quot; $WORK_DIR\/list | grep -m1 &#039;{name&#039; | sed -En &#039;s\/.*password:[ ]+[\\&quot;]*|.*uuid:[ ]+[\\&quot;]*(.*)\/\\1\/gp&#039; | sed &quot;s\/\\([^,\\&quot;]\\+\\).*\/\\1\/g&quot;)&quot;}\n    SHADOWTLS_PASSWORD=${SHADOWTLS_PASSWORD:-&quot;$(sed -r &quot;s\/\\x1B\\[[0-9;]*[mG]\/\/g&quot; $WORK_DIR\/list | sed -n &#039;s\/.*{name.*password:[ ]*\\&quot;\\([^\\&quot;]\\+\\)&quot;.*shadow-tls.*\/\\1\/pg&#039;)&quot;}\n    TLS_SERVER=${TLS_SERVER:-&quot;$(sed -r &quot;s\/\\x1B\\[[0-9;]*[mG]\/\/g&quot; $WORK_DIR\/list | grep -Em1 &#039;\\{name.*shadow-tls|\\{name.*public-key&#039; | sed -n &quot;s\/.*servername:[ ]\\+\\([^\\,]\\+\\).*\/\\1\/gp; s\/.*host:[ ]\\+\\&quot;\\([^\\&quot;]\\+\\).*\/\\1\/gp&quot;)&quot;}\n    NODE_NAME=${NODE_NAME:-&quot;$(sed -r &quot;s\/\\x1B\\[[0-9;]*[mG]\/\/g&quot; $WORK_DIR\/list | grep -m1 &#039;{name&#039; | sed &#039;s\/- {name:[ ]\\+&quot;\/\/; s\/[ ]\\+ShadowTLS[ ]\\+v3.*\/\/; s\/[ ]\\+xtls-reality.*\/\/; s\/[ ]\\+hysteria2.*\/\/; s\/[ ]\\+tuic.*\/\/; s\/[ ]\\+ss.*\/\/; s\/[ ]\\+trojan.*\/\/; s\/[ ]\\+trojan.*\/\/; s\/[ ]\\+vmess[ ]\\+ws.*\/\/; s\/[ ]\\+vless[ ]\\+.*\/\/&#039;)&quot;}\n    REALITY_PUBLIC=${REALITY_PUBLIC:-&quot;$(sed -n &#039;s\/.*{name.*public-key:[ ]*\\([^,]\\+\\).*\/\\1\/pg&#039; $WORK_DIR\/list | sed -n 1p)&quot;}\n    [ -s $WORK_DIR\/conf\/*_XTLS_REALITY_inbounds.json ] &amp;&amp; PORT_XTLS_REALITY=$(sed -n &#039;\/listen_port\/s\/[^0-9]\\+\/\/gp&#039; $WORK_DIR\/conf\/*_XTLS_REALITY_inbounds.json)\n    [ -s $WORK_DIR\/conf\/*_HYSTERIA2_inbounds.json ] &amp;&amp; PORT_HYSTERIA2=$(sed -n &#039;\/listen_port\/s\/[^0-9]\\+\/\/gp&#039; $WORK_DIR\/conf\/*_HYSTERIA2_inbounds.json)\n    [ -s $WORK_DIR\/conf\/*_TUIC_inbounds.json ] &amp;&amp; PORT_TUIC=$(sed -n &#039;\/listen_port\/s\/[^0-9]\\+\/\/gp&#039; $WORK_DIR\/conf\/*_TUIC_inbounds.json)\n    [ -s $WORK_DIR\/conf\/*_SHADOWTLS_inbounds.json ] &amp;&amp; PORT_SHADOWTLS=$(sed -n &#039;\/listen_port\/s\/[^0-9]\\+\/\/gp&#039; $WORK_DIR\/conf\/*_SHADOWTLS_inbounds.json)\n    [ -s $WORK_DIR\/conf\/*_SHADOWSOCKS_inbounds.json ] &amp;&amp; PORT_SHADOWSOCKS=$(sed -n &#039;\/listen_port\/s\/[^0-9]\\+\/\/gp&#039; $WORK_DIR\/conf\/*_SHADOWSOCKS_inbounds.json)\n    [ -s $WORK_DIR\/conf\/*_TROJAN_inbounds.json ] &amp;&amp; PORT_TROJAN=$(sed -n &#039;\/listen_port\/s\/[^0-9]\\+\/\/gp&#039; $WORK_DIR\/conf\/*_TROJAN_inbounds.json)\n    [ -s $WORK_DIR\/conf\/*_VMESS_WS_inbounds.json ] &amp;&amp; WS_SERVER_IP=${WS_SERVER_IP:-&quot;$(grep -A2 &quot;{name.*vmess[ ]\\+ws&quot; $WORK_DIR\/list | awk -F&#039;[][]&#039; &#039;NR==3 {print $2}&#039;)&quot;} &amp;&amp; VMESS_HOST_DOMAIN=${VMESS_HOST_DOMAIN:-&quot;$(grep -A2 &quot;{name.*vmess[ ]\\+ws&quot; $WORK_DIR\/list | awk -F&#039;[][]&#039; &#039;NR==3 {print $4}&#039;)&quot;} &amp;&amp; PORT_VMESS_WS=${PORT_VMESS_WS:-&quot;$(sed -n &#039;\/listen_port\/s\/[^0-9]\\+\/\/gp&#039; $WORK_DIR\/conf\/*_VMESS_WS_inbounds.json)&quot;} &amp;&amp; CDN=${CDN:-&quot;$(sed -n &quot;s\/.*{name.*vmess[ ]\\+ws.*server:[ ]\\+\\([^,]\\+\\).*\/\\1\/gp&quot; $WORK_DIR\/list)&quot;}\n    [ -s $WORK_DIR\/conf\/*_VLESS_WS_inbounds.json ] &amp;&amp; WS_SERVER_IP=${WS_SERVER_IP:-&quot;$(grep -A2 &quot;{name.*vless[ ]\\+ws&quot; $WORK_DIR\/list | awk -F&#039;[][]&#039; &#039;NR==3 {print $2}&#039;)&quot;} &amp;&amp; VLESS_HOST_DOMAIN=${VLESS_HOST_DOMAIN:-&quot;$(grep -A2 &quot;{name.*vless[ ]\\+ws&quot; $WORK_DIR\/list | awk -F&#039;[][]&#039; &#039;NR==3 {print $4}&#039;)&quot;} &amp;&amp; PORT_VLESS_WS=${PORT_VLESS_WS:-&quot;$(sed -n &#039;\/listen_port\/s\/[^0-9]\\+\/\/gp&#039; $WORK_DIR\/conf\/*_VLESS_WS_inbounds.json)&quot;} &amp;&amp; CDN=${CDN:-&quot;$(sed -n &quot;s\/.*{name.*vless[ ]\\+ws.*server:[ ]\\+\\([^,]\\+\\).*\/\\1\/gp&quot; $WORK_DIR\/list)&quot;}\n    [ -s $WORK_DIR\/conf\/*_H2_REALITY_inbounds.json ] &amp;&amp; PORT_H2_REALITY=$(sed -n &#039;\/listen_port\/s\/[^0-9]\\+\/\/gp&#039; $WORK_DIR\/conf\/*_H2_REALITY_inbounds.json)\n    [ -s $WORK_DIR\/conf\/*_GRPC_REALITY_inbounds.json ] &amp;&amp; PORT_GRPC_REALITY=$(sed -n &#039;\/listen_port\/s\/[^0-9]\\+\/\/gp&#039; $WORK_DIR\/conf\/*_GRPC_REALITY_inbounds.json)\n  fi\n\n  # IPv6 \u65f6\u7684 IP \u5904\u7406\n  if [[ &quot;$SERVER_IP&quot; =~ : ]]; then\n    SERVER_IP_1=&quot;[$SERVER_IP]&quot;\n    SERVER_IP_2=&quot;[[$SERVER_IP]]&quot;\n  else\n    SERVER_IP_1=&quot;$SERVER_IP&quot;\n    SERVER_IP_2=&quot;$SERVER_IP&quot;\n  fi\n\n  # \u751f\u6210\u914d\u7f6e\u6587\u4ef6\n  cat &gt; $WORK_DIR\/list &lt;&lt; EOF\n*******************************************\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502                \u2502\n\u2502     $(warning &quot;V2rayN&quot;)     \u2502\n\u2502                \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\nEOF\n  [ -n &quot;$PORT_XTLS_REALITY&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n\n----------------------------\n$(info &quot;vless:\/\/${UUID}@${SERVER_IP_1}:${PORT_XTLS_REALITY}?encryption=none&amp;security=reality&amp;sni=${TLS_SERVER}&amp;fp=chrome&amp;pbk=${REALITY_PUBLIC}&amp;type=tcp&amp;headerType=none#${NODE_NAME} xtls-reality&quot;)\nEOF\n  [ -n &quot;$PORT_HYSTERIA2&quot; ] &amp;&amp; V2RAYN_PROTOCOL=Hysteria2 &amp;&amp; V2RAYN_KERNEL=hysteria2 &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n\n----------------------------\n$(info &quot;$(text 54)\n\nserver: \\&quot;${SERVER_IP_1}:${PORT_HYSTERIA2}\\&quot;\nauth: ${UUID}\n\nbandwidth:\n  up: 200 mbps\n  down: 1000 mbps\n\nobfs:\n  type: salamander\n  salamander:\n    password: ${UUID}\n\ntls:\n  insecure: true\n\nsocks5:\n  listen: 127.0.0.1:${PORT_HYSTERIA2}&quot;)\nEOF\n  [ -n &quot;$PORT_TUIC&quot; ] &amp;&amp; V2RAYN_PROTOCOL=Tuic &amp;&amp; V2RAYN_KERNEL=sing_box &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n\n----------------------------\n$(info &quot;$(text 54)\n\n{\n    \\&quot;log\\&quot;:{\n        \\&quot;level\\&quot;:\\&quot;info\\&quot;\n    },\n    \\&quot;inbounds\\&quot;:[\n        {\n            \\&quot;domain_strategy\\&quot;:\\&quot;\\&quot;,\n            \\&quot;listen\\&quot;:\\&quot;127.0.0.1\\&quot;,\n            \\&quot;listen_port\\&quot;:${PORT_TUIC},\n            \\&quot;sniff\\&quot;:true,\n            \\&quot;sniff_override_destination\\&quot;:false,\n            \\&quot;type\\&quot;:\\&quot;mixed\\&quot;\n        }\n    ],\n    \\&quot;outbounds\\&quot;:[\n        {\n            \\&quot;congestion_control\\&quot;:\\&quot;bbr\\&quot;,\n            \\&quot;domain_strategy\\&quot;:\\&quot;\\&quot;,\n            \\&quot;heartbeat\\&quot;:\\&quot;10s\\&quot;,\n            \\&quot;password\\&quot;:\\&quot;${UUID}\\&quot;,\n            \\&quot;server\\&quot;:\\&quot;${SERVER_IP}\\&quot;,\n            \\&quot;server_port\\&quot;:${PORT_TUIC},\n            \\&quot;tag\\&quot;: \\&quot;proxy\\&quot;,\n            \\&quot;tls\\&quot;:{\n                \\&quot;alpn\\&quot;:[\n                    \\&quot;h3\\&quot;,\n                    \\&quot;spdy\/3.1\\&quot;\n                ],\n                \\&quot;certificate\\&quot;:\\&quot;\\&quot;,\n                \\&quot;disable_sni\\&quot;:false,\n                \\&quot;enabled\\&quot;:true,\n                \\&quot;insecure\\&quot;:true,\n                \\&quot;server_name\\&quot;:\\&quot;\\&quot;\n            },\n            \\&quot;type\\&quot;:\\&quot;tuic\\&quot;,\n            \\&quot;udp_relay_mode\\&quot;:\\&quot;native\\&quot;,\n            \\&quot;uuid\\&quot;:\\&quot;${UUID}\\&quot;,\n            \\&quot;zero_rtt_handshake\\&quot;:false\n        }\n    ]\n}&quot;)\nEOF\n  [ -n &quot;$PORT_SHADOWTLS&quot; ] &amp;&amp; V2RAYN_PROTOCOL=ShadowTLS &amp;&amp; V2RAYN_KERNEL=sing_box &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n\n----------------------------\n$(info &quot;$(text 54)\n\n{\n  \\&quot;log\\&quot;:{\n      \\&quot;level\\&quot;:\\&quot;info\\&quot;\n  },\n  \\&quot;inbounds\\&quot;:[\n      {\n          \\&quot;domain_strategy\\&quot;:\\&quot;\\&quot;,\n          \\&quot;listen\\&quot;:\\&quot;127.0.0.1\\&quot;,\n          \\&quot;listen_port\\&quot;:${PORT_SHADOWTLS},\n          \\&quot;sniff\\&quot;:true,\n          \\&quot;sniff_override_destination\\&quot;:false,\n          \\&quot;tag\\&quot;: \\&quot;ShadowTLS\\&quot;,\n          \\&quot;type\\&quot;:\\&quot;mixed\\&quot;\n      }\n  ],\n  \\&quot;outbounds\\&quot;:[\n      {\n          \\&quot;detour\\&quot;:\\&quot;shadowtls-out\\&quot;,\n          \\&quot;domain_strategy\\&quot;:\\&quot;\\&quot;,\n          \\&quot;method\\&quot;:\\&quot;2022-blake3-aes-128-gcm\\&quot;,\n          \\&quot;password\\&quot;:\\&quot;${SHADOWTLS_PASSWORD}\\&quot;,\n          \\&quot;type\\&quot;:\\&quot;shadowsocks\\&quot;,\n          \\&quot;udp_over_tcp\\&quot;: false,\n          \\&quot;multiplex\\&quot;: {\n            \\&quot;enabled\\&quot;: true,\n            \\&quot;protocol\\&quot;: \\&quot;h2mux\\&quot;,\n            \\&quot;max_connections\\&quot;: 8,\n            \\&quot;min_streams\\&quot;: 16,\n            \\&quot;padding\\&quot;: true\n          }\n      },\n      {\n          \\&quot;domain_strategy\\&quot;:\\&quot;\\&quot;,\n          \\&quot;password\\&quot;:\\&quot;${UUID}\\&quot;,\n          \\&quot;server\\&quot;:\\&quot;${SERVER_IP}\\&quot;,\n          \\&quot;server_port\\&quot;:${PORT_SHADOWTLS},\n          \\&quot;tag\\&quot;: \\&quot;shadowtls-out\\&quot;,\n          \\&quot;tls\\&quot;:{\n              \\&quot;enabled\\&quot;:true,\n              \\&quot;server_name\\&quot;:\\&quot;${TLS_SERVER}\\&quot;,\n              \\&quot;utls\\&quot;: {\n                \\&quot;enabled\\&quot;: true,\n                \\&quot;fingerprint\\&quot;: \\&quot;chrome\\&quot;\n              }\n          },\n          \\&quot;multiplex\\&quot;:{\n            \\&quot;enabled\\&quot;:true,\n            \\&quot;padding\\&quot;:true\n          },\n          \\&quot;type\\&quot;:\\&quot;shadowtls\\&quot;,\n          \\&quot;version\\&quot;:3\n      }\n  ]\n}&quot;)\nEOF\n  [ -n &quot;$PORT_SHADOWSOCKS&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n\n----------------------------\n$(info &quot;ss:\/\/$(base64 -w0 &lt;&lt;&lt; aes-128-gcm:${UUID}@${SERVER_IP_1}:${PORT_SHADOWSOCKS})#${NODE_NAME} ss&quot;)\nEOF\n  [ -n &quot;$PORT_TROJAN&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n\n----------------------------\n$(info &quot;trojan:\/\/${UUID}@${SERVER_IP_1}:${PORT_TROJAN}?security=tls&amp;type=tcp&amp;headerType=none#\\&quot;${NODE_NAME} trojan\\&quot;\n\n$(text 70)&quot;)\nEOF\n  [ -n &quot;$PORT_VMESS_WS&quot; ] &amp;&amp; TYPE_HOST_DOMAIN=$VMESS_HOST_DOMAIN &amp;&amp; TYPE_PORT_WS=$PORT_VMESS_WS &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n\n----------------------------\n$(info &quot;vmess:\/\/$(base64 -w0 &lt;&lt;&lt; &quot;{ \\&quot;v\\&quot;: \\&quot;2\\&quot;, \\&quot;ps\\&quot;: \\&quot;${NODE_NAME} vmess ws\\&quot;, \\&quot;add\\&quot;: \\&quot;${CDN}\\&quot;, \\&quot;port\\&quot;: \\&quot;80\\&quot;, \\&quot;id\\&quot;: \\&quot;${UUID}\\&quot;, \\&quot;aid\\&quot;: \\&quot;0\\&quot;, \\&quot;scy\\&quot;: \\&quot;none\\&quot;, \\&quot;net\\&quot;: \\&quot;ws\\&quot;, \\&quot;type\\&quot;: \\&quot;none\\&quot;, \\&quot;host\\&quot;: \\&quot;${VMESS_HOST_DOMAIN}\\&quot;, \\&quot;path\\&quot;: \\&quot;\/${UUID}-vmess\\&quot;, \\&quot;tls\\&quot;: \\&quot;\\&quot;, \\&quot;sni\\&quot;: \\&quot;\\&quot;, \\&quot;alpn\\&quot;: \\&quot;\\&quot; }&quot; | sed &quot;s\/Cg==$\/\/&quot;)\n\n$(text 52)&quot;)\nEOF\n  [ -n &quot;$PORT_VLESS_WS&quot; ] &amp;&amp; TYPE_HOST_DOMAIN=$VLESS_HOST_DOMAIN &amp;&amp; TYPE_PORT_WS=$PORT_VLESS_WS &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n\n----------------------------\n$(info &quot;vless:\/\/${UUID}@${CDN}:443?encryption=none&amp;security=tls&amp;sni=${VLESS_HOST_DOMAIN}&amp;type=ws&amp;host=${VLESS_HOST_DOMAIN}&amp;path=%2F${UUID}-vless%3Fed%3D2048#${NODE_NAME} vless ws\n\n$(text 52)&quot;)\nEOF\n  [ -n &quot;$PORT_H2_REALITY&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n\n----------------------------\n$(info &quot;vless:\/\/${UUID}@${SERVER_IP_1}:${PORT_H2_REALITY}?encryption=none&amp;security=reality&amp;sni=${TLS_SERVER}&amp;fp=chrome&amp;pbk=${REALITY_PUBLIC}&amp;type=http#${NODE_NAME} h2-reality-vision&quot;)\nEOF\n  [ -n &quot;$PORT_GRPC_REALITY&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n\n----------------------------\n$(info &quot;vless:\/\/${UUID}@${SERVER_IP_1}:${PORT_GRPC_REALITY}?encryption=none&amp;security=reality&amp;sni=${TLS_SERVER}&amp;fp=chrome&amp;pbk=${REALITY_PUBLIC}&amp;type=grpc&amp;serviceName=grpc&amp;mode=gun#${NODE_NAME} grpc-reality-vision&quot;)\nEOF\n\n  cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n\n*******************************************\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502                \u2502\n\u2502  $(warning &quot;Shadowrocket&quot;)  \u2502\n\u2502                \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n----------------------------\nEOF\n  [ -n &quot;$PORT_XTLS_REALITY&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n\n$(hint &quot;vless:\/\/$(base64 -w0 &lt;&lt;&lt; auto:$UUID@${SERVER_IP_2}:${PORT_XTLS_REALITY} | sed &quot;s\/Cg==$\/\/&quot;)?remarks=${NODE_NAME}%20xtls-reality&amp;obfs=none&amp;tls=1&amp;peer=$TLS_SERVER&amp;mux=1&amp;pbk=$REALITY_PUBLIC&quot;)\nEOF\n  [ -n &quot;$PORT_HYSTERIA2&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n\n$(hint &quot;hysteria2:\/\/${UUID}@${SERVER_IP_2}:${PORT_HYSTERIA2}?insecure=1&amp;obfs=none&amp;obfs-password=${UUID}#${NODE_NAME}%20hysteria2&quot;)\nEOF\n  [ -n &quot;$PORT_TUIC&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n\n$(hint &quot;tuic:\/\/${UUID}:${UUID}@${SERVER_IP_2}:${PORT_TUIC}?congestion_control=bbr&amp;udp_relay_mode=native&amp;alpn=h3&amp;allow_insecure=1#${NODE_NAME}%20tuic&quot;)\nEOF\n  [ -n &quot;$PORT_SHADOWTLS&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n\n$(hint &quot;ss:\/\/$(base64 -w0 &lt;&lt;&lt; 2022-blake3-aes-128-gcm:${SHADOWTLS_PASSWORD}@${SERVER_IP_2}:${PORT_SHADOWTLS} | sed &quot;s\/Cg==$\/\/&quot;)?shadow-tls=$(base64 -w0 &lt;&lt;&lt; {\\&quot;version\\&quot;:\\&quot;3\\&quot;,\\&quot;host\\&quot;:\\&quot;$TLS_SERVER\\&quot;,\\&quot;password\\&quot;:\\&quot;$UUID\\&quot; | sed &quot;s\/Cg==$\/\/&quot;)#${NODE_NAME}%20ShadowTLS%20v3&quot;)\nEOF\n  [ -n &quot;$PORT_SHADOWSOCKS&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n\n$(hint &quot;ss:\/\/$(base64 -w0 &lt;&lt;&lt; aes-128-gcm:${UUID}@${SERVER_IP_2}:${PORT_SHADOWSOCKS} | sed &quot;s\/Cg==$\/\/&quot;)#${NODE_NAME}%20ss&quot;)\nEOF\n  [ -n &quot;$PORT_TROJAN&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n\n$(hint &quot;trojan:\/\/${UUID}@${SERVER_IP_1}:${PORT_TROJAN}?allowInsecure=1#${NODE_NAME}%20trojan&quot;)\nEOF\n  [ -n &quot;$PORT_VMESS_WS&quot; ] &amp;&amp; TYPE_HOST_DOMAIN=$VMESS_HOST_DOMAIN &amp;&amp; TYPE_PORT_WS=$PORT_VMESS_WS &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n\n----------------------------\n$(hint &quot;vmess:\/\/$(base64 -w0 &lt;&lt;&lt; &quot;none:${UUID}@${CDN}:80&quot; | sed &quot;s\/Cg==$\/\/&quot;)?remarks=${NODE_NAME}%20vmess%20ws&amp;obfsParam=${VMESS_HOST_DOMAIN}&amp;path=\/${UUID}-vmess&amp;obfs=websocket&amp;alterId=0\n\n$(text 52)&quot;)\nEOF\n  [ -n &quot;$PORT_VLESS_WS&quot; ] &amp;&amp; TYPE_HOST_DOMAIN=$VLESS_HOST_DOMAIN &amp;&amp; TYPE_PORT_WS=$PORT_VLESS_WS &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n\n----------------------------\n$(hint &quot;vless:\/\/$(base64 -w0 &lt;&lt;&lt; &quot;auto:${UUID}@${CDN}:443&quot; | sed &quot;s\/Cg==$\/\/&quot;)?remarks=${NODE_NAME}%20vless%20ws&amp;obfsParam=${VLESS_HOST_DOMAIN}&amp;path=\/${UUID}-vless?ed=2048&amp;obfs=websocket&amp;tls=1&amp;peer=${VLESS_HOST_DOMAIN}&amp;allowInsecure=1\n\n$(text 52)&quot;)\nEOF\n  [ -n &quot;$PORT_H2_REALITY&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n\n----------------------------\n$(hint &quot;vless:\/\/$(base64 -w0 &lt;&lt;&lt; auto:${UUID}@${SERVER_IP_2}:${PORT_H2_REALITY} | sed &quot;s\/Cg==$\/\/&quot;)?remarks=${NODE_NAME}%20h2-reality-vision&amp;path=\/&amp;obfs=h2&amp;tls=1&amp;peer=${TLS_SERVER}&amp;alpn=h2&amp;mux=1&amp;pbk=${REALITY_PUBLIC}&quot;)\nEOF\n  [ -n &quot;$PORT_GRPC_REALITY&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n\n----------------------------\n$(hint &quot;vless:\/\/$(base64 -w0 &lt;&lt;&lt; &quot;auto:${UUID}@${SERVER_IP_2}:${PORT_GRPC_REALITY}&quot; | sed &quot;s\/Cg==$\/\/&quot;)?remarks=${NODE_NAME}%20grpc-reality-vision&amp;path=grpc&amp;obfs=grpc&amp;tls=1&amp;peer=${TLS_SERVER}&amp;pbk=${REALITY_PUBLIC}&quot;)\nEOF\n\n  cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n\n*******************************************\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502                \u2502\n\u2502   $(warning &quot;Clash Meta&quot;)   \u2502\n\u2502                \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n----------------------------\nEOF\n  [ -n &quot;$PORT_XTLS_REALITY&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n\n$(info &quot;- {name: \\&quot;${NODE_NAME} xtls-reality\\&quot;, type: vless, server: ${SERVER_IP}, port: ${PORT_XTLS_REALITY}, uuid: ${UUID}, network: tcp, udp: true, tls: true, servername: ${TLS_SERVER}, client-fingerprint: chrome, reality-opts: {public-key: ${REALITY_PUBLIC}, short-id: \\&quot;\\&quot;}, smux: { enabled: true, protocol: &#039;h2mux&#039;, padding: true, max-connections: &#039;8&#039;, min-streams: &#039;16&#039;, statistic: true, only-tcp: false } }&quot;)\nEOF\n  [ -n &quot;$PORT_HYSTERIA2&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n\n$(info &quot;- {name: \\&quot;${NODE_NAME} hysteria2\\&quot;, type: hysteria2, server: ${SERVER_IP}, port: ${PORT_HYSTERIA2}, up: \\&quot;200 Mbps\\&quot;, down: \\&quot;1000 Mbps\\&quot;, password: ${UUID}, obfs: salamander, obfs-password: ${UUID}, skip-cert-verify: true}&quot;)\nEOF\n  [ -n &quot;$PORT_TUIC&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n\n$(info &quot;- {name: \\&quot;${NODE_NAME} tuic\\&quot;, 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: true}&quot;)\nEOF\n  [ -n &quot;$PORT_SHADOWTLS&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n\n$(info &quot;- {name: \\&quot;${NODE_NAME} ShadowTLS v3\\&quot;, type: ss, server: ${SERVER_IP}, port: ${PORT_SHADOWTLS}, cipher: 2022-blake3-aes-128-gcm, password: \\&quot;${SHADOWTLS_PASSWORD}\\&quot;, plugin: shadow-tls, client-fingerprint: chrome, plugin-opts: {host: \\&quot;${TLS_SERVER}\\&quot;, password: \\&quot;${UUID}\\&quot;, version: 3}, smux: { enabled: true, protocol: &#039;h2mux&#039;, padding: true, max-connections: &#039;8&#039;, min-streams: &#039;16&#039;, statistic: true, only-tcp: false } }&quot;)\nEOF\n  [ -n &quot;$PORT_SHADOWSOCKS&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n\n$(info &quot;- {name: \\&quot;${NODE_NAME} ss\\&quot;, type: ss, server: ${SERVER_IP}, port: ${PORT_SHADOWSOCKS}, cipher: aes-128-gcm, password: \\&quot;${UUID}\\&quot;, smux: { enabled: true, protocol: &#039;h2mux&#039;, padding: true, max-connections: &#039;8&#039;, min-streams: &#039;16&#039;, statistic: true, only-tcp: false } }&quot;)\nEOF\n  [ -n &quot;$PORT_TROJAN&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n\n$(info &quot;- {name: \\&quot;${NODE_NAME} trojan\\&quot;, type: trojan, server: ${SERVER_IP}, port: ${PORT_TROJAN}, password: ${UUID}, client-fingerprint: random, skip-cert-verify: true, smux: { enabled: true, protocol: &#039;h2mux&#039;, padding: true, max-connections: &#039;8&#039;, min-streams: &#039;16&#039;, statistic: true, only-tcp: false } }&quot;)\nEOF\n  [ -n &quot;$PORT_VMESS_WS&quot; ] &amp;&amp; TYPE_HOST_DOMAIN=$VMESS_HOST_DOMAIN &amp;&amp; TYPE_PORT_WS=$PORT_VMESS_WS &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n\n$(info &quot;- {name: \\&quot;${NODE_NAME} vmess ws\\&quot;, type: vmess, server: ${CDN}, port: 80, uuid: ${UUID}, udp: true, tls: false, alterId: 0, cipher: none, skip-cert-verify: true, network: ws, ws-opts: { path: \\&quot;\/${UUID}-vmess\\&quot;, headers: { Host: ${VMESS_HOST_DOMAIN}, max-early-data: 2048, early-data-header-name: Sec-WebSocket-Protocol} }, smux: { enabled: true, protocol: &#039;h2mux&#039;, padding: true, max-connections: &#039;8&#039;, min-streams: &#039;16&#039;, statistic: true, only-tcp: false } }\n\n$(text 52)&quot;)\nEOF\n  [ -n &quot;$PORT_VLESS_WS&quot; ] &amp;&amp; TYPE_HOST_DOMAIN=$VLESS_HOST_DOMAIN &amp;&amp; TYPE_PORT_WS=$PORT_VLESS_WS &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n\n$(info &quot;- {name: \\&quot;${NODE_NAME} vless ws\\&quot;, type: vless, server: ${CDN}, port: 443, uuid: ${UUID}, udp: true, tls: true, servername: ${VLESS_HOST_DOMAIN}, network: ws, skip-cert-verify: true, ws-opts: { path: \\&quot;\/${UUID}-vless?ed=2048\\&quot;, headers: { Host: ${VLESS_HOST_DOMAIN} } }, smux: { enabled: true, protocol: &#039;h2mux&#039;, padding: true, max-connections: &#039;8&#039;, min-streams: &#039;16&#039;, statistic: true, only-tcp: false } }\n\n$(text 52)&quot;)\nEOF\n  [ -n &quot;$PORT_GRPC_REALITY&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n\n$(info &quot;- {name: \\&quot;${NODE_NAME} vless-reality-grpc\\&quot;, type: vless, server: ${SERVER_IP}, port: ${PORT_GRPC_REALITY}, uuid: ${UUID}, network: grpc, tls: true, udp: true, flow:, client-fingerprint: chrome, servername: ${TLS_SERVER}, grpc-opts: {  grpc-service-name: \\&quot;grpc\\&quot; }, reality-opts: { public-key: ${REALITY_PUBLIC}, short-id: \\&quot;\\&quot; }, smux: { enabled: true, protocol: &#039;h2mux&#039;, padding: true, max-connections: &#039;8&#039;, min-streams: &#039;16&#039;, statistic: true, only-tcp: false } }&quot;)\nEOF\n\n  cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n\n*******************************************\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502                \u2502\n\u2502    $(warning &quot;NekoBox&quot;)     \u2502\n\u2502                \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\nEOF\n  [ -n &quot;$PORT_XTLS_REALITY&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n----------------------------\n$(hint &quot;vless:\/\/${UUID}@${SERVER_IP_1}:${PORT_XTLS_REALITY}?security=reality&amp;sni=${TLS_SERVER}&amp;fp=chrome&amp;pbk=${REALITY_PUBLIC}&amp;type=tcp&amp;encryption=none#${NODE_NAME}%20xtls-reality&quot;)\nEOF\n  [ -n &quot;$PORT_HYSTERIA2&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n----------------------------\n$(hint &quot;hy2:\/\/${UUID}@${SERVER_IP_1}:${PORT_HYSTERIA2}?obfs=salamander&amp;obfs-password=${UUID}&amp;insecure=1#${NODE_NAME}%20hysteria2&quot;)\nEOF\n  [ -n &quot;$PORT_TUIC&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n----------------------------\n$(hint &quot;tuic:\/\/${UUID}:${UUID}@${SERVER_IP_1}:${PORT_TUIC}?congestion_control=bbr&amp;alpn=h3&amp;udp_relay_mode=native&amp;allow_insecure=1&amp;disable_sni=1#${NODE_NAME}%20tuic&quot;)\nEOF\n  [ -n &quot;$PORT_SHADOWTLS&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n----------------------------\n$(hint &quot;nekoray:\/\/custom#$(base64 -w0 &lt;&lt;&lt; &quot;{\\&quot;_v\\&quot;:0,\\&quot;addr\\&quot;:\\&quot;127.0.0.1\\&quot;,\\&quot;cmd\\&quot;:[\\&quot;\\&quot;],\\&quot;core\\&quot;:\\&quot;internal\\&quot;,\\&quot;cs\\&quot;:\\&quot;{\\n    \\\\\\&quot;password\\\\\\&quot;: \\\\\\&quot;${UUID}\\\\\\&quot;,\\n    \\\\\\&quot;server\\\\\\&quot;: \\\\\\&quot;${SERVER_IP_1}\\\\\\&quot;,\\n    \\\\\\&quot;server_port\\\\\\&quot;: ${PORT_SHADOWTLS},\\n    \\\\\\&quot;tag\\\\\\&quot;: \\\\\\&quot;shadowtls-out\\\\\\&quot;,\\n    \\\\\\&quot;tls\\\\\\&quot;: {\\n        \\\\\\&quot;enabled\\\\\\&quot;: true,\\n        \\\\\\&quot;server_name\\\\\\&quot;: \\\\\\&quot;addons.mozilla.org\\\\\\&quot;\\n    },\\n    \\\\\\&quot;type\\\\\\&quot;: \\\\\\&quot;shadowtls\\\\\\&quot;,\\n    \\\\\\&quot;version\\\\\\&quot;: 3\\n}\\n\\&quot;,\\&quot;mapping_port\\&quot;:0,\\&quot;name\\&quot;:\\&quot;1-tls-not-use\\&quot;,\\&quot;port\\&quot;:1080,\\&quot;socks_port\\&quot;:0}&quot;)\n\nnekoray:\/\/shadowsocks#$(base64 -w0 &lt;&lt;&lt; &quot;{\\&quot;_v\\&quot;:0,\\&quot;method\\&quot;:\\&quot;2022-blake3-aes-128-gcm\\&quot;,\\&quot;name\\&quot;:\\&quot;2-ss-not-use\\&quot;,\\&quot;pass\\&quot;:\\&quot;${SHADOWTLS_PASSWORD}\\&quot;,\\&quot;port\\&quot;:0,\\&quot;stream\\&quot;:{\\&quot;ed_len\\&quot;:0,\\&quot;insecure\\&quot;:false,\\&quot;mux_s\\&quot;:0,\\&quot;net\\&quot;:\\&quot;tcp\\&quot;},\\&quot;uot\\&quot;:0}&quot;)\n\n $(text 48)&quot;)\nEOF\n  [ -n &quot;$PORT_SHADOWSOCKS&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n----------------------------\n$(hint &quot;ss:\/\/$(base64 -w0 &lt;&lt;&lt; aes-128-gcm:${UUID} | sed &quot;s\/Cg==$\/\/&quot;)@${SERVER_IP_1}:${PORT_SHADOWSOCKS}#${NODE_NAME}%20ss&quot;)\nEOF\n  [ -n &quot;$PORT_TROJAN&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n----------------------------\n$(hint &quot;trojan:\/\/${UUID}@${SERVER_IP_1}:${PORT_TROJAN}?security=tls&amp;allowInsecure=1&amp;fp=random&amp;type=tcp#${NODE_NAME}%20trojan&quot;)\nEOF\n  [ -n &quot;$PORT_VMESS_WS&quot; ] &amp;&amp; TYPE_HOST_DOMAIN=$VMESS_HOST_DOMAIN &amp;&amp; TYPE_PORT_WS=$PORT_VMESS_WS &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n----------------------------\n$(hint &quot;vmess:\/\/$(base64 -w0 &lt;&lt;&lt; &quot;{\\&quot;add\\&quot;:\\&quot;${CDN}\\&quot;,\\&quot;aid\\&quot;:\\&quot;0\\&quot;,\\&quot;host\\&quot;:\\&quot;${VMESS_HOST_DOMAIN}\\&quot;,\\&quot;id\\&quot;:\\&quot;${UUID}\\&quot;,\\&quot;net\\&quot;:\\&quot;ws\\&quot;,\\&quot;path\\&quot;:\\&quot;\/${UUID}-vmess\\&quot;,\\&quot;port\\&quot;:\\&quot;80\\&quot;,\\&quot;ps\\&quot;:\\&quot;${NODE_NAME} vmess ws\\&quot;,\\&quot;scy\\&quot;:\\&quot;none\\&quot;,\\&quot;sni\\&quot;:\\&quot;\\&quot;,\\&quot;tls\\&quot;:\\&quot;\\&quot;,\\&quot;type\\&quot;:\\&quot;\\&quot;,\\&quot;v\\&quot;:\\&quot;2\\&quot;}&quot; | sed &quot;s\/Cg==$\/\/&quot;)\n\n$(text 52)&quot;)\nEOF\n  [ -n &quot;$PORT_VLESS_WS&quot; ] &amp;&amp; TYPE_HOST_DOMAIN=$VLESS_HOST_DOMAIN &amp;&amp; TYPE_PORT_WS=$PORT_VLESS_WS &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n----------------------------\n$(hint &quot;vless:\/\/${UUID}@${CDN}:443?security=tls&amp;sni=${VLESS_HOST_DOMAIN}&amp;type=ws&amp;path=\/${UUID}-vless?ed%3D2048&amp;host=${VLESS_HOST_DOMAIN}&amp;encryption=none#${NODE_NAME}%20vless%20ws\n\n$(text 52)&quot;)\nEOF\n  [ -n &quot;$PORT_H2_REALITY&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n----------------------------\n$(hint &quot;vless:\/\/${UUID}@${SERVER_IP_1}:${PORT_H2_REALITY}?security=reality&amp;sni=${TLS_SERVER}&amp;alpn=h2&amp;fp=chrome&amp;pbk=${REALITY_PUBLIC}&amp;type=http&amp;encryption=none#${NODE_NAME}%20h2-reality-vision&quot;)\nEOF\n  [ -n &quot;$PORT_GRPC_REALITY&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n----------------------------\n$(hint &quot;vless:\/\/${UUID}@${SERVER_IP_1}:${PORT_GRPC_REALITY}?security=reality&amp;sni=${TLS_SERVER}&amp;fp=chrome&amp;pbk=${REALITY_PUBLIC}&amp;type=grpc&amp;serviceName=grpc&amp;encryption=none#${NODE_NAME}%20grpc-reality-vision&quot;)\nEOF\n\n  cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n\n*******************************************\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502                \u2502\n\u2502    $(warning &quot;Sing-box&quot;)    \u2502\n\u2502                \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n----------------------------\n$(info &quot;{\n  \\&quot;outbounds\\&quot;:[&quot;)\nEOF\n  [ -n &quot;$PORT_XTLS_REALITY&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n$(info &quot;      {\n        \\&quot;type\\&quot;: \\&quot;vless\\&quot;,\n        \\&quot;tag\\&quot;: \\&quot;${NODE_NAME} xtls-reality\\&quot;,\n        \\&quot;server\\&quot;:\\&quot;${SERVER_IP}\\&quot;,\n        \\&quot;server_port\\&quot;:${PORT_XTLS_REALITY},\n        \\&quot;uuid\\&quot;:\\&quot;${UUID}\\&quot;,\n        \\&quot;flow\\&quot;:\\&quot;\\&quot;,\n        \\&quot;packet_encoding\\&quot;:\\&quot;xudp\\&quot;,\n        \\&quot;tls\\&quot;:{\n            \\&quot;enabled\\&quot;:true,\n            \\&quot;server_name\\&quot;:\\&quot;${TLS_SERVER}\\&quot;,\n            \\&quot;utls\\&quot;:{\n                \\&quot;enabled\\&quot;:true,\n                \\&quot;fingerprint\\&quot;:\\&quot;chrome\\&quot;\n            },\n            \\&quot;reality\\&quot;:{\n                \\&quot;enabled\\&quot;:true,\n                \\&quot;public_key\\&quot;:\\&quot;${REALITY_PUBLIC}\\&quot;,\n                \\&quot;short_id\\&quot;:\\&quot;\\&quot;\n            }\n        },\n        \\&quot;multiplex\\&quot;: {\n          \\&quot;enabled\\&quot;: true,\n          \\&quot;protocol\\&quot;: \\&quot;h2mux\\&quot;,\n          \\&quot;max_connections\\&quot;: 8,\n          \\&quot;min_streams\\&quot;: 16,\n          \\&quot;padding\\&quot;: true\n        }\n      },&quot;)\nEOF\n  [ -n &quot;$PORT_HYSTERIA2&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n$(info &quot;      {\n        \\&quot;type\\&quot;: \\&quot;hysteria2\\&quot;,\n        \\&quot;tag\\&quot;: \\&quot;${NODE_NAME} hysteria2\\&quot;,\n        \\&quot;server\\&quot;: \\&quot;${SERVER_IP}\\&quot;,\n        \\&quot;server_port\\&quot;: ${PORT_HYSTERIA2},\n        \\&quot;up_mbps\\&quot;: 200,\n        \\&quot;down_mbps\\&quot;: 1000,\n        \\&quot;obfs\\&quot;: {\n          \\&quot;type\\&quot;: \\&quot;salamander\\&quot;,\n          \\&quot;password\\&quot;: \\&quot;${UUID}\\&quot;\n        },\n        \\&quot;password\\&quot;: \\&quot;${UUID}\\&quot;,\n        \\&quot;tls\\&quot;: {\n            \\&quot;enabled\\&quot;: true,\n            \\&quot;insecure\\&quot;: true,\n            \\&quot;server_name\\&quot;: \\&quot;\\&quot;,\n            \\&quot;alpn\\&quot;: [ \\&quot;h3\\&quot; ]\n        }\n      },&quot;)\nEOF\n  [ -n &quot;$PORT_TUIC&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n$(info &quot;      {\n        \\&quot;type\\&quot;: \\&quot;tuic\\&quot;,\n        \\&quot;tag\\&quot;: \\&quot;${NODE_NAME} tuic\\&quot;,\n        \\&quot;server\\&quot;: \\&quot;${SERVER_IP}\\&quot;,\n        \\&quot;server_port\\&quot;: ${PORT_TUIC},\n        \\&quot;uuid\\&quot;: \\&quot;${UUID}\\&quot;,\n        \\&quot;password\\&quot;: \\&quot;${UUID}\\&quot;,\n        \\&quot;congestion_control\\&quot;: \\&quot;bbr\\&quot;,\n        \\&quot;udp_relay_mode\\&quot;: \\&quot;native\\&quot;,\n        \\&quot;zero_rtt_handshake\\&quot;: false,\n        \\&quot;heartbeat\\&quot;: \\&quot;10s\\&quot;,\n        \\&quot;tls\\&quot;: {\n            \\&quot;enabled\\&quot;: true,\n            \\&quot;insecure\\&quot;: true,\n            \\&quot;server_name\\&quot;: \\&quot;\\&quot;,\n            \\&quot;alpn\\&quot;: [ \\&quot;h3\\&quot; ]\n        }\n      },&quot;)\nEOF\n  [ -n &quot;$PORT_SHADOWTLS&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n$(info &quot;      {\n        \\&quot;type\\&quot;: \\&quot;shadowsocks\\&quot;,\n        \\&quot;tag\\&quot;: \\&quot;${NODE_NAME} ShadowTLS v3\\&quot;,\n        \\&quot;method\\&quot;: \\&quot;2022-blake3-aes-128-gcm\\&quot;,\n        \\&quot;password\\&quot;: \\&quot;${SHADOWTLS_PASSWORD}\\&quot;,\n        \\&quot;detour\\&quot;: \\&quot;shadowtls-out\\&quot;,\n        \\&quot;udp_over_tcp\\&quot;: false,\n        \\&quot;multiplex\\&quot;: {\n          \\&quot;enabled\\&quot;: true,\n          \\&quot;protocol\\&quot;: \\&quot;h2mux\\&quot;,\n          \\&quot;max_connections\\&quot;: 8,\n          \\&quot;min_streams\\&quot;: 16,\n          \\&quot;padding\\&quot;: true\n        }\n      },\n      {\n        \\&quot;type\\&quot;: \\&quot;shadowtls\\&quot;,\n        \\&quot;tag\\&quot;: \\&quot;shadowtls-out\\&quot;,\n        \\&quot;server\\&quot;: \\&quot;${SERVER_IP}\\&quot;,\n        \\&quot;server_port\\&quot;: ${PORT_SHADOWTLS},\n        \\&quot;version\\&quot;: 3,\n        \\&quot;password\\&quot;: \\&quot;${UUID}\\&quot;,\n        \\&quot;tls\\&quot;: {\n          \\&quot;enabled\\&quot;: true,\n          \\&quot;server_name\\&quot;: \\&quot;${TLS_SERVER}\\&quot;,\n          \\&quot;utls\\&quot;: {\n            \\&quot;enabled\\&quot;: true,\n            \\&quot;fingerprint\\&quot;: \\&quot;chrome\\&quot;\n          }\n        }\n      },&quot;)\nEOF\n  [ -n &quot;$PORT_SHADOWSOCKS&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n$(info &quot;      {\n        \\&quot;type\\&quot;: \\&quot;shadowsocks\\&quot;,\n        \\&quot;tag\\&quot;: \\&quot;${NODE_NAME} ss\\&quot;,\n        \\&quot;server\\&quot;: \\&quot;${SERVER_IP}\\&quot;,\n        \\&quot;server_port\\&quot;: ${PORT_SHADOWSOCKS},\n        \\&quot;method\\&quot;: \\&quot;aes-128-gcm\\&quot;,\n        \\&quot;password\\&quot;: \\&quot;${UUID}\\&quot;,\n        \\&quot;multiplex\\&quot;: {\n          \\&quot;enabled\\&quot;: true,\n          \\&quot;protocol\\&quot;: \\&quot;h2mux\\&quot;,\n          \\&quot;max_connections\\&quot;: 8,\n          \\&quot;min_streams\\&quot;: 16,\n          \\&quot;padding\\&quot;: true\n        }\n      },&quot;)\nEOF\n  [ -n &quot;$PORT_TROJAN&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n$(info &quot;      {\n        \\&quot;type\\&quot;: \\&quot;trojan\\&quot;,\n        \\&quot;tag\\&quot;: \\&quot;${NODE_NAME} trojan\\&quot;,\n        \\&quot;server\\&quot;: \\&quot;${SERVER_IP}\\&quot;,\n        \\&quot;server_port\\&quot;: ${PORT_TROJAN},\n        \\&quot;password\\&quot;: \\&quot;${UUID}\\&quot;,\n        \\&quot;tls\\&quot;: {\n          \\&quot;enabled\\&quot;:true,\n          \\&quot;insecure\\&quot;: true,\n          \\&quot;server_name\\&quot;:\\&quot;\\&quot;,\n          \\&quot;utls\\&quot;: {\n            \\&quot;enabled\\&quot;:true,\n            \\&quot;fingerprint\\&quot;:\\&quot;chrome\\&quot;\n          }\n        },\n        \\&quot;multiplex\\&quot;: {\n          \\&quot;enabled\\&quot;:true,\n          \\&quot;protocol\\&quot;:\\&quot;h2mux\\&quot;,\n          \\&quot;max_connections\\&quot;: 8,\n          \\&quot;min_streams\\&quot;: 16,\n          \\&quot;padding\\&quot;: true\n        }\n      },&quot;)\nEOF\n  [ -n &quot;$PORT_VMESS_WS&quot; ] &amp;&amp; TYPE_HOST_DOMAIN=$VMESS_HOST_DOMAIN &amp;&amp; TYPE_PORT_WS=$PORT_VMESS_WS &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n$(info &quot;      {\n        \\&quot;type\\&quot;: \\&quot;vmess\\&quot;,\n        \\&quot;tag\\&quot;: \\&quot;${NODE_NAME} vmess ws\\&quot;,\n        \\&quot;server\\&quot;:\\&quot;${CDN}\\&quot;,\n        \\&quot;server_port\\&quot;:80,\n        \\&quot;uuid\\&quot;:\\&quot;${UUID}\\&quot;,\n        \\&quot;transport\\&quot;: {\n          \\&quot;type\\&quot;:\\&quot;ws\\&quot;,\n          \\&quot;path\\&quot;:\\&quot;\/${UUID}-vmess\\&quot;,\n          \\&quot;headers\\&quot;: {\n            \\&quot;Host\\&quot;: \\&quot;${VMESS_HOST_DOMAIN}\\&quot;\n          },\n          \\&quot;max_early_data\\&quot;:2048,\n          \\&quot;early_data_header_name\\&quot;:\\&quot;Sec-WebSocket-Protocol\\&quot;\n        },\n        \\&quot;multiplex\\&quot;: {\n          \\&quot;enabled\\&quot;:true,\n          \\&quot;protocol\\&quot;:\\&quot;h2mux\\&quot;,\n          \\&quot;max_streams\\&quot;:16,\n          \\&quot;padding\\&quot;: true\n        }\n      },&quot;)\nEOF\n  [ -n &quot;$PORT_VLESS_WS&quot; ] &amp;&amp; TYPE_HOST_DOMAIN=$VLESS_HOST_DOMAIN &amp;&amp; TYPE_PORT_WS=$PORT_VLESS_WS &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n$(info &quot;      {\n        \\&quot;type\\&quot;: \\&quot;vless\\&quot;,\n        \\&quot;tag\\&quot;: \\&quot;${NODE_NAME} vless ws\\&quot;,\n        \\&quot;server\\&quot;:\\&quot;${CDN}\\&quot;,\n        \\&quot;server_port\\&quot;:443,\n        \\&quot;uuid\\&quot;:\\&quot;${UUID}\\&quot;,\n        \\&quot;tls\\&quot;: {\n          \\&quot;enabled\\&quot;:true,\n          \\&quot;server_name\\&quot;:\\&quot;${VLESS_HOST_DOMAIN}\\&quot;,\n          \\&quot;utls\\&quot;: {\n            \\&quot;enabled\\&quot;:true,\n            \\&quot;fingerprint\\&quot;:\\&quot;chrome\\&quot;\n          }\n        },\n        \\&quot;transport\\&quot;: {\n          \\&quot;type\\&quot;:\\&quot;ws\\&quot;,\n          \\&quot;path\\&quot;:\\&quot;\/${UUID}-vless\\&quot;,\n          \\&quot;headers\\&quot;: {\n            \\&quot;Host\\&quot;: \\&quot;${VLESS_HOST_DOMAIN}\\&quot;\n          },\n          \\&quot;max_early_data\\&quot;:2048,\n          \\&quot;early_data_header_name\\&quot;:\\&quot;Sec-WebSocket-Protocol\\&quot;\n        },\n        \\&quot;multiplex\\&quot;: {\n          \\&quot;enabled\\&quot;:true,\n          \\&quot;protocol\\&quot;:\\&quot;h2mux\\&quot;,\n          \\&quot;max_streams\\&quot;:16,\n          \\&quot;padding\\&quot;: true\n        }\n      },&quot;)\nEOF\n  [ -n &quot;$PORT_H2_REALITY&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n$(info &quot;      {\n        \\&quot;type\\&quot;: \\&quot;vless\\&quot;,\n        \\&quot;tag\\&quot;: \\&quot;${NODE_NAME} h2-reality-vision\\&quot;,\n         \\&quot;server\\&quot;: \\&quot;${SERVER_IP}\\&quot;,\n        \\&quot;server_port\\&quot;: ${PORT_H2_REALITY},\n        \\&quot;uuid\\&quot;:\\&quot;${UUID}\\&quot;,\n        \\&quot;tls\\&quot;: {\n          \\&quot;enabled\\&quot;:true,\n          \\&quot;server_name\\&quot;:\\&quot;${TLS_SERVER}\\&quot;,\n          \\&quot;utls\\&quot;: {\n            \\&quot;enabled\\&quot;:true,\n            \\&quot;fingerprint\\&quot;:\\&quot;chrome\\&quot;\n          },\n          \\&quot;reality\\&quot;:{\n              \\&quot;enabled\\&quot;:true,\n              \\&quot;public_key\\&quot;:\\&quot;${REALITY_PUBLIC}\\&quot;,\n              \\&quot;short_id\\&quot;:\\&quot;\\&quot;\n          }\n        },\n        \\&quot;packet_encoding\\&quot;: \\&quot;xudp\\&quot;,\n        \\&quot;transport\\&quot;: {\n            \\&quot;type\\&quot;: \\&quot;http\\&quot;\n        },\n        \\&quot;multiplex\\&quot;: {\n          \\&quot;enabled\\&quot;:true,\n          \\&quot;protocol\\&quot;:\\&quot;h2mux\\&quot;,\n          \\&quot;max_streams\\&quot;:16,\n          \\&quot;padding\\&quot;: true\n        }\n      },&quot;)\nEOF\n  [ -n &quot;$PORT_GRPC_REALITY&quot; ] &amp;&amp; cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n$(info &quot;      {\n        \\&quot;type\\&quot;: \\&quot;vless\\&quot;,\n        \\&quot;tag\\&quot;: \\&quot;${NODE_NAME} grpc-reality-vision\\&quot;,\n        \\&quot;server\\&quot;: \\&quot;${SERVER_IP}\\&quot;,\n        \\&quot;server_port\\&quot;: ${PORT_GRPC_REALITY},\n        \\&quot;uuid\\&quot;:\\&quot;${UUID}\\&quot;,\n        \\&quot;tls\\&quot;: {\n          \\&quot;enabled\\&quot;:true,\n          \\&quot;server_name\\&quot;:\\&quot;${TLS_SERVER}\\&quot;,\n          \\&quot;utls\\&quot;: {\n            \\&quot;enabled\\&quot;:true,\n            \\&quot;fingerprint\\&quot;:\\&quot;chrome\\&quot;\n          },\n          \\&quot;reality\\&quot;:{\n              \\&quot;enabled\\&quot;:true,\n              \\&quot;public_key\\&quot;:\\&quot;${REALITY_PUBLIC}\\&quot;,\n              \\&quot;short_id\\&quot;:\\&quot;\\&quot;\n          }\n        },\n        \\&quot;packet_encoding\\&quot;: \\&quot;xudp\\&quot;,\n        \\&quot;transport\\&quot;: {\n            \\&quot;type\\&quot;: \\&quot;grpc\\&quot;,\n            \\&quot;service_name\\&quot;: \\&quot;grpc\\&quot;\n        }\n      },&quot;)\nEOF\n\nsed -i &#039;$s\/},\/}\/&#039; $WORK_DIR\/list\n\n  cat &gt;&gt; $WORK_DIR\/list &lt;&lt; EOF\n$(info &quot;  ]\n}\n\n $(text 72)&quot;)\nEOF\n\n  [ -n &quot;$PORT_VMESS_WS&quot; ] &amp;&amp; TYPE_HOST_DOMAIN=$VMESS_HOST_DOMAIN &amp;&amp; TYPE_PORT_WS=$PORT_VMESS_WS &amp;&amp; hint &quot;\\n $(text 52)&quot; &gt;&gt; $WORK_DIR\/list\n\n  [ -n &quot;$PORT_VLESS_WS&quot; ] &amp;&amp; TYPE_HOST_DOMAIN=$VLESS_HOST_DOMAIN &amp;&amp; TYPE_PORT_WS=$PORT_VLESS_WS &amp;&amp; hint &quot;\\n $(text 52)&quot; &gt;&gt; $WORK_DIR\/list\n\n  # \u663e\u793a\u8282\u70b9\u4fe1\u606f\n  cat $WORK_DIR\/list\n\n  # \u663e\u793a\u811a\u672c\u4f7f\u7528\u60c5\u51b5\u6570\u636e\n  info &quot;\\n $(text 55) \\n&quot;\n}\n\n# \u521b\u5efa\u5feb\u6377\u65b9\u5f0f\ncreate_shortcut() {\n  cat &gt; $WORK_DIR\/sb.sh &lt;&lt; EOF\n#!\/usr\/bin\/env bash\n\nbash &lt;(wget --no-check-certificate -qO- https:\/\/raw.githubusercontent.com\/fscarmen\/sing-box\/main\/sing-box.sh) \\$1\nEOF\n  chmod +x $WORK_DIR\/sb.sh\n  ln -sf $WORK_DIR\/sb.sh \/usr\/bin\/sb\n  [ -s \/usr\/bin\/sb ] &amp;&amp; info &quot;\\n $(text 71) &quot;\n}\n\n# \u66f4\u6362\u5404\u534f\u8bae\u7684\u76d1\u542c\u7aef\u53e3\nchange_start_port() {\n  OLD_PORTS=$(awk -F &#039;:|,&#039; &#039;\/listen_port\/{print $2}&#039; $WORK_DIR\/conf\/*)\n  OLD_START_PORT=$(awk &#039;NR == 1 { min = $0 } { if ($0 &lt; min) min = $0; count++ } END {print min}&#039; &lt;&lt;&lt; &quot;$OLD_PORTS&quot;)\n  OLD_CONSECUTIVE_PORTS=$(awk &#039;END { print NR }&#039; &lt;&lt;&lt; &quot;$OLD_PORTS&quot;)\n  enter_start_port $OLD_CONSECUTIVE_PORTS\n  systemctl stop sing-box\n  for ((a=0; a&lt;$OLD_CONSECUTIVE_PORTS; a++)) do\n    [ -s $WORK_DIR\/conf\/${CONF_FILES[a]} ] &amp;&amp; sed -i &quot;s\/\\(.*listen_port.*:\\)$((OLD_START_PORT+a))\/\\1$((START_PORT+a))\/&quot; $WORK_DIR\/conf\/*\n  done\n  systemctl start sing-box\n  sleep 2\n  export_list\n  [ &quot;$(systemctl is-active sing-box)&quot; = &#039;active&#039; ] &amp;&amp; info &quot; Sing-box $(text 30) $(text 37) &quot; || error &quot; Sing-box $(text 30) $(text 38) &quot;\n}\n\n# \u589e\u52a0\u6216\u5220\u9664\u534f\u8bae\nchange_protocols() {\n  check_install\n  [ &quot;$STATUS&quot; = &quot;$(text 26)&quot; ] &amp;&amp; error &quot;\\n Sing-box $(text 26) &quot;\n\n  # \u67e5\u627e\u5df2\u5b89\u88c5\u7684\u534f\u8bae\uff0c\u5e76\u904d\u5386\u5176\u5728\u6240\u6709\u534f\u8bae\u5217\u8868\u4e2d\u7684\u540d\u79f0\uff0c\u83b7\u53d6\u534f\u8bae\u540d\u540e\u5b58\u653e\u5728 EXISTED_PROTOCOLS\n  EXISTED_CHECK=($(sed -n &quot;\/tag\/s\/.*\\&quot;tag\\&quot;:\\&quot;\\(.*\\)-in.*\/\\1\/gp&quot; $WORK_DIR\/conf\/*_inbounds.json | sed &quot;s\/xtls-reality\/XTLS@+@reality\/; s\/shadowtls\/shadowTLS\/; s\/vmess-ws\/vmess@+@ws\/; s\/vless-ws\/vless@+@ws@+@tls\/; s\/h2-reality\/H2@+@reality\/; s\/grpc-reality\/gRPC@+@reality\/&quot;))\n  for f in &quot;${EXISTED_CHECK[@]}&quot;; do\n    [[ &quot;$(tr &#039;A-Z&#039; &#039;a-z&#039; &lt;&lt;&lt; &quot;${PROTOCOL_LIST[@]\/\/ \/@}&quot;)&quot; =~ &quot;$(tr &#039;A-Z&#039; &#039;a-z&#039; &lt;&lt;&lt; &quot;$f&quot;)&quot; ]] &amp;&amp; EXISTED_PROTOCOLS+=(&quot;$f&quot;)\n  done\n\n  # \u67e5\u627e\u672a\u5b89\u88c5\u7684\u534f\u8bae\uff0c\u5e76\u904d\u5386\u6240\u6709\u534f\u8bae\u5217\u8868\u7684\u6570\u7ec4\uff0c\u83b7\u53d6\u534f\u8bae\u540d\u540e\u5b58\u653e\u5728 NOT_EXISTED_PROTOCOLS\n  for g in &quot;${PROTOCOL_LIST[@]\/\/ \/@}&quot;; do\n    [[ ! &quot;${EXISTED_CHECK[@]}&quot; =~ &quot;$g&quot; ]] &amp;&amp; NOT_EXISTED_PROTOCOLS+=(&quot;$g&quot;)\n  done\n\n  # \u5217\u51fa\u5df2\u5b89\u88c5\u534f\u8bae\n  hint &quot;\\n $(text 63) (${#EXISTED_PROTOCOLS[@]})&quot;\n  for h in &quot;${!EXISTED_PROTOCOLS[@]}&quot;; do\n    hint &quot; $(asc $[h+97]). ${EXISTED_PROTOCOLS[h]\/\/@\/ } &quot;\n  done\n\n  # \u4ece\u5df2\u5b89\u88c5\u7684\u534f\u8bae\u4e2d\u9009\u62e9\u9700\u8981\u5220\u9664\u7684\u534f\u8bae\u540d\uff0c\u5e76\u5b58\u653e\u5728 REMOVE_PROTOCOLS\uff0c\u628a\u4fdd\u5b58\u7684\u534f\u8bae\u7684\u534f\u8bae\u5b58\u653e\u5728 KEEP_PROTOCOLS\n  reading &quot;\\n $(text 64) &quot; REMOVE_SELECT\n  for ((j=0; j&lt;${#REMOVE_SELECT}; j++)); do\n    REMOVE_PROTOCOLS+=(${EXISTED_PROTOCOLS[$[$(asc &quot;$(awk &quot;NR==$[j+1] {print}&quot; &lt;&lt;&lt; &quot;$(grep -o . &lt;&lt;&lt; &quot;$REMOVE_SELECT&quot;)&quot;)&quot;) - 97]]})\n  done\n\n  for k in &quot;${EXISTED_PROTOCOLS[@]}&quot;; do\n    [[ ! &quot;${REMOVE_PROTOCOLS[@]}&quot; =~ &quot;$k&quot; ]] &amp;&amp; KEEP_PROTOCOLS+=(&quot;$k&quot;)\n  done\n\n  # \u5982\u6709\u672a\u5b89\u88c5\u7684\u534f\u8bae\uff0c\u5217\u8868\u663e\u793a\u5e76\u9009\u62e9\u5b89\u88c5\uff0c\u628a\u589e\u52a0\u7684\u534f\u8bae\u5b58\u5728\u653e\u5728 ADD_PROTOCOLS\n  if [ &quot;${#NOT_EXISTED_PROTOCOLS[@]}&quot; -gt 0 ]; then\n    hint &quot;\\n $(text 65) (${#NOT_EXISTED_PROTOCOLS}) &quot;\n    for i in &quot;${!NOT_EXISTED_PROTOCOLS[@]}&quot;; do\n      hint &quot; $(asc $[i+97]). ${NOT_EXISTED_PROTOCOLS[i]\/\/@\/ } &quot;\n    done\n    reading &quot;\\n $(text 66) &quot; ADD_SELECT\n\n    for ((l=0; l&lt;${#ADD_SELECT}; l++)); do\n      ADD_PROTOCOLS+=(${NOT_EXISTED_PROTOCOLS[$[$(asc &quot;$(awk &quot;NR==$[l+1] {print}&quot; &lt;&lt;&lt; &quot;$(grep -o . &lt;&lt;&lt; &quot;$ADD_SELECT&quot;)&quot;)&quot;) - 97]]})\n    done\n  fi\n\n  # \u91cd\u65b0\u5b89\u88c5 = \u4fdd\u7559 + \u65b0\u589e\uff0c\u5982\u6570\u91cf\u4e3a 0 \uff0c\u5219\u89e6\u53d1\u5378\u8f7d\n  REINSTALL_PROTOCOLS=(${KEEP_PROTOCOLS[@]} ${ADD_PROTOCOLS[@]})\n  [ &quot;${#REINSTALL_PROTOCOLS[@]}&quot; = 0 ] &amp;&amp; error &quot;\\n $(text 73) &quot;\n\n  # \u663e\u793a\u91cd\u65b0\u5b89\u88c5\u7684\u534f\u8bae\u5217\u8868\uff0c\u5e76\u786e\u8ba4\u662f\u5426\u6b63\u786e\n  hint &quot;\\n $(text 67) (${#REINSTALL_PROTOCOLS[@]}) &quot;\n  [ &quot;${#KEEP_PROTOCOLS[@]}&quot; -gt 0 ] &amp;&amp; hint &quot;\\n $(text 74) (${#KEEP_PROTOCOLS[@]}) &quot;\n  for r in &quot;${!KEEP_PROTOCOLS[@]}&quot;; do\n    hint &quot; $[r+1]. ${KEEP_PROTOCOLS[r]\/\/@\/ } &quot;\n  done\n\n  [ &quot;${#ADD_PROTOCOLS[@]}&quot; -gt 0 ] &amp;&amp; hint &quot;\\n $(text 75) (${#ADD_PROTOCOLS[@]}) &quot;\n  for r in &quot;${!ADD_PROTOCOLS[@]}&quot;; do\n    hint &quot; $[r+1]. ${ADD_PROTOCOLS[r]\/\/@\/ } &quot;\n  done\n\n  reading &quot;\\n $(text 68) &quot; CONFIRM\n  [[ &quot;$CONFIRM&quot; = [Nn] ]] &amp;&amp; exit 0\n\n  # \u628a\u786e\u8ba4\u5b89\u88c5\u7684\u534f\u8bae\u904d\u5386\u6240\u6709\u534f\u8bae\u5217\u8868\u7684\u6570\u7ec4\uff0c\u627e\u51fa\u5176\u4e0b\u6807\u5e76\u53d8\u4e3a\u82f1\u6587\u5c0f\u5199\u7684\u5f62\u5f0f\n  for m in &quot;${!REINSTALL_PROTOCOLS[@]}&quot;; do\n    for n in &quot;${!PROTOCOL_LIST[@]}&quot;; do\n      if [[ &quot;$(awk -F &#039;@&#039; &#039;{print $1}&#039; &lt;&lt;&lt; &quot;${REINSTALL_PROTOCOLS[m]}&quot;)&quot; = &quot;$(awk -F &#039; &#039; &#039;{print $1}&#039; &lt;&lt;&lt; &quot;${PROTOCOL_LIST[n]}&quot;)&quot; ]]; then\n        INSTALL_PROTOCOLS+=($(asc $[n+98]))\n      fi\n    done\n  done\n\n  systemctl stop sing-box\n\n  # \u83b7\u53d6\u539f\u6709\u5404\u534f\u8bae\u7684\u53c2\u6570\n  if [ -s $WORK_DIR\/list ]; then\n    SERVER_IP=$(sed -r &quot;s\/\\x1B\\[[0-9;]*[mG]\/\/g&quot; $WORK_DIR\/list | sed -n &quot;s\/.*{name.*server:[ ]*\\([^,]\\+\\).*\/\\1\/pg&quot; | sed -n &#039;1p&#039;)\n    UUID=$(sed -r &quot;s\/\\x1B\\[[0-9;]*[mG]\/\/g&quot; $WORK_DIR\/list | grep -m1 &#039;{name&#039; | sed -En &#039;s\/.*password:[ ]+[\\&quot;]*|.*uuid:[ ]+[\\&quot;]*(.*)\/\\1\/gp&#039; | sed &quot;s\/\\([^,\\&quot;]\\+\\).*\/\\1\/g&quot;)\n    NODE_NAME=$(sed -r &quot;s\/\\x1B\\[[0-9;]*[mG]\/\/g&quot; $WORK_DIR\/list | grep -m1 &#039;{name&#039; | sed &#039;s\/- {name:[ ]\\+&quot;\/\/; s\/[ ]\\+ShadowTLS[ ]\\+v3.*\/\/; s\/[ ]\\+xtls-reality.*\/\/; s\/[ ]\\+hysteria2.*\/\/; s\/[ ]\\+tuic.*\/\/; s\/[ ]\\+ss.*\/\/; s\/[ ]\\+trojan.*\/\/; s\/[ ]\\+trojan.*\/\/; s\/[ ]\\+vmess[ ]\\+ws.*\/\/; s\/[ ]\\+vless[ ]\\+.*\/\/&#039;)\n    EXISTED_PORTS=$(awk -F &#039;:|,&#039; &#039;\/listen_port\/{print $2}&#039; $WORK_DIR\/conf\/*)\n    START_PORT=$(awk &#039;NR == 1 { min = $0 } { if ($0 &lt; min) min = $0; count++ } END {print min}&#039; &lt;&lt;&lt; &quot;$EXISTED_PORTS&quot;)\n    [ -s $WORK_DIR\/conf\/*_VMESS_WS_inbounds.json ] &amp;&amp; WS_SERVER_IP=$(grep -A2 &quot;{name.*vmess[ ]\\+ws&quot; $WORK_DIR\/list | awk -F&#039;[][]&#039; &#039;NR==3 {print $2}&#039;) &amp;&amp; VMESS_HOST_DOMAIN=$(grep -A2 &quot;{name.*vmess[ ]\\+ws&quot; $WORK_DIR\/list | awk -F&#039;[][]&#039; &#039;NR==3 {print $4}&#039;) &amp;&amp; CDN=$(sed -n &quot;s\/.*{name.*vmess[ ]\\+ws.*server:[ ]\\+\\([^,]\\+\\).*\/\\1\/gp&quot; $WORK_DIR\/list)\n    [ -s $WORK_DIR\/conf\/*_VLESS_WS_inbounds.json ] &amp;&amp; WS_SERVER_IP=$(grep -A2 &quot;{name.*vless[ ]\\+ws&quot; $WORK_DIR\/list | awk -F&#039;[][]&#039; &#039;NR==3 {print $2}&#039;) &amp;&amp; VLESS_HOST_DOMAIN=$(grep -A2 &quot;{name.*vless[ ]\\+ws&quot; $WORK_DIR\/list | awk -F&#039;[][]&#039; &#039;NR==3 {print $4}&#039;) &amp;&amp; CDN=$(sed -n &quot;s\/.*{name.*vless[ ]\\+ws.*server:[ ]\\+\\([^,]\\+\\).*\/\\1\/gp&quot; $WORK_DIR\/list)\n  fi\n\n  # \u5220\u9664\u4e0d\u9700\u8981\u7684\u534f\u8bae\u914d\u7f6e\u6587\u4ef6\n  for o in &quot;${REMOVE_PROTOCOLS[@]}&quot;; do\n    rm -f $WORK_DIR\/conf\/*$(tr &#039;a-z&#039; &#039;A-Z&#039; &lt;&lt;&lt; &quot;$o&quot; | awk -F &#039;@&#039; &#039;{print $1}&#039;)*inbounds.json\n  done\n\n  # \u5bfb\u627e\u5df2\u5b58\u5728\u534f\u8bae\u4e2d\u539f\u6709\u7684\u7aef\u53e3\u53f7\n  for p in &quot;${KEEP_PROTOCOLS[@]}&quot;; do\n    KEEP_PORTS+=($(awk -F &#039;[:,]&#039; &#039;\/listen_port\/{print $2}&#039; $WORK_DIR\/conf\/*$(tr &#039;a-z&#039; &#039;A-Z&#039; &lt;&lt;&lt; &quot;$p&quot; | awk -F &#039;@&#039; &#039;{print $1}&#039;)*inbounds.json))\n  done\n\n  # \u6839\u636e\u5168\u90e8\u534f\u8bae\uff0c\u627e\u5230\u7a7a\u4f59\u7684\u7aef\u53e3\u53f7\n  for q in &quot;${!REINSTALL_PROTOCOLS[@]}&quot;; do\n    [[ ! ${KEEP_PORTS[@]} =~ $[START_PORT + q] ]] &amp;&amp; ADD_PORTS+=($[START_PORT + q])\n  done\n\n  # \u6240\u6709\u534f\u8bae\u7684\u7aef\u53e3\u53f7\n  REINSTALL_PORTS=(${KEEP_PORTS[@]} ${ADD_PORTS[@]})\n\n  CHECK_PROTOCOLS=b\n  # \u83b7\u53d6\u539f\u59cb Reality \u914d\u7f6e\u4fe1\u606f\n  if [[ &quot;${INSTALL_PROTOCOLS[@]}&quot; =~ &quot;$CHECK_PROTOCOLS&quot; ]]; then\n    if [[ &quot;${KEEP_PROTOCOLS[@]}&quot; =~ &quot;reality&quot; ]]; then\n      REALITY_PRIVATE=$(awk -F &#039;&quot;&#039; &#039;\/private_key\/{print $4; exit}&#039; $WORK_DIR\/conf\/*_REALITY_inbounds.json)\n      REALITY_PUBLIC=$(sed -n &#039;s\/.*{name.*public-key:[ ]*\\([^,]\\+\\).*\/\\1\/pg&#039; $WORK_DIR\/list | sed -n 1p)\n    else\n      REALITY_KEYPAIR=$($WORK_DIR\/sing-box generate reality-keypair)\n      REALITY_PRIVATE=$(awk &#039;\/PrivateKey\/{print $NF}&#039; &lt;&lt;&lt; &quot;$REALITY_KEYPAIR&quot;)\n      REALITY_PUBLIC=$(awk &#039;\/PublicKey\/{print $NF}&#039; &lt;&lt;&lt; &quot;$REALITY_KEYPAIR&quot;)\n    fi\n    PORT_XTLS_REALITY=${REINSTALL_PORTS[$(awk -v target=$CHECK_PROTOCOLS &#039;{ for(i=1; i&lt;=NF; i++) if($i == target) { print i-1; break } }&#039; &lt;&lt;&lt; &quot;${INSTALL_PROTOCOLS[*]}&quot;)]}\n  fi\n\n  # \u83b7\u53d6\u539f\u59cb Hysteria2 \u914d\u7f6e\u4fe1\u606f\n  CHECK_PROTOCOLS=$(asc &quot;$CHECK_PROTOCOLS&quot; ++)\n  if [[ &quot;${INSTALL_PROTOCOLS[@]}&quot; =~ &quot;$CHECK_PROTOCOLS&quot; ]]; then\n    PORT_HYSTERIA2=${REINSTALL_PORTS[$(awk -v target=$CHECK_PROTOCOLS &#039;{ for(i=1; i&lt;=NF; i++) if($i == target) { print i-1; break } }&#039; &lt;&lt;&lt; &quot;${INSTALL_PROTOCOLS[*]}&quot;)]}\n  fi\n\n  # \u83b7\u53d6\u539f\u59cb Tuic V5 \u914d\u7f6e\u4fe1\u606f\n  CHECK_PROTOCOLS=$(asc &quot;$CHECK_PROTOCOLS&quot; ++)\n  if [[ &quot;${INSTALL_PROTOCOLS[@]}&quot; =~ &quot;$CHECK_PROTOCOLS&quot; ]]; then\n    PORT_TUIC=${REINSTALL_PORTS[$(awk -v target=$CHECK_PROTOCOLS &#039;{ for(i=1; i&lt;=NF; i++) if($i == target) { print i-1; break } }&#039; &lt;&lt;&lt; &quot;${INSTALL_PROTOCOLS[*]}&quot;)]}\n  fi\n\n  # \u83b7\u53d6\u539f\u59cb shadowTLS \u914d\u7f6e\u4fe1\u606f\n  CHECK_PROTOCOLS=$(asc &quot;$CHECK_PROTOCOLS&quot; ++)\n  if [[ &quot;${INSTALL_PROTOCOLS[@]}&quot; =~ &quot;$CHECK_PROTOCOLS&quot; ]]; then\n    [[ &quot;${KEEP_PROTOCOLS[@]}&quot; =~ &quot;shadowTLS&quot; ]] &amp;&amp; SHADOWTLS_PASSWORD=$(sed -r &quot;s\/\\x1B\\[[0-9;]*[mG]\/\/g&quot; $WORK_DIR\/list | sed -n &#039;s\/.*{name.*password:[ ]*\\&quot;\\([^\\&quot;]\\+\\)&quot;.*shadow-tls.*\/\\1\/pg&#039;) || SHADOWTLS_PASSWORD=$($WORK_DIR\/sing-box generate rand --base64 16)\n    PORT_SHADOWTLS=${REINSTALL_PORTS[$(awk -v target=$CHECK_PROTOCOLS &#039;{ for(i=1; i&lt;=NF; i++) if($i == target) { print i-1; break } }&#039; &lt;&lt;&lt; &quot;${INSTALL_PROTOCOLS[*]}&quot;)]}\n  fi\n\n  # \u83b7\u53d6\u539f\u59cb Shadowsocks \u914d\u7f6e\u4fe1\u606f\n  CHECK_PROTOCOLS=$(asc &quot;$CHECK_PROTOCOLS&quot; ++)\n  if [[ &quot;${INSTALL_PROTOCOLS[@]}&quot; =~ &quot;$CHECK_PROTOCOLS&quot; ]]; then\n    PORT_SHADOWSOCKS=${REINSTALL_PORTS[$(awk -v target=$CHECK_PROTOCOLS &#039;{ for(i=1; i&lt;=NF; i++) if($i == target) { print i-1; break } }&#039; &lt;&lt;&lt; &quot;${INSTALL_PROTOCOLS[*]}&quot;)]}\n  fi\n\n  # \u83b7\u53d6\u539f\u59cb Trojan \u914d\u7f6e\u4fe1\u606f\n  CHECK_PROTOCOLS=$(asc &quot;$CHECK_PROTOCOLS&quot; ++)\n  if [[ &quot;${INSTALL_PROTOCOLS[@]}&quot; =~ &quot;$CHECK_PROTOCOLS&quot; ]]; then\n    PORT_TROJAN=${REINSTALL_PORTS[$(awk -v target=$CHECK_PROTOCOLS &#039;{ for(i=1; i&lt;=NF; i++) if($i == target) { print i-1; break } }&#039; &lt;&lt;&lt; &quot;${INSTALL_PROTOCOLS[*]}&quot;)]}\n  fi\n\n  # \u83b7\u53d6\u539f\u59cb vmess + ws \u914d\u7f6e\u4fe1\u606f\n  CHECK_PROTOCOLS=$(asc &quot;$CHECK_PROTOCOLS&quot; ++)\n  if [[ &quot;${INSTALL_PROTOCOLS[@]}&quot; =~ &quot;$CHECK_PROTOCOLS&quot; ]]; then\n    WS_SERVER_IP=$SERVER_IP\n    local DOMAIN_ERROR_TIME=5\n    until [ -n &quot;$VMESS_HOST_DOMAIN&quot; ]; do\n      (( DOMAIN_ERROR_TIME-- )) || true\n      [ &quot;$DOMAIN_ERROR_TIME&quot; != 0 ] &amp;&amp; TYPE=VMESS &amp;&amp; reading &quot;\\n $(text 50) &quot; VMESS_HOST_DOMAIN || error &quot;\\n $(text 3) \\n&quot;\n    done\n    PORT_VMESS_WS=${REINSTALL_PORTS[$(awk -v target=$CHECK_PROTOCOLS &#039;{ for(i=1; i&lt;=NF; i++) if($i == target) { print i-1; break } }&#039; &lt;&lt;&lt; &quot;${INSTALL_PROTOCOLS[*]}&quot;)]}\n  fi\n\n  # \u83b7\u53d6\u539f\u59cb vless + ws + tls \u914d\u7f6e\u4fe1\u606f\n  CHECK_PROTOCOLS=$(asc &quot;$CHECK_PROTOCOLS&quot; ++)\n  if [[ &quot;${INSTALL_PROTOCOLS[@]}&quot; =~ &quot;$CHECK_PROTOCOLS&quot; ]]; then\n    WS_SERVER_IP=$SERVER_IP\n    local DOMAIN_ERROR_TIME=5\n    until [ -n &quot;$VLESS_HOST_DOMAIN&quot; ]; do\n      (( DOMAIN_ERROR_TIME-- )) || true\n      [ &quot;$DOMAIN_ERROR_TIME&quot; != 0 ] &amp;&amp; TYPE=VLESS &amp;&amp; reading &quot;\\n $(text 50) &quot; VLESS_HOST_DOMAIN || error &quot;\\n $(text 3) \\n&quot;\n    done\n    PORT_VLESS_WS=${REINSTALL_PORTS[$(awk -v target=$CHECK_PROTOCOLS &#039;{ for(i=1; i&lt;=NF; i++) if($i == target) { print i-1; break } }&#039; &lt;&lt;&lt; &quot;${INSTALL_PROTOCOLS[*]}&quot;)]}\n  fi\n\n  # \u9009\u62e9\u53ef\u4ee5\u8f93\u5165 cdn\n  input_cdn\n\n  # \u751f\u6210\u5404\u534f\u8bae\u7684 json \u6587\u4ef6\n  sing-box_json change\n\n  systemctl start sing-box\n\n  # \u518d\u6b21\u68c0\u6d4b\u72b6\u6001\uff0c\u8fd0\u884c Sing-box\n  check_install\n\n  check_sing-box_stats\n\n  export_list\n}\n\n# \u5378\u8f7d Sing-box \u5168\u5bb6\u6876\nuninstall() {\n  if [ -d $WORK_DIR ]; then\n    [ &quot;$SYSTEM&quot; = &#039;Alpine&#039; ] &amp;&amp; systemctl stop sing-box 2&gt;\/dev\/null || cmd_systemctl disable sing-box 2&gt;\/dev\/null\n    rm -rf $WORK_DIR $TEMP_DIR \/etc\/systemd\/system\/sing-box.service \/usr\/bin\/sb\n    info &quot;\\n $(text 16) \\n&quot;\n  else\n    error &quot;\\n $(text 15) \\n&quot;\n  fi\n\n  # \u5982\u679c Alpine \u7cfb\u7edf\uff0c\u5220\u9664\u5f00\u673a\u81ea\u542f\u52a8\n  [ &quot;$SYSTEM&quot; = &#039;Alpine&#039; ] &amp;&amp; ( rm -f \/etc\/local.d\/sing-box.start; rc-update add local &gt;\/dev\/null 2&gt;&amp;1 )\n}\n\n# Sing-box \u7684\u6700\u65b0\u7248\u672c\nversion() {\n  local ONLINE=$(wget --no-check-certificate -qO- &quot;https:\/\/api.github.com\/repos\/SagerNet\/sing-box\/releases&quot; | awk -F &#039;[&quot;v]&#039; &#039;\/tag_name.*beta\/{print $5; exit}&#039;)\n  local LOCAL=$($WORK_DIR\/sing-box version | awk &#039;\/version\/{print $NF}&#039;)\n  info &quot;\\n $(text 40) &quot;\n  [[ -n &quot;$ONLINE&quot; &amp;&amp; &quot;$ONLINE&quot; != &quot;$LOCAL&quot; ]] &amp;&amp; reading &quot;\\n $(text 9) &quot; UPDATE || info &quot; $(text 41) &quot;\n\n  if [[ &quot;$UPDATE&quot; = [Yy] ]]; then\n    check_system_info\n    wget --no-check-certificate -c ${GH_PROXY}https:\/\/github.com\/SagerNet\/sing-box\/releases\/download\/v$ONLINE\/sing-box-$ONLINE-linux-$SING_BOX_ARCH.tar.gz -qO- | tar xz -C $TEMP_DIR sing-box-$ONLINE-linux-$SING_BOX_ARCH\/sing-box\n\n    if [ -s $TEMP_DIR\/sing-box-$ONLINE-linux-$SING_BOX_ARCH\/sing-box ]; then\n      systemctl stop sing-box\n      chmod +x $TEMP_DIR\/sing-box-$ONLINE-linux-$SING_BOX_ARCH\/sing-box &amp;&amp; mv $TEMP_DIR\/sing-box-$ONLINE-linux-$SING_BOX_ARCH\/sing-box $WORK_DIR\/sing-box\n      systemctl start sing-box &amp;&amp; sleep 2 &amp;&amp; [ &quot;$(systemctl is-active sing-box)&quot; = &#039;active&#039; ] &amp;&amp; info &quot; Sing-box $(text 28) $(text 37)&quot; || error &quot;Sing-box $(text 28) $(text 38) &quot;\n    else\n      local error &quot;\\n $(text 42) &quot;\n    fi\n  fi\n}\n\n# \u5224\u65ad\u5f53\u524d Sing-box \u7684\u8fd0\u884c\u72b6\u6001\uff0c\u5e76\u5bf9\u5e94\u7684\u7ed9\u83dc\u5355\u548c\u52a8\u4f5c\u8d4b\u503c\nmenu_setting() {\n  OPTION[0]=&quot;0 .  $(text 35)&quot;\n  ACTION[0]() { exit; }\n\n  if [[ &quot;$STATUS&quot; =~ $(text 27)|$(text 28) ]]; then\n    # \u67e5\u8fdb\u7a0b\u53f7\uff0csing-box \u8fd0\u884c\u65f6\u957f \u548c \u5185\u5b58\u5360\u7528\n    if [ &quot;$STATUS&quot; = &quot;$(text 28)&quot; ]; then\n      if [ &quot;$SYSTEM&quot; = &#039;Alpine&#039; ]; then\n        PID=$(pidof sing-box | sed -n 1p)\n      else\n        SYSTEMCTL_STATUS=$(systemctl status sing-box)\n        PID=$(awk &#039;\/PID\/{print $3}&#039; &lt;&lt;&lt; &quot;$SYSTEMCTL_STATUS&quot;)\n        RUNTIME=$(awk &#039;\/Active:\/{for (i=5;i&lt;=NF;i++)printf(&quot;%s &quot;, $i);print &quot;&quot;}&#039; &lt;&lt;&lt; &quot;$SYSTEMCTL_STATUS&quot;)\n      fi\n      MEMORY_USAGE=&quot;$(awk &#039;\/VmRSS\/{printf &quot;%.1f\\n&quot;, $2\/1024}&#039; \/proc\/$PID\/status)&quot;\n    fi\n    NOW_PORTS=$(awk -F &#039;:|,&#039; &#039;\/listen_port\/{print $2}&#039; $WORK_DIR\/conf\/*)\n    NOW_START_PORT=$(awk &#039;NR == 1 { min = $0 } { if ($0 &lt; min) min = $0; count++ } END {print min}&#039; &lt;&lt;&lt; &quot;$NOW_PORTS&quot;)\n    NOW_CONSECUTIVE_PORTS=$(awk &#039;END { print NR }&#039; &lt;&lt;&lt; &quot;$NOW_PORTS&quot;)\n    [ -s $WORK_DIR\/sing-box ] &amp;&amp; SING_BOX_VERSION=&quot;version: $($WORK_DIR\/sing-box version | awk &#039;\/version\/{print $NF}&#039;)&quot;\n    [ -s $WORK_DIR\/conf\/02_route.json ] &amp;&amp; { grep -q &#039;direct&#039; $WORK_DIR\/conf\/02_route.json &amp;&amp; RETURN_STATUS=$(text 27) || RETURN_STATUS=$(text 28); }\n    OPTION[1]=&quot;1 .  $(text 29)&quot;\n    [ &quot;$STATUS&quot; = &quot;$(text 28)&quot; ] &amp;&amp; OPTION[2]=&quot;2 .  $(text 27) Sing-box (sb -o)&quot; || OPTION[2]=&quot;2 .  $(text 28) Sing-box (sb -o)&quot;\n    OPTION[3]=&quot;3 .  $(text 30)&quot;\n    OPTION[4]=&quot;4 .  $(text 31)&quot;\n    OPTION[5]=&quot;5 .  $(text 32)&quot;\n    OPTION[6]=&quot;6 .  $(text 62)&quot;\n    OPTION[7]=&quot;7 .  $(text 33)&quot;\n    OPTION[8]=&quot;8 .  $(text 59)&quot;\n    OPTION[9]=&quot;9 .  $(text 69)&quot;\n    OPTION[10]=&quot;10.  $(text 76)&quot;\n\n    ACTION[1]() { export_list; exit 0; }\n    [ &quot;$STATUS&quot; = &quot;$(text 28)&quot; ] &amp;&amp; ACTION[2]() { cmd_systemctl disable sing-box; [ &quot;$(systemctl is-active sing-box)&quot; = &#039;inactive&#039; ] &amp;&amp; info &quot; Sing-box $(text 27) $(text 37)&quot; || error &quot; Sing-box $(text 27) $(text 38) &quot;; } || ACTION[2]() { cmd_systemctl enable sing-box &amp;&amp; [ &quot;$(systemctl is-active sing-box)&quot; = &#039;active&#039; ] &amp;&amp; info &quot; Sing-box $(text 28) $(text 37)&quot; || error &quot; Sing-box $(text 28) $(text 38) &quot;; }\n    ACTION[3]() { change_start_port; exit; }\n    ACTION[4]() { version; exit; }\n    ACTION[5]() { bash &lt;(wget --no-check-certificate -qO- &quot;https:\/\/raw.githubusercontent.com\/ylx2016\/Linux-NetSpeed\/master\/tcp.sh&quot;); exit; }\n    ACTION[6]() { change_protocols; exit; }\n    ACTION[7]() { uninstall; exit; }\n    ACTION[8]() { bash &lt;(wget --no-check-certificate -qO- https:\/\/raw.githubusercontent.com\/fscarmen\/argox\/main\/argox.sh) -$L; exit; }\n    ACTION[9]() { bash &lt;(wget --no-check-certificate -qO- https:\/\/raw.githubusercontent.com\/fscarmen\/sba\/main\/sba.sh) -$L; exit; }\n    ACTION[10]() { bash &lt;(wget --no-check-certificate -qO- https:\/\/tcp.hy2.sh\/); exit; }\n  else\n    OPTION[1]=&quot;1.  $(text 34)&quot;\n    OPTION[2]=&quot;2.  $(text 32)&quot;\n    OPTION[3]=&quot;3.  $(text 59)&quot;\n    OPTION[4]=&quot;4.  $(text 69)&quot;\n    OPTION[5]=&quot;5.  $(text 76)&quot;\n\n    ACTION[1]() { install_sing-box; export_list; create_shortcut; exit; }\n    ACTION[2]() { bash &lt;(wget --no-check-certificate -qO- &quot;https:\/\/raw.githubusercontent.com\/ylx2016\/Linux-NetSpeed\/master\/tcp.sh&quot;); exit; }\n    ACTION[3]() { bash &lt;(wget --no-check-certificate -qO- https:\/\/raw.githubusercontent.com\/fscarmen\/argox\/main\/argox.sh) -$L; exit; }\n    ACTION[4]() { bash &lt;(wget --no-check-certificate -qO- https:\/\/raw.githubusercontent.com\/fscarmen\/sba\/main\/sba.sh) -$L; exit; }\n    ACTION[5]() { bash &lt;(wget --no-check-certificate -qO- https:\/\/tcp.hy2.sh\/); exit; }\n  fi\n}\n\nmenu() {\n  clear\n  hint &quot; $(text 2) &quot;\n  echo -e &quot;======================================================================================================================\\n&quot;\n  info &quot; $(text 17): $VERSION\\n $(text 18): $(text 1)\\n $(text 19):\\n\\t $(text 20): $SYS\\n\\t $(text 21): $(uname -r)\\n\\t $(text 22): $SING_BOX_ARCH\\n\\t $(text 23): $VIRT &quot;\n  info &quot;\\t IPv4: $WAN4 $WARPSTATUS4 $COUNTRY4  $ASNORG4 &quot;\n  info &quot;\\t IPv6: $WAN6 $WARPSTATUS6 $COUNTRY6  $ASNORG6 &quot;\n  info &quot;\\t Sing-box: $STATUS\\t $SING_BOX_VERSION &quot;\n  [ -n &quot;$PID&quot; ] &amp;&amp; info &quot;\\t $(text 56): $PID &quot;\n  [ -n &quot;$RUNTIME&quot; ] &amp;&amp; info &quot;\\t $(text 57): $RUNTIME &quot;\n  [ -n &quot;$MEMORY_USAGE&quot; ] &amp;&amp; info &quot;\\t $(text 58): $MEMORY_USAGE MB&quot;\n  [ -n &quot;$NOW_START_PORT&quot; ] &amp;&amp; info &quot;\\t $(text 45) &quot;\n  echo -e &quot;\\n======================================================================================================================\\n&quot;\n  for ((b=1;b&lt;${#OPTION[*]};b++)); do hint &quot; ${OPTION[b]} &quot;; done\n  hint &quot; ${OPTION[0]} &quot;\n  reading &quot;\\n $(text 24) &quot; CHOOSE\n\n  # \u8f93\u5165\u5fc5\u987b\u662f\u6570\u5b57\u4e14\u5c11\u4e8e\u7b49\u4e8e\u6700\u5927\u53ef\u9009\u9879\n  if grep -qE &quot;^[0-9]{1,2}$&quot; &lt;&lt;&lt; &quot;$CHOOSE&quot; &amp;&amp; [ &quot;$CHOOSE&quot; -lt &quot;${#OPTION[*]}&quot; ]; then\n    ACTION[$CHOOSE]\n  else\n    warning &quot; $(text 36) [0-$((${#OPTION[*]}-1))] &quot; &amp;&amp; sleep 1 &amp;&amp; menu\n  fi\n}\n\nstatistics_of_run-times\n\n# \u4f20\u53c2\n[[ &quot;$*&quot; =~ -[Ee] ]] &amp;&amp; L=E\n[[ &quot;$*&quot; =~ -[Cc] ]] &amp;&amp; L=C\n\nwhile getopts &quot;:P:p:OoUuVvNnBbRr&quot; OPTNAME; do\n  case &quot;$OPTNAME&quot; in\n    &#039;P&#039;|&#039;p&#039; ) START_PORT=$OPTARG; select_language; check_install; [ &quot;$STATUS&quot; = &quot;$(text 26)&quot; ] &amp;&amp; error &quot;\\n Sing-box $(text 26) &quot;; change_start_port; exit 0 ;;\n    &#039;O&#039;|&#039;o&#039; ) select_language; check_system_info; check_install; [ &quot;$STATUS&quot; = &quot;$(text 26)&quot; ] &amp;&amp; error &quot;\\n Sing-box $(text 26) &quot;; [ &quot;$STATUS&quot; = &quot;$(text 28)&quot; ] &amp;&amp; ( cmd_systemctl disable sing-box; [ &quot;$(systemctl is-active sing-box)&quot; = &#039;inactive&#039; ] &amp;&amp; info &quot;\\n Sing-box $(text 27) $(text 37)&quot; ) || ( cmd_systemctl enable sing-box &amp;&amp; [ &quot;$(systemctl is-active sing-box)&quot; = &#039;active&#039; ] &amp;&amp; info &quot;\\n Sing-box $(text 28) $(text 37)&quot; ); exit 0;;\n    &#039;U&#039;|&#039;u&#039; ) select_language; check_system_info; uninstall; exit 0 ;;\n    &#039;N&#039;|&#039;n&#039; ) select_language; [ ! -s $WORK_DIR\/list ] &amp;&amp; error &quot; Sing-box $(text 26) &quot;; export_list; exit 0 ;;\n    &#039;V&#039;|&#039;v&#039; ) select_language; check_arch; version; exit 0 ;;\n    &#039;B&#039;|&#039;b&#039; ) select_language; bash &lt;(wget --no-check-certificate -qO- &quot;https:\/\/raw.githubusercontent.com\/ylx2016\/Linux-NetSpeed\/master\/tcp.sh&quot;); exit ;;\n    &#039;R&#039;|&#039;r&#039; ) select_language; check_system_info; change_protocols; exit 0 ;;\n  esac\ndone\n\nselect_language\ncheck_root\ncheck_arch\ncheck_system_info\ncheck_dependencies\ncheck_system_ip\ncheck_install\nmenu_setting\nmenu<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u3010Sing-box \u5168\u5bb6\u6876\u3011 \u76ee\u5f55 \u66f4\u65b0\u4fe1\u606f \u9879\u76ee\u7279\u70b9 Sing-box for VPS \u8fd0\u884c\u811a\u672c Vmess [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-116","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/my.di.cloudns.asia\/index.php\/wp-json\/wp\/v2\/posts\/116","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/my.di.cloudns.asia\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/my.di.cloudns.asia\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/my.di.cloudns.asia\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/my.di.cloudns.asia\/index.php\/wp-json\/wp\/v2\/comments?post=116"}],"version-history":[{"count":12,"href":"https:\/\/my.di.cloudns.asia\/index.php\/wp-json\/wp\/v2\/posts\/116\/revisions"}],"predecessor-version":[{"id":129,"href":"https:\/\/my.di.cloudns.asia\/index.php\/wp-json\/wp\/v2\/posts\/116\/revisions\/129"}],"wp:attachment":[{"href":"https:\/\/my.di.cloudns.asia\/index.php\/wp-json\/wp\/v2\/media?parent=116"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/my.di.cloudns.asia\/index.php\/wp-json\/wp\/v2\/categories?post=116"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/my.di.cloudns.asia\/index.php\/wp-json\/wp\/v2\/tags?post=116"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}