diff --git a/app/bot.php b/app/bot.php index d4ddab2..a011114 100644 --- a/app/bot.php +++ b/app/bot.php @@ -500,10 +500,10 @@ class Bot public function restartXray($c) { - $c['inbounds'][0]['settings']['clients'] = array_values($c['inbounds'][0]['settings']['clients']); - $this->ssh('pkill xray', 'xr'); - file_put_contents('/config/xray.json', json_encode($c, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)); - $this->ssh('xray run -config /xray.json > /dev/null 2>&1 &', 'xr'); + $c['inbounds'][0]['users'] = array_values($c['inbounds'][0]['users']); + $this->ssh('pkill sing-box', 'si'); + file_put_contents('/config/singbox.json', json_encode($c, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)); + $this->ssh('sing-box run -c /config/singbox.json > /dev/null 2>&1 &', 'si'); } public function linkMtproto() @@ -1096,7 +1096,7 @@ class Bot { try { $c = $this->getXray(); - foreach ($c['inbounds'][0]['settings']['clients'] as $k => $v) { + foreach ($c['inbounds'][0]['users'] as $k => $v) { if (!empty($v['time']) && ($v['time'] < time())) { $this->switchXr($k, 1); } @@ -2186,43 +2186,19 @@ DNS-over-HTTPS with IP: { $c = $this->getPacConf(); $xr = $this->getXray(); - $xr['outbounds'] = [ - [ - "protocol" => "freedom", - "tag" => "direct", - ], - [ - "protocol" => "blackhole", - "tag" => "block", - ], - [ - "protocol" => "socks", - "tag" => "warp", - "settings" => [ - 'servers' => [ - [ - "address" => "10.10.0.13", - "port" => 4000, - ], - ], - ], - ], - ]; if (!empty($c['blocklist']) && !empty(array_filter($c['blocklist']))) { $rules[] = [ - "type" => "field", - "outboundTag" => "block", - "domain" => array_keys(array_filter($c['blocklist'])), + "outbound" => "block", + "domain_suffix" => array_keys(array_filter($c['blocklist'])), ]; } if (!empty($c['warplist']) && !empty(array_filter($c['warplist']))) { $rules[] = [ - "type" => "field", - "outboundTag" => "warp", - "domain" => array_keys(array_filter($c['warplist'])), + "outbound" => "warp", + "domain_suffix" => array_keys(array_filter($c['warplist'])), ]; } - $xr['routing']['rules'] = $rules ?: []; + $xr['route']['rules'] = $rules ?: []; $this->restartXray($xr); } @@ -3368,7 +3344,7 @@ DNS-over-HTTPS with IP: $c = $this->getXray(); $pac = $this->getPacConf(); $domain = $pac['domain'] ?: $this->ip; - return "vless://{$c['inbounds'][0]['settings']['clients'][$i]['id']}@$domain:443?security=reality&sni={$c['inbounds'][0]['streamSettings']['realitySettings']['serverNames'][0]}&fp=chrome&pbk={$pac['xray']}&sid={$c['inbounds'][0]['streamSettings']['realitySettings']['shortIds'][0]}&type=tcp&flow=xtls-rprx-vision#vpnbot"; + return "vless://{$c['inbounds'][0]['users'][$i]['id']}@$domain:443?security=reality&sni={$c['inbounds'][0]['tls']['reality']['handshake']['server']}&fp=chrome&pbk={$pac['xray']}&sid={$c['inbounds'][0]['tls']['reality']['short_id'][0]}&type=tcp&flow=xtls-rprx-vision#vpnbot"; } public function dockerApi($url, $method = 'GET', $data = []) @@ -3576,9 +3552,9 @@ DNS-over-HTTPS with IP: public function delxr($i) { $r = $this->getXray(); - foreach ($r['inbounds'][0]['settings']['clients'] as $k => $v) { + foreach ($r['inbounds'][0]['users'] as $k => $v) { if ($i == $k) { - unset($r['inbounds'][0]['settings']['clients'][$k]); + unset($r['inbounds'][0]['users'][$k]); $this->restartXray($r); break; } @@ -3602,14 +3578,14 @@ DNS-over-HTTPS with IP: public function addxrus($user) { $c = $this->getXray(); - $uuid = trim($this->ssh('xray uuid', 'xr')); - $c['inbounds'][0]['settings']['clients'][] = [ + $uuid = trim($this->ssh('sing-box generate uuid', 'si')); + $c['inbounds'][0]['users'][] = [ 'id' => $uuid, 'flow' => 'xtls-rprx-vision', 'email' => $user, ]; $this->restartXray($c); - $this->userXr(count($c['inbounds'][0]['settings']['clients']) - 1); + $this->userXr(count($c['inbounds'][0]['users']) - 1); } public function setTimerXr($time, $i) @@ -3621,28 +3597,28 @@ DNS-over-HTTPS with IP: } $c = $this->getXray(); if (empty($time)) { - unset($c['inbounds'][0]['settings']['clients'][$i]['time']); + unset($c['inbounds'][0]['users'][$i]['time']); } else { - if (!empty($c['inbounds'][0]['settings']['clients'][$i]['off'])) { + if (!empty($c['inbounds'][0]['users'][$i]['off'])) { $this->switchXr($i, 1); $c = $this->getXray(); } - $c['inbounds'][0]['settings']['clients'][$i]['time'] = $time; + $c['inbounds'][0]['users'][$i]['time'] = $time; } - file_put_contents('/config/xray.json', json_encode($c, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)); + file_put_contents('/config/singbox.json', json_encode($c, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)); $this->userXr($i); } public function switchXr($i, $nm = 0) { $c = $this->getXray(); - unset($c['inbounds'][0]['settings']['clients'][$i]['time']); - if (empty($c['inbounds'][0]['settings']['clients'][$i]['off'])) { - $c['inbounds'][0]['settings']['clients'][$i]['off'] = $c['inbounds'][0]['settings']['clients'][$i]['id']; - $c['inbounds'][0]['settings']['clients'][$i]['id'] = trim($this->ssh('xray uuid', 'xr')); + unset($c['inbounds'][0]['users'][$i]['time']); + if (empty($c['inbounds'][0]['users'][$i]['off'])) { + $c['inbounds'][0]['users'][$i]['off'] = $c['inbounds'][0]['users'][$i]['id']; + $c['inbounds'][0]['users'][$i]['id'] = trim($this->ssh('sing-box generate uuid', 'si')); } else { - $c['inbounds'][0]['settings']['clients'][$i]['id'] = $c['inbounds'][0]['settings']['clients'][$i]['off']; - unset($c['inbounds'][0]['settings']['clients'][$i]['off']); + $c['inbounds'][0]['users'][$i]['id'] = $c['inbounds'][0]['users'][$i]['off']; + unset($c['inbounds'][0]['users'][$i]['off']); } $this->restartXray($c); if (empty($nm)) { @@ -3653,7 +3629,7 @@ DNS-over-HTTPS with IP: public function renXrUs($name, $i) { $c = $this->getXray(); - $c['inbounds'][0]['settings']['clients'][$i]['email'] = $name; + $c['inbounds'][0]['users'][$i]['email'] = $name; $this->restartXray($c); $this->userXr($i); } @@ -3788,12 +3764,12 @@ DNS-over-HTTPS with IP: public function xray($page = 0) { - if (!$this->ssh('pgrep xray', 'xr')) { + if (!$this->ssh('pgrep sing-box', 'si')) { $this->generateSecretXray(); } $c = $this->getXray(); $text[] = "Menu -> " . $this->i18n('xray'); - $text[] = "fake domain: {$c['inbounds'][0]['streamSettings']['realitySettings']['serverNames'][0]}"; + $text[] = "fake domain: {$c['inbounds'][0]['tls']['reality']['handshake']['server']}"; $data[] = [ [ 'text' => $this->i18n('changeFakeDomain'), @@ -3826,7 +3802,7 @@ DNS-over-HTTPS with IP: ]; $data[] = [ ]; - foreach ($c['inbounds'][0]['settings']['clients'] as $k => $v) { + foreach ($c['inbounds'][0]['users'] as $k => $v) { if (!empty($v['off'])) { $off++; } else { @@ -3834,7 +3810,7 @@ DNS-over-HTTPS with IP: } } $type = $this->getPacConf()['xtlslist']; - $clients = array_filter($c['inbounds'][0]['settings']['clients'], fn($e) => !$type ? empty($e['off']) : !empty($e['off'])); + $clients = array_filter($c['inbounds'][0]['users'], fn($e) => !$type ? empty($e['off']) : !empty($e['off'])); uasort($clients, fn($a, $b) => ($a['time'] ?: PHP_INT_MAX) <=> ($b['time'] ?: PHP_INT_MAX)); $all = (int) ceil(count($clients) / $this->limit); @@ -3954,11 +3930,11 @@ DNS-over-HTTPS with IP: $arg = explode('_', $arg); $c = $this->getXray(); if (!empty($arg[2])) { - $c['inbounds'][0]['settings']['clients'][$arg[1]]["{$arg[0]}template"] = $arg[2]; + $c['inbounds'][0]['users'][$arg[1]]["{$arg[0]}template"] = $arg[2]; } else { - unset($c['inbounds'][0]['settings']['clients'][$arg[1]]["{$arg[0]}template"]); + unset($c['inbounds'][0]['users'][$arg[1]]["{$arg[0]}template"]); } - file_put_contents('/config/xray.json', json_encode($c, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)); + file_put_contents('/config/singbox.json', json_encode($c, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)); $this->userXr($arg[1]); } @@ -3966,7 +3942,7 @@ DNS-over-HTTPS with IP: { $c = $this->getXray(); $pac = $this->getPacConf(); - $text[] = "Menu -> " . $this->i18n('xray') . " -> {$c['inbounds'][0]['settings']['clients'][$i]['email']}\n"; + $text[] = "Menu -> " . $this->i18n('xray') . " -> {$c['inbounds'][0]['users'][$i]['email']}\n"; $templates = $pac["{$type}templates"]; $data[] = [ [ @@ -4004,7 +3980,7 @@ DNS-over-HTTPS with IP: public function userXr($i) { - $c = $this->getXray()['inbounds'][0]['settings']['clients'][$i]; + $c = $this->getXray()['inbounds'][0]['users'][$i]; $pac = $this->getPacConf(); $domain = $pac['domain'] ?: $this->ip; $scheme = empty($this->nginxGetTypeCert()) ? 'http' : 'https'; @@ -4092,10 +4068,10 @@ DNS-over-HTTPS with IP: $xr = $this->getXray(); $flag = true; - foreach ($xr['inbounds'][0]['settings']['clients'] as $k => $v) { + foreach ($xr['inbounds'][0]['users'] as $k => $v) { if ($v['id'] == $key) { if (!empty($fs)) { - return $this->userXr($k, 0, 1); + return $this->userXr($k); } if (empty($v['off'])) { $flag = false; @@ -4111,9 +4087,9 @@ DNS-over-HTTPS with IP: $c['outbounds'][0]['settings']['vnext'][0]['address'] = $domain; $c['outbounds'][0]['settings']['vnext'][0]['users'][0]['id'] = $key; - $c['outbounds'][0]['streamSettings']['realitySettings']['serverName'] = $xr['inbounds'][0]['streamSettings']['realitySettings']['serverNames'][0]; + $c['outbounds'][0]['streamSettings']['realitySettings']['serverName'] = $xr['inbounds'][0]['tls']['reality']['handshake']['server']; $c['outbounds'][0]['streamSettings']['realitySettings']['publicKey'] = $pac['xray']; - $c['outbounds'][0]['streamSettings']['realitySettings']['shortId'] = $xr['inbounds'][0]['streamSettings']['realitySettings']['shortIds'][0]; + $c['outbounds'][0]['streamSettings']['realitySettings']['shortId'] = $xr['inbounds'][0]['tls']['reality']['short_id'][0]; $c['routing']['rules'][0]['domain'] = array_keys(array_filter($pac['includelist'])); if (empty($c['routing']['rules'][0]['domain'])) { @@ -4133,7 +4109,7 @@ DNS-over-HTTPS with IP: $hash = substr(md5($this->key), 0, 8); $flag = true; - foreach ($xr['inbounds'][0]['settings']['clients'] as $k => $v) { + foreach ($xr['inbounds'][0]['users'] as $k => $v) { if ($v['id'] == $_GET['s']) { if (empty($v['off'])) { $flag = false; @@ -4201,9 +4177,9 @@ DNS-over-HTTPS with IP: case 's': $c['outbounds'][0]['settings']['vnext'][0]['address'] = $domain; $c['outbounds'][0]['settings']['vnext'][0]['users'][0]['id'] = $uid; - $c['outbounds'][0]['streamSettings']['realitySettings']['serverName'] = $xr['inbounds'][0]['streamSettings']['realitySettings']['serverNames'][0]; + $c['outbounds'][0]['streamSettings']['realitySettings']['serverName'] = $xr['inbounds'][0]['tls']['reality']['handshake']['server']; $c['outbounds'][0]['streamSettings']['realitySettings']['publicKey'] = $pac['xray']; - $c['outbounds'][0]['streamSettings']['realitySettings']['shortId'] = $xr['inbounds'][0]['streamSettings']['realitySettings']['shortIds'][0]; + $c['outbounds'][0]['streamSettings']['realitySettings']['shortId'] = $xr['inbounds'][0]['tls']['reality']['short_id'][0]; foreach ($c['routing']['rules'] as $k => $v) { if (array_key_exists('domain', $v) && $v['domain'] == '~pac~') { @@ -4223,8 +4199,8 @@ DNS-over-HTTPS with IP: $c['outbounds'][0]['server'] = $domain; $c['outbounds'][0]['uuid'] = $uid; $c['outbounds'][0]['tls']['reality']['public_key'] = $pac['xray']; - $c['outbounds'][0]['tls']['server_name'] = $xr['inbounds'][0]['streamSettings']['realitySettings']['serverNames'][0]; - $c['outbounds'][0]['tls']['reality']['short_id'] = $xr['inbounds'][0]['streamSettings']['realitySettings']['shortIds'][0]; + $c['outbounds'][0]['tls']['server_name'] = $xr['inbounds'][0]['tls']['reality']['handshake']['server']; + $c['outbounds'][0]['tls']['reality']['short_id'] = $xr['inbounds'][0]['tls']['reality']['short_id'][0]; foreach ($c['route']['rules'] as $k => $v) { if (array_key_exists('domain_suffix', $v) && $v['domain_suffix'] == '~pac~') { $c['route']['rules'][$k]['domain_suffix'] = array_keys(array_filter($pac['includelist'] ?: [])); @@ -4307,20 +4283,20 @@ DNS-over-HTTPS with IP: public function getXray() { - return json_decode(file_get_contents('/config/xray.json'), true); + return json_decode(file_get_contents('/config/singbox.json'), true); } public function generateSecretXray() { $c = $this->getXray(); - $shortId = trim($this->ssh('openssl rand -hex 8', 'xr')); - $keys = $this->ssh('xray x25519', 'xr'); - preg_match('~^Private key:\s([^\s]+)~m', $keys, $m); + $shortId = trim($this->ssh('openssl rand -hex 8', 'si')); + $keys = $this->ssh('sing-box generate reality-keypair', 'si'); + preg_match('~^PrivateKey:\s([^\s]+)~m', $keys, $m); $private = trim($m[1]); - preg_match('~^Public key:\s([^\s]+)~m', $keys, $m); + preg_match('~^PublicKey:\s([^\s]+)~m', $keys, $m); $public = trim($m[1]); - $c['inbounds'][0]['streamSettings']['realitySettings']['privateKey'] = $private; - $c['inbounds'][0]['streamSettings']['realitySettings']['shortIds'][0] = $shortId; + $c['inbounds'][0]['tls']['reality']['private_key'] = $private; + $c['inbounds'][0]['tls']['reality']['short_id'][0] = $shortId; $pac = $this->getPacConf(); $pac['xray'] = $public; $this->setPacConf($pac); @@ -4330,7 +4306,7 @@ DNS-over-HTTPS with IP: public function setUpstreamDomain($domain) { $nginx = file_get_contents('/config/upstream.conf'); - $t = preg_replace('~#domain.+#domain~s', "#domain\n$domain reality;\n#domain", $nginx); + $t = preg_replace('~#domain.+#domain~s', "#domain\n$domain singbox;\n#domain", $nginx); file_put_contents('/config/upstream.conf', $t); $this->ssh("nginx -s reload 2>&1", 'up'); } @@ -4799,7 +4775,7 @@ DNS-over-HTTPS with IP: $this->update( $this->input['chat'], $this->input['message_id'], - implode("\n", $text ?: ['...']), + implode("\n", ['...']), $data ?: false, ); } @@ -4890,8 +4866,17 @@ DNS-over-HTTPS with IP: public function setFakeDomain($domain, $self = false) { $c = $this->getXray(); - $c['inbounds'][0]['streamSettings']['realitySettings']['serverNames'][0] = $domain; - $c['inbounds'][0]['streamSettings']['realitySettings']['dest'] = $self ? "10.10.1.2:443" : "$domain:443"; + if (!empty($self)) { + $c['inbounds'][0]['tls'] = [ + "enabled" => true, + "server_name" => $domain, + "certificate_path" => "/certs/cert_public", + "key_path" => "/certs/cert_private", + ]; + } else { + $c['inbounds'][0]['tls']['server_name'] = $domain; + $c['inbounds'][0]['tls']['reality']['handshake']['server'] = $domain; + } $this->restartXray($c); $this->setUpstreamDomain($domain); $this->xray(); diff --git a/app/i18n.php b/app/i18n.php index f59b588..5bb39e6 100644 --- a/app/i18n.php +++ b/app/i18n.php @@ -258,8 +258,8 @@ $i = [ 'ru' => 'очистить', ], 'xray' => [ - 'en' => 'XTLS-Reality', - 'ru' => 'XTLS-Reality', + 'en' => 'Sing-box', + 'ru' => 'Sing-box', ], 'geodb' => [ 'en' => 'GeoIp/GeoSite', diff --git a/config/singbox.json b/config/singbox.json new file mode 100644 index 0000000..1500b6d --- /dev/null +++ b/config/singbox.json @@ -0,0 +1,44 @@ +{ + "inbounds": [ + { + "type": "vless", + "tag": "vless", + "listen_port": 443, + "sniff": true, + "sniff_override_destination": false, + "users": [], + "tls": { + "enabled": true, + "server_name": "vk.com", + "reality": { + "enabled": true, + "handshake": { + "server": "vk.com", + "server_port": 443 + }, + "private_key": "", + "short_id": [] + } + } + } + ], + "log": { + "level": "info" + }, + "outbounds": [ + { + "type": "direct", + "tag": "direct" + }, + { + "type": "block", + "tag": "block" + }, + { + "type": "socks", + "tag": "warp", + "server": "10.10.0.13", + "server_port": 4000 + } + ] +} \ No newline at end of file diff --git a/config/upstream.conf b/config/upstream.conf index ae1c9d0..968fb3b 100644 --- a/config/upstream.conf +++ b/config/upstream.conf @@ -15,8 +15,8 @@ stream { server ng:443; } - upstream reality { - server xr:443; + upstream singbox { + server si:443; } upstream ocserv { @@ -30,7 +30,7 @@ stream { map_hash_bucket_size 128; map $ssl_preread_server_name $sni_name { #domain - www.microsoft.com reality; + vk.com singbox; #domain #ocserv diff --git a/config/xray.json b/config/xray.json deleted file mode 100644 index 20ccbff..0000000 --- a/config/xray.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "inbounds": [ - { - "port": 443, - "protocol": "vless", - "settings": { - "clients": [ - ], - "decryption": "none" - }, - "sniffing": { - "destOverride": [ - "http", - "tls" - ], - "enabled": true - }, - "streamSettings": { - "network": "tcp", - "realitySettings": { - "dest": "www.microsoft.com:443", - "maxClientVer": "", - "maxTimeDiff": 0, - "minClientVer": "", - "privateKey": "", - "serverNames": [ - "www.microsoft.com" - ], - "shortIds": [], - "show": false, - "xver": 0 - }, - "tcpSettings": { - "acceptProxyProtocol": true - }, - "sockopt": { - "acceptProxyProtocol": true - }, - "security": "reality" - }, - "tag": "vless_tls" - } - ], - "log": { - "loglevel": "info" - }, - "outbounds": [ - { - "protocol": "freedom", - "tag": "direct" - }, - { - "protocol": "blackhole", - "tag": "block" - } - ], - "routing": { - "domainStrategy": "AsIs", - "rules": [] - } -} diff --git a/docker-compose.yml b/docker-compose.yml index e2fa3e8..1c1e727 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,7 +10,7 @@ networks: ipam: config: - subnet: 10.10.0.0/24 - xray: + singbox: ipam: config: - subnet: 10.10.1.0/24 @@ -89,7 +89,7 @@ services: networks: default: ipv4_address: 10.10.0.2 - xray: + singbox: ipv4_address: 10.10.1.2 logging: *default-logging php: @@ -187,7 +187,7 @@ services: - ad - ss - tg - - xr + - si - oc - np proxy: @@ -398,20 +398,21 @@ services: default: ipv4_address: 10.10.0.8 logging: *default-logging - xr: - image: mercurykd/vpnbot-xr:1.2 + si: + image: mercurykd/vpnbot-sb:1 build: - dockerfile: dockerfile/xray.dockerfile + dockerfile: dockerfile/singbox.dockerfile args: image: ${IMAGE} volumes: - ./config/.profile:/root/.ashrc:ro - ./ssh:/ssh - ./config/sshd_config:/etc/ssh/sshd_config - - ./config/xray.json:/xray.json - - ./scripts/start_xray.sh:/start_xray.sh - hostname: xray - container_name: xray-${VER} + - ./config:/config + - ./certs:/certs + - ./scripts/start_sing.sh:/start_sing.sh + hostname: singbox + container_name: singbox-${VER} depends_on: php: condition: service_healthy @@ -421,11 +422,11 @@ services: - path: ./override.env required: false stop_grace_period: 1s - command: ["/bin/sh", "/start_xray.sh"] + command: ["/bin/sh", "/start_sing.sh"] networks: default: ipv4_address: 10.10.0.9 - xray: + singbox: ipv4_address: 10.10.1.9 logging: *default-logging oc: diff --git a/dockerfile/singbox.dockerfile b/dockerfile/singbox.dockerfile new file mode 100644 index 0000000..043aebb --- /dev/null +++ b/dockerfile/singbox.dockerfile @@ -0,0 +1,9 @@ +ARG image +FROM $image +RUN apk add openssh openssl jq \ + && mkdir /root/.ssh \ + && wget https://github.com/SagerNet/sing-box/releases/download/v1.8.11/sing-box-1.8.11-linux-amd64.tar.gz \ + && tar -xf sing-box-1.8.11-linux-amd64.tar.gz \ + && mv sing-box-1.8.11-linux-amd64/sing-box /usr/bin \ + && rm sing-box-1.8.11-linux-amd64.tar.gz \ + && rm -rf /sing-box-1.8.11-linux-amd64 diff --git a/dockerfile/xray.dockerfile b/dockerfile/xray.dockerfile deleted file mode 100644 index 0d86db0..0000000 --- a/dockerfile/xray.dockerfile +++ /dev/null @@ -1,12 +0,0 @@ -ARG image -FROM $image -RUN apk add openssh openssl jq \ - && mkdir /root/.ssh \ - && wget https://github.com/XTLS/Xray-core/releases/download/v1.8.10/Xray-linux-64.zip \ - && unzip Xray-linux-64.zip \ - && mv xray /usr/bin/ \ - && rm Xray-linux-64.zip \ - && rm geoip.dat \ - && rm geosite.dat \ - && chmod +x /usr/bin/xray -ENV ENV="/root/.ashrc" diff --git a/makefile b/makefile index 3a0905a..4342bfb 100644 --- a/makefile +++ b/makefile @@ -36,8 +36,8 @@ proxy: # консоль сервиса docker compose exec proxy /bin/sh tg: # консоль сервиса docker compose exec tg /bin/sh -xr: # консоль сервиса - docker compose exec xr /bin/sh +si: # консоль сервиса + docker compose exec si /bin/sh oc: # консоль сервиса docker compose exec oc /bin/sh clean: diff --git a/scripts/start_sing.sh b/scripts/start_sing.sh new file mode 100644 index 0000000..25863ca --- /dev/null +++ b/scripts/start_sing.sh @@ -0,0 +1,5 @@ +cat /ssh/key.pub > /root/.ssh/authorized_keys +ssh-keygen -A +exec /usr/sbin/sshd -D -e "$@" & +sing-box run -c /config/singbox.json > /dev/null & +tail -f /dev/null diff --git a/scripts/start_xray.sh b/scripts/start_xray.sh deleted file mode 100644 index b0e7dc4..0000000 --- a/scripts/start_xray.sh +++ /dev/null @@ -1,8 +0,0 @@ -cat /ssh/key.pub > /root/.ssh/authorized_keys -ssh-keygen -A -exec /usr/sbin/sshd -D -e "$@" & -if [ $(cat /xray.json | jq -r '.inbounds[0].settings.clients[0].id' | wc -c) -gt 1 ] -then - xray run -config /xray.json > /dev/null & -fi -tail -f /dev/null