O Windows 10 descarta a conexão VPN IKEv2 com o roteador Cisco em exatamente 60 segundos após a última troca de dados

2

Atualização 3: 22 de janeiro de 2017

Reduzi a atualização que causa esse problema: KB3201845 OS Build 14393.479 de 9 de dezembro de 2016 . Eu passei por todas essas atualizações passo a passo.

Olhando para o manifesto dos arquivos de alterações, esses arquivos foram alterados:

  • agilevpn.sys
  • vpnike.dll

Outros tópicos que criei:

Fóruns Microsoft Technet, 2 outras pessoas confirmaram o mesmo problema lá .

Reddit / r / networking

Hub de comentários da Microsoft

Atualizar

  • O pré-aniversário do Windows 10 (versão 10.0.10586) funciona bem

  • O pós-aniversário do Windows 10 (versão 10.0.14393) cai, portanto, o problema está na atualização do aniversário.

Atualização 2

Posso me conectar usando dois hosts do Windows anteriores ao aniversário

Se eu conectar um host do Windows de 1 aniversário à VPN e mantê-lo vivo artificialmente por meio de ping, não consigo conectar um segundo host à VPN. No "debug crypto ikev2" do roteador, isso acontece:

Jan 17 19:20:35.811: IKEv2:(SESSION ID = 25,SA ID = 2):Session present in ID PAIR TREE, but absent in TUPLE TREE
Jan 17 19:20:35.811: IKEv2:(SESSION ID = 25,SA ID = 2):: Failed to add new SA into session DB
Jan 17 19:20:35.811: IKEv2:(SESSION ID = 25,SA ID = 2):Queuing IKE SA delete request reason: unknown
Jan 17 19:20:35.811: IKEv2:(SESSION ID = 25,SA ID = 2):Sending DELETE INFO message for IPsec SA [SPI: 0x3DA95352]
Jan 17 19:20:35.811: IKEv2:(SESSION ID = 25,SA ID = 2):Check for existing IPSEC SA
Jan 17 19:20:35.811: IKEv2:(SESSION ID = 25,SA ID = 2):Delete all IKE SAs
Jan 17 19:20:35.811: IKEv2:(SESSION ID = 25,SA ID = 2):Sending DELETE INFO message for IKEv2 SA [ISPI: 0x3B52B7EBA8A353B1 RSPI: 0x16F36D79AAE675A5]

Eu tenho um roteador Cisco IOS, modelo 892, que estou configurando o IKEv2 com EAP-MSCHAPv2 como autenticação remota (apoiada por um Servidor de Diretivas de Rede do Windows 2012 Server) e autenticação de certificado local. Tudo funciona, eu posso me conectar à VPN e pingar um endereço de loopback no roteador. O Windows 7 e 8.1 funcionam bem, o Android com o Strongswan também.

No entanto, no Windows 10 (10.0.14393 - totalmente atualizado em 16 de janeiro de 2017), exatamente 60 segundos após a última troca de dados (como um ping), o Windows interrompe a conexão. Então:

  • Conexão VPN de T + 0 aberta
  • Conexão VPN T + 60 cai
  • Conexão VPN de T + 0 aberta
  • T + 20 1 Ping para 172.16.0.5, resposta recebida
  • conexão VPN T + 80 cai

A VPN é descartada com a seguinte mensagem no log de eventos do sistema:

Fonte: RasClient

ID do evento: 20226

CoId = {43121588-861C-447A-A510-C44C2BA86639}: O usuário LAPTOP-GLENN \ Glenn discou uma conexão chamada ikev2-test que foi terminada. O código de razão retornado no término é 829.

Então comecei a cavar e habilitei a depuração do RAS no cliente:

netsh ras diagnostics * state=enabled

A única coisa relevante que pude encontrar foi em C: \ Windows \ tracing \ rasman.log (20:11:51 é quando a desconexão acontece - bits interessantes prefixados com "***"):

[1384] 01-16 20:11:51:216: FreeInterfaceLuidIndex: Luid = 0
[1384] 01-16 20:11:51:216: RasUpdateVpnLuidCache: Luid: 17000000000000, fAddLuid:0
[1384] 01-16 20:11:51:216: RasUpdateVpnLuidCache: Removed Luid 17000000000000 from cache
[1384] 01-16 20:11:51:216: FreeInterfaceLuidIndex: done 0
[1384] 01-16 20:11:51:216: DeallocateRouteRequestCommon: pBundle=0xa50adde0, type=0x800
[1384] 01-16 20:11:51:232: DeActivated Route , bundlehandle 0x4, prottype = 2048
[1384] 01-16 20:11:51:232: DeAllocateRoute: PI_Type=0x800, PI_AdapterName=\DEVICE\{93A76D72-2010-45BB-9096-244B06735879}, PI_Allocated=-1
[3524] 01-16 20:11:51:248: SendProtocolResultToRasman: msgid=1, hPort: 6.
*** [3524] 01-16 20:11:51:248: Setting last error for port VPN2-1 to ppp error 0x3635
[3524] 01-16 20:11:51:248: SetProtocolResultAvailableEvent: Notification handle event for port 6 is not registered.
[2640] 01-16 20:11:51:248: WorkerThread: Disconnect event signaled on port: VPN2-1
[2640] 01-16 20:11:51:248: OVEVT_DEV_STATECHANGE. pOverlapped = 0xa4611940
[2640] 01-16 20:11:51:248: onecoreuap\net\rras\ras\rasman\rasman\worker.c, 2031: Disconnecting port 6, connection 0xa6af47e0, reason 1
[2640] 01-16 20:11:51:248: Disconnecting Port 0xVPN2-1, reason 1
[2640] 01-16 20:11:51:248: DisconnectPort: Saving Bundle stats for port VPN2-1
[2640] 01-16 20:11:51:263: RevertPostConnectionActions
[2640] 01-16 20:11:51:263: RasImpersonateUser. 0x0
[2640] 01-16 20:11:51:263: DeleteCredentialsFromCredMan
[2640] 01-16 20:11:51:263: DeleteCredentialsFromCredMan Done: 0
[2640] 01-16 20:11:51:263: RasRevertToSelf. 0x0
[2640] 01-16 20:11:51:263: QueueCloseConnections: no dependent connections
[2640] 01-16 20:11:51:263: 10. Throwing away handle 0x0!
[2640] 01-16 20:11:51:263: onecoreuap\net\rras\ras\rasman\rasman\util.c, 2315:Setting port 6 for autoclosure...
[2640] 01-16 20:11:51:263: onecoreuap\net\rras\ras\rasman\rasman\util.c 2327: Disconnected Port 6, reason 1. rc=0x0
[2640] 01-16 20:11:51:263: FreeBundle: freeing pBundle=0xa50adde0
[2640] 01-16 20:11:51:263: onecoreuap\net\rras\ras\rasman\rasman\util.c: 2443: port 6 state chg: prev=2, new=3
[2640] 01-16 20:11:51:263: onecoreuap\net\rras\ras\rasman\rasman\util.c: 2459: port 6 state chg: prev=3, new=4
[2640] 01-16 20:11:51:263: 5. Notifying of disconnect on port 6
[2640] 01-16 20:11:51:263: SignalPortDisconnect: Notification handle event for port 6 is not registered.
[2640] 01-16 20:11:51:263: onecoreuap\net\rras\ras\rasman\rasman\util.c: 2573: port 6 async reqtype chg: prev=0, new=0
[2640] 01-16 20:11:51:263: ***** DisconnectType=1,DisconnectReason=4,pConn=0xa6af47e0,cbports=1,signaled=1,hEvent=0xffffffff,fRedial=0
[2640] 01-16 20:11:51:263: Calling DwQueueRedial
[2640] 01-16 20:11:51:263: DwQueueRedial
[2640] 01-16 20:11:51:263: DwQueueRedial returned 0x0
[2640] 01-16 20:11:51:263: onecoreuap\net\rras\ras\rasman\rasman\util.c, 2634: Autoclosing port 6
[2640] 01-16 20:11:51:263: PortClose: port (6). OpenInstances = 1
[2640] 01-16 20:11:51:263: Freeing the notifier list for port 6
[2640] 01-16 20:11:51:263: PortClose (6). OpenInstances = 0
[2640] 01-16 20:11:51:263: onecoreuap\net\rras\ras\rasman\rasman\request.c: 3845: port 6 async reqtype chg: prev=0, new=0
[2640] 01-16 20:11:51:263: onecoreuap\net\rras\ras\rasman\rasman\request.c: 3848: port 6 state chg: prev=4, new=4
[2640] 01-16 20:11:51:263: PortClose: Resetting PCB_OpenedUsage for port: 6.
[2640] 01-16 20:11:51:263: RemoveConnectionPort: port 6, fOwnerClose=0, pConn=0xa6af47e0, pConn->CB_Ports=0

*** [2640] 01-16 20:11:51:263: Completely disconnected connection: Reason: ERROR_LINK_FAILURE (829)
[2640] 01-16 20:11:51:263: SendSensNotification(_RAS_DISCONNECT) for 0x00040000 returns 0x00000000
[2640] 01-16 20:11:51:263: Successfully notified event(128, C:\Users\Glenn\AppData\Roaming\Microsoft\Network\Connections\Pbk\rasphone.pbk, ikev2-test) to the caller.
[2640] 01-16 20:11:51:263: SignalNetman: IRasEventNotify::RasEvent returned S_FALSE
[2640] 01-16 20:11:51:263: DwSendNotificationInternal(ENTRY_DISCONNECTED) rc=0x1
[2640] 01-16 20:11:51:263: RemoveConnectionPort: FreeConnection hconn=0x40000, pconn=0xa6af47e0, AutoClose=1
[2640] 01-16 20:11:51:263: FreeConnection: pConn=0xa6af47e0, 1
[2640] 01-16 20:11:51:263: onecoreuap\net\rras\ras\rasman\rasman\request.c, 3918: Clearing the autoclose flag for port 6
[2640] 01-16 20:11:51:263: fAnyConnectedPorts: 0
[2640] 01-16 20:11:51:263: SetRasmanServiceStopControl: Enabled 1
[2640] 01-16 20:11:51:263: PortClose: DisableAutoWPPTracing failed with error 0x2 
[2640] 01-16 20:11:51:263: DisconnectPort Complete
[2640] 01-16 20:11:51:263: onecoreuap\net\rras\ras\rasman\rasman\worker.c: 2077: port 6 state chg: prev=4, new=4
[2640] 01-16 20:11:51:263: onecoreuap\net\rras\ras\rasman\rasman\worker.c: 2081: port 6 async reqtype chg: prev=0, new=0
[1276] 01-16 20:11:51:263: The specified notification entry with cookie 2 found.
[1276] 01-16 20:11:51:263: Dequed notification entry: (128, C:\Users\Glenn\AppData\Roaming\Microsoft\Network\Connections\Pbk\rasphone.pbk, ikev2-test) from the queue.
  • Executei a mesma configuração em um roteador Cisco CSR1000v e a mesma coisa aconteceu.
  • Criado um REG_DWORD chamado "InactivityIdleSeconds" em HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Classe {4d36e972-e325-11ce-bfc1-08002be10318} \ 0012 (WAN Miniport (IKEv2)) e jogado com seu valor, mas isso não aconteceu alterar qualquer coisa ( veja aqui porque eu tentei isso )
  • Brincou com o Dead Peer Detection, mas isso também não alterou nada

Não consigo descobrir quais são os critérios para o Windows 10 considerar uma conexão IKEv2 inoperante ou quais alterações de estado fazem com que o Windows 10 pense que a VPN precisa ser desconectada.

Soooo ... algum apontador?

Microsoft Technet: Erro 829 significa ERROR_LINK_FAILURE O modem (ou outro dispositivo de conexão ) foi desconectado devido a falha no link.

Microsoft Technet: 0x3635 significa 13877 ERROR_IPSEC_IKE_RPC_DELETE "Excluído via Chamada RPC. "

A configuração do roteador Cisco IOS.

Logs de depuração do roteador IOSv2 do Cisco IOS

Arquivo Zip do diretório C: \ Windows \ tracing

completo     
por RedShift 17.01.2017 / 07:22

2 respostas

0

Consegui resolver este problema porque configurei o próprio servidor VPN no meu servidor. O servidor VPN StrongSwan permite registrar scripts de atualização que são executados sempre que a conexão do cliente é alterada.

conn %default
    ...
    leftupdown=/absolute/path/to/keepalive/script.sh
    ...

E o script.sh é assim:

#!/bin/bash
/usr/lib/ipsec/_updown $* # call original updown script, just to be sure

# PLUTO_VERB - name of the event
# PLUTO_PEER_SOURCEIP - IP of the client

PLUTO_IPSTRING="${PLUTO_PEER_SOURCEIP//./}" # strip client IP of dots, to create unique name for pidfile
PID_PATH="/absolute/path/to/writable/location"

if [ "up-client" == "$PLUTO_VERB" ]; then # when new client connects
        ping $PLUTO_PEER_SOURCEIP -i 30 >/dev/null 2>/dev/null & echo $! > "$PID_PATH/pluto$PLUTO_IPSTRING.pid" # launch ping in background, send packets every 30 seconds. Store the PID in given file.
fi

if [ "down-client" == "$PLUTO_VERB" ]; then # when client disconnects
        kill -9 $(cat "$PID_PATH/pluto$PLUTO_IPSTRING.pid") # kill the ping process
        rm -rf "$PID_PATH/pluto$PLUTO_IPSTRING.pid" # remove the associated PID file
fi

Você precisa editar os caminhos para refletir sua configuração.

Essa abordagem é um pouco problemática, mas funciona perfeitamente. Infelizmente, isso só é possível se você puder criar um script desse tipo. Se você não tiver acesso ao servidor VPN remoto, isso não ajudará você.

    
por 18.01.2017 / 18:05
0

Parece que é o ponto que está excluindo a sessão.

* 16 de janeiro de 20: 12: 10.655: IKEv2: (ID da SESSÃO = 12, SA ID = 1): Pacote recebido [De 192.168.0.107:4500/ Para 192.168.0.200:4500/VRF i0: f0] Iniciador SPI: 598D998BFD1C9FFB - Responder SPI: 6ADF174B54D76AA1 Mensagem id: 6 IKEv2 INFORMATIONAL Exchange REQUEST Conteúdo de carga útil:  DELETE

então você precisa t / atirar no cliente do Windows (desculpe se você já está lá ..)

também você é fã parece que está jogando ..

* 16 de janeiro 20: 11: 24.243:% ENVMON-3-FAN_FAILED: Ventilador está funcionando mal

    
por 27.01.2017 / 12:26