Compare commits

..

22 Commits

Author SHA1 Message Date
mercury 0b7ae110fc fix choice default template sing-box update 2024-05-01 18:24:22 +04:00
mercury 6fb1931c2d fix choice default template sing-box 2024-05-01 17:52:17 +04:00
mercury 6a31985863 clear old images 2024-04-22 23:12:23 +04:00
mercury f4a9e63793 docker clean 2024-04-22 21:49:55 +04:00
mercury 581e3a9bd1 delete old image 2024-04-22 12:48:42 +04:00
mercury 8491ee9f51 fix star button freeze 2024-04-22 12:46:19 +04:00
Bkeenke 49cefc3231 Update "qrPeer" function (#11) 2024-04-21 12:06:32 +04:00
mercury b227431b7a singbox ruleset 2024-04-19 15:40:45 +04:00
mercury bb83ab0684 warp status on menu 2024-04-18 16:10:13 +04:00
mercury 05267f44be fix naming templates 2024-04-18 15:52:37 +04:00
mercury d1be532270 warp+ set key 2024-04-18 01:58:25 +04:00
mercury 48798c7e61 add restart for singbox window 2024-04-16 23:06:25 +04:00
mercury 84e71ab45b improve mtproto menu 2024-04-16 19:22:21 +04:00
mercury 068f2d0cc9 improve message update 2024-04-16 17:51:23 +04:00
mercury 759cf1973a update version 2024-04-16 17:45:55 +04:00
mercury a11b7e0664 improve update script 2024-04-16 17:43:07 +04:00
mercury d370b78815 refactoring subscription + v2ray templates 2024-04-16 15:20:44 +04:00
mercury 913f75b4a8 improve on/off on paclist 2024-04-15 13:49:14 +04:00
mercury c3e850b102 warp 2024-04-15 13:43:43 +04:00
mercury 3a89a1543b add block and warp list domains for xray 2024-04-15 12:08:43 +04:00
mercury 2a3e8e393c improve timer 2024-04-15 12:04:52 +04:00
mercury 332b74e366 winsw3 + update script for singbox windows 2024-04-14 13:05:55 +04:00
23 changed files with 774 additions and 335 deletions
+541 -180
View File
File diff suppressed because it is too large Load Diff
+4
View File
@@ -1,6 +1,10 @@
<?php
$i = [
'warp' => [
'en' => 'Warp',
'ru' => 'Warp',
],
'wg_title' => [
'en' => 'Wireguard',
'ru' => 'Wireguard',
+6 -52
View File
@@ -22,69 +22,23 @@ $address = $_GET['a'] ?: '127.0.0.1';
$port = $_GET['p'] ?: '1080';
$hash = $_GET['h'];
if ($hash == substr(md5($c['key']), 0, 8)) {
require __DIR__ . '/bot.php';
require __DIR__ . '/i18n.php';
$bot = new Bot($c['key'], $i);
switch ($type) {
case 'mirror':
require __DIR__ . '/bot.php';
require __DIR__ . '/i18n.php';
$bot = new Bot($c['key'], $i);
$bot->getMirror();
break;
case 's':
require __DIR__ . '/bot.php';
require __DIR__ . '/i18n.php';
$bot = new Bot($c['key'], $i);
if (!empty($_GET['b'])) {
$fs = $bot->v2raySubscription($_GET['s'], 1);
header("Location: $fs");
exit;
} else {
header('Content-Type: application/json');
echo $bot->v2raySubscription($_GET['s']);
}
exit;
case 'si':
require __DIR__ . '/bot.php';
require __DIR__ . '/i18n.php';
$bot = new Bot($c['key'], $i);
if (!empty($_GET['b'])) {
switch ($_GET['b']) {
case '1':
$fs = $bot->singboxSubscription($_GET['s'], 1);
header("Location: $fs");
exit;
case '2':
$link = htmlspecialchars($bot->singboxSubscription($_GET['s'], a: 1), ENT_XML1, 'UTF-8');
file_put_contents('/singbox/winsw.xml', preg_replace('#~url~#', $link, file_get_contents('/singbox/winsw.xml')));
$zip = new ZipArchive();
$n = "singbox_$v.zip";
$zip->open($n, ZipArchive::CREATE | ZipArchive::OVERWRITE);
foreach (scandir('/singbox') as $k => $v) {
if (!empty(!in_array($v, ['.', '..']))) {
$zip->addFile("/singbox/$v", $v);
}
}
$zip->close();
header('Content-Disposition: attachment; filename="singbox.zip"');
echo file_get_contents($n);
unlink($n);
break;
}
} else {
header('Content-Type: application/json');
echo $bot->singboxSubscription($_GET['s']);
}
$bot->subscription();
exit;
case 'te':
require __DIR__ . '/bot.php';
require __DIR__ . '/i18n.php';
$bot = new Bot($c['key'], $i);
if (!empty($_GET['te'])) {
$t = $bot->getPacConf()['singtemplates'][urldecode($_GET['te'])];
$t = $bot->getPacConf()["{$_GET['ty']}templates"][$_GET['te']];
} else {
$t = json_decode(file_get_contents('/config/sing.json'), true);
$t = json_decode(file_get_contents("/config/{$_GET['ty']}.json"), true);
}
if ($t) {
header('Content-Type: application/json');
+3 -1
View File
@@ -2,10 +2,12 @@
require __DIR__ . '/timezone.php';
// require __DIR__ . '/debug.php';
require __DIR__ . '/bot.php';
require __DIR__ . '/config.php';
require __DIR__ . '/i18n.php';
if ($c['debug']) {
require __DIR__ . '/debug.php';
}
$bot = new Bot($c['key'], $i);
$bot->adguardProtect();
+5 -1
View File
@@ -2,11 +2,14 @@
require __DIR__ . '/timezone.php';
// require __DIR__ . '/debug.php';
require __DIR__ . '/bot.php';
require __DIR__ . '/config.php';
require __DIR__ . '/i18n.php';
if ($c['debug']) {
require __DIR__ . '/debug.php';
}
$bot = new Bot($c['key'], $i);
if (!empty($c['admin'])) {
@@ -37,3 +40,4 @@ file_put_contents('/update/message', '');
file_put_contents('/update/reload_message', '');
$bot->restartTG();
$bot->sslip();
$bot->cleanDocker();
+1 -1
View File
@@ -16,7 +16,7 @@
<div style="position:absolute;top:0;right:0;width:35%;text-align:center;background-color: #17212b;">
<img src="toncoin.png" width="100%" alt="">
<a href="javascript:;" id="copy" style="color:white;text-decoration:none" data-id="UQCDDkaX3fCAFBek28Hx4TfvDDRqeizOW74blVMVAM4_m4OW">copy</a>
<iframe src="https://ghbtns.com/github-btn.html?user=mercurykd&repo=vpnbot&type=star&count=true" frameborder="0" scrolling="0" width="150" height="20" title="GitHub"></iframe>
<!-- <iframe src="https://ghbtns.com/github-btn.html?user=mercurykd&repo=vpnbot&type=star&count=true" frameborder="0" scrolling="0" width="150" height="20" title="GitHub"></iframe> -->
</div>
<a style="background-color: #8B3FFD;height: 46px;display:inline-block;padding:0 54px;color: white;border-radius: 12px;text-decoration: none;font-size: 20px;line-height: 46px;font-family: arial;" href="https://yoomoney.ru/to/410011827900450">
<svg style="width: 24px;fill: white;position: relative;top: 4px;" class="qa-fundraise-button-logo mui-m0okdh" viewBox="0 0 16 16"><path d="M4.638 8.5a5.67 5.67 0 015.681-5.68A5.693 5.693 0 0116 8.5a5.693 5.693 0 01-5.68 5.682A5.67 5.67 0 014.637 8.5zm3.56 0c0 1.151.97 2.122 2.121 2.122 1.15 0 2.085-.97 2.121-2.121 0-1.15-.97-2.121-2.12-2.121-1.151 0-2.122.97-2.122 2.12zm-3.596 4.243v-8.27H0l2.589 8.27h2.013z" clip-rule="evenodd"></path></svg>
+111 -87
View File
@@ -3,104 +3,128 @@
"level": "error",
"timestamp": true
},
"inbounds": [{
"type": "tun",
"tag": "tun-in",
"domain_strategy": "prefer_ipv4",
"interface_name": "sing-tun",
"inet4_address": "172.19.0.1\/30",
"mtu": 1400,
"gso": true,
"auto_route": true,
"strict_route": true,
"sniff": true,
"endpoint_independent_nat": false,
"stack": "mixed",
"platform": {
"http_proxy": {
"enabled": false,
"server": "127.0.0.1",
"server_port": 2080
"inbounds": [
{
"type": "tun",
"tag": "tun-in",
"domain_strategy": "prefer_ipv4",
"interface_name": "sing-tun",
"inet4_address": "172.19.0.1\/30",
"mtu": 1400,
"gso": true,
"auto_route": true,
"strict_route": true,
"sniff": true,
"endpoint_independent_nat": false,
"stack": "mixed",
"platform": {
"http_proxy": {
"enabled": false,
"server": "127.0.0.1",
"server_port": 2080
}
}
},
{
"type": "mixed",
"tag": "mixed-in",
"domain_strategy": "prefer_ipv4",
"listen": "127.0.0.1",
"listen_port": 2080,
"tcp_fast_open": true,
"sniff": true,
"sniff_override_destination": false,
"users": []
}
}, {
"type": "mixed",
"tag": "mixed-in",
"domain_strategy": "prefer_ipv4",
"listen": "127.0.0.1",
"listen_port": 2080,
"tcp_fast_open": true,
"sniff": true,
"sniff_override_destination": false,
"users": []
}],
],
"dns": {
"servers": [{
"tag": "dns_direct",
"address": "~dns~",
"address_resolver": "dns-remote",
"strategy": "prefer_ipv4",
"detour": "direct"
}, {
"tag": "dns-remote",
"address": "tcp:\/\/8.8.8.8",
"address_strategy": "prefer_ipv4",
"strategy": "prefer_ipv4",
"detour": "direct"
}],
"rules": [{
"outbound": "any",
"server": "dns-direct",
"disable_cache": false
}],
"servers": [
{
"tag": "dns_direct",
"address": "~dns~",
"address_resolver": "dns-remote",
"strategy": "prefer_ipv4",
"detour": "direct"
},
{
"tag": "dns-remote",
"address": "tcp:\/\/8.8.8.8",
"address_strategy": "prefer_ipv4",
"strategy": "prefer_ipv4",
"detour": "direct"
}
],
"rules": [
{
"outbound": "any",
"server": "dns-direct",
"disable_cache": false
}
],
"strategy": "ipv4_only",
"independent_cache": true
},
"outbounds": [{
"flow": "xtls-rprx-vision",
"packet_encoding": "",
"server": "",
"server_port": 443,
"tls": {
"enabled": true,
"insecure": false,
"reality": {
"outbounds": [
{
"flow": "xtls-rprx-vision",
"packet_encoding": "",
"server": "",
"server_port": 443,
"tls": {
"enabled": true,
"public_key": "",
"short_id": ""
"insecure": false,
"reality": {
"enabled": true,
"public_key": "",
"short_id": ""
},
"server_name": "",
"utls": {
"enabled": true,
"fingerprint": "chrome"
}
},
"server_name": "",
"utls": {
"enabled": true,
"fingerprint": "chrome"
}
"uuid": "",
"type": "vless",
"domain_strategy": "ipv4_only",
"tag": "proxy"
},
"uuid": "",
"type": "vless",
"domain_strategy": "ipv4_only",
"tag": "proxy"
}, {
"type": "direct",
"tag": "direct"
}, {
"type": "block",
"tag": "block"
}, {
"type": "dns",
"tag": "dns-out"
}],
{
"type": "direct",
"tag": "direct"
},
{
"type": "block",
"tag": "block"
},
{
"type": "dns",
"tag": "dns-out"
}
],
"route": {
"auto_detect_interface": true,
"override_android_vpn": true,
"rules": [{
"protocol": "dns",
"outbound": "dns-out"
}, {
"domain_suffix": "~pac~",
"outbound": "proxy"
}, {
"ip_cidr": ["0.0.0.0\/0"],
"outbound": "direct"
}]
"rules": [
{
"protocol": "dns",
"outbound": "dns-out"
},
{
"createruleset": [
{
"name": "selfpac",
"interval": "15s",
"rules": [
{
"domain_suffix": "~pac~"
}
]
}
],
"outbound": "proxy"
}
],
"final": "direct"
}
}
+1 -1
View File
@@ -85,7 +85,7 @@
"rules": [{
"type": "field",
"outboundTag": "proxy",
"domain": []
"domain": "~pac~"
}, {
"type": "field",
"port": "0-65535",
+34 -2
View File
@@ -93,7 +93,7 @@ services:
ipv4_address: 10.10.1.2
logging: *default-logging
php:
image: mercurykd/vpnbot-php:1.4
image: mercurykd/vpnbot-php:1.5
build:
dockerfile: dockerfile/php.dockerfile
args:
@@ -116,6 +116,7 @@ services:
- ./update:/update
- ./.git:/.git
- ./singbox_windows:/singbox
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
IP: ${IP}
VER: ${VER}
@@ -142,7 +143,7 @@ services:
timeout: 5s
retries: 5
service:
image: mercurykd/vpnbot-php:1.2
image: mercurykd/vpnbot-php:1.5
build:
dockerfile: dockerfile/php.dockerfile
args:
@@ -157,6 +158,7 @@ services:
- ./logs/:/logs/
- ./update:/update
- ./scripts/start_service.sh:/start_service.sh
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
IP: ${IP}
VER: ${VER}
@@ -490,3 +492,33 @@ services:
default:
ipv4_address: 10.10.0.12
logging: *default-logging
wp:
image: mercurykd/vpnbot-wp:1.1
build:
dockerfile: dockerfile/warp.dockerfile
args:
image: ${IMAGE}
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
volumes:
- ./config/.profile:/root/.bashrc:ro
- ./ssh:/ssh
- ./config/sshd_config:/etc/ssh/sshd_config
- ./config:/config
- ./certs:/certs
- ./scripts/start_wp.sh:/start_wp.sh
hostname: warp
container_name: warp-${VER}
depends_on:
php:
condition: service_healthy
environment:
TZ: ${TZ}
stop_grace_period: 1s
command: ["/bin/sh", "/start_wp.sh"]
networks:
default:
ipv4_address: 10.10.0.13
logging: *default-logging
+6 -1
View File
@@ -26,5 +26,10 @@ RUN apk add --no-cache --update php81 \
&& tar -xf dnslookup-linux-amd64-v1.9.1.tar.gz \
&& mv linux-amd64/dnslookup /usr/bin \
&& rm dnslookup-linux-amd64-v1.9.1.tar.gz \
&& rm -rf /linux-amd64
&& rm -rf /linux-amd64 \
&& 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
ENV ENV="/root/.ashrc"
+6
View File
@@ -0,0 +1,6 @@
FROM ubuntu:22.04
RUN apt update && apt install -y curl gpg socat jq lsb-release openssh-server \
&& curl -fsSL https://pkg.cloudflareclient.com/pubkey.gpg | gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg \
&& echo "deb [signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/cloudflare-client.list \
&& apt update && apt install -y cloudflare-warp \
&& mkdir /root/.ssh
+1 -1
View File
@@ -9,7 +9,7 @@ d: # остановка контейнеров
docker compose down --remove-orphans
dv: # остановка контейнеров
docker compose down -v
r: d cleanf u cleanf
r: d u
ps: # список контейнеров
docker compose ps
l: # логи из контейнеров
+15
View File
@@ -0,0 +1,15 @@
cat /ssh/key.pub > /root/.ssh/authorized_keys
echo 'HostKeyAlgorithms +ssh-rsa' >> /etc/ssh/sshd_config
echo 'PubkeyAcceptedKeyTypes +ssh-rsa' >> /etc/ssh/sshd_config
service ssh start
warp-svc > /dev/null &
sleep 3
warp-cli --accept-tos registration new
key=$(cat /config/pac.json | jq -r .warp)
if [ ! -z "$key" ]
then
warp-cli --accept-tos registration license $key
fi
warp-cli --accept-tos mode proxy
warp-cli --accept-tos connect
socat TCP-LISTEN:4000,fork TCP:127.0.0.1:40000
+1 -1
View File
@@ -1,2 +1,2 @@
winsw.exe install
winsw3.exe install
pause
+2
View File
@@ -0,0 +1,2 @@
winsw3.exe stop
winsw3.exe start
+1 -1
View File
@@ -1 +1 @@
winsw.exe start
winsw3.exe start
+1 -1
View File
@@ -1,2 +1,2 @@
winsw.exe status
winsw3.exe status
pause
+1 -1
View File
@@ -1 +1 @@
winsw.exe stop
winsw3.exe stop
+1 -1
View File
@@ -1,2 +1,2 @@
winsw.exe uninstall
winsw3.exe uninstall
pause
@@ -13,7 +13,5 @@
<onexit action="restart" />
<onexit action="restart" />
<onexit action="none" />
<configuration>
<download from="~url~" to="%BASE%\config.json" interval="1 minute" />
</configuration>
<download from="~url~" to="%BASE%\config.json"/>
</service>
+9
View File
@@ -9,16 +9,25 @@ do
branch=$(cat $pwd/update/branch 2>/dev/null)
if [[ -n "$cmd" ]]
then
key=$(cat $pwd/update/key)
curl -H "Content-Type: application/json" -X POST https://api.telegram.org/bot$key/editMessageText -d "$(cat $pwd/update/curl | sed 's/"text":"~t~"/"text": "останавливаю бота"/')"
docker compose down --remove-orphans
curl -H "Content-Type: application/json" -X POST https://api.telegram.org/bot$key/editMessageText -d "$(cat $pwd/update/curl | sed 's/"text":"~t~"/"text": "очищаю директорию"/')"
git reset --hard && git clean -fd
curl -H "Content-Type: application/json" -X POST https://api.telegram.org/bot$key/editMessageText -d "$(cat $pwd/update/curl | sed 's/"text":"~t~"/"text": "скачиваю обновление"/')"
git fetch
if [[ -n "$branch" ]]
then
curl -H "Content-Type: application/json" -X POST https://api.telegram.org/bot$key/editMessageText -d "$(cat $pwd/update/curl | sed 's/"text":"~t~"/"text": "меняю ветку"/')"
git checkout -t origin/$branch || git checkout $branch
fi
curl -H "Content-Type: application/json" -X POST https://api.telegram.org/bot$key/editMessageText -d "$(cat $pwd/update/curl | sed 's/"text":"~t~"/"text": "применяю обновления"/')"
git pull > ./update/message
curl -H "Content-Type: application/json" -X POST https://api.telegram.org/bot$key/editMessageText -d "$(cat $pwd/update/curl | sed 's/"text":"~t~"/"text": "запускаю бота"/')"
IP=$(curl https://ipinfo.io/ip) VER=$(git describe --tags) docker compose up -d --force-recreate
bash $pwd/update/update.sh &
> $pwd/update/key
> $pwd/update/curl
exit 0
fi
sleep 1
+23
View File
@@ -1,3 +1,26 @@
22.04.2024 v1.35
- очистка старых образов
19.04.2024 v1.34
- формирование rule_set из шаблона singbox
18.04.2024 v1.33
- вывод статуса warp в меню
18.04.2024 v1.32
- фиксы в названии и отображении выбранного шаблона xtls
18.04.2024 v1.31
- возможность устанавливать ключ для warp
16.04.2024 v1.30.1
- улучшение сообщения об обновлениях
16.04.2024 v1.30
- улучшение скрипта обновления
16.04.2024 v1.29
- рефакторинг подписок
- кнопки импорта для различных клиентов
- шаблоны для v2ray
15.04.2024 v1.28
- xtls: список блокировки, список warp
- улучшение отображения таймера
14.04.2024 v1.27.1
- singbox windows: замена winsw на winsw3, + скрипт обновления подписки
13.04.2024 v1.27
- архив сингбокса для windows, работает как служба
12.04.2024 v1.26