Quando ha senso usare RRAS
Windows Server include il ruolo Accesso remoto, con il servizio Routing e Accesso remoto (RRAS). Oltre a fare da server VPN per gli utenti, RRAS può collegare due sedi con un’interfaccia di connessione su richiesta (demand-dial): un’interfaccia virtuale che apre un tunnel IKEv2 verso l’altra sede e ci instrada le reti remote.
È una soluzione utile in sedi piccole dove c’è già un Windows Server e non c’è un firewall in grado di fare VPN, oppure come collegamento temporaneo durante una migrazione.
Per una sede importante un firewall o un router dedicato è quasi sempre la scelta migliore. RRAS si configura soprattutto da PowerShell, ha una diagnostica povera, mescola il ruolo di router con quello di server (aggiornamenti e riavvii fanno cadere la VPN) e Microsoft non lo sviluppa più attivamente. Usalo con consapevolezza e annota bene la configurazione.
Lo scenario
La sede A è la stessa delle altre guide della serie, con il router Cisco. La sede C ha un Windows Server 2022 con due schede di rete: una verso Internet e una verso la LAN, di cui fa da gateway.
| Elemento | Sede A (Cisco) | Sede C (Windows Server) |
|---|---|---|
| IP pubblico | 198.51.100.1 su Gi0/0 | 192.0.2.10 sulla scheda WAN |
| LAN | 192.168.10.0/24, gateway .1 su Gi0/1 | 192.168.30.0/24, gateway .1 sulla scheda LAN |
| Interfaccia VPN | Tunnel2 (VTI, ip unnumbered) | interfaccia S2S “SedeA” |
Scelta: VTI sul Cisco, non crypto map
L’interfaccia di RRAS è basata sul routing: si comporta come un’interfaccia di rete e le reti remote ci arrivano con delle rotte. Sul Cisco l’equivalente naturale è una VTI (tunnel mode ipsec ipv4), che negozia selettori di traffico “qualsiasi ↔ qualsiasi” e lascia decidere alle rotte. Con una crypto map dovresti far combaciare reti precise su entrambi i lati, cosa che RRAS gestisce male.
Funziona, grazie al NAT-T di IKEv2. Sul router della sede C inoltra le porte UDP 500 e 4500 verso l’indirizzo privato del server (per esempio 172.16.30.10). Sul Cisco la destinazione del tunnel resta l’IP pubblico 192.0.2.10, ma Windows si presenta con il proprio indirizzo privato come identità IKE: nel profilo IKEv2 del Cisco usa quindi match identity remote address 172.16.30.10 255.255.255.255. Le altre righe non cambiano.
Gli algoritmi da allineare
Come in ogni VPN IPsec, i due lati devono proporre gli stessi algoritmi. Su RRAS li fissi con la politica personalizzata (-CustomPolicy); senza, Windows propone una lista ampia che comprende anche algoritmi deboli.
| Parametro | Windows Server (RRAS) | Cisco IOS XE |
|---|---|---|
| IKE – cifratura | -EncryptionMethod AES256 | encryption aes-cbc-256 |
| IKE – integrità e PRF | -IntegrityCheckMethod SHA256 | integrity sha256 |
| IKE – Diffie-Hellman | -DHGroup ECP256 | group 19 |
| ESP | -CipherTransformConstants GCMAES256 e -AuthenticationTransformConstants GCMAES256 | esp-gcm 256 |
| PFS al rinnovo | -PfsGroup ECP256 | set pfs group19 |
| Durata IKE SA | -MMSALifeTimeSeconds 28800 | lifetime 28800 |
| Durata IPsec SA | -SALifeTimeSeconds 3600 | set security-association lifetime seconds 3600 |
| Autenticazione | chiave condivisa (PSKOnly) | pre-share |
Per IKE uso AES-CBC con SHA-256 perché il cmdlet di RRAS non accetta AES-GCM come cifratura IKE. Per ESP, dove passa il traffico vero, AES-GCM è supportato su entrambi i lati ed è la scelta migliore.
Windows Server: installare RRAS
Prima di tutto rinomina le schede di rete con nomi chiari: ti serviranno nei comandi e nella diagnostica.
Get-NetAdapter
Rename-NetAdapter -Name "Ethernet" -NewName "WAN"
Rename-NetAdapter -Name "Ethernet 2" -NewName "LAN"
# ruolo Accesso remoto con le funzioni di routing
Install-WindowsFeature RemoteAccess -IncludeManagementTools
Install-WindowsFeature Routing -IncludeManagementTools -IncludeAllSubFeature
# configura RRAS per le VPN site-to-site
Install-RemoteAccess -VpnType VpnS2SInstall-RemoteAccess -VpnType VpnS2S avvia il servizio RRAS e abilita l’instradamento tra le interfacce. La scheda WAN non deve avere un gateway sulla LAN, e la scheda LAN non deve avere un gateway predefinito: il gateway predefinito sta solo sulla WAN.
Tutto ciò che segue si vede anche nella console rrasmgmt.msc, sotto Interfacce di rete. È comoda per controllare, ma alcune opzioni (la politica IPsec personalizzata in particolare) si impostano solo da PowerShell.
Windows Server: l’interfaccia verso la sede A
Genera una chiave condivisa lunga e casuale, per esempio con openssl rand -base64 32 su qualunque Linux, e usala identica sui due lati. Quella qui sotto è solo un esempio.
Add-VpnS2SInterface -Name "SedeA" `
-Destination 198.51.100.1 `
-Protocol IKEv2 `
-AuthenticationMethod PSKOnly `
-SharedSecret "Esempio-Da-Sostituire-Con-Una-Chiave-Lunga" `
-IPv4Subnet "192.168.10.0/24:100" `
-Persistent `
-InitiateConfigPayload $false `
-CustomPolicy `
-EncryptionMethod AES256 `
-IntegrityCheckMethod SHA256 `
-DHGroup ECP256 `
-CipherTransformConstants GCMAES256 `
-AuthenticationTransformConstants GCMAES256 `
-PfsGroup ECP256 `
-MMSALifeTimeSeconds 28800 `
-SALifeTimeSeconds 3600 `
-PassThru
Connect-VpnS2SInterface -Name "SedeA"-IPv4Subnet "192.168.10.0/24:100"crea una rotta verso la LAN A con metrica 100 attraverso questa interfaccia. Per più reti passa un elenco:@("192.168.10.0/24:100","10.10.10.0/24:100");-Persistenttiene il tunnel sempre attivo, anche dopo un riavvio del servizio. Senza, RRAS lo aprirebbe solo quando c’è traffico;-InitiateConfigPayload $falseimpedisce a Windows di chiedere al Cisco un indirizzo IP per l’interfaccia, come farebbe verso un altro server RRAS;- con la chiave condivisa RRAS associa le connessioni in arrivo all’interfaccia il cui
-Destinationcoincide con l’IP del mittente: anche il Cisco può quindi avviare il tunnel.
Per cambiare un parametro in seguito usa Set-VpnS2SInterface con gli stessi nomi, per esempio:
Set-VpnS2SInterface -Name "SedeA" -SharedSecret "Nuova-Chiave-Lunga-E-Casuale"
Disconnect-VpnS2SInterface -Name "SedeA" -Force
Connect-VpnS2SInterface -Name "SedeA"
Il firewall di Windows
IKEv2 usa UDP 500 e, con il NAT, UDP 4500; senza NAT il traffico cifrato è ESP (protocollo IP 50). Autorizza solo il router della sede A, come spiegato nella guida Windows Server: firewall e protezione di base con PowerShell:
New-NetFirewallRule -DisplayName "VPN sede A - IKE" `
-Direction Inbound -Protocol UDP -LocalPort 500,4500 `
-RemoteAddress 198.51.100.1 -Action Allow -Profile Any
New-NetFirewallRule -DisplayName "VPN sede A - ESP" `
-Direction Inbound -Protocol 50 `
-RemoteAddress 198.51.100.1 -Action Allow -Profile AnyL’installazione di RRAS aggiunge già alcune regole proprie (gruppo “Routing e Accesso remoto”): controllale con Get-NetFirewallRule -DisplayGroup "Routing*" e disattiva quelle che non usi, come PPTP e L2TP. Il traffico instradato tra la LAN C e il tunnel non passa dalle regole del Windows Firewall, che filtrano solo il traffico diretto al server stesso.
Configurazione del router Cisco
configure terminal
!
crypto ikev2 proposal PROP-SEDE-C
encryption aes-cbc-256
integrity sha256
group 19
!
crypto ikev2 policy POL-SEDE-C
match address local 198.51.100.1
proposal PROP-SEDE-C
!
crypto ikev2 keyring KR-SEDE-C
peer SEDE-C
address 192.0.2.10
pre-shared-key Esempio-Da-Sostituire-Con-Una-Chiave-Lunga
!
crypto ikev2 profile PROF-SEDE-C
match identity remote address 192.0.2.10 255.255.255.255
identity local address 198.51.100.1
authentication remote pre-share
authentication local pre-share
keyring local KR-SEDE-C
lifetime 28800
dpd 10 5 on-demand
no config-exchange request
!
crypto ipsec transform-set TS-SEDE-C esp-gcm 256
mode tunnel
!
crypto ipsec profile IPSEC-SEDE-C
set transform-set TS-SEDE-C
set pfs group19
set security-association lifetime seconds 3600
set ikev2-profile PROF-SEDE-C
!
interface Tunnel2
description VPN IPsec verso sede C (Windows Server RRAS)
ip unnumbered GigabitEthernet0/1
ip mtu 1400
ip tcp adjust-mss 1360
tunnel source GigabitEthernet0/0
tunnel mode ipsec ipv4
tunnel destination 192.0.2.10
tunnel protection ipsec profile IPSEC-SEDE-C
!
ip route 192.168.30.0 255.255.255.0 Tunnel2
!
end
write memoryip unnumberedevita di inventare una rete di transito: RRAS non assegna un indirizzo alla sua interfaccia S2S, quindi una /30 sul tunnel non servirebbe a nulla;no config-exchange requestè il corrispettivo di-InitiateConfigPayload $false: niente richieste di configurazione tra i due lati;ip mtu 1400eip tcp adjust-mss 1360lasciano spazio alle intestazioni ESP e NAT-T. Il Cisco corregge l’MSS dei SYN in entrambe le direzioni, quindi basta farlo qui.
Se sulla WAN hai una access list in ingresso, aggiungi:
ip access-list extended WAN-IN
permit udp host 192.0.2.10 host 198.51.100.1 eq isakmp
permit udp host 192.0.2.10 host 198.51.100.1 eq non500-isakmp
permit esp host 192.0.2.10 host 198.51.100.1Con una VTI il traffico verso 192.168.30.0/24 esce dall’interfaccia Tunnel2, non da quella esterna: il NAT overload verso Internet non lo tocca. Controlla comunque con show ip nat translations dopo i primi ping.
Rotte nelle due LAN
Le due rotte principali sono già a posto: ip route … Tunnel2 sul Cisco e -IPv4Subnet su RRAS. Restano i client:
- nella sede C i PC devono usare Windows Server (192.168.30.1) come gateway. Se il gateway della LAN C è un altro router, aggiungi su quel router una rotta verso 192.168.10.0/24 via 192.168.30.1;
- nella sede A i PC usano già il Cisco come gateway, che conosce la rotta verso il tunnel.
Se la sede A è collegata anche alla sede B (VPN IPsec tra Cisco e Ubuntu) e vuoi far parlare B e C passando per A, ti servono due modifiche:
- su RRAS aggiungi 192.168.20.0/24 all’elenco
-IPv4Subnet; - sul collegamento tra A e B aggiungi la rete 192.168.30.0/24: ai selettori di traffico se quel tunnel usa una crypto map, alle rotte se usa una VTI o GRE.
Il Cisco sa già raggiungere entrambe le sedi, quindi sulla Tunnel2 non serve altro.
Verifiche
Su Windows Server
Get-VpnS2SInterface -Name "SedeA" |
Format-List Name, Destination, ConnectionState, LastError, IPv4Subnet
Get-NetRoute -DestinationPrefix 192.168.10.0/24
Test-NetConnection 192.168.10.1
Test-NetConnection 192.168.10.10 -Port 445
# eventi del servizio RRAS
Get-WinEvent -LogName System -MaxEvents 30 |
Where-Object ProviderName -eq "RemoteAccess"
ConnectionState deve essere Connected e LastError pari a 0. Un valore diverso da zero è un codice di errore Windows: lo decodifichi con [ComponentModel.Win32Exception]13868 (sostituisci il numero).
Sul router Cisco
show crypto ikev2 sa detailed ! stato READY, algoritmi negoziati
show crypto ipsec sa peer 192.0.2.10 ! contatori encaps/decaps in crescita
show interfaces Tunnel2 ! up/up
show ip route 192.168.30.0
ping 192.168.30.1 source GigabitEthernet0/1
Se il tunnel non sale, accendi il debug per pochi minuti e poi spegnilo:
debug crypto ikev2
debug crypto ikev2 error
! ... prova la connessione ...
undebug all
Problemi comuni
| Sintomo | Causa probabile | Cosa fare |
|---|---|---|
NO_PROPOSAL_CHOSEN nel debug del Cisco | Algoritmi non allineati, spesso perché -CustomPolicy non è stato applicato | Controlla con Get-VpnS2SInterface -Name "SedeA" | Format-List * e confronta con la tabella degli algoritmi |
Errore di autenticazione, AUTHENTICATION_FAILED | Chiave condivisa diversa, oppure identità non corrispondente | Reimposta la chiave su entrambi i lati; se Windows è dietro NAT, usa il suo IP privato in match identity remote |
TS_UNACCEPTABLE o SA figlia rifiutata | Selettori di traffico diversi da “qualsiasi” | Verifica di usare la VTI e non una crypto map; con show crypto ikev2 sa detailed guarda quali reti propone Windows |
| Tunnel su, ma le LAN non si vedono | Rotte mancanti o gateway dei client sbagliato | Controlla la rotta su entrambi i lati e il gateway dei PC della sede C |
| Il tunnel cade e non si rialza da solo | Interfaccia senza -Persistent, oppure servizio RRAS fermo | Get-Service RemoteAccess; ricrea l’interfaccia con -Persistent; il Cisco può comunque riaprire il tunnel |
| Ping OK, condivisioni e siti bloccati | MTU/MSS | Verifica ip tcp adjust-mss sulla Tunnel2; da un PC: ping -f -l 1372 192.168.10.10 |
| Nessun pacchetto in arrivo su Windows | UDP 500/4500 bloccati dal provider o dal router davanti al server | Cattura con pktmon sulla scheda WAN; controlla l’inoltro delle porte se il server è dietro NAT |
Il passo successivo
Con questa guida la sede A è collegata sia alla sede B Linux sia alla sede C Windows. Se le sedi crescono, valuta un protocollo di routing dinamico sopra i tunnel, come visto in GRE su IPsec tra Cisco e Ubuntu: RRAS però non lo gestisce bene sulle interfacce S2S, ed è un’altra buona ragione per sostituirlo con un apparato dedicato quando la sede C diventa importante. Per dare accesso anche agli utenti remoti vedi Accesso remoto IKEv2: client Windows verso Ubuntu con strongSwan.
Prova sempre la configurazione in laboratorio, salva quella attuale prima di modificarla e tieni un accesso di emergenza (console o accesso fuori banda) quando lavori su firewall e VPN da remoto.