diff --git a/client/configurators/v2ray_configurator.cpp b/client/configurators/v2ray_configurator.cpp index dbebe9b6..0c26cd78 100644 --- a/client/configurators/v2ray_configurator.cpp +++ b/client/configurators/v2ray_configurator.cpp @@ -7,6 +7,7 @@ #include #include "core/servercontroller.h" +#include "core/scripts_registry.h" #include "containers/containers_defs.h" V2RayConfigurator::V2RayConfigurator(std::shared_ptr settings, std::shared_ptr serverController, @@ -29,42 +30,13 @@ QString V2RayConfigurator::genV2RayConfig(const ServerCredentials &credentials, return ""; } - QJsonObject config; - QJsonObject inboundsSocks; - inboundsSocks.insert("protocol", "socks"); - inboundsSocks.insert("listen", "127.0.0.1"); - inboundsSocks.insert("port", 1080); //todo - QJsonObject socksSettings; - socksSettings.insert("auth", "noauth"); - socksSettings.insert("udp", true); - inboundsSocks.insert("settings", socksSettings); + QString v2RayClientConfig = m_serverController->replaceVars(amnezia::scriptData(ProtocolScriptType::v2ray_client_template, container), + m_serverController->genVarsForScript(credentials, container, containerConfig)); - QJsonArray inbounds; - inbounds.push_back(inboundsSocks); - config.insert("inbounds", inbounds); + v2RayClientConfig.replace("$V2RAY_VMESS_CLIENT_UUID", v2rayVmessClientUuid); + v2RayClientConfig = m_serverController->replaceVars(v2RayClientConfig, + m_serverController->genVarsForScript(credentials, container, containerConfig)); - - QJsonObject outboundsVmess; - outboundsVmess.insert("protocol", "vmess"); - QJsonObject vmessSettings; - QJsonObject vnext; - vnext.insert("address", credentials.hostName); - vnext.insert("port", 10086); //todo - QJsonObject users; - users.insert("id", v2rayVmessClientUuid); - vnext.insert("users", QJsonArray({users})); - vmessSettings.insert("vnext", QJsonArray({vnext})); - outboundsVmess.insert("settings", vmessSettings); - - QJsonArray outbounds; - outbounds.push_back(outboundsVmess); - config.insert("outbounds", outbounds); - - - QString textCfg = m_serverController->replaceVars(QJsonDocument(config).toJson(), - m_serverController->genVarsForScript(credentials, container, containerConfig)); - - // qDebug().noquote() << textCfg; - return textCfg; + return v2RayClientConfig; } diff --git a/client/core/scripts_registry.cpp b/client/core/scripts_registry.cpp index dd12041e..3d902f27 100644 --- a/client/core/scripts_registry.cpp +++ b/client/core/scripts_registry.cpp @@ -45,6 +45,7 @@ QString amnezia::scriptName(ProtocolScriptType type) case ProtocolScriptType::container_startup: return QLatin1String("start.sh"); case ProtocolScriptType::openvpn_template: return QLatin1String("template.ovpn"); case ProtocolScriptType::wireguard_template: return QLatin1String("template.conf"); + case ProtocolScriptType::v2ray_client_template: return QLatin1String("template_v2ray_client.json"); } } diff --git a/client/core/scripts_registry.h b/client/core/scripts_registry.h index 9528d763..269bc90d 100644 --- a/client/core/scripts_registry.h +++ b/client/core/scripts_registry.h @@ -25,7 +25,8 @@ enum ProtocolScriptType { configure_container, container_startup, openvpn_template, - wireguard_template + wireguard_template, + v2ray_client_template }; diff --git a/client/core/servercontroller.cpp b/client/core/servercontroller.cpp index 9d27bd60..d9fb7e74 100644 --- a/client/core/servercontroller.cpp +++ b/client/core/servercontroller.cpp @@ -720,8 +720,8 @@ ServerController::Vars ServerController::genVarsForScript(const ServerCredential vars.append({{"$WIREGUARD_SERVER_PORT", wireguarConfig.value(config_key::port).toString(protocols::wireguard::defaultPort) }}); // V2Ray vars - vars.append({{"$V2RAY_SERVER_PORT", v2RayConfig.value(config_key::port).toString(protocols::v2ray::defaultLocalPort) }}); - vars.append({{"$V2RAY_LOCAL_PORT", v2RayConfig.value(config_key::local_port).toString(protocols::v2ray::defaultServerPort) }}); + vars.append({{"$V2RAY_VMESS_PORT", v2RayConfig.value(config_key::port).toString(protocols::v2ray::defaultServerPort) }}); + vars.append({{"$V2RAY_SOCKS_LOCAL_PORT", v2RayConfig.value(config_key::local_port).toString(protocols::v2ray::defaultLocalPort) }}); // IPsec vars vars.append({{"$IPSEC_VPN_L2TP_NET", "192.168.42.0/24"}}); diff --git a/client/resources.qrc b/client/resources.qrc index 2acc3c22..c4e1431f 100644 --- a/client/resources.qrc +++ b/client/resources.qrc @@ -170,5 +170,6 @@ server_scripts/openvpn_v2ray_vmess/run_container.sh server_scripts/openvpn_v2ray_vmess/start.sh server_scripts/openvpn_v2ray_vmess/template.ovpn + server_scripts/openvpn_v2ray_vmess/template_v2ray_client.json diff --git a/client/server_scripts/openvpn_v2ray_vmess/configure_container.sh b/client/server_scripts/openvpn_v2ray_vmess/configure_container.sh index 3358af7c..31be0420 100644 --- a/client/server_scripts/openvpn_v2ray_vmess/configure_container.sh +++ b/client/server_scripts/openvpn_v2ray_vmess/configure_container.sh @@ -26,23 +26,23 @@ $OPENVPN_TLS_AUTH $OPENVPN_ADDITIONAL_SERVER_CONFIG EOF -# V2RAY_SERVER_PORT port for v2ray listening, for example 10086. +# V2RAY_VMESS_PORT port for v2ray listening, for example 10086. # V2RAY_VMESS_CLIENT_UUID client's id and secret as UUID. # UUID is 32 hexadecimal digits /([0-9a-f]-?){32}/ (128 bit value). mkdir -p /opt/amnezia/v2ray cd /opt/amnezia/v2ray -V2RAY_VMESS_CLIENT_UUID="b831381d-6324-4d53-ad4f-8cda48b30811" # $(openssl rand -base64 32 | tr "=" "A" | tr "+" "A" | tr "/" "A") +V2RAY_VMESS_CLIENT_UUID=$(cat /proc/sys/kernel/random/uuid) echo $V2RAY_VMESS_CLIENT_UUID > /opt/amnezia/v2ray/v2ray.key -cat < /opt/amnezia/v2ray/v2ray-server.json < /opt/amnezia/v2ray/v2ray-server.json <