From d57e56de70e0703cde55d31bcfe896a96677eab1 Mon Sep 17 00:00:00 2001 From: pokamest Date: Mon, 14 Jun 2021 22:15:11 +0300 Subject: [PATCH 1/5] Setup container more debugging --- client/core/servercontroller.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/client/core/servercontroller.cpp b/client/core/servercontroller.cpp index 0304a28f..e27f6ff8 100644 --- a/client/core/servercontroller.cpp +++ b/client/core/servercontroller.cpp @@ -364,25 +364,31 @@ ErrorCode ServerController::removeContainer(const ServerCredentials &credentials ErrorCode ServerController::setupContainer(const ServerCredentials &credentials, DockerContainer container, const QJsonObject &config) { qDebug().noquote() << "ServerController::setupContainer" << containerToString(container); - qDebug().noquote() << QJsonDocument(config).toJson(); + //qDebug().noquote() << QJsonDocument(config).toJson(); ErrorCode e = ErrorCode::NoError; e = installDockerWorker(credentials, container); if (e) return e; + qDebug().noquote() << "ServerController::setupContainer installDockerWorker finished"; e = prepareHostWorker(credentials, container, config); if (e) return e; + qDebug().noquote() << "ServerController::setupContainer prepareHostWorker finished"; removeContainer(credentials, container); + qDebug().noquote() << "ServerController::setupContainer removeContainer finished"; e = buildContainerWorker(credentials, container, config); if (e) return e; + qDebug().noquote() << "ServerController::setupContainer buildContainerWorker finished"; e = runContainerWorker(credentials, container, config); if (e) return e; + qDebug().noquote() << "ServerController::setupContainer runContainerWorker finished"; e = configureContainerWorker(credentials, container, config); if (e) return e; + qDebug().noquote() << "ServerController::setupContainer configureContainerWorker finished"; return startupContainerWorker(credentials, container, config); } From 74a517d985af51991431c1b5044535236661073b Mon Sep 17 00:00:00 2001 From: pokamest Date: Wed, 16 Jun 2021 19:06:07 +0300 Subject: [PATCH 2/5] Windows server 2012 support --- service/server/tapcontroller_win.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/service/server/tapcontroller_win.cpp b/service/server/tapcontroller_win.cpp index ec038886..b388997a 100644 --- a/service/server/tapcontroller_win.cpp +++ b/service/server/tapcontroller_win.cpp @@ -299,6 +299,7 @@ bool TapController::oldDriversRequired() { if (QOperatingSystemVersion::current() <= QOperatingSystemVersion::Windows7) return true; if (QSysInfo::prettyProductName().contains("Server 2008")) return true; + if (QSysInfo::prettyProductName().contains("Server 2012")) return true; return false; } From e7a22ad159bb5e1d7ca590eae7433f38fa0c7209 Mon Sep 17 00:00:00 2001 From: pokamest Date: Wed, 16 Jun 2021 19:48:38 +0300 Subject: [PATCH 3/5] Export shadowsocks over cloak config support --- .../server_scripts/openvpn_cloak/Dockerfile | 4 + .../openvpn_cloak/configure_container.sh | 24 +++- client/server_scripts/openvpn_cloak/start.sh | 2 + .../configure_container.sh | 2 +- .../openvpn_shadowsocks/start.sh | 1 + client/ui/mainwindow.cpp | 64 ++++++---- client/ui/mainwindow.ui | 116 +++++++++++++++--- 7 files changed, 170 insertions(+), 43 deletions(-) diff --git a/client/server_scripts/openvpn_cloak/Dockerfile b/client/server_scripts/openvpn_cloak/Dockerfile index fe02f60f..358dfd99 100644 --- a/client/server_scripts/openvpn_cloak/Dockerfile +++ b/client/server_scripts/openvpn_cloak/Dockerfile @@ -16,6 +16,10 @@ RUN chmod a+x /opt/amnezia/start.sh RUN curl -L https://github.com/cbeuw/Cloak/releases/download/v2.5.3/ck-server-linux-amd64-v2.5.3 > /usr/bin/ck-server RUN chmod a+x /usr/bin/ck-server +RUN curl -L https://github.com/shadowsocks/shadowsocks-rust/releases/download/v1.10.9/shadowsocks-v1.10.9.x86_64-unknown-linux-musl.tar.xz > /usr/bin/ss.tar.xz +RUN tar -Jxvf /usr/bin/ss.tar.xz -C /usr/bin/ +RUN chmod a+x /usr/bin/ssserver + # Tune network RUN echo -e " \n\ fs.file-max = 51200 \n\ diff --git a/client/server_scripts/openvpn_cloak/configure_container.sh b/client/server_scripts/openvpn_cloak/configure_container.sh index 4a564b0a..6576a9d3 100644 --- a/client/server_scripts/openvpn_cloak/configure_container.sh +++ b/client/server_scripts/openvpn_cloak/configure_container.sh @@ -37,9 +37,13 @@ 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\ + \"$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\ @@ -51,3 +55,17 @@ echo -e "{\\n\ \"DatabasePath\": \"userinfo.db\",\\n\ \"StreamTimeout\": 300\\n\ }" >/opt/amnezia/cloak/ck-config.json' + +# ShadowSocks config +sudo docker exec -i $CONTAINER_NAME bash -c '\ +mkdir -p /opt/amnezia/shadowsocks; \ +cd /opt/amnezia/shadowsocks || exit 1; \ +SHADOWSOCKS_PASSWORD=$(openssl rand -base64 32 | tr "=" "A" | tr "+" "A" | tr "/" "A") && echo $SHADOWSOCKS_PASSWORD > /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' diff --git a/client/server_scripts/openvpn_cloak/start.sh b/client/server_scripts/openvpn_cloak/start.sh index a9b7a8c5..5b078ca6 100644 --- a/client/server_scripts/openvpn_cloak/start.sh +++ b/client/server_scripts/openvpn_cloak/start.sh @@ -21,9 +21,11 @@ iptables -t nat -A POSTROUTING -s $OPENVPN_SUBNET_IP/$OPENVPN_SUBNET_CIDR -o eth # kill daemons in case of restart killall -KILL openvpn killall -KILL ck-server +killall -KILL ssserver # start daemons if configured if [ -f /opt/amnezia/openvpn/ca.crt ]; then (openvpn --config /opt/amnezia/openvpn/server.conf --daemon); fi +if [ -f /opt/amnezia/shadowsocks/ss-config.json ]; then (ssserver -c /opt/amnezia/shadowsocks/ss-config.json &); fi if [ -f /opt/amnezia/cloak/ck-config.json ]; then (ck-server -c /opt/amnezia/cloak/ck-config.json &); fi tail -f /dev/null diff --git a/client/server_scripts/openvpn_shadowsocks/configure_container.sh b/client/server_scripts/openvpn_shadowsocks/configure_container.sh index ba34520d..b04f1ca8 100644 --- a/client/server_scripts/openvpn_shadowsocks/configure_container.sh +++ b/client/server_scripts/openvpn_shadowsocks/configure_container.sh @@ -25,7 +25,7 @@ tls-server \\n\ tls-version-min 1.2 \\n\ $OPENVPN_TLS_AUTH" >/opt/amnezia/openvpn/server.conf' -# Cloak config +# ShadowSocks config sudo docker exec -i $CONTAINER_NAME bash -c '\ mkdir -p /opt/amnezia/shadowsocks; \ cd /opt/amnezia/shadowsocks || exit 1; \ diff --git a/client/server_scripts/openvpn_shadowsocks/start.sh b/client/server_scripts/openvpn_shadowsocks/start.sh index 1b75b968..48e7b6f8 100644 --- a/client/server_scripts/openvpn_shadowsocks/start.sh +++ b/client/server_scripts/openvpn_shadowsocks/start.sh @@ -25,4 +25,5 @@ killall -KILL ssserver # start daemons if configured if [ -f /opt/amnezia/openvpn/ca.crt ]; then (openvpn --config /opt/amnezia/openvpn/server.conf --daemon); fi if [ -f /opt/amnezia/shadowsocks/ss-config.json ]; then (ssserver -c /opt/amnezia/shadowsocks/ss-config.json &); fi + tail -f /dev/null diff --git a/client/ui/mainwindow.cpp b/client/ui/mainwindow.cpp index 4085b306..3f464dd7 100644 --- a/client/ui/mainwindow.cpp +++ b/client/ui/mainwindow.cpp @@ -1216,7 +1216,7 @@ void MainWindow::setupAppSettingsConnections() connect(ui->pushButton_app_settings_open_logs, &QPushButton::clicked, this, [this](){ Debug::openLogsFolder(); - QDesktopServices::openUrl(QUrl::fromLocalFile(Utils::systemLogPath())); + //QDesktopServices::openUrl(QUrl::fromLocalFile(Utils::systemLogPath())); }); } @@ -1566,6 +1566,17 @@ void MainWindow::setupSharePageConnections() }); }); + connect(ui->pushButton_share_full_save, &QPushButton::clicked, this, [this](){ + if (ui->textEdit_share_full_code->toPlainText().isEmpty()) return; + + QString fileName = QFileDialog::getSaveFileName(this, tr("Save AmneziaVPN config"), + QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation), "*.amnezia"); + QSaveFile save(fileName); + save.open(QIODevice::WriteOnly); + save.write(ui->textEdit_share_full_code->toPlainText().toUtf8()); + save.commit(); + }); + connect(ui->pushButton_share_amnezia_copy, &QPushButton::clicked, this, [this](){ if (ui->textEdit_share_amnezia_code->toPlainText().isEmpty()) return; @@ -1606,14 +1617,14 @@ void MainWindow::setupSharePageConnections() }); }); -// connect(ui->pushButton_share_cloak_copy, &QPushButton::clicked, this, [this](){ -// QGuiApplication::clipboard()->setText(ui->textEdit_share_openvpn_code->toPlainText()); -// ui->pushButton_share_cloak_copy->setText(tr("Copied")); + connect(ui->pushButton_share_cloak_copy, &QPushButton::clicked, this, [this](){ + QGuiApplication::clipboard()->setText(ui->plainTextEdit_share_cloak->toPlainText()); + ui->pushButton_share_cloak_copy->setText(tr("Copied")); -// QTimer::singleShot(3000, this, [this]() { -// ui->pushButton_share_cloak_copy->setText(tr("Copy")); -// }); -// }); + QTimer::singleShot(3000, this, [this]() { + ui->pushButton_share_cloak_copy->setText(tr("Copy")); + }); + }); connect(ui->pushButton_share_amnezia_generate, &QPushButton::clicked, this, [this](){ ui->pushButton_share_amnezia_generate->setEnabled(false); @@ -2129,22 +2140,11 @@ void MainWindow::updateSharingPage(int serverIndex, const ServerCredentials &cre ui->pushButton_share_openvpn_copy->setEnabled(false); ui->pushButton_share_openvpn_save->setEnabled(false); -// QJsonObject protoConfig = m_settings.protocolConfig(serverIndex, container, Protocol::OpenVpn); -// QString cfg = protoConfig.value(config_key::last_config).toString(); -// if (!cfg.isEmpty()) { -// // TODO add redirect-gateway def1 bypass-dhcp here and on click Generate config -// ui->textEdit_share_openvpn_code->setPlainText(cfg); -// } -// else { -// cfg = tr("Press Generate config"); -// ui->textEdit_share_openvpn_code->setPlainText(cfg); -// ui->pushButton_share_openvpn_copy->setEnabled(false); -// ui->pushButton_share_openvpn_save->setEnabled(false); -// } ui->toolBox_share_connection->setCurrentWidget(ui->page_share_openvpn); } - if (container == DockerContainer::OpenVpnOverShadowSocks) { + if (container == DockerContainer::OpenVpnOverShadowSocks || + container == DockerContainer::OpenVpnOverCloak) { ui->toolBox_share_connection->addItem(ui->page_share_amnezia, tr(" Share for Amnezia client")); ui->toolBox_share_connection->addItem(ui->page_share_shadowsocks, tr(" Share for ShadowSocks client")); @@ -2185,7 +2185,27 @@ void MainWindow::updateSharingPage(int serverIndex, const ServerCredentials &cre } if (container == DockerContainer::OpenVpnOverCloak) { - ui->toolBox_share_connection->addItem(ui->page_share_amnezia, tr(" Share for Amnezia client")); + //ui->toolBox_share_connection->addItem(ui->page_share_amnezia, tr(" Share for Amnezia client")); + ui->toolBox_share_connection->addItem(ui->page_share_cloak, tr(" Share for Cloak client")); + ui->plainTextEdit_share_cloak->setPlainText(QString("")); + + QJsonObject protoConfig = m_settings.protocolConfig(serverIndex, container, Protocol::Cloak); + QString cfg = protoConfig.value(config_key::last_config).toString(); + + if (cfg.isEmpty()) { + const QJsonObject &containerConfig = m_settings.containerConfig(serverIndex, container); + + ErrorCode e = ErrorCode::NoError; + cfg = CloakConfigurator::genCloakConfig(credentials, container, containerConfig, &e); + + ui->pushButton_share_cloak_copy->setEnabled(true); + } + + QJsonObject cloakConfig = QJsonDocument::fromJson(cfg.toUtf8()).object(); + cloakConfig.remove(config_key::transport_proto); + cloakConfig.insert("ProxyMethod", "shadowsocks"); + + ui->plainTextEdit_share_cloak->setPlainText(QJsonDocument(cloakConfig).toJson()); } // Full access diff --git a/client/ui/mainwindow.ui b/client/ui/mainwindow.ui index 6fb5b318..09c5b326 100644 --- a/client/ui/mainwindow.ui +++ b/client/ui/mainwindow.ui @@ -274,7 +274,7 @@ QPushButton:hover { - 8 + 17 @@ -5815,7 +5815,7 @@ QToolBox::tab:hover { 0 - 0 + 3 6 @@ -5825,8 +5825,8 @@ QToolBox::tab:hover { 0 0 - 100 - 30 + 360 + 360 @@ -5884,7 +5884,7 @@ p, li { white-space: pre-wrap; } 10 - 180 + 260 341 111 @@ -5947,14 +5947,50 @@ background: #282932; Copy + + + + 10 + 180 + 341 + 40 + + + + PointingHandCursor + + + QPushButton { + font-size: 13pt; + font: "Open Sans Semibold"; + color:rgb(212, 212, 212); + +background: #181922; +border-radius: 4px; + +font-family: Lato; +font-style: normal; +font-weight: normal; +font-size: 16px; +line-height: 21px; + +} +QPushButton:hover { +background: #282932; +} + + + Save file + + 0 0 - 100 - 30 + 360 + 360 @@ -6149,8 +6185,8 @@ background: #282932; 0 0 - 100 - 30 + 360 + 360 @@ -6315,8 +6351,8 @@ background: #282932; 0 0 - 100 - 30 + 360 + 360 @@ -6493,10 +6529,10 @@ background: #282932; - 65 - 250 - 240 - 240 + 85 + 235 + 200 + 200 @@ -6539,13 +6575,59 @@ color: #15CDCB; 0 0 - 100 - 30 + 360 + 360 Share for Cloak client + + + + 10 + 290 + 331 + 40 + + + + PointingHandCursor + + + QPushButton { + font-size: 13pt; + font: "Open Sans Semibold"; + color:rgb(212, 212, 212); + +background: #181922; +border-radius: 4px; + +font-family: Lato; +font-style: normal; +font-weight: normal; +font-size: 16px; +line-height: 21px; + +} +QPushButton:hover { +background: #282932; +} + + + Copy + + + + + + 10 + 30 + 331 + 221 + + + From 0b3535ff13a4a35d2e6ed9d8652a89781292952e Mon Sep 17 00:00:00 2001 From: pokamest Date: Wed, 16 Jun 2021 22:40:34 +0300 Subject: [PATCH 4/5] hide wireguard settings --- client/ui/mainwindow.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/client/ui/mainwindow.cpp b/client/ui/mainwindow.cpp index 3f464dd7..b0e61e89 100644 --- a/client/ui/mainwindow.cpp +++ b/client/ui/mainwindow.cpp @@ -57,6 +57,10 @@ MainWindow::MainWindow(QWidget *parent) : { ui->setupUi(this); + ui->frame_wireguard_settings->hide(); + ui->frame_wireguard->hide(); + ui->frame_new_server_settings_parent_wireguard->hide(); + setupTray(); setupUiConnections(); setupNewServerConnections(); From e89caaee52a50b45484b043245c06109f736116c Mon Sep 17 00:00:00 2001 From: pokamest Date: Thu, 17 Jun 2021 00:51:15 +0300 Subject: [PATCH 5/5] bump version 1.7.6 --- client/defines.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/defines.h b/client/defines.h index ae54ddfd..6e38e9be 100644 --- a/client/defines.h +++ b/client/defines.h @@ -4,7 +4,7 @@ #define APPLICATION_NAME "AmneziaVPN" #define SERVICE_NAME "AmneziaVPN-service" #define ORGANIZATION_NAME "AmneziaVPN.ORG" -#define APP_MAJOR_VERSION "1.7.5" -#define APP_VERSION "1.7.5.3" +#define APP_MAJOR_VERSION "1.7.6" +#define APP_VERSION "1.7.6.1" #endif // DEFINES_H