diff --git a/client/core/servercontroller.cpp b/client/core/servercontroller.cpp index 1ea36011..2828d2b0 100644 --- a/client/core/servercontroller.cpp +++ b/client/core/servercontroller.cpp @@ -662,6 +662,11 @@ ServerController::Vars ServerController::genVarsForScript(const ServerCredential vars.append({{"$OPENVPN_TA_KEY", "" }}); } + vars.append({{"$OPENVPN_ADDITIONAL_CLIENT_CONFIG", openvpnConfig.value(config_key::additional_client_config). + toString(protocols::openvpn::defaultAdditionalClientConfig) }}); + vars.append({{"$OPENVPN_ADDITIONAL_SERVER_CONFIG", openvpnConfig.value(config_key::additional_server_config). + toString(protocols::openvpn::defaultAdditionalServerConfig) }}); + // ShadowSocks vars vars.append({{"$SHADOWSOCKS_SERVER_PORT", ssConfig.value(config_key::port).toString(protocols::shadowsocks::defaultPort) }}); vars.append({{"$SHADOWSOCKS_LOCAL_PORT", ssConfig.value(config_key::local_port).toString(protocols::shadowsocks::defaultLocalProxyPort) }}); diff --git a/client/protocols/protocols_defs.h b/client/protocols/protocols_defs.h index 1994660b..c158822d 100644 --- a/client/protocols/protocols_defs.h +++ b/client/protocols/protocols_defs.h @@ -53,6 +53,9 @@ constexpr char subnet_address[] = "subnet_address"; constexpr char subnet_mask[] = "subnet_mask"; constexpr char subnet_cidr[] = "subnet_cidr"; +constexpr char additional_client_config[] = "additional_client_config"; +constexpr char additional_server_config[] = "additional_server_config"; + // proto config keys constexpr char last_config[] = "last_config"; } @@ -82,6 +85,8 @@ constexpr bool defaultTlsAuth = true; constexpr char ncpDisableString[] = "ncp-disable"; constexpr char tlsAuthString[] = "tls-auth /opt/amnezia/openvpn/ta.key 0"; +constexpr char defaultAdditionalClientConfig[] = ""; +constexpr char defaultAdditionalServerConfig[] = ""; } namespace shadowsocks { diff --git a/client/server_scripts/openvpn/configure_container.sh b/client/server_scripts/openvpn/configure_container.sh index d51d019b..0499b6e8 100644 --- a/client/server_scripts/openvpn/configure_container.sh +++ b/client/server_scripts/openvpn/configure_container.sh @@ -23,4 +23,5 @@ verb 1 tls-server tls-version-min 1.2 $OPENVPN_TLS_AUTH +$OPENVPN_ADDITIONAL_SERVER_CONFIG EOF diff --git a/client/server_scripts/openvpn/template.ovpn b/client/server_scripts/openvpn/template.ovpn index 6ce736c2..c0b4a044 100644 --- a/client/server_scripts/openvpn/template.ovpn +++ b/client/server_scripts/openvpn/template.ovpn @@ -21,6 +21,8 @@ block-outside-dns remote $REMOTE_HOST $OPENVPN_PORT +$OPENVPN_ADDITIONAL_CLIENT_CONFIG + $OPENVPN_CA_CERT diff --git a/client/server_scripts/openvpn_cloak/configure_container.sh b/client/server_scripts/openvpn_cloak/configure_container.sh index 72961810..26b514a4 100644 --- a/client/server_scripts/openvpn_cloak/configure_container.sh +++ b/client/server_scripts/openvpn_cloak/configure_container.sh @@ -23,6 +23,7 @@ verb 1 tls-server tls-version-min 1.2 $OPENVPN_TLS_AUTH +$OPENVPN_ADDITIONAL_SERVER_CONFIG EOF # Cloak config diff --git a/client/server_scripts/openvpn_cloak/template.ovpn b/client/server_scripts/openvpn_cloak/template.ovpn index 98e0e09f..4fc2b2c3 100644 --- a/client/server_scripts/openvpn_cloak/template.ovpn +++ b/client/server_scripts/openvpn_cloak/template.ovpn @@ -22,6 +22,8 @@ block-outside-dns route $REMOTE_HOST 255.255.255.255 net_gateway remote 127.0.0.1 1194 +$OPENVPN_ADDITIONAL_CLIENT_CONFIG + $OPENVPN_CA_CERT diff --git a/client/server_scripts/openvpn_shadowsocks/configure_container.sh b/client/server_scripts/openvpn_shadowsocks/configure_container.sh index 29a5ebf9..db8fe055 100644 --- a/client/server_scripts/openvpn_shadowsocks/configure_container.sh +++ b/client/server_scripts/openvpn_shadowsocks/configure_container.sh @@ -23,6 +23,7 @@ verb 1 tls-server tls-version-min 1.2 $OPENVPN_TLS_AUTH +$OPENVPN_ADDITIONAL_SERVER_CONFIG EOF # ShadowSocks config diff --git a/client/server_scripts/openvpn_shadowsocks/template.ovpn b/client/server_scripts/openvpn_shadowsocks/template.ovpn index 76b755f6..64cbd4be 100644 --- a/client/server_scripts/openvpn_shadowsocks/template.ovpn +++ b/client/server_scripts/openvpn_shadowsocks/template.ovpn @@ -23,6 +23,8 @@ socks-proxy 127.0.0.1 $SHADOWSOCKS_LOCAL_PORT route $REMOTE_HOST 255.255.255.255 net_gateway remote $REMOTE_HOST $OPENVPN_PORT +$OPENVPN_ADDITIONAL_CLIENT_CONFIG + $OPENVPN_CA_CERT diff --git a/client/ui/pages_logic/protocols/OpenVpnLogic.cpp b/client/ui/pages_logic/protocols/OpenVpnLogic.cpp index 3b672747..91f21151 100644 --- a/client/ui/pages_logic/protocols/OpenVpnLogic.cpp +++ b/client/ui/pages_logic/protocols/OpenVpnLogic.cpp @@ -21,6 +21,8 @@ OpenVpnLogic::OpenVpnLogic(UiLogic *logic, QObject *parent): m_checkBoxBlockDnsChecked{false}, m_lineEditPortText{}, m_checkBoxTlsAuthChecked{false}, + m_textAreaAdditionalClientConfig{""}, + m_textAreaAdditionalServerConfig{""}, m_pushButtonSaveVisible{false}, m_progressBarResetVisible{false}, @@ -67,6 +69,14 @@ void OpenVpnLogic::updateProtocolPage(const QJsonObject &openvpnConfig, DockerCo bool isTlsAuth = openvpnConfig.value(config_key::tls_auth).toBool(protocols::openvpn::defaultTlsAuth); set_checkBoxTlsAuthChecked(isTlsAuth); + QString additionalClientConfig = openvpnConfig.value(config_key::additional_client_config). + toString(protocols::openvpn::defaultAdditionalClientConfig); + set_textAreaAdditionalClientConfig(additionalClientConfig); + + QString additionalServerConfig = openvpnConfig.value(config_key::additional_server_config). + toString(protocols::openvpn::defaultAdditionalServerConfig); + set_textAreaAdditionalServerConfig(additionalServerConfig); + if (container == DockerContainer::ShadowSocks) { set_radioButtonUdpEnabled(false); set_radioButtonTcpEnabled(false); @@ -142,5 +152,7 @@ QJsonObject OpenVpnLogic::getProtocolConfigFromPage(QJsonObject oldConfig) oldConfig.insert(config_key::block_outside_dns, checkBoxBlockDnsChecked()); oldConfig.insert(config_key::port, lineEditPortText()); oldConfig.insert(config_key::tls_auth, checkBoxTlsAuthChecked()); + oldConfig.insert(config_key::additional_client_config, textAreaAdditionalClientConfig()); + oldConfig.insert(config_key::additional_server_config, textAreaAdditionalServerConfig()); return oldConfig; } diff --git a/client/ui/pages_logic/protocols/OpenVpnLogic.h b/client/ui/pages_logic/protocols/OpenVpnLogic.h index 45141050..23c2dd4d 100644 --- a/client/ui/pages_logic/protocols/OpenVpnLogic.h +++ b/client/ui/pages_logic/protocols/OpenVpnLogic.h @@ -22,6 +22,8 @@ class OpenVpnLogic : public PageProtocolLogicBase AUTO_PROPERTY(bool, checkBoxBlockDnsChecked) AUTO_PROPERTY(QString, lineEditPortText) AUTO_PROPERTY(bool, checkBoxTlsAuthChecked) + AUTO_PROPERTY(QString, textAreaAdditionalClientConfig) + AUTO_PROPERTY(QString, textAreaAdditionalServerConfig) AUTO_PROPERTY(bool, pushButtonSaveVisible) AUTO_PROPERTY(bool, progressBarResetVisible) diff --git a/client/ui/qml/Pages/Protocols/PageProtoOpenVPN.qml b/client/ui/qml/Pages/Protocols/PageProtoOpenVPN.qml index 42ef1e59..9c00172c 100644 --- a/client/ui/qml/Pages/Protocols/PageProtoOpenVPN.qml +++ b/client/ui/qml/Pages/Protocols/PageProtoOpenVPN.qml @@ -281,7 +281,10 @@ PageProtocolBase { font.styleName: "normal" font.pixelSize: 16 color: "#181922" - + text: logic.textAreaAdditionalClientConfig + onEditingFinished: { + logic.textAreaAdditionalClientConfig = text + } } } @@ -294,7 +297,7 @@ PageProtocolBase { implicitWidth: parent.width height: 21 - text: qsTr("Additional client config commands →") + text: qsTr("Additional server config commands →") background: Item { anchors.fill: parent } @@ -305,7 +308,7 @@ PageProtocolBase { font.styleName: "normal" font.pixelSize: 16 color: "#15CDCB"; - text: pb_client_config.text + text: pb_server_config.text horizontalAlignment: Text.AlignLeft verticalAlignment: Text.AlignVCenter } @@ -331,7 +334,10 @@ PageProtocolBase { font.styleName: "normal" font.pixelSize: 16 color: "#181922" - + text: logic.textAreaAdditionalServerConfig + onEditingFinished: { + logic.textAreaAdditionalServerConfig = text + } } }