mirror of
				https://github.com/v2board/v2board.git
				synced 2025-10-31 09:21:46 +08:00 
			
		
		
		
	update: server
This commit is contained in:
		| @@ -20,6 +20,7 @@ use Illuminate\Support\Facades\Cache; | |||||||
|  */ |  */ | ||||||
| class DeepbworkController extends Controller | class DeepbworkController extends Controller | ||||||
| { | { | ||||||
|  |     CONST V2RAY_CONFIG = '{"log":{"loglevel":"debug","access":"access.log","error":"error.log"},"api":{"services":["HandlerService","StatsService"],"tag":"api"},"dns":{},"stats":{},"inbounds":[{"port":443,"protocol":"vmess","settings":{"clients":[]},"sniffing":{"enabled":true,"destOverride":["http","tls"]},"streamSettings":{"network":"tcp"},"tag":"proxy"},{"listen":"127.0.0.1","port":23333,"protocol":"dokodemo-door","settings":{"address":"0.0.0.0"},"tag":"api"}],"outbounds":[{"protocol":"freedom","settings":{}},{"protocol":"blackhole","settings":{},"tag":"block"}],"routing":{"rules":[{"type":"field","inboundTag":"api","outboundTag":"api"}]},"policy":{"levels":{"0":{"handshake":4,"connIdle":300,"uplinkOnly":5,"downlinkOnly":30,"statsUserUplink":true,"statsUserDownlink":true}}}}'; | ||||||
|     public function __construct(Request $request) |     public function __construct(Request $request) | ||||||
|     { |     { | ||||||
|         $token = $request->input('token'); |         $token = $request->input('token'); | ||||||
| @@ -52,7 +53,6 @@ class DeepbworkController extends Controller | |||||||
|                 "level" => 0, |                 "level" => 0, | ||||||
|             ]; |             ]; | ||||||
|             unset($user['uuid']); |             unset($user['uuid']); | ||||||
|             unset($user['email']); |  | ||||||
|             array_push($result, $user); |             array_push($result, $user); | ||||||
|         } |         } | ||||||
|         $eTag = sha1(json_encode($result)); |         $eTag = sha1(json_encode($result)); | ||||||
| @@ -101,13 +101,133 @@ class DeepbworkController extends Controller | |||||||
|         if (empty($nodeId) || empty($localPort)) { |         if (empty($nodeId) || empty($localPort)) { | ||||||
|             abort(500, '参数错误'); |             abort(500, '参数错误'); | ||||||
|         } |         } | ||||||
|         $serverService = new ServerService(); |  | ||||||
|         try { |         try { | ||||||
|             $json = $serverService->getV2RayConfig($nodeId, $localPort); |             $json = $this->getV2RayConfig($nodeId, $localPort); | ||||||
|         } catch (\Exception $e) { |         } catch (\Exception $e) { | ||||||
|             abort(500, $e->getMessage()); |             abort(500, $e->getMessage()); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         die(json_encode($json, JSON_UNESCAPED_UNICODE)); |         die(json_encode($json, JSON_UNESCAPED_UNICODE)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     private function getV2RayConfig(int $nodeId, int $localPort) | ||||||
|  |     { | ||||||
|  |         $server = ServerV2ray::find($nodeId); | ||||||
|  |         if (!$server) { | ||||||
|  |             abort(500, '节点不存在'); | ||||||
|  |         } | ||||||
|  |         $json = json_decode(self::V2RAY_CONFIG); | ||||||
|  |         $json->log->loglevel = (int)config('v2board.server_log_enable') ? 'debug' : 'none'; | ||||||
|  |         $json->inbounds[1]->port = (int)$localPort; | ||||||
|  |         $json->inbounds[0]->port = (int)$server->server_port; | ||||||
|  |         $json->inbounds[0]->streamSettings->network = $server->network; | ||||||
|  |         $this->setDns($server, $json); | ||||||
|  |         $this->setNetwork($server, $json); | ||||||
|  |         $this->setRule($server, $json); | ||||||
|  |         $this->setTls($server, $json); | ||||||
|  |  | ||||||
|  |         return $json; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private function setDns(ServerV2ray $server, object $json) | ||||||
|  |     { | ||||||
|  |         if ($server->dnsSettings) { | ||||||
|  |             $dns = $server->dnsSettings; | ||||||
|  |             if (isset($dns->servers)) { | ||||||
|  |                 array_push($dns->servers, '1.1.1.1'); | ||||||
|  |                 array_push($dns->servers, 'localhost'); | ||||||
|  |             } | ||||||
|  |             $json->dns = $dns; | ||||||
|  |             $json->outbounds[0]->settings->domainStrategy = 'UseIP'; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private function setNetwork(ServerV2ray $server, object $json) | ||||||
|  |     { | ||||||
|  |         if ($server->networkSettings) { | ||||||
|  |             switch ($server->network) { | ||||||
|  |                 case 'tcp': | ||||||
|  |                     $json->inbounds[0]->streamSettings->tcpSettings = $server->networkSettings; | ||||||
|  |                     break; | ||||||
|  |                 case 'kcp': | ||||||
|  |                     $json->inbounds[0]->streamSettings->kcpSettings = $server->networkSettings; | ||||||
|  |                     break; | ||||||
|  |                 case 'ws': | ||||||
|  |                     $json->inbounds[0]->streamSettings->wsSettings = $server->networkSettings; | ||||||
|  |                     break; | ||||||
|  |                 case 'http': | ||||||
|  |                     $json->inbounds[0]->streamSettings->httpSettings = $server->networkSettings; | ||||||
|  |                     break; | ||||||
|  |                 case 'domainsocket': | ||||||
|  |                     $json->inbounds[0]->streamSettings->dsSettings = $server->networkSettings; | ||||||
|  |                     break; | ||||||
|  |                 case 'quic': | ||||||
|  |                     $json->inbounds[0]->streamSettings->quicSettings = $server->networkSettings; | ||||||
|  |                     break; | ||||||
|  |                 case 'grpc': | ||||||
|  |                     $json->inbounds[0]->streamSettings->grpcSettings = $server->networkSettings; | ||||||
|  |                     break; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private function setRule(ServerV2ray $server, object $json) | ||||||
|  |     { | ||||||
|  |         $domainRules = array_filter(explode(PHP_EOL, config('v2board.server_v2ray_domain'))); | ||||||
|  |         $protocolRules = array_filter(explode(PHP_EOL, config('v2board.server_v2ray_protocol'))); | ||||||
|  |         if ($server->ruleSettings) { | ||||||
|  |             $ruleSettings = $server->ruleSettings; | ||||||
|  |             // domain | ||||||
|  |             if (isset($ruleSettings->domain)) { | ||||||
|  |                 $ruleSettings->domain = array_filter($ruleSettings->domain); | ||||||
|  |                 if (!empty($ruleSettings->domain)) { | ||||||
|  |                     $domainRules = array_merge($domainRules, $ruleSettings->domain); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |             // protocol | ||||||
|  |             if (isset($ruleSettings->protocol)) { | ||||||
|  |                 $ruleSettings->protocol = array_filter($ruleSettings->protocol); | ||||||
|  |                 if (!empty($ruleSettings->protocol)) { | ||||||
|  |                     $protocolRules = array_merge($protocolRules, $ruleSettings->protocol); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         if (!empty($domainRules)) { | ||||||
|  |             $domainObj = new \StdClass(); | ||||||
|  |             $domainObj->type = 'field'; | ||||||
|  |             $domainObj->domain = $domainRules; | ||||||
|  |             $domainObj->outboundTag = 'block'; | ||||||
|  |             array_push($json->routing->rules, $domainObj); | ||||||
|  |         } | ||||||
|  |         if (!empty($protocolRules)) { | ||||||
|  |             $protocolObj = new \StdClass(); | ||||||
|  |             $protocolObj->type = 'field'; | ||||||
|  |             $protocolObj->protocol = $protocolRules; | ||||||
|  |             $protocolObj->outboundTag = 'block'; | ||||||
|  |             array_push($json->routing->rules, $protocolObj); | ||||||
|  |         } | ||||||
|  |         if (empty($domainRules) && empty($protocolRules)) { | ||||||
|  |             $json->inbounds[0]->sniffing->enabled = false; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private function setTls(ServerV2ray $server, object $json) | ||||||
|  |     { | ||||||
|  |         if ((int)$server->tls) { | ||||||
|  |             $tlsSettings = $server->tlsSettings; | ||||||
|  |             $json->inbounds[0]->streamSettings->security = 'tls'; | ||||||
|  |             $tls = (object)[ | ||||||
|  |                 'certificateFile' => '/root/.cert/server.crt', | ||||||
|  |                 'keyFile' => '/root/.cert/server.key' | ||||||
|  |             ]; | ||||||
|  |             $json->inbounds[0]->streamSettings->tlsSettings = new \StdClass(); | ||||||
|  |             if (isset($tlsSettings->serverName)) { | ||||||
|  |                 $json->inbounds[0]->streamSettings->tlsSettings->serverName = (string)$tlsSettings->serverName; | ||||||
|  |             } | ||||||
|  |             if (isset($tlsSettings->allowInsecure)) { | ||||||
|  |                 $json->inbounds[0]->streamSettings->tlsSettings->allowInsecure = (int)$tlsSettings->allowInsecure ? true : false; | ||||||
|  |             } | ||||||
|  |             $json->inbounds[0]->streamSettings->tlsSettings->certificates[0] = $tls; | ||||||
|  |         } | ||||||
|  |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -20,6 +20,7 @@ use Illuminate\Support\Facades\Cache; | |||||||
|  */ |  */ | ||||||
| class TrojanTidalabController extends Controller | class TrojanTidalabController extends Controller | ||||||
| { | { | ||||||
|  |     CONST TROJAN_CONFIG = '{"run_type":"server","local_addr":"0.0.0.0","local_port":443,"remote_addr":"www.taobao.com","remote_port":80,"password":[],"ssl":{"cert":"server.crt","key":"server.key","sni":"domain.com"},"api":{"enabled":true,"api_addr":"127.0.0.1","api_port":10000}}'; | ||||||
|     public function __construct(Request $request) |     public function __construct(Request $request) | ||||||
|     { |     { | ||||||
|         $token = $request->input('token'); |         $token = $request->input('token'); | ||||||
| @@ -49,7 +50,6 @@ class TrojanTidalabController extends Controller | |||||||
|                 "password" => $user->uuid, |                 "password" => $user->uuid, | ||||||
|             ]; |             ]; | ||||||
|             unset($user['uuid']); |             unset($user['uuid']); | ||||||
|             unset($user['email']); |  | ||||||
|             array_push($result, $user); |             array_push($result, $user); | ||||||
|         } |         } | ||||||
|         $eTag = sha1(json_encode($result)); |         $eTag = sha1(json_encode($result)); | ||||||
| @@ -98,13 +98,28 @@ class TrojanTidalabController extends Controller | |||||||
|         if (empty($nodeId) || empty($localPort)) { |         if (empty($nodeId) || empty($localPort)) { | ||||||
|             abort(500, '参数错误'); |             abort(500, '参数错误'); | ||||||
|         } |         } | ||||||
|         $serverService = new ServerService(); |  | ||||||
|         try { |         try { | ||||||
|             $json = $serverService->getTrojanConfig($nodeId, $localPort); |             $json = $this->getTrojanConfig($nodeId, $localPort); | ||||||
|         } catch (\Exception $e) { |         } catch (\Exception $e) { | ||||||
|             abort(500, $e->getMessage()); |             abort(500, $e->getMessage()); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         die(json_encode($json, JSON_UNESCAPED_UNICODE)); |         die(json_encode($json, JSON_UNESCAPED_UNICODE)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     private function getTrojanConfig(int $nodeId, int $localPort) | ||||||
|  |     { | ||||||
|  |         $server = ServerTrojan::find($nodeId); | ||||||
|  |         if (!$server) { | ||||||
|  |             abort(500, '节点不存在'); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         $json = json_decode(self::TROJAN_CONFIG); | ||||||
|  |         $json->local_port = $server->server_port; | ||||||
|  |         $json->ssl->sni = $server->server_name ? $server->server_name : $server->host; | ||||||
|  |         $json->ssl->cert = "/root/.cert/server.crt"; | ||||||
|  |         $json->ssl->key = "/root/.cert/server.key"; | ||||||
|  |         $json->api->api_port = $localPort; | ||||||
|  |         return $json; | ||||||
|  |     } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -14,8 +14,6 @@ use Illuminate\Support\Facades\Cache; | |||||||
| class ServerService | class ServerService | ||||||
| { | { | ||||||
|  |  | ||||||
|     CONST V2RAY_CONFIG = '{"log":{"loglevel":"debug","access":"access.log","error":"error.log"},"api":{"services":["HandlerService","StatsService"],"tag":"api"},"dns":{},"stats":{},"inbounds":[{"port":443,"protocol":"vmess","settings":{"clients":[]},"sniffing":{"enabled":true,"destOverride":["http","tls"]},"streamSettings":{"network":"tcp"},"tag":"proxy"},{"listen":"127.0.0.1","port":23333,"protocol":"dokodemo-door","settings":{"address":"0.0.0.0"},"tag":"api"}],"outbounds":[{"protocol":"freedom","settings":{}},{"protocol":"blackhole","settings":{},"tag":"block"}],"routing":{"rules":[{"type":"field","inboundTag":"api","outboundTag":"api"}]},"policy":{"levels":{"0":{"handshake":4,"connIdle":300,"uplinkOnly":5,"downlinkOnly":30,"statsUserUplink":true,"statsUserDownlink":true}}}}'; |  | ||||||
|     CONST TROJAN_CONFIG = '{"run_type":"server","local_addr":"0.0.0.0","local_port":443,"remote_addr":"www.taobao.com","remote_port":80,"password":[],"ssl":{"cert":"server.crt","key":"server.key","sni":"domain.com"},"api":{"enabled":true,"api_addr":"127.0.0.1","api_port":10000}}'; |  | ||||||
|     public function getV2ray(User $user, $all = false):array |     public function getV2ray(User $user, $all = false):array | ||||||
|     { |     { | ||||||
|         $servers = []; |         $servers = []; | ||||||
| @@ -117,153 +115,11 @@ class ServerService | |||||||
|             ->where('banned', 0) |             ->where('banned', 0) | ||||||
|             ->select([ |             ->select([ | ||||||
|                 'id', |                 'id', | ||||||
|                 'email', |  | ||||||
|                 't', |  | ||||||
|                 'u', |  | ||||||
|                 'd', |  | ||||||
|                 'transfer_enable', |  | ||||||
|                 'uuid' |                 'uuid' | ||||||
|             ]) |             ]) | ||||||
|             ->get(); |             ->get(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public function getV2RayConfig(int $nodeId, int $localPort) |  | ||||||
|     { |  | ||||||
|         $server = ServerV2ray::find($nodeId); |  | ||||||
|         if (!$server) { |  | ||||||
|             abort(500, '节点不存在'); |  | ||||||
|         } |  | ||||||
|         $json = json_decode(self::V2RAY_CONFIG); |  | ||||||
|         $json->log->loglevel = (int)config('v2board.server_log_enable') ? 'debug' : 'none'; |  | ||||||
|         $json->inbounds[1]->port = (int)$localPort; |  | ||||||
|         $json->inbounds[0]->port = (int)$server->server_port; |  | ||||||
|         $json->inbounds[0]->streamSettings->network = $server->network; |  | ||||||
|         $this->setDns($server, $json); |  | ||||||
|         $this->setNetwork($server, $json); |  | ||||||
|         $this->setRule($server, $json); |  | ||||||
|         $this->setTls($server, $json); |  | ||||||
|  |  | ||||||
|         return $json; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public function getTrojanConfig(int $nodeId, int $localPort) |  | ||||||
|     { |  | ||||||
|         $server = ServerTrojan::find($nodeId); |  | ||||||
|         if (!$server) { |  | ||||||
|             abort(500, '节点不存在'); |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         $json = json_decode(self::TROJAN_CONFIG); |  | ||||||
|         $json->local_port = $server->server_port; |  | ||||||
|         $json->ssl->sni = $server->server_name ? $server->server_name : $server->host; |  | ||||||
|         $json->ssl->cert = "/root/.cert/server.crt"; |  | ||||||
|         $json->ssl->key = "/root/.cert/server.key"; |  | ||||||
|         $json->api->api_port = $localPort; |  | ||||||
|         return $json; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     private function setDns(ServerV2ray $server, object $json) |  | ||||||
|     { |  | ||||||
|         if ($server->dnsSettings) { |  | ||||||
|             $dns = $server->dnsSettings; |  | ||||||
|             if (isset($dns->servers)) { |  | ||||||
|                 array_push($dns->servers, '1.1.1.1'); |  | ||||||
|                 array_push($dns->servers, 'localhost'); |  | ||||||
|             } |  | ||||||
|             $json->dns = $dns; |  | ||||||
|             $json->outbounds[0]->settings->domainStrategy = 'UseIP'; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     private function setNetwork(ServerV2ray $server, object $json) |  | ||||||
|     { |  | ||||||
|         if ($server->networkSettings) { |  | ||||||
|             switch ($server->network) { |  | ||||||
|                 case 'tcp': |  | ||||||
|                     $json->inbounds[0]->streamSettings->tcpSettings = $server->networkSettings; |  | ||||||
|                     break; |  | ||||||
|                 case 'kcp': |  | ||||||
|                     $json->inbounds[0]->streamSettings->kcpSettings = $server->networkSettings; |  | ||||||
|                     break; |  | ||||||
|                 case 'ws': |  | ||||||
|                     $json->inbounds[0]->streamSettings->wsSettings = $server->networkSettings; |  | ||||||
|                     break; |  | ||||||
|                 case 'http': |  | ||||||
|                     $json->inbounds[0]->streamSettings->httpSettings = $server->networkSettings; |  | ||||||
|                     break; |  | ||||||
|                 case 'domainsocket': |  | ||||||
|                     $json->inbounds[0]->streamSettings->dsSettings = $server->networkSettings; |  | ||||||
|                     break; |  | ||||||
|                 case 'quic': |  | ||||||
|                     $json->inbounds[0]->streamSettings->quicSettings = $server->networkSettings; |  | ||||||
|                     break; |  | ||||||
|                 case 'grpc': |  | ||||||
|                     $json->inbounds[0]->streamSettings->grpcSettings = $server->networkSettings; |  | ||||||
|                     break; |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     private function setRule(ServerV2ray $server, object $json) |  | ||||||
|     { |  | ||||||
|         $domainRules = array_filter(explode(PHP_EOL, config('v2board.server_v2ray_domain'))); |  | ||||||
|         $protocolRules = array_filter(explode(PHP_EOL, config('v2board.server_v2ray_protocol'))); |  | ||||||
|         if ($server->ruleSettings) { |  | ||||||
|             $ruleSettings = $server->ruleSettings; |  | ||||||
|             // domain |  | ||||||
|             if (isset($ruleSettings->domain)) { |  | ||||||
|                 $ruleSettings->domain = array_filter($ruleSettings->domain); |  | ||||||
|                 if (!empty($ruleSettings->domain)) { |  | ||||||
|                     $domainRules = array_merge($domainRules, $ruleSettings->domain); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|             // protocol |  | ||||||
|             if (isset($ruleSettings->protocol)) { |  | ||||||
|                 $ruleSettings->protocol = array_filter($ruleSettings->protocol); |  | ||||||
|                 if (!empty($ruleSettings->protocol)) { |  | ||||||
|                     $protocolRules = array_merge($protocolRules, $ruleSettings->protocol); |  | ||||||
|                 } |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         if (!empty($domainRules)) { |  | ||||||
|             $domainObj = new \StdClass(); |  | ||||||
|             $domainObj->type = 'field'; |  | ||||||
|             $domainObj->domain = $domainRules; |  | ||||||
|             $domainObj->outboundTag = 'block'; |  | ||||||
|             array_push($json->routing->rules, $domainObj); |  | ||||||
|         } |  | ||||||
|         if (!empty($protocolRules)) { |  | ||||||
|             $protocolObj = new \StdClass(); |  | ||||||
|             $protocolObj->type = 'field'; |  | ||||||
|             $protocolObj->protocol = $protocolRules; |  | ||||||
|             $protocolObj->outboundTag = 'block'; |  | ||||||
|             array_push($json->routing->rules, $protocolObj); |  | ||||||
|         } |  | ||||||
|         if (empty($domainRules) && empty($protocolRules)) { |  | ||||||
|             $json->inbounds[0]->sniffing->enabled = false; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     private function setTls(ServerV2ray $server, object $json) |  | ||||||
|     { |  | ||||||
|         if ((int)$server->tls) { |  | ||||||
|             $tlsSettings = $server->tlsSettings; |  | ||||||
|             $json->inbounds[0]->streamSettings->security = 'tls'; |  | ||||||
|             $tls = (object)[ |  | ||||||
|                 'certificateFile' => '/root/.cert/server.crt', |  | ||||||
|                 'keyFile' => '/root/.cert/server.key' |  | ||||||
|             ]; |  | ||||||
|             $json->inbounds[0]->streamSettings->tlsSettings = new \StdClass(); |  | ||||||
|             if (isset($tlsSettings->serverName)) { |  | ||||||
|                 $json->inbounds[0]->streamSettings->tlsSettings->serverName = (string)$tlsSettings->serverName; |  | ||||||
|             } |  | ||||||
|             if (isset($tlsSettings->allowInsecure)) { |  | ||||||
|                 $json->inbounds[0]->streamSettings->tlsSettings->allowInsecure = (int)$tlsSettings->allowInsecure ? true : false; |  | ||||||
|             } |  | ||||||
|             $json->inbounds[0]->streamSettings->tlsSettings->certificates[0] = $tls; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public function log(int $userId, int $serverId, int $u, int $d, float $rate, string $method) |     public function log(int $userId, int $serverId, int $u, int $d, float $rate, string $method) | ||||||
|     { |     { | ||||||
|         if (($u + $d) < 10240) return true; |         if (($u + $d) < 10240) return true; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user