Creare una VPN IKEv2 in PowerShell con un certificato macchina
La posizione del certificato, i prefissi di route e le credenziali EAP sono i punti in cui uno script IKEv2 fallisce. Costruite il tunnel in PowerShell e verificate ogni fase separatamente.
Windows include un client IKEv2 che PowerShell controlla dall'inizio alla fine, quindi un tunnel funzionante non richiede né interfaccia grafica né software di terze parti. Quasi ogni errore proviene da tre punti: dove è finito il certificato, come sono stati scritti i prefissi di route e che cosa si aspetta il metodo EAP scelto. Affrontateli in quest'ordine, perché ciascuno è verificabile prima che inizi il successivo e un errore più tardo nasconderà uno precedente.
I tunnel con certificato macchina esistono per avviarsi prima che qualcuno acceda, per questo l'identità di solito deve risiedere nell'archivio del computer e non in quello di un utente.
Prima il certificato, poi il tunnel
Due importazioni contano. L'identità del client va in Cert:\LocalMachine\My tramite Import-PfxCertificate, e la CA emittente va in Cert:\LocalMachine\Root tramite Import-Certificate. Un certificato foglia da solo non dimostra alcuna catena, quindi saltare la seconda importazione lascia la verifica senza nulla su cui costruire. Oltre alla presenza, la chiave privata deve essere collegata e l'account computer deve poterla leggere. Get-ChildItem Cert:\LocalMachine\My elenca ciò che è arrivato; confrontate le impronte invece dei soggetti, perché soggetti quasi identici sono comuni.
Controllate l'uso esteso della chiave prima di distribuire. L'autenticazione del client è il requisito abituale per un'identità macchina IKEv2, e l'altro lato deve fidarsi della CA che l'ha firmata. Un'identità nell'archivio di un utente non esiste per una connessione in contesto computer.
Create il profilo e le sue route
Add-VpnConnection -Name "Office IKEv2" -ServerAddress vpn.example.com -TunnelType Ikev2 -EncryptionLevel Required -AuthenticationMethod MachineCertificate -AllUserConnection scrive il profilo. L'opzione -AllUserConnection lo pubblica nella rubrica globale, adatta a una macchina condivisa o gestita come servizio; omettetela per un singolo utente. Qualunque indirizzo passiate deve corrispondere al nome DNS nel certificato del server, altrimenti l'errore compare quando il tunnel è già attivo. Poi i prefissi vengono aggiunti uno alla volta con Add-VpnConnectionRoute, e solo quelli che il progetto richiede davvero.
IPv6 ha una stranezza: Windows rifiuta ::/0 come route VPN, quindi ::/1 e 8000::/1 insieme coprono lo stesso spazio di indirizzi. Instradare un prefisso non concede nulla nemmeno sul firewall remoto, perciò l'elenco dei prefissi e la politica del firewall restano documenti separati.
Le credenziali appartengono al metodo di autenticazione
Un profilo con certificato macchina non richiede alcun segreto utente, mentre un profilo EAP-MSCHAPv2 sì. Nel secondo caso il modulo VPNCredentialsHelper fornisce Set-VpnConnectionUsernamePassword, e vuole testo semplice: $cred.Password è un SecureString, quindi sballatelo prima con GetNetworkCredential().Password. Installate il modulo ovunque il comando venga eseguito, non solo sulla postazione dove è stato redatto. EAP-TLS o un metodo personalizzato non usano affatto questo cmdlet; prendono invece un XML di configurazione EAP.
rasdial "Office IKEv2" avvia la connessione da una shell, che è il modo più rapido per vedere il risultato in primo piano anziché in un registro eventi.
Ciò che un tunnel connesso non dimostra
Lo stato connesso copre lo scambio IKE e il passo di autenticazione, e nulla oltre. Il comportamento DNS, il percorso verso un host privato e il firewall remoto restano tutti non dimostrati. Lavorate verso l'esterno: l'adattatore del tunnel, poi una ricerca di route per un indirizzo privato, poi un servizio che siete autorizzati a usare. La prima osservazione che fallisce indica il livello da esaminare.
Quando modificate un profilo, eliminate il precedente con Remove-VpnConnection -Name "Office IKEv2" -Force prima di ricrearlo; altrimenti impostazioni e route obsolete restano dopo la modifica. Se ancora non si connette, confrontate l'impronta registrata nel profilo con quella presente nell'archivio, perché Windows può mantenere un riferimento a un'identità nel frattempo sostituita sotto un soggetto invariato.
Tenete l'impronta, il metodo EAP e l'elenco delle route accanto al profilo. Insieme spiegano gran parte di ciò che va storto in seguito.