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