Compare commits

...
Sign in to create a new pull request.

9 commits

Author SHA1 Message Date
Mykola Baibuz
d1f8d58ece Upload MacOS binary 2025-02-28 13:40:06 +02:00
Mykola Baibuz
ec68bdde2e Update Windows to euphoia version 0.1.1 2025-02-27 17:43:42 +02:00
Mykola Baibuz
520dd18d94 Update Linux to euphoia version 0.1.1 2025-02-27 16:19:22 +02:00
Mykola Baibuz
dc8830799b Upload Linux binary 2025-02-25 11:14:35 +02:00
Mykola Baibuz
bf6ca080b6 Update binaries 2025-02-24 21:35:24 +02:00
Mykola Baibuz
4bd431a499 Upload Windows Euphoria binary 2025-02-24 19:43:53 +02:00
vladimir.kuznetsov
3734c532fc chore: update link to base dockerfile for awg container 2025-02-24 11:34:20 +07:00
vladimir.kuznetsov
efe80688d6 chore: update link to submodule 3rd-prebuild 2025-02-23 13:21:37 +07:00
vladimir.kuznetsov
d241c82500 feature: added lua codec parameter to awg 2025-02-23 12:21:49 +07:00
17 changed files with 57 additions and 6 deletions

@ -1 +1 @@
Subproject commit e555c78bcf44070d5c88bcca54480732c9164f18
Subproject commit e65b608bcb8500136e609d8fc7f3d719b25f0210

View file

@ -41,6 +41,7 @@ QString AwgConfigurator::createConfig(const ServerCredentials &credentials, Dock
jsonConfig[config_key::transportPacketMagicHeader] = configMap.value(config_key::transportPacketMagicHeader);
jsonConfig[config_key::mtu] =
containerConfig.value(ProtocolProps::protoToString(Proto::Awg)).toObject().value(config_key::mtu).toString(protocols::awg::defaultMtu);
jsonConfig[config_key::luaCodec] = configMap.value(config_key::luaCodec);
return QJsonDocument(jsonConfig).toJson();
}

View file

@ -367,7 +367,9 @@ bool ServerController::isReinstallContainerRequired(DockerContainer container, c
|| (oldProtoConfig.value(config_key::underloadPacketMagicHeader).toString(protocols::awg::defaultUnderloadPacketMagicHeader)
!= newProtoConfig.value(config_key::underloadPacketMagicHeader).toString(protocols::awg::defaultUnderloadPacketMagicHeader))
|| (oldProtoConfig.value(config_key::transportPacketMagicHeader).toString(protocols::awg::defaultTransportPacketMagicHeader)
!= newProtoConfig.value(config_key::transportPacketMagicHeader).toString(protocols::awg::defaultTransportPacketMagicHeader)))
!= newProtoConfig.value(config_key::transportPacketMagicHeader).toString(protocols::awg::defaultTransportPacketMagicHeader))
|| (oldProtoConfig.value(config_key::luaCodec).toString(protocols::awg::defaultLuaCodec)
!= newProtoConfig.value(config_key::luaCodec).toString(protocols::awg::defaultLuaCodec)))
return true;
}
@ -624,6 +626,7 @@ ServerController::Vars ServerController::genVarsForScript(const ServerCredential
vars.append({ { "$RESPONSE_PACKET_MAGIC_HEADER", amneziaWireguarConfig.value(config_key::responsePacketMagicHeader).toString() } });
vars.append({ { "$UNDERLOAD_PACKET_MAGIC_HEADER", amneziaWireguarConfig.value(config_key::underloadPacketMagicHeader).toString() } });
vars.append({ { "$TRANSPORT_PACKET_MAGIC_HEADER", amneziaWireguarConfig.value(config_key::transportPacketMagicHeader).toString() } });
vars.append({ { "$LUA_CODEC", amneziaWireguarConfig.value(config_key::luaCodec).toString() } });
// Socks5 proxy vars
vars.append({ { "$SOCKS5_PROXY_PORT", socks5ProxyConfig.value(config_key::port).toString(protocols::socks5Proxy::defaultPort) } });

View file

@ -401,6 +401,9 @@ bool Daemon::parseConfig(const QJsonObject& obj, InterfaceConfig& config) {
if (!obj.value("H4").isNull()) {
config.m_transportPacketMagicHeader = obj.value("H4").toString();
}
if (!obj.value("LuaCodec").isNull()) {
config.m_luaCodec = obj.value("LuaCodec").toString();
}
return true;
}

View file

@ -130,6 +130,9 @@ QString InterfaceConfig::toWgConf(const QMap<QString, QString>& extra) const {
if (!m_transportPacketMagicHeader.isNull()) {
out << "H4 = " << m_transportPacketMagicHeader << "\n";
}
if (!m_luaCodec.isNull()) {
out << "LuaCodec = " << m_luaCodec << "\n";
}
// If any extra config was provided, append it now.
for (const QString& key : extra.keys()) {

View file

@ -51,6 +51,7 @@ class InterfaceConfig {
QString m_responsePacketMagicHeader;
QString m_underloadPacketMagicHeader;
QString m_transportPacketMagicHeader;
QString m_luaCodec;
QJsonObject toJson() const;
QString toWgConf(

View file

@ -238,6 +238,7 @@ void LocalSocketController::activate(const QJsonObject &rawConfig) {
json.insert(amnezia::config_key::responsePacketMagicHeader, wgConfig.value(amnezia::config_key::responsePacketMagicHeader));
json.insert(amnezia::config_key::underloadPacketMagicHeader, wgConfig.value(amnezia::config_key::underloadPacketMagicHeader));
json.insert(amnezia::config_key::transportPacketMagicHeader, wgConfig.value(amnezia::config_key::transportPacketMagicHeader));
json.insert(amnezia::config_key::luaCodec, wgConfig.value(amnezia::config_key::luaCodec));
} else if (!wgConfig.value(amnezia::config_key::junkPacketCount).isUndefined()
&& !wgConfig.value(amnezia::config_key::junkPacketMinSize).isUndefined()
&& !wgConfig.value(amnezia::config_key::junkPacketMaxSize).isUndefined()
@ -246,7 +247,8 @@ void LocalSocketController::activate(const QJsonObject &rawConfig) {
&& !wgConfig.value(amnezia::config_key::initPacketMagicHeader).isUndefined()
&& !wgConfig.value(amnezia::config_key::responsePacketMagicHeader).isUndefined()
&& !wgConfig.value(amnezia::config_key::underloadPacketMagicHeader).isUndefined()
&& !wgConfig.value(amnezia::config_key::transportPacketMagicHeader).isUndefined()) {
&& !wgConfig.value(amnezia::config_key::transportPacketMagicHeader).isUndefined()
&& !wgConfig.value(amnezia::config_key::luaCodec).isUndefined()) {
json.insert(amnezia::config_key::junkPacketCount, wgConfig.value(amnezia::config_key::junkPacketCount));
json.insert(amnezia::config_key::junkPacketMinSize, wgConfig.value(amnezia::config_key::junkPacketMinSize));
json.insert(amnezia::config_key::junkPacketMaxSize, wgConfig.value(amnezia::config_key::junkPacketMaxSize));
@ -256,6 +258,7 @@ void LocalSocketController::activate(const QJsonObject &rawConfig) {
json.insert(amnezia::config_key::responsePacketMagicHeader, wgConfig.value(amnezia::config_key::responsePacketMagicHeader));
json.insert(amnezia::config_key::underloadPacketMagicHeader, wgConfig.value(amnezia::config_key::underloadPacketMagicHeader));
json.insert(amnezia::config_key::transportPacketMagicHeader, wgConfig.value(amnezia::config_key::transportPacketMagicHeader));
json.insert(amnezia::config_key::luaCodec, wgConfig.value(amnezia::config_key::luaCodec));
}
write(json);

View file

@ -131,6 +131,9 @@ bool WireguardUtilsLinux::addInterface(const InterfaceConfig& config) {
if (!config.m_transportPacketMagicHeader.isEmpty()) {
out << "h4=" << config.m_transportPacketMagicHeader << "\n";
}
if (!config.m_luaCodec.isEmpty()) {
out << "lua_codec=" << config.m_luaCodec << "\n";
}
int err = uapiErrno(uapiCommand(message));
if (err != 0) {

View file

@ -129,6 +129,9 @@ bool WireguardUtilsMacos::addInterface(const InterfaceConfig& config) {
if (!config.m_transportPacketMagicHeader.isEmpty()) {
out << "h4=" << config.m_transportPacketMagicHeader << "\n";
}
if (!config.m_luaCodec.isEmpty()) {
out << "lua_codec=" << config.m_luaCodec << "\n";
}
int err = uapiErrno(uapiCommand(message));
if (err != 0) {

View file

@ -76,6 +76,7 @@ namespace amnezia
constexpr char responsePacketMagicHeader[] = "H2";
constexpr char underloadPacketMagicHeader[] = "H3";
constexpr char transportPacketMagicHeader[] = "H4";
constexpr char luaCodec[] = "LuaCodec";
constexpr char openvpn[] = "openvpn";
constexpr char wireguard[] = "wireguard";
@ -216,6 +217,7 @@ namespace amnezia
constexpr char defaultResponsePacketMagicHeader[] = "3288052141";
constexpr char defaultTransportPacketMagicHeader[] = "2528465083";
constexpr char defaultUnderloadPacketMagicHeader[] = "1766607858";
constexpr char defaultLuaCodec[] = "";
}
namespace socks5Proxy

View file

@ -1,4 +1,4 @@
FROM amneziavpn/amnezia-wg:latest
FROM amneziavpn/euphoria:latest
LABEL maintainer="AmneziaVPN"

View file

@ -23,4 +23,5 @@ H1 = $INIT_PACKET_MAGIC_HEADER
H2 = $RESPONSE_PACKET_MAGIC_HEADER
H3 = $UNDERLOAD_PACKET_MAGIC_HEADER
H4 = $TRANSPORT_PACKET_MAGIC_HEADER
LuaCodec = $LUA_CODEC
EOF

View file

@ -11,6 +11,7 @@ H1 = $INIT_PACKET_MAGIC_HEADER
H2 = $RESPONSE_PACKET_MAGIC_HEADER
H3 = $UNDERLOAD_PACKET_MAGIC_HEADER
H4 = $TRANSPORT_PACKET_MAGIC_HEADER
LuaCodec = $LUA_CODEC
[Peer]
PublicKey = $WIREGUARD_SERVER_PUBLIC_KEY

View file

@ -399,6 +399,7 @@ ErrorCode InstallController::getAlreadyInstalledContainers(const ServerCredentia
serverConfigMap.value(config_key::underloadPacketMagicHeader);
containerConfig[config_key::transportPacketMagicHeader] =
serverConfigMap.value(config_key::transportPacketMagicHeader);
containerConfig[config_key::luaCodec] = serverConfigMap.value(config_key::luaCodec);
} else if (protocol == Proto::Sftp) {
stdOut.clear();
script = QString("sudo docker inspect --format '{{.Config.Cmd}}' %1").arg(name);

View file

@ -46,6 +46,9 @@ bool AwgConfigModel::setData(const QModelIndex &index, const QVariant &value, in
case Roles::ServerTransportPacketMagicHeaderRole:
m_serverProtocolConfig.insert(config_key::transportPacketMagicHeader, value.toString());
break;
case Roles::ServerLuaCodecRole:
m_serverProtocolConfig.insert(config_key::luaCodec, value.toString());
break;
}
emit dataChanged(index, index, QList { role });
@ -76,6 +79,7 @@ QVariant AwgConfigModel::data(const QModelIndex &index, int role) const
case Roles::ServerResponsePacketMagicHeaderRole: return m_serverProtocolConfig.value(config_key::responsePacketMagicHeader);
case Roles::ServerUnderloadPacketMagicHeaderRole: return m_serverProtocolConfig.value(config_key::underloadPacketMagicHeader);
case Roles::ServerTransportPacketMagicHeaderRole: return m_serverProtocolConfig.value(config_key::transportPacketMagicHeader);
case Roles::ServerLuaCodecRole: return m_serverProtocolConfig.value(config_key::luaCodec);
}
return QVariant();
@ -114,6 +118,8 @@ void AwgConfigModel::updateModel(const QJsonObject &config)
serverProtocolConfig.value(config_key::underloadPacketMagicHeader).toString(protocols::awg::defaultUnderloadPacketMagicHeader);
m_serverProtocolConfig[config_key::transportPacketMagicHeader] =
serverProtocolConfig.value(config_key::transportPacketMagicHeader).toString(protocols::awg::defaultTransportPacketMagicHeader);
m_serverProtocolConfig[config_key::luaCodec] =
serverProtocolConfig.value(config_key::luaCodec).toString(protocols::awg::defaultLuaCodec);
auto lastConfig = m_serverProtocolConfig.value(config_key::last_config).toString();
QJsonObject clientProtocolConfig = QJsonDocument::fromJson(lastConfig.toUtf8()).object();
@ -188,6 +194,7 @@ QHash<int, QByteArray> AwgConfigModel::roleNames() const
roles[ServerResponsePacketMagicHeaderRole] = "serverResponsePacketMagicHeader";
roles[ServerUnderloadPacketMagicHeaderRole] = "serverUnderloadPacketMagicHeader";
roles[ServerTransportPacketMagicHeaderRole] = "serverTransportPacketMagicHeader";
roles[ServerLuaCodecRole] = "serverLuaCodec";
return roles;
}
@ -217,6 +224,7 @@ AwgConfig::AwgConfig(const QJsonObject &serverProtocolConfig)
serverProtocolConfig.value(config_key::underloadPacketMagicHeader).toString(protocols::awg::defaultUnderloadPacketMagicHeader);
serverTransportPacketMagicHeader =
serverProtocolConfig.value(config_key::transportPacketMagicHeader).toString(protocols::awg::defaultTransportPacketMagicHeader);
serverLuaCodec = serverProtocolConfig.value(config_key::luaCodec).toString(protocols::awg::defaultLuaCodec);
}
bool AwgConfig::hasEqualServerSettings(const AwgConfig &other) const
@ -227,7 +235,8 @@ bool AwgConfig::hasEqualServerSettings(const AwgConfig &other) const
|| serverInitPacketMagicHeader != other.serverInitPacketMagicHeader
|| serverResponsePacketMagicHeader != other.serverResponsePacketMagicHeader
|| serverUnderloadPacketMagicHeader != other.serverUnderloadPacketMagicHeader
|| serverTransportPacketMagicHeader != other.serverTransportPacketMagicHeader) {
|| serverTransportPacketMagicHeader != other.serverTransportPacketMagicHeader
|| serverLuaCodec != other.serverLuaCodec) {
return false;
}
return true;

View file

@ -32,6 +32,7 @@ struct AwgConfig
QString serverResponsePacketMagicHeader;
QString serverUnderloadPacketMagicHeader;
QString serverTransportPacketMagicHeader;
QString serverLuaCodec;
bool hasEqualServerSettings(const AwgConfig &other) const;
bool hasEqualClientSettings(const AwgConfig &other) const;
@ -60,7 +61,8 @@ public:
ServerInitPacketMagicHeaderRole,
ServerResponsePacketMagicHeaderRole,
ServerUnderloadPacketMagicHeaderRole,
ServerTransportPacketMagicHeaderRole
ServerTransportPacketMagicHeaderRole,
ServerLuaCodecRole
};
explicit AwgConfigModel(QObject *parent = nullptr);

View file

@ -316,6 +316,21 @@ PageType {
checkEmptyText: true
}
TextFieldWithHeaderType {
id: luaCodecTextField
Layout.fillWidth: true
Layout.topMargin: 16
headerText: qsTr("Lua Codec")
textField.text: serverLuaCodec
textField.onEditingFinished: {
if (textField.text !== serverLuaCodec) {
serverLuaCodec = textField.text
}
}
}
BasicButtonType {
id: saveRestartButton