Multiprotocol support
This commit is contained in:
parent
d424bb24cf
commit
de67f244da
44 changed files with 2159 additions and 863 deletions
|
@ -6,8 +6,8 @@
|
|||
|
||||
#include "protocols/protocols_defs.h"
|
||||
|
||||
QJsonObject CloakConfigurator::genCloakConfig(const ServerCredentials &credentials,
|
||||
DockerContainer container, ErrorCode *errorCode)
|
||||
QString CloakConfigurator::genCloakConfig(const ServerCredentials &credentials,
|
||||
DockerContainer container, const QJsonObject &containerConfig, ErrorCode *errorCode)
|
||||
{
|
||||
ErrorCode e = ErrorCode::NoError;
|
||||
|
||||
|
@ -21,7 +21,7 @@ QJsonObject CloakConfigurator::genCloakConfig(const ServerCredentials &credentia
|
|||
|
||||
if (e) {
|
||||
if (errorCode) *errorCode = e;
|
||||
return QJsonObject();
|
||||
return "";
|
||||
}
|
||||
|
||||
QJsonObject config;
|
||||
|
@ -30,14 +30,18 @@ QJsonObject CloakConfigurator::genCloakConfig(const ServerCredentials &credentia
|
|||
config.insert("EncryptionMethod", "aes-gcm");
|
||||
config.insert("UID", cloakBypassUid);
|
||||
config.insert("PublicKey", cloakPublicKey);
|
||||
config.insert("ServerName", amnezia::protocols::cloak::ckDefaultRedirSite);
|
||||
config.insert("ServerName", "$FAKE_WEB_SITE_ADDRESS");
|
||||
config.insert("NumConn", 4);
|
||||
config.insert("BrowserSig", "chrome");
|
||||
config.insert("StreamTimeout", 300);
|
||||
|
||||
// Amnezia field
|
||||
config.insert("Remote", credentials.hostName);
|
||||
// transfer params to protocol runner
|
||||
config.insert(config_key::transport_proto, "$OPENVPN_TRANSPORT_PROTO");
|
||||
config.insert(config_key::remote, credentials.hostName);
|
||||
|
||||
qDebug().noquote() << QJsonDocument(config).toJson();
|
||||
return config;
|
||||
QString textCfg = ServerController::replaceVars(QJsonDocument(config).toJson(),
|
||||
ServerController::genVarsForScript(credentials, container, containerConfig));
|
||||
|
||||
// qDebug().noquote() << textCfg;
|
||||
return textCfg;
|
||||
}
|
||||
|
|
|
@ -11,8 +11,8 @@ class CloakConfigurator
|
|||
{
|
||||
public:
|
||||
|
||||
static QJsonObject genCloakConfig(const ServerCredentials &credentials, DockerContainer container,
|
||||
ErrorCode *errorCode = nullptr);
|
||||
static QString genCloakConfig(const ServerCredentials &credentials, DockerContainer container,
|
||||
const QJsonObject &containerConfig, ErrorCode *errorCode = nullptr);
|
||||
};
|
||||
|
||||
#endif // CLOAK_CONFIGURATOR_H
|
||||
|
|
|
@ -192,35 +192,16 @@ Settings &OpenVpnConfigurator::m_settings()
|
|||
}
|
||||
|
||||
QString OpenVpnConfigurator::genOpenVpnConfig(const ServerCredentials &credentials,
|
||||
DockerContainer container, ErrorCode *errorCode)
|
||||
DockerContainer container, const QJsonObject &containerConfig, ErrorCode *errorCode)
|
||||
{
|
||||
// QFile configTemplFile;
|
||||
// if (proto == Protocol::OpenVpn)
|
||||
// configTemplFile.setFileName(":/server_scripts/template_openvpn.ovpn");
|
||||
// else if (proto == Protocol::ShadowSocks) {
|
||||
// configTemplFile.setFileName(":/server_scripts/template_shadowsocks.ovpn");
|
||||
// }
|
||||
|
||||
// configTemplFile.open(QIODevice::ReadOnly);
|
||||
// QString config = configTemplFile.readAll();
|
||||
|
||||
QString config = amnezia::scriptData(ProtocolScriptType::openvpn_template, container);
|
||||
QString config = ServerController::replaceVars(amnezia::scriptData(ProtocolScriptType::openvpn_template, container),
|
||||
ServerController::genVarsForScript(credentials, container, containerConfig));
|
||||
|
||||
ConnectionData connData = prepareOpenVpnConfig(credentials, container, errorCode);
|
||||
if (errorCode && *errorCode) {
|
||||
return "";
|
||||
}
|
||||
|
||||
if (container == DockerContainer::OpenVpn)
|
||||
config.replace("$PROTO", "udp");
|
||||
else if (container == DockerContainer::ShadowSocksOverOpenVpn) {
|
||||
config.replace("$PROTO", "tcp");
|
||||
config.replace("$LOCAL_PROXY_PORT", amnezia::protocols::shadowsocks::ssLocalProxyPort);
|
||||
}
|
||||
else if (container == DockerContainer::OpenVpnOverCloak) {
|
||||
config.replace("$PROTO", "tcp");
|
||||
}
|
||||
|
||||
config.replace("$PRIMARY_DNS", m_settings().primaryDns());
|
||||
config.replace("$SECONDARY_DNS", m_settings().secondaryDns());
|
||||
|
||||
|
@ -229,11 +210,11 @@ QString OpenVpnConfigurator::genOpenVpnConfig(const ServerCredentials &credentia
|
|||
}
|
||||
|
||||
config.replace("$REMOTE_HOST", connData.host);
|
||||
config.replace("$REMOTE_PORT", amnezia::protocols::openvpn::openvpnDefaultPort);
|
||||
config.replace("$CA_CERT", connData.caCert);
|
||||
config.replace("$CLIENT_CERT", connData.clientCert);
|
||||
config.replace("$PRIV_KEY", connData.privKey);
|
||||
config.replace("$TA_KEY", connData.taKey);
|
||||
config.replace("$REMOTE_PORT", amnezia::protocols::openvpn::defaultPort);
|
||||
config.replace("$OPENVPN_CA_CERT", connData.caCert);
|
||||
config.replace("$OPENVPN_CLIENT_CERT", connData.clientCert);
|
||||
config.replace("$OPENVPN_PRIV_KEY", connData.privKey);
|
||||
config.replace("$OPENVPN_TA_KEY", connData.taKey);
|
||||
|
||||
#ifdef Q_OS_MAC
|
||||
config.replace("block-outside-dns", "");
|
||||
|
@ -281,13 +262,13 @@ ErrorCode OpenVpnConfigurator::signCert(DockerContainer container,
|
|||
{
|
||||
QString script_import = QString("sudo docker exec -i %1 bash -c \"cd /opt/amnezia/openvpn && "
|
||||
"easyrsa import-req %2/%3.req %3\"")
|
||||
.arg(amnezia::server::getContainerName(container))
|
||||
.arg(amnezia::containerToString(container))
|
||||
.arg(amnezia::protocols::openvpn::clientsDirPath)
|
||||
.arg(clientId);
|
||||
|
||||
QString script_sign = QString("sudo docker exec -i %1 bash -c \"export EASYRSA_BATCH=1; cd /opt/amnezia/openvpn && "
|
||||
"easyrsa sign-req client %2\"")
|
||||
.arg(amnezia::server::getContainerName(container))
|
||||
.arg(amnezia::containerToString(container))
|
||||
.arg(clientId);
|
||||
|
||||
QStringList scriptList {script_import, script_sign};
|
||||
|
|
|
@ -23,7 +23,7 @@ public:
|
|||
};
|
||||
|
||||
static QString genOpenVpnConfig(const ServerCredentials &credentials, DockerContainer container,
|
||||
ErrorCode *errorCode = nullptr);
|
||||
const QJsonObject &containerConfig, ErrorCode *errorCode = nullptr);
|
||||
|
||||
static QString convertOpenSShKey(const QString &key);
|
||||
|
||||
|
|
37
client/configurators/shadowsocks_configurator.cpp
Normal file
37
client/configurators/shadowsocks_configurator.cpp
Normal file
|
@ -0,0 +1,37 @@
|
|||
#include "shadowsocks_configurator.h"
|
||||
|
||||
#include <QFile>
|
||||
#include <QJsonObject>
|
||||
#include <QJsonDocument>
|
||||
|
||||
#include "protocols/protocols_defs.h"
|
||||
|
||||
QString ShadowSocksConfigurator::genShadowSocksConfig(const ServerCredentials &credentials,
|
||||
DockerContainer container, const QJsonObject &containerConfig, ErrorCode *errorCode)
|
||||
{
|
||||
ErrorCode e = ErrorCode::NoError;
|
||||
|
||||
QString ssKey = ServerController::getTextFileFromContainer(container, credentials,
|
||||
amnezia::protocols::shadowsocks::ssKeyPath, &e);
|
||||
ssKey.replace("\n", "");
|
||||
|
||||
if (e) {
|
||||
if (errorCode) *errorCode = e;
|
||||
return "";
|
||||
}
|
||||
|
||||
QJsonObject config;
|
||||
config.insert("server", credentials.hostName);
|
||||
config.insert("server_port", "$SHADOWSOCKS_SERVER_PORT");
|
||||
config.insert("local_port", "$SHADOWSOCKS_LOCAL_PORT");
|
||||
config.insert("password", ssKey);
|
||||
config.insert("timeout", 60);
|
||||
config.insert("method", "$SHADOWSOCKS_CIPHER");
|
||||
|
||||
|
||||
QString textCfg = ServerController::replaceVars(QJsonDocument(config).toJson(),
|
||||
ServerController::genVarsForScript(credentials, container, containerConfig));
|
||||
|
||||
qDebug().noquote() << textCfg;
|
||||
return textCfg;
|
||||
}
|
18
client/configurators/shadowsocks_configurator.h
Normal file
18
client/configurators/shadowsocks_configurator.h
Normal file
|
@ -0,0 +1,18 @@
|
|||
#ifndef SHADOWSOCKS_CONFIGURATOR_H
|
||||
#define SHADOWSOCKS_CONFIGURATOR_H
|
||||
|
||||
#include <QObject>
|
||||
|
||||
#include "core/defs.h"
|
||||
#include "settings.h"
|
||||
#include "core/servercontroller.h"
|
||||
|
||||
class ShadowSocksConfigurator
|
||||
{
|
||||
public:
|
||||
|
||||
static QString genShadowSocksConfig(const ServerCredentials &credentials, DockerContainer container,
|
||||
const QJsonObject &containerConfig, ErrorCode *errorCode = nullptr);
|
||||
};
|
||||
|
||||
#endif // SHADOWSOCKS_CONFIGURATOR_H
|
Loading…
Add table
Add a link
Reference in a new issue