for servers received via api, ignore the split tunneling settings
This commit is contained in:
parent
da5ad0a845
commit
fac57ac89a
7 changed files with 55 additions and 37 deletions
|
@ -118,31 +118,33 @@ QString OpenVpnConfigurator::genOpenVpnConfig(const ServerCredentials &credentia
|
||||||
return QJsonDocument(jConfig).toJson();
|
return QJsonDocument(jConfig).toJson();
|
||||||
}
|
}
|
||||||
|
|
||||||
QString OpenVpnConfigurator::processConfigWithLocalSettings(QString jsonConfig)
|
QString OpenVpnConfigurator::processConfigWithLocalSettings(QString jsonConfig, const int serverIndex)
|
||||||
{
|
{
|
||||||
QJsonObject json = QJsonDocument::fromJson(jsonConfig.toUtf8()).object();
|
QJsonObject json = QJsonDocument::fromJson(jsonConfig.toUtf8()).object();
|
||||||
QString config = json[config_key::config].toString();
|
QString config = json[config_key::config].toString();
|
||||||
|
|
||||||
QRegularExpression regex("redirect-gateway.*");
|
if (!m_settings->server(serverIndex).value(config_key::configVersion).toInt()) {
|
||||||
config.replace(regex, "");
|
QRegularExpression regex("redirect-gateway.*");
|
||||||
|
config.replace(regex, "");
|
||||||
|
|
||||||
if (m_settings->routeMode() == Settings::VpnAllSites) {
|
if (m_settings->routeMode() == Settings::VpnAllSites) {
|
||||||
config.append("\nredirect-gateway def1 ipv6 bypass-dhcp\n");
|
config.append("\nredirect-gateway def1 ipv6 bypass-dhcp\n");
|
||||||
// Prevent ipv6 leak
|
// Prevent ipv6 leak
|
||||||
config.append("ifconfig-ipv6 fd15:53b6:dead::2/64 fd15:53b6:dead::1\n");
|
config.append("ifconfig-ipv6 fd15:53b6:dead::2/64 fd15:53b6:dead::1\n");
|
||||||
config.append("block-ipv6\n");
|
config.append("block-ipv6\n");
|
||||||
}
|
}
|
||||||
if (m_settings->routeMode() == Settings::VpnOnlyForwardSites) {
|
if (m_settings->routeMode() == Settings::VpnOnlyForwardSites) {
|
||||||
|
|
||||||
// no redirect-gateway
|
// no redirect-gateway
|
||||||
}
|
}
|
||||||
if (m_settings->routeMode() == Settings::VpnAllExceptSites) {
|
if (m_settings->routeMode() == Settings::VpnAllExceptSites) {
|
||||||
#ifndef Q_OS_ANDROID
|
#ifndef Q_OS_ANDROID
|
||||||
config.append("\nredirect-gateway ipv6 !ipv4 bypass-dhcp\n");
|
config.append("\nredirect-gateway ipv6 !ipv4 bypass-dhcp\n");
|
||||||
#endif
|
#endif
|
||||||
// Prevent ipv6 leak
|
// Prevent ipv6 leak
|
||||||
config.append("ifconfig-ipv6 fd15:53b6:dead::2/64 fd15:53b6:dead::1\n");
|
config.append("ifconfig-ipv6 fd15:53b6:dead::2/64 fd15:53b6:dead::1\n");
|
||||||
config.append("block-ipv6\n");
|
config.append("block-ipv6\n");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef MZ_WINDOWS
|
#ifndef MZ_WINDOWS
|
||||||
|
|
|
@ -26,7 +26,7 @@ public:
|
||||||
QString genOpenVpnConfig(const ServerCredentials &credentials, DockerContainer container,
|
QString genOpenVpnConfig(const ServerCredentials &credentials, DockerContainer container,
|
||||||
const QJsonObject &containerConfig, QString &clientId, ErrorCode *errorCode = nullptr);
|
const QJsonObject &containerConfig, QString &clientId, ErrorCode *errorCode = nullptr);
|
||||||
|
|
||||||
QString processConfigWithLocalSettings(QString jsonConfig);
|
QString processConfigWithLocalSettings(QString jsonConfig, const int serverIndex);
|
||||||
QString processConfigWithExportSettings(QString jsonConfig);
|
QString processConfigWithExportSettings(QString jsonConfig);
|
||||||
|
|
||||||
ErrorCode signCert(DockerContainer container,
|
ErrorCode signCert(DockerContainer container,
|
||||||
|
|
|
@ -92,7 +92,7 @@ QString &VpnConfigurator::processConfigWithLocalSettings(int serverIndex, Docker
|
||||||
processConfigWithDnsSettings(serverIndex, container, proto, config);
|
processConfigWithDnsSettings(serverIndex, container, proto, config);
|
||||||
|
|
||||||
if (proto == Proto::OpenVpn) {
|
if (proto == Proto::OpenVpn) {
|
||||||
config = openVpnConfigurator->processConfigWithLocalSettings(config);
|
config = openVpnConfigurator->processConfigWithLocalSettings(config, serverIndex);
|
||||||
}
|
}
|
||||||
return config;
|
return config;
|
||||||
}
|
}
|
||||||
|
|
|
@ -531,3 +531,8 @@ void ServersModel::toggleAmneziaDns(bool enabled)
|
||||||
emit defaultServerDescriptionChanged();
|
emit defaultServerDescriptionChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ServersModel::isDefaultServerFromApi()
|
||||||
|
{
|
||||||
|
return m_settings->server(m_defaultServerIndex).value(config_key::configVersion).toInt();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -97,6 +97,8 @@ public slots:
|
||||||
|
|
||||||
void toggleAmneziaDns(bool enabled);
|
void toggleAmneziaDns(bool enabled);
|
||||||
|
|
||||||
|
bool isDefaultServerFromApi();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
QHash<int, QByteArray> roleNames() const override;
|
QHash<int, QByteArray> roleNames() const override;
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,13 @@ PageType {
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
property bool pageEnabled: {
|
property bool pageEnabled: {
|
||||||
return !ConnectionController.isConnected
|
return !ConnectionController.isConnected && !ServersModel.isDefaultServerFromApi()
|
||||||
|
}
|
||||||
|
|
||||||
|
Component.onCompleted: {
|
||||||
|
if (ServersModel.isDefaultServerFromApi()) {
|
||||||
|
PageController.showNotificationMessage(qsTr("This server does not support split tunneling function"))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Connections {
|
Connections {
|
||||||
|
|
|
@ -64,24 +64,26 @@ void VpnConnection::onConnectionStateChanged(Vpn::ConnectionState state)
|
||||||
IpcClient::Interface()->resetIpStack();
|
IpcClient::Interface()->resetIpStack();
|
||||||
IpcClient::Interface()->flushDns();
|
IpcClient::Interface()->flushDns();
|
||||||
|
|
||||||
if (m_settings->routeMode() != Settings::VpnAllSites) {
|
if (!m_vpnConfiguration.value(config_key::configVersion).toInt()) {
|
||||||
IpcClient::Interface()->routeDeleteList(m_vpnProtocol->vpnGateway(), QStringList() << "0.0.0.0");
|
if (m_settings->routeMode() != Settings::VpnAllSites) {
|
||||||
// qDebug() << "VpnConnection::onConnectionStateChanged :: adding custom routes, count:" << forwardIps.size();
|
IpcClient::Interface()->routeDeleteList(m_vpnProtocol->vpnGateway(), QStringList() << "0.0.0.0");
|
||||||
}
|
// qDebug() << "VpnConnection::onConnectionStateChanged :: adding custom routes, count:" << forwardIps.size();
|
||||||
QString dns1 = m_vpnConfiguration.value(config_key::dns1).toString();
|
}
|
||||||
QString dns2 = m_vpnConfiguration.value(config_key::dns2).toString();
|
QString dns1 = m_vpnConfiguration.value(config_key::dns1).toString();
|
||||||
|
QString dns2 = m_vpnConfiguration.value(config_key::dns2).toString();
|
||||||
|
|
||||||
IpcClient::Interface()->routeAddList(m_vpnProtocol->vpnGateway(), QStringList() << dns1 << dns2);
|
IpcClient::Interface()->routeAddList(m_vpnProtocol->vpnGateway(), QStringList() << dns1 << dns2);
|
||||||
|
|
||||||
if (m_settings->routeMode() == Settings::VpnOnlyForwardSites) {
|
if (m_settings->routeMode() == Settings::VpnOnlyForwardSites) {
|
||||||
QTimer::singleShot(1000, m_vpnProtocol.data(),
|
QTimer::singleShot(1000, m_vpnProtocol.data(),
|
||||||
[this]() { addSitesRoutes(m_vpnProtocol->vpnGateway(), m_settings->routeMode()); });
|
[this]() { addSitesRoutes(m_vpnProtocol->vpnGateway(), m_settings->routeMode()); });
|
||||||
} else if (m_settings->routeMode() == Settings::VpnAllExceptSites) {
|
} else if (m_settings->routeMode() == Settings::VpnAllExceptSites) {
|
||||||
IpcClient::Interface()->routeAddList(m_vpnProtocol->vpnGateway(), QStringList() << "0.0.0.0/1");
|
IpcClient::Interface()->routeAddList(m_vpnProtocol->vpnGateway(), QStringList() << "0.0.0.0/1");
|
||||||
IpcClient::Interface()->routeAddList(m_vpnProtocol->vpnGateway(), QStringList() << "128.0.0.0/1");
|
IpcClient::Interface()->routeAddList(m_vpnProtocol->vpnGateway(), QStringList() << "128.0.0.0/1");
|
||||||
|
|
||||||
IpcClient::Interface()->routeAddList(m_vpnProtocol->routeGateway(), QStringList() << remoteAddress());
|
IpcClient::Interface()->routeAddList(m_vpnProtocol->routeGateway(), QStringList() << remoteAddress());
|
||||||
addSitesRoutes(m_vpnProtocol->routeGateway(), m_settings->routeMode());
|
addSitesRoutes(m_vpnProtocol->routeGateway(), m_settings->routeMode());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (state == Vpn::ConnectionState::Error) {
|
} else if (state == Vpn::ConnectionState::Error) {
|
||||||
|
@ -296,6 +298,7 @@ QJsonObject VpnConnection::createVpnConfiguration(int serverIndex, const ServerC
|
||||||
vpnConfiguration[config_key::hostName] = server.value(config_key::hostName).toString();
|
vpnConfiguration[config_key::hostName] = server.value(config_key::hostName).toString();
|
||||||
vpnConfiguration[config_key::description] = server.value(config_key::description).toString();
|
vpnConfiguration[config_key::description] = server.value(config_key::description).toString();
|
||||||
|
|
||||||
|
vpnConfiguration[config_key::configVersion] = server.value(config_key::configVersion).toInt();
|
||||||
// TODO: try to get hostName, port, description for 3rd party configs
|
// TODO: try to get hostName, port, description for 3rd party configs
|
||||||
// vpnConfiguration[config_key::port] = ...;
|
// vpnConfiguration[config_key::port] = ...;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue