iOS VPN автоматически отключается через некоторое время

Я работаю над приложением VPN, VPN работает нормально, но через 15-20 минут он автоматически отключается. Вот конфигурация, которую я использую

        let vpnProtocol = NEVPNProtocolIKEv2()
        vpnProtocol.username = CredentialsManager.shared.accessToken
        vpnProtocol.localIdentifier = CredentialsManager.shared.accessToken

        print("VPN Connecting to \(self.region.name ?? "Error! Must be a valid region name!")")

        if let region = self.region {
          f
            vpnProtocol.serverAddress = region.serverAddress
            vpnProtocol.remoteIdentifier = region.serverAddress
        }

        let encodedIdentifier = "Secret Password".data(using: .utf8)!
        let item = [kSecClass: kSecClassGenericPassword,
                    kSecAttrGeneric: encodedIdentifier,
                    kSecAttrAccount: encodedIdentifier,
                    kSecMatchLimit: kSecMatchLimitOne,
                    kSecReturnPersistentRef: kCFBooleanTrue as Any,
                    kSecAttrService: "XYZ"] as [CFString : Any]

        var passwordReference: CFTypeRef?
        SecItemCopyMatching(item as CFDictionary, &passwordReference)

        vpnProtocol.passwordReference = passwordReference as? Data
        vpnProtocol.authenticationMethod = .none
        vpnProtocol.useExtendedAuthentication = true

        vpnProtocol.ikeSecurityAssociationParameters.encryptionAlgorithm =
            .algorithmAES256GCM
        vpnProtocol.ikeSecurityAssociationParameters.integrityAlgorithm = .SHA384
        vpnProtocol.ikeSecurityAssociationParameters.diffieHellmanGroup = .group14

        vpnProtocol.childSecurityAssociationParameters.encryptionAlgorithm = .algorithmAES256GCM
        vpnProtocol.childSecurityAssociationParameters.integrityAlgorithm = .SHA384
        vpnProtocol.childSecurityAssociationParameters.diffieHellmanGroup = .group14

        vpnProtocol.disconnectOnSleep = false

        self.vpnManager.protocolConfiguration = vpnProtocol
        let connectRule = NEOnDemandRuleConnect()
        connectRule.interfaceTypeMatch = .any

        self.vpnManager.onDemandRules = [connectRule]
        self.vpnManager.isOnDemandEnabled = self.connectOnDemand
        self.vpnManager.localizedDescription = "XYZ VPN"
        self.vpnManager.isEnabled = true

Пожалуйста, помогите мне, как определить проблему, которая вызывает автоматическое отключение.


person Subhash Sharma    schedule 23.12.2019    source источник


Ответы (2)


измените свой протокол VPN на это: NEVPNProtocolIPSec, возможно, это вам поможет.

person Bartu Akman    schedule 23.12.2019
comment
Я не думаю, что это хорошая идея. Раньше я использовал NEVPNProtocolIPSec и сталкивался с множеством проблем, а затем решил использовать NEVPNProtocolIKEv2, и все остальные проблемы были решены, но я все еще сталкиваюсь с этой проблемой. - person Subhash Sharma; 23.12.2019
comment
хм, я понятия не имею, почему возникает ваша проблема, к сожалению, но мне просто интересно, потому что я использую IKEV2, с какими проблемами вы сталкивались раньше - person Bartu Akman; 23.12.2019
comment
если вы используете IKEv2, дайте мне знать, вы столкнулись с проблемой автоматического отключения? - person Subhash Sharma; 23.12.2019
comment
не сейчас .. на самом деле я никогда не подключался к VPN более чем за 5 минут. - person Bartu Akman; 23.12.2019
comment
То же самое, но пользователь жалуется на проблему с отключением, которую необходимо решить. - person Subhash Sharma; 26.12.2019

Вы настроили "подключение по требованию", поэтому подключиться обратно автоматически, когда вы получите доступ к ресурсу в следующий раз. Вот как работает VPN на iOS, он всегда закрывает соединение в режиме ожидания.

person vitalyster    schedule 23.12.2019
comment
Уже настроил Connect on Demand, но не смог решить эту проблему. Если у вас есть конфигурация, которая работает, пожалуйста, поделитесь, я буду благодарен. - person Subhash Sharma; 26.12.2019
comment
Вот о чем я говорю: невозможно решить проблему так, как вы думаете: ваша конфигурация по запросу верна, и это все, что вы можете получить от iOS, невозможно держать соединение открытым в фоновом режиме. - person vitalyster; 27.12.2019