"prefer_ipv4", "listen" => "127.0.0.1", "listen_port" => 2334, "sniff" => true, "sniff_override_destination" => true, "tag" => "mixed-in", "type" => "mixed", "users" => [] ]; $newInbounds[] = [ "tag" => "tun", "type" => "tun", "address" => [ "172.19.0.1/30", "fdfe:dcba:9876::1/126" ], "route_address" => [ "0.0.0.0/1", "128.0.0.0/1", "::/1", "8000::/1" ], "route_exclude_address" => [ "192.168.0.0/16", "fc00::/7" ], "stack" => "system", "auto_route" => true, "strict_route" => true, "sniff" => true, "platform" => [ "http_proxy" => [ "enabled" => true, "server" => "0.0.0.0", "server_port" => 1082 ] ] ]; $newInbounds[] = [ "tag" => "mixed", "type" => "mixed", "listen" => "0.0.0.0", "listen_port" => 1082, "sniff" => true ]; $parsedData['inbounds'] = $newInbounds; } if (isset($parsedData['experimental']['clash_api'])) { $parsedData['experimental']['clash_api'] = [ "external_ui" => "/etc/neko/ui/", "external_controller" => "0.0.0.0:9090", "secret" => "Akun" ]; } $fileContent = json_encode($parsedData, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); return $fileContent; } function saveSubscriptionContentToYaml($url, $filename) { global $download_path; if (pathinfo($filename, PATHINFO_EXTENSION) !== 'json') { $filename .= '.json'; } if (strpbrk($filename, "!@#$%^&*()+=[]\\\';,/{}|\":<>?") !== false) { $message = "文件名包含非法字符,请使用字母、数字、点、下划线或横杠。"; logMessage($message); return $message; } if (!is_dir($download_path)) { if (!mkdir($download_path, 0755, true)) { $message = "无法创建目录:$download_path"; logMessage($message); return $message; } } $output_file = escapeshellarg($download_path . $filename); $command = "wget -q --no-check-certificate -O $output_file " . escapeshellarg($url); exec($command, $output, $return_var); if ($return_var !== 0) { $message = "wget 错误,无法获取订阅内容。请检查链接是否正确。"; logMessage($message); } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); $subscription_data = curl_exec($ch); if (curl_errno($ch)) { $error_msg = curl_error($ch); curl_close($ch); $message = "cURL 错误: $error_msg"; logMessage($message); return $message; } curl_close($ch); if (empty($subscription_data)) { $message = "无法获取订阅内容。请检查链接是否正确。"; logMessage($message); return $message; } $transformed_data = transformContent($subscription_data); $file_path = $download_path . $filename; $success = file_put_contents($file_path, $transformed_data) !== false; $message = $success ? "内容已成功保存到:$file_path" : "文件保存失败。"; logMessage($message); return $message; } if ($_SERVER['REQUEST_METHOD'] === 'POST') { $templates = [ '1' => 'https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Full_NoAuto.ini?', '2' => 'https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Full_AdblockPlus.ini?', '3' => 'https://raw.githubusercontent.com/youshandefeiyang/webcdn/main/SONY.ini', '4' => 'https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/default_with_clash_adg.yml?', '5' => 'https://raw.githubusercontent.com/WC-Dream/ACL4SSR/WD/Clash/config/ACL4SSR_Online_Full_Dream.ini?', '6' => 'https://raw.githubusercontent.com/WC-Dream/ACL4SSR/WD/Clash/config/ACL4SSR_Mini_Dream.ini?', '7' => 'https://raw.githubusercontent.com/justdoiting/ClashRule/main/GeneralClashRule.ini?', '8' => 'https://raw.githubusercontent.com/cutethotw/ClashRule/main/GeneralClashRule.ini?', '9' => 'https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online.ini?', '10' => 'https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_NoAuto.ini?', '11' => 'https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_AdblockPlus.ini?', '12' => 'https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_MultiCountry.ini?', '13' => 'ttps://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_NoReject.ini?', '14' => 'https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Mini_NoAuto.ini?', '15' => 'https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Full.ini?', '16' => 'https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Full_Google.ini?', '17' => 'https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Full_MultiMode.ini?', '18' => 'https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Full_Netflix.ini?', '19' => 'https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Mini.ini?', '20' => 'https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Mini_AdblockPlus.ini?', '21' => 'https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Mini_Fallback.ini?', '22' => 'https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Mini_MultiCountry.ini?', '23' => 'https://raw.githubusercontent.com/ACL4SSR/ACL4SSR/master/Clash/config/ACL4SSR_Online_Mini_MultiMode.ini?', '24' => 'https://raw.githubusercontent.com/flyhigherpi/merlinclash_clash_related/master/Rule_config/ZHANG.ini?', '25' => 'https://raw.githubusercontent.com/xiaoshenxian233/cool/rule/complex.ini?', '26' => 'https://subweb.s3.fr-par.scw.cloud/RemoteConfig/special/phaors.ini?', '27' => 'https://raw.githubusercontent.com/flyhigherpi/merlinclash_clash_related/master/Rule_config/ZHANG_Area_Fallback.ini?', '28' => 'https://raw.githubusercontent.com/flyhigherpi/merlinclash_clash_related/master/Rule_config/ZHANG_Area_Urltest.ini?', '29' => 'https://raw.githubusercontent.com/flyhigherpi/merlinclash_clash_related/master/Rule_config/ZHANG_Area_NoAuto.ini?', '30' => 'https://raw.githubusercontent.com/OoHHHHHHH/ini/master/config.ini?', '31' => 'https://raw.githubusercontent.com/OoHHHHHHH/ini/master/cfw-tap.ini?', '32' => 'https://raw.githubusercontent.com/lhl77/sub-ini/main/tsutsu-full.ini?', '33' => 'https://raw.githubusercontent.com/lhl77/sub-ini/main/tsutsu-mini-gfw.ini?', '34' => 'https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/connershua_new.ini?', '35' => 'https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/connershua_backtocn.ini?', '36' => 'https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/lhie1_clash.ini?', '37' => 'https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/lhie1_dler.ini?', '38' => 'https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/ehpo1_main.ini?', '39' => 'https://raw.nameless13.com/api/public/dl/ROzQqi2S/white.ini?', '40' => 'https://raw.nameless13.com/api/public/dl/ptLeiO3S/mayinggfw.ini?', '41' => 'https://raw.nameless13.com/api/public/dl/FWSh3dXz/easy3.ini?', '42' => 'https://raw.nameless13.com/api/public/dl/L_-vxO7I/youtube.ini?', '43' => 'https://raw.nameless13.com/api/public/dl/zKF9vFbb/easy.ini?', '44' => 'https://raw.nameless13.com/api/public/dl/E69bzCaE/easy2.ini?', '45' => 'https://raw.nameless13.com/api/public/dl/XHr0miMg/ipip.ini?', '46' => 'https://raw.nameless13.com/api/public/dl/BBnfb5lD/MAYINGVIP.ini?', '47' => 'https://raw.githubusercontent.com/Mazeorz/airports/master/Clash/Examine.ini?', '48' => 'https://raw.githubusercontent.com/Mazeorz/airports/master/Clash/Examine_Full.ini?', '49' => 'https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/nzw9314_custom.ini?', '50' => 'https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/maicoo-l_custom.ini?', '51' => 'https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/dlercloud_lige_platinum.ini?', '52' => 'https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/dlercloud_lige_gold.ini?', '53' => 'https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/dlercloud_lige_silver.ini?', '54' => 'https://unpkg.com/proxy-script/config/Clash/clash.ini?', '55' => 'https://github.com/UlinoyaPed/ShellClash/raw/master/rules/ShellClash.ini?', '56' => 'https://gist.github.com/jklolixxs/16964c46bad1821c70fa97109fd6faa2/raw/EXFLUX.ini?', '57' => 'https://gist.github.com/jklolixxs/32d4e9a1a5d18a92beccf3be434f7966/raw/NaNoport.ini?', '58' => 'https://gist.github.com/jklolixxs/dfbe0cf71ffc547557395c772836d9a8/raw/CordCloud.ini?', '59' => 'https://gist.github.com/jklolixxs/e2b0105c8be6023f3941816509a4c453/raw/BigAirport.ini?', '60' => 'https://gist.github.com/jklolixxs/9f6989137a2cfcc138c6da4bd4e4cbfc/raw/PaoLuCloud.ini?', '61' => 'https://gist.github.com/jklolixxs/fccb74b6c0018b3ad7b9ed6d327035b3/raw/WaveCloud.ini?', '62' => 'https://gist.github.com/jklolixxs/bfd5061dceeef85e84401482f5c92e42/raw/JiJi.ini?', '63' => 'https://gist.github.com/jklolixxs/6ff6e7658033e9b535e24ade072cf374/raw/SJ.ini?', '64' => 'https://gist.github.com/jklolixxs/24f4f58bb646ee2c625803eb916fe36d/raw/ImmTelecom.ini?', '65' => 'https://gist.github.com/jklolixxs/b53d315cd1cede23af83322c26ce34ec/raw/AmyTelecom.ini?', '66' => 'https://subweb.s3.fr-par.scw.cloud/RemoteConfig/customized/convenience.ini?', '67' => 'https://gist.github.com/jklolixxs/ff8ddbf2526cafa568d064006a7008e7/raw/Miaona.ini?', '68' => 'https://gist.github.com/jklolixxs/df8fda1aa225db44e70c8ac0978a3da4/raw/Foo&Friends.ini?', '69' => 'https://gist.github.com/jklolixxs/b1f91606165b1df82e5481b08fd02e00/raw/ABCloud.ini?', '70' => 'https://raw.githubusercontent.com/SleepyHeeead/subconverter-config/master/remote-config/customized/xianyu.ini?', '71' => 'https://subweb.oss-cn-hongkong.aliyuncs.com/RemoteConfig/customized/convenience.ini?', '72' => 'https://raw.githubusercontent.com/Mazeorz/airports/master/Clash/SSRcloud.ini?', '73' => 'https://raw.githubusercontent.com/Mazetsz/ACL4SSR/master/Clash/config/V2rayPro.ini?', '74' => 'https://raw.githubusercontent.com/Mazeorz/airports/master/Clash/V2Pro.ini?', '75' => 'https://raw.githubusercontent.com/Mazeorz/airports/master/Clash/Stitch.ini?', '76' => 'https://raw.githubusercontent.com/Mazeorz/airports/master/Clash/Stitch-Balance.ini?', '77' => 'https://raw.githubusercontent.com/SleepyHeeead/subconverter-config/master/remote-config/customized/maying.ini?', '78' => 'https://subweb.s3.fr-par.scw.cloud/RemoteConfig/customized/ytoo.ini?', '79' => 'https://raw.nameless13.com/api/public/dl/M-We_Fn7/w8ves.ini?', '80' => 'https://raw.githubusercontent.com/SleepyHeeead/subconverter-config/master/remote-config/customized/nyancat.ini?', '81' => 'https://subweb.s3.fr-par.scw.cloud/RemoteConfig/customized/nexitally.ini?', '82' => 'https://raw.githubusercontent.com/SleepyHeeead/subconverter-config/master/remote-config/customized/socloud.ini?', '83' => 'https://raw.githubusercontent.com/SleepyHeeead/subconverter-config/master/remote-config/customized/ark.ini?', '84' => 'https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/n3ro_optimized.ini?', '85' => 'https://gist.githubusercontent.com/tindy2013/1fa08640a9088ac8652dbd40c5d2715b/raw/scholar_optimized.ini?', '86' => 'https://subweb.s3.fr-par.scw.cloud/RemoteConfig/customized/flower.ini?', '88' => 'https://raw.githubusercontent.com/SleepyHeeead/subconverter-config/master/remote-config/special/netease.ini?', '89' => 'https://raw.githubusercontent.com/SleepyHeeead/subconverter-config/master/remote-config/special/basic.ini?' ]; $emoji = isset($_POST['emoji']) ? $_POST['emoji'] === 'true' : true; $udp = isset($_POST['udp']) ? $_POST['udp'] === 'true' : true; $xudp = isset($_POST['xudp']) ? $_POST['xudp'] === 'true' : true; $tfo = isset($_POST['tfo']) ? $_POST['tfo'] === 'true' : true; $fdn = isset($_POST['fdn']) ? $_POST['fdn'] === 'true' : true; $sort = isset($_POST['sort']) ? $_POST['sort'] === 'true' : true; $tls13 = isset($_POST['tls13']) ? $_POST['tls13'] === 'true' : true; $ipv6 = isset($_POST['ipv6']) ? $_POST['ipv6'] : 'false'; $filename = isset($_POST['filename']) && $_POST['filename'] !== '' ? $_POST['filename'] : 'config.json'; $subscription_url = isset($_POST['subscription_url']) ? $_POST['subscription_url'] : ''; $backend_url = isset($_POST['backend_url']) && $_POST['backend_url'] === 'custom' && !empty($_POST['custom_backend_url']) ? rtrim($_POST['custom_backend_url'], '?') . '?' : ($_POST['backend_url'] ?? 'https://url.v1.mk/sub?'); $template_key = $_POST['template'] ?? ''; $include = $_POST['include'] ?? ''; $exclude = $_POST['exclude'] ?? ''; $template = $templates[$template_key] ?? ''; $rename = isset($_POST['rename']) ? $_POST['rename'] : ''; if (isset($_POST['action']) && $_POST['action'] === 'generate_subscription') { $final_url = buildFinalUrl($subscription_url, $template, $include, $exclude, $backend_url, $emoji, $udp, $xudp, $tfo, $ipv6, $rename, $tls13, $fdn, $sort); if (saveSubscriptionUrlToFile($final_url, $subscription_file)) { $result = saveSubscriptionContentToYaml($final_url, $filename); } else { $result = "保存订阅链接到文件失败。"; } } if (isset($result)) { echo nl2br(htmlspecialchars($result)); } $download_option = $_POST['download_option'] ?? 'none'; if (isset($_POST['download_action']) && $_POST['download_action'] === 'download_files') { if ($download_option === 'geoip') { $geoip_url = "https://github.com/SagerNet/sing-geoip/releases/latest/download/geoip.db"; $geoip_path = '/www/nekobox/geoip.db'; echo downloadFileWithWget($geoip_url, $geoip_path); } elseif ($download_option === 'geosite') { $geosite_url = "https://github.com/SagerNet/sing-geosite/releases/latest/download/geosite.db"; $geosite_path = '/www/nekobox/geosite.db'; echo downloadFileWithWget($geosite_url, $geosite_path); } } } function downloadFileWithWget($url, $path) { $command = "wget -q --no-check-certificate -O " . escapeshellarg($path) . " " . escapeshellarg($url); exec($command, $output, $return_var); if ($return_var === 0) { return "文件下载成功: $path
"; } else { return "文件下载失败: $path
"; } } ?> Cron 表达式不能为空。"; exit; } $cronJob = "$cronExpression /etc/neko/core/update_singbox.sh > /dev/null 2>&1"; exec("crontab -l | grep -v '/etc/neko/core/update_singbox.sh' | crontab -"); exec("(crontab -l; echo '$cronJob') | crontab -"); echo "
Cron 任务已成功添加或更新!
"; } } ?> > "\$LOG_FILE" } log "启动更新脚本..." log "尝试读取订阅链接文件:\$LINK_FILE" if [ ! -f "\$LINK_FILE" ]; then log "错误:文件 \$LINK_FILE 不存在。" exit 1 fi SUBSCRIBE_URL=\$(awk 'NR==1 {print \$0}' "\$LINK_FILE" | tr -d '\\n\\r' | xargs) if [ -z "\$SUBSCRIBE_URL" ]; then log "错误:订阅链接为空或提取失败。" exit 1 fi log "使用的订阅链接:\$SUBSCRIBE_URL" log "尝试下载并更新配置文件..." wget -q -O "\$CONFIG_FILE" "\$SUBSCRIBE_URL" >> "\$LOG_FILE" 2>&1 if [ \$? -eq 0 ]; then log "配置文件更新成功,保存路径:\$CONFIG_FILE" else log "配置文件更新失败,请检查链接或网络。" exit 1 fi jq '.inbounds = [ { "domain_strategy": "prefer_ipv4", "listen": "127.0.0.1", "listen_port": 2334, "sniff": true, "sniff_override_destination": true, "tag": "mixed-in", "type": "mixed", "users": [] }, { "tag": "tun", "type": "tun", "address": [ "172.19.0.1/30", "fdfe:dcba:9876::1/126" ], "route_address": [ "0.0.0.0/1", "128.0.0.0/1", "::/1", "8000::/1" ], "route_exclude_address": [ "192.168.0.0/16", "fc00::/7" ], "stack": "system", "auto_route": true, "strict_route": true, "sniff": true, "platform": { "http_proxy": { "enabled": true, "server": "0.0.0.0", "server_port": 1082 } } }, { "tag": "mixed", "type": "mixed", "listen": "0.0.0.0", "listen_port": 1082, "sniff": true } ]' "\$CONFIG_FILE" > /tmp/config_temp.json && mv /tmp/config_temp.json "\$CONFIG_FILE" jq '.experimental.clash_api = { "external_ui": "/etc/neko/ui/", "external_controller": "0.0.0.0:9090", "secret": "Akun" }' "\$CONFIG_FILE" > /tmp/config_temp.json && mv /tmp/config_temp.json "\$CONFIG_FILE" if [ \$? -eq 0 ]; then log "配置文件修改已成功完成。" else log "错误:配置文件修改失败。" exit 1 fi EOL; if (file_put_contents($shellScriptPath, $shellScriptContent) !== false) { chmod($shellScriptPath, 0755); echo "
Shell 脚本已成功创建!路径: $shellScriptPath
"; } else { echo "
无法创建 Shell 脚本,请检查权限。
"; } } } ?> singbox - Nekobox
首页 文件管理 模板 一 模板 二 模板 三

Sing-box 转换模板 二

>
>
>
>
>
>
>
>
定时任务
1. 对于首次使用 Sing-box 的用户,必须将核心更新至版本 v1.10.0 或更高版本。确保将出站和入站/转发防火墙规则都设置为“接受”并启用它们。

注意:在线订阅转换存在隐私泄露风险,请确保使用 Sing-box 的通道一版本,通道二版本不支持此功能。同时,需要下载 geoip 和 geosite 文件以确保正常使用。

订阅转换由肥羊提供

点击访问