diff --git a/client/configurators/ikev2_configurator.cpp b/client/configurators/ikev2_configurator.cpp index 4c01cbdc..e3788f90 100644 --- a/client/configurators/ikev2_configurator.cpp +++ b/client/configurators/ikev2_configurator.cpp @@ -55,7 +55,6 @@ QString Ikev2Configurator::genIkev2Config(const ServerCredentials &credentials, return ""; } - QJsonObject config; config[config_key::hostName] = connData.host; config[config_key::userName] = connData.clientId; diff --git a/client/configurators/openvpn_configurator.cpp b/client/configurators/openvpn_configurator.cpp index 5dac8cf0..82b77b05 100644 --- a/client/configurators/openvpn_configurator.cpp +++ b/client/configurators/openvpn_configurator.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include "core/server_defs.h" #include "containers/containers_defs.h" @@ -242,8 +243,10 @@ QString OpenVpnConfigurator::genOpenVpnConfig(const ServerCredentials &credentia config.replace("block-outside-dns", ""); #endif - //qDebug().noquote() << config; - return config; + QJsonObject jConfig; + jConfig[config_key::config] = config; + + return QJsonDocument(jConfig).toJson(); } QString OpenVpnConfigurator::processConfigWithLocalSettings(QString config) diff --git a/client/configurators/wireguard_configurator.cpp b/client/configurators/wireguard_configurator.cpp index c5c01d7c..2f63e5dd 100644 --- a/client/configurators/wireguard_configurator.cpp +++ b/client/configurators/wireguard_configurator.cpp @@ -158,8 +158,10 @@ QString WireguardConfigurator::genWireguardConfig(const ServerCredentials &crede config.replace("$WIREGUARD_SERVER_PUBLIC_KEY", connData.serverPubKey); config.replace("$WIREGUARD_PSK", connData.pskKey); - qDebug().noquote() << config; - return config; + QJsonObject jConfig; + jConfig[config_key::config] = config; + + return QJsonDocument(jConfig).toJson(); } QString WireguardConfigurator::processConfigWithLocalSettings(QString config) @@ -168,7 +170,10 @@ QString WireguardConfigurator::processConfigWithLocalSettings(QString config) config.replace("$PRIMARY_DNS", m_settings().primaryDns()); config.replace("$SECONDARY_DNS", m_settings().secondaryDns()); - return config; + QJsonObject jConfig; + jConfig[config_key::config] = config; + + return QJsonDocument(jConfig).toJson(); } QString WireguardConfigurator::processConfigWithExportSettings(QString config) diff --git a/client/protocols/openvpnprotocol.cpp b/client/protocols/openvpnprotocol.cpp index c6dc4d35..074ea584 100644 --- a/client/protocols/openvpnprotocol.cpp +++ b/client/protocols/openvpnprotocol.cpp @@ -87,23 +87,15 @@ void OpenVpnProtocol::killOpenVpnProcess() void OpenVpnProtocol::readOpenVpnConfiguration(const QJsonObject &configuration) { if (configuration.contains(ProtocolProps::key_proto_config_data(Protocol::OpenVpn))) { + QJsonObject jConfig = configuration.value(ProtocolProps::key_proto_config_data(Protocol::OpenVpn)).toObject(); + m_configFile.open(); - m_configFile.write(configuration.value(ProtocolProps::key_proto_config_data(Protocol::OpenVpn)).toString().toUtf8()); + m_configFile.write(jConfig.value(config_key::config).toString().toUtf8()); m_configFile.close(); m_configFileName = m_configFile.fileName(); qDebug().noquote() << QString("Set config data") << m_configFileName; } - else if (configuration.contains(ProtocolProps::key_proto_config_path(Protocol::OpenVpn))) { - m_configFileName = configuration.value(ProtocolProps::key_proto_config_path(Protocol::OpenVpn)).toString(); - QFileInfo file(m_configFileName); - - if (file.fileName().isEmpty()) { - m_configFileName = defaultConfigFileName(); - } - - qDebug().noquote() << QString("Set config file: '%1'").arg(configPath()); - } } bool OpenVpnProtocol::openVpnProcessIsRunning() const diff --git a/client/protocols/protocols_defs.h b/client/protocols/protocols_defs.h index e046c0bc..bd76296e 100644 --- a/client/protocols/protocols_defs.h +++ b/client/protocols/protocols_defs.h @@ -17,6 +17,7 @@ constexpr char local_port[] = "local_port"; constexpr char description[] = "description"; constexpr char cert[] = "cert"; +constexpr char config[] = "config"; constexpr char containers[] = "containers"; diff --git a/client/protocols/wireguardprotocol.cpp b/client/protocols/wireguardprotocol.cpp index 5c37d446..16aa93ac 100644 --- a/client/protocols/wireguardprotocol.cpp +++ b/client/protocols/wireguardprotocol.cpp @@ -73,31 +73,22 @@ void WireguardProtocol::stop() void WireguardProtocol::readWireguardConfiguration(const QJsonObject &configuration) { - if (configuration.contains(ProtocolProps::key_proto_config_data(Protocol::WireGuard))) { - if (!m_configFile.open(QIODevice::WriteOnly | QIODevice::Truncate)) { - qCritical() << "Failed to save wireguard config to" << m_configFile.fileName(); - return; - } + QJsonObject jConfig = configuration.value(ProtocolProps::key_proto_config_data(Protocol::WireGuard)).toObject(); - m_isConfigLoaded = true; - - m_configFile.write(configuration.value(ProtocolProps::key_proto_config_data(Protocol::Ikev2)).toString().toUtf8()); - m_configFile.close(); - m_configFileName = m_configFile.fileName(); - - qDebug().noquote() << QString("Set config data") << m_configFileName; - qDebug().noquote() << QString("Set config data") << configuration.value(ProtocolProps::key_proto_config_data(Protocol::WireGuard)).toString().toUtf8(); + if (!m_configFile.open(QIODevice::WriteOnly | QIODevice::Truncate)) { + qCritical() << "Failed to save wireguard config to" << m_configFile.fileName(); + return; } -// else if (configuration.contains(config::key_wireguard_config_path)) { -// m_configFileName = configuration.value(config::key_wireguard_config_path).toString(); -// QFileInfo file(m_configFileName); -// if (file.fileName().isEmpty()) { -// m_configFileName = defaultConfigFileName(); -// } + m_isConfigLoaded = true; + + m_configFile.write(jConfig.value(config_key::config).toString().toUtf8()); + m_configFile.close(); + m_configFileName = m_configFile.fileName(); + + qDebug().noquote() << QString("Set config data") << m_configFileName; + qDebug().noquote() << QString("Set config data") << configuration.value(ProtocolProps::key_proto_config_data(Protocol::WireGuard)).toString().toUtf8(); -// qDebug().noquote() << QString("Set config file: '%1'").arg(configPath()); -// } } //bool WireguardProtocol::openVpnProcessIsRunning() const diff --git a/client/server_scripts/openvpn/configure_container.sh b/client/server_scripts/openvpn/configure_container.sh index ceb8c993..d51d019b 100644 --- a/client/server_scripts/openvpn/configure_container.sh +++ b/client/server_scripts/openvpn/configure_container.sh @@ -1,27 +1,26 @@ -sudo docker exec -i $CONTAINER_NAME bash -c '\ -echo -e "\ -port $OPENVPN_PORT \\n\ -proto $OPENVPN_TRANSPORT_PROTO \\n\ -dev tun \\n\ -ca /opt/amnezia/openvpn/ca.crt \\n\ -cert /opt/amnezia/openvpn/AmneziaReq.crt \\n\ -key /opt/amnezia/openvpn/AmneziaReq.key \\n\ -dh /opt/amnezia/openvpn/dh.pem \\n\ -server $OPENVPN_SUBNET_IP $OPENVPN_SUBNET_MASK \\n\ -ifconfig-pool-persist ipp.txt \\n\ -duplicate-cn \\n\ -keepalive 10 120 \\n\ -$OPENVPN_NCP_DISABLE \\n\ -cipher $OPENVPN_CIPHER \\n\ -data-ciphers $OPENVPN_CIPHER \\n\ -auth $OPENVPN_HASH \\n\ -user nobody \\n\ -group nobody \\n\ -persist-key \\n\ -persist-tun \\n\ -status openvpn-status.log \\n\ -verb 1 \\n\ -tls-server \\n\ -tls-version-min 1.2 \\n\ -$OPENVPN_TLS_AUTH" >/opt/amnezia/openvpn/server.conf' - +cat > /opt/amnezia/openvpn/server.conf </opt/amnezia/openvpn/server.conf' +cat > /opt/amnezia/openvpn/server.conf < /opt/amnezia/cloak/cloak_admin_uid.key; \ -CLOAK_BYPASS_UID=$(ck-server -u) && echo $CLOAK_BYPASS_UID > /opt/amnezia/cloak/cloak_bypass_uid.key; \ -IFS=, read CLOAK_PUBLIC_KEY CLOAK_PRIVATE_KEY <<<$(ck-server -k); \ -echo $CLOAK_PUBLIC_KEY > /opt/amnezia/cloak/cloak_public.key; \ -echo $CLOAK_PRIVATE_KEY > /opt/amnezia/cloak/cloak_private.key; \ -echo -e "{\\n\ - \"ProxyBook\": {\\n\ - \"openvpn\": [\\n\ - \"$OPENVPN_TRANSPORT_PROTO\",\\n\ - \"localhost:$OPENVPN_PORT\"\\n\ - ],\\n\ - \"shadowsocks\": [\\n\ - \"tcp\",\\n\ - \"localhost:$SHADOWSOCKS_SERVER_PORT\"\\n\ - ]\\n\ - },\\n\ - \"BypassUID\": [\\n\ - \"$CLOAK_BYPASS_UID\"\\n\ - ],\\n\ - \"BindAddr\":[\":443\"],\\n\ - \"RedirAddr\": \"$FAKE_WEB_SITE_ADDRESS\",\\n\ - \"PrivateKey\": \"$CLOAK_PRIVATE_KEY\",\\n\ - \"AdminUID\": \"$CLOAK_ADMIN_UID\",\\n\ - \"DatabasePath\": \"userinfo.db\",\\n\ - \"StreamTimeout\": 300\\n\ -}" >/opt/amnezia/cloak/ck-config.json' +mkdir -p /opt/amnezia/cloak +cd /opt/amnezia/cloak || exit 1 +CLOAK_ADMIN_UID=$(ck-server -u) && echo $CLOAK_ADMIN_UID > /opt/amnezia/cloak/cloak_admin_uid.key +CLOAK_BYPASS_UID=$(ck-server -u) && echo $CLOAK_BYPASS_UID > /opt/amnezia/cloak/cloak_bypass_uid.key +IFS=, read CLOAK_PUBLIC_KEY CLOAK_PRIVATE_KEY <<<$(ck-server -k) +echo $CLOAK_PUBLIC_KEY > /opt/amnezia/cloak/cloak_public.key +echo $CLOAK_PRIVATE_KEY > /opt/amnezia/cloak/cloak_private.key + +cat > /opt/amnezia/cloak/ck-config.json < /opt/amnezia/shadowsocks/shadowsocks.key; \ -echo -e "{\\n\ - \"local_port\": 8585,\\n\ - \"method\": \"$SHADOWSOCKS_CIPHER\",\\n\ - \"password\": \"$SHADOWSOCKS_PASSWORD\",\\n\ - \"server\": \"0.0.0.0\",\\n\ - \"server_port\": $SHADOWSOCKS_SERVER_PORT,\\n\ - \"timeout\": 60\\n\ -}" >/opt/amnezia/shadowsocks/ss-config.json' +SHADOWSOCKS_PASSWORD=$(openssl rand -base64 32 | tr "=" "A" | tr "+" "A" | tr "/" "A") +echo $SHADOWSOCKS_PASSWORD > /opt/amnezia/shadowsocks/shadowsocks.key +cat > /opt/amnezia/shadowsocks/ss-config.json </opt/amnezia/openvpn/server.conf' +cat > /opt/amnezia/openvpn/server.conf < /opt/amnezia/shadowsocks/shadowsocks.key; \ -echo -e "{\\n\ - \"local_port\": 8585,\\n\ - \"method\": \"$SHADOWSOCKS_CIPHER\",\\n\ - \"password\": \"$SHADOWSOCKS_PASSWORD\",\\n\ - \"server\": \"0.0.0.0\",\\n\ - \"server_port\": $SHADOWSOCKS_SERVER_PORT,\\n\ - \"timeout\": 60\\n\ -}" >/opt/amnezia/shadowsocks/ss-config.json' +mkdir -p /opt/amnezia/shadowsocks +cd /opt/amnezia/shadowsocks +SHADOWSOCKS_PASSWORD=$(openssl rand -base64 32 | tr "=" "A" | tr "+" "A" | tr "/" "A") +echo $SHADOWSOCKS_PASSWORD > /opt/amnezia/shadowsocks/shadowsocks.key + +cat > /opt/amnezia/shadowsocks/ss-config.json < /opt/amnezia/wireguard/wireguard_server_private_key.key; \ -WIREGUARD_SERVER_PUBLIC_KEY=$(echo $WIREGUARD_SERVER_PRIVATE_KEY | wg pubkey) && echo $WIREGUARD_SERVER_PUBLIC_KEY > /opt/amnezia/wireguard/wireguard_server_public_key.key; \ -WIREGUARD_PSK=$(wg genpsk) && echo $WIREGUARD_PSK > /opt/amnezia/wireguard/wireguard_psk.key; \ -echo -e "\ -[Interface]\\n\ -PrivateKey = $WIREGUARD_SERVER_PRIVATE_KEY \\n\ -Address = $WIREGUARD_SUBNET_IP/$WIREGUARD_SUBNET_CIDR \\n\ -ListenPort = $WIREGUARD_SERVER_PORT \\n\ -" >/opt/amnezia/wireguard/wg0.conf' +mkdir -p /opt/amnezia/wireguard +cd /opt/amnezia/wireguard +WIREGUARD_SERVER_PRIVATE_KEY=$(wg genkey) +echo $WIREGUARD_SERVER_PRIVATE_KEY > /opt/amnezia/wireguard/wireguard_server_private_key.key + +WIREGUARD_SERVER_PUBLIC_KEY=$(echo $WIREGUARD_SERVER_PRIVATE_KEY | wg pubkey) +echo $WIREGUARD_SERVER_PUBLIC_KEY > /opt/amnezia/wireguard/wireguard_server_public_key.key + +WIREGUARD_PSK=$(wg genpsk) +echo $WIREGUARD_PSK > /opt/amnezia/wireguard/wireguard_psk.key + +cat > /opt/amnezia/wireguard/wg0.conf <