Configurare PXE IPv6 su Windows Server 2022: guida completa a DHCPv6 (Opzione 59), WDS e HTTP Boot

Vuoi far partire il PXE anche su IPv6 con Windows Server 2022? In questo articolo trovi una guida pratica e collaudata: perché le classiche opzioni 60/66/67 non esistono in DHCPv6, quali alternative usare e come configurare DHCP, WDS, rete e client UEFI per un boot veloce e affidabile via TFTP o, meglio, via HTTP/HTTPS.

Indice

Panoramica del problema

Scenario reale: un amministratore ha installato i ruoli DHCP e Windows Deployment Services (WDS) su Windows Server 2022. In IPv4 tutto funziona grazie alle opzioni DHCP 60/66/67; in IPv6 invece il boot non parte, perché quelle opzioni non sono previste da DHCPv6. La chiave è usare le opzioni definite da RFC 5970, in particolare Opzione 59 – Boot File URL, che indica al client il percorso del file di avvio (TFTP o HTTP/HTTPS).

Come funziona il boot PXE su IPv6 (in breve)

  • Il client UEFI effettua una solicitazione DHCPv6, il server risponde con parametri di rete e, se previsto, con le opzioni di network boot definite da RFC 5970.
  • La più importante è l’Opzione 59 (Bootfile URL): un URL che può essere tftp://, http:// o https:// (gli indirizzi IPv6 vanno sempre racchiusi tra parentesi quadre).
  • Opzione 60 (Bootfile Parameters) permette di passare parametri extra al loader (ad esempio script iPXE o argomenti del kernel).
  • Opzione 61 (Client System Architecture) e 62 (NII) servono a distinguere le architetture/driver; spesso non occorre impostarle manualmente se si usa un URL esplicito nell’opzione 59.

Requisiti

  • Windows Server 2022 con ruoli DHCP e WDS installati (o WDS in sola modalità Transport + un web server per HTTP boot).
  • Una o più reti IPv6 correttamente annunciate (RA) e raggiungibili dai client.
  • Switch/Router che inoltrino DHCPv6 (eventuale DHCPv6 relay tra VLAN).
  • Client con firmware UEFI e supporto PXE/IPv6 (il BIOS legacy non supporta PXE su IPv6).

Tabella riassuntiva – Soluzione operativa

PassaggioDettagli essenziali
DHCPv6Creare/scoprire un ambito IPv6. Aggiungere Opzione 59 – Boot File URL con l’indirizzo completo del file di avvio (es. http://[2001:db8::1]/boot/wds/boot.wim o tftp://[2001:db8::1]/boot/boot.ipxe). (Facoltativa) Opzione 60 – Boot File Parameters per parametri aggiuntivi.
WDSConsole WDS → Proprietà → scheda DHCP: non forzare l’opzione 60 (vale solo per IPv4). Verificare che WDS ascolti su IPv4 e IPv6 e che risponda a “Tutti i computer”.
Rete & firewallAprire UDP 546/547 (DHCPv6) e le porte TFTP (UDP 69) oppure HTTP/HTTPS (80/443) se si usa l’avvio via HTTP. Assicurarsi che gli switch/router inoltrino correttamente i messaggi DHCPv6 (o configurare un relay).
ClientIl firmware deve essere UEFI con supporto PXE/IPv6; nessun supporto per BIOS legacy. Aggiornare NIC e firmware per piena compatibilità (PXE UEFI + IPv6 + HTTP boot se previsto).

Configurazione dettagliata di DHCPv6 (GUI e PowerShell)

Metodo GUI

  1. Apri DHCPIPv6 → verifica che esista un Ambito per la tua rete (prefisso, es. 2001:db8:100::/64). In caso contrario, crealo.
  2. Fai clic destro su Opzioni ambito (o Opzioni server se vuoi impostarlo globalmente) → Configura opzioni.
  3. Cerca Opzione 59 – Boot File URL. Se presente, selezionala e inserisci l’URL completo:
    • Per TFTP: tftp://[2001:db8::1]/boot/boot.ipxe oppure tftp://[2001:db8::1]/boot/x64/wdsmgfw.efi
    • Per HTTP: http://[2001:db8::1]/boot/wds/boot.wim o un percorso a una risorsa statica (IIS, iPXE, ecc.).
    Nota: con IPv6 l’indirizzo va tra [ ] dentro l’URL.
  4. (Opzionale) Aggiungi Opzione 60 – Boot File Parameters con eventuali parametri (es. initrd=..., variabili per script iPXE, flag per HTTP boot).
  5. Applica e chiudi.

Metodo PowerShell

Le cmdlet del modulo DhcpServer semplificano e rendono ripetibile la configurazione:

# Definisci le opzioni se non presenti
Add-DhcpServerv6OptionDefinition -OptionId 59 -Name "BootFileUrl" -Type String -Description "RFC 5970 Bootfile URL"
Add-DhcpServerv6OptionDefinition -OptionId 60 -Name "BootFileParams" -Type String -Description "RFC 5970 Bootfile Parameters"

Imposta i valori a livello di ambito (usa il tuo prefisso)

$prefix = "2001:db8:100::/64"
Set-DhcpServerv6OptionValue -Prefix $prefix -OptionId 59 -Value "http://[2001:db8::1]/boot/wds/boot.wim"
Set-DhcpServerv6OptionValue -Prefix $prefix -OptionId 60 -Value "imgargs=quiet splash" 

Metodo netsh (alternativa)

netsh dhcp server v6 add optiondef 59 BootFileUrl String 1 "RFC 5970 Bootfile URL"
netsh dhcp server v6 add optiondef 60 BootFileParams String 1 "RFC 5970 Bootfile Parameters"

netsh dhcp server v6 set optionvalue 59 prefix=2001:db8:100::/64 string=http://[2001:db8::1]/boot/wds/boot.wim
netsh dhcp server v6 set optionvalue 60 prefix=2001:db8:100::/64 string=imgargs=quiet 

Configurazione di WDS per IPv6

  1. Apri Windows Deployment Services → tasto destro sul server → Proprietà → scheda DHCP.
  2. Verifica che non sia selezionata l’opzione “Imposta l’opzione 60 DHCP per PXEClient”: vale solo per IPv4.
  3. In scheda Risposta PXE imposta “Rispondi a tutti i computer (noti e sconosciuti)” o le regole che preferisci.
  4. Controlla in Interfacce che il servizio stia ascoltando su entrambe le pile IPv4 e IPv6 (di norma è automatico).
  5. Se prevedi l’avvio via HTTP, assicurati di avere un web server:
    • Puoi usare IIS per servire file WIM/EFI/iPXE su http(s)://<server>/boot/.
    • Oppure usa WDS in Transport Server + iPXE (o un altro web server) per erogare i contenuti.

Rete e firewall: porte e relay

  • DHCPv6: UDP 547 (server) / 546 (client). Abilita le regole “DHCPv6-In” nel firewall di Windows.
  • TFTP: UDP 69 (negoziazione) + porte effimere per il trasferimento. Abilita le regole “Windows Deployment Services (TFTP-In)”.
  • HTTP/HTTPS: TCP 80/443 (consigliato per performance e affidabilità rispetto a TFTP).
  • Relay DHCPv6: se i client sono su VLAN diverse dal server, configura un dhcpv6 relay sul router/L3 switch (equivalente concettuale dell’IP Helper di IPv4, ma specifico per v6).
  • Multicast/MLD: assicurati che la rete supporti l’inoltro dei messaggi multicast locali (es. ff02::1:2 per DHCPv6).

Client UEFI: impostazioni chiave

  • Abilita Network Stack e PXE/IPv6 nel firmware.
  • Preferisci la voce di boot UEFI: IPv6 dell’interfaccia di rete.
  • Aggiorna il firmware e i driver della NIC, specie su hardware datato (alcuni aggiornamenti abilitano HTTP boot e correggono problemi con DHCPv6).
  • Se usi Secure Boot e HTTPS boot, prepara i certificati e le CA attese dal firmware; in alternativa inizia con HTTP per semplificare i test.

Esempi pratici di Bootfile URL (Opzione 59)

  • TFTP + iPXE script: tftp://[2001:db8::1]/boot/boot.ipxe
  • TFTP + loader UEFI WDS: tftp://[2001:db8::1]/boot/x64/wdsmgfw.efi
  • HTTP Boot diretto su WIM (servito da IIS/Transport): http://[2001:db8::1]/boot/wds/boot.wim
  • HTTPS + iPXE (consigliato in produzione con certificati validi): https://[2001:db8::1]/boot/menu.ipxe

Script iPXE di esempio

#!ipxe
Esempio minimale compatibile IPv6
echo Avvio iPXE su IPv6...
dhcp
set base http://[2001:db8::1]/boot
kernel ${base}/wimboot
initrd ${base}/boot/bcd               BCD
initrd ${base}/boot/boot.sdi          boot.sdi
initrd ${base}/sources/boot.wim       boot.wim
boot

Verifica e diagnostica

Check rapido lato server

# DHCPv6: verifica che l'opzione 59 sia impostata sull'ambito
Get-DhcpServerv6OptionValue -Prefix "2001:db8:100::/64" | Where-Object OptionId -in 59,60

WDS: verifica stato del servizio

Get-Service -Name WDS* | Select-Object Name, Status

Porte firewall essenziali (visualizza)

Get-NetFirewallRule | Where-Object DisplayName -match "DHCPv6|Deployment|TFTP|World Wide Web" |
Select-Object DisplayName, Enabled, Direction 

Event Viewer

  • Applicazioni e servizi → Microsoft → Windows → DHCPv6-Server: avvisi/errore su opzioni o ambiti.
  • Microsoft → Windows → Deployment-Services*: diagnosi WDS (risposte PXE, TFTP/HTTP).

Analisi pacchetti con Wireshark

Sul client o su una SPAN porta, filtra per dhcpv6. Verifica che nelle risposte Advertise/Reply sia presente l’Option 59 con l’URL corretto. Se usi TFTP, osserva lo scambio successivo (tftp + UDP effimeri). Con HTTP, controlla la GET iniziale all’URL indicato.

Best practice e suggerimenti

  • Preferisci HTTP/HTTPS a TFTP: trasferimenti più affidabili (finestre TCP, caching, CDN interni) e tempi d’avvio sensibilmente ridotti rispetto al TFTP.
  • Segmenta per architettura: puoi usare più ambiti o classi per fornire URL diversi (x64, ARM64, WinPE personalizzati).
  • Ambienti multi-subnet: configura un dhcpv6 relay anziché affidarti all’IP Helper (concetto IPv4). Riduce i broadcast/multicast fuori dal segmento e semplifica il controllo.
  • UEFI only per IPv6: i client BIOS legacy non faranno mai PXE v6; prevedi coesistenza con IPv4 se devi supportarli.
  • Automazione: salva le cmdlet PowerShell in uno script di baseline per riprodurre la configurazione tra ambienti.
  • Secure Boot + HTTPS: quando passi in produzione, valuta l’uso di HTTPS e firme dei binari per proteggere la supply chain di boot.

Risoluzione dei problemi: checklist

  1. Il client non riceve l’URL (Opt 59):
    • Conferma che l’ambito giusto (prefisso) abbia l’opzione 59 configurata.
    • Se usi relay, verifica l’indirizzo del server DHCPv6 di destinazione.
    • Controlla con Wireshark se l’opzione 59 è nel pacchetto Reply.
  2. Errore “file not found”:
    • Controlla il percorso e l’URL scheme (TFTP vs HTTP).
    • Se HTTP, verifica i permessi su IIS e la mime-type per .wim (IIS gestisce .wim nativamente nelle versioni recenti; in caso contrario aggiungi un mapping).
  3. Timeout TFTP:
    • Firewall/ACL che bloccano le porte effimere UDP.
    • MTU o jumbo frame non coerenti su alcuni uplink.
    • Prova HTTP boot per escludere problemi legati a TFTP.
  4. WDS non risponde ai client:
    • Verifica che risponda a “Tutti i computer” o autorizza il MAC/UEFI guid.
    • Controlla che DHCP Option 60 in WDS sia disabilitata (non si applica a IPv6).
  5. UEFI non mostra PXE IPv6:
    • Aggiorna BIOS/UEFI e abilita la Network Stack.
    • Su alcuni modelli l’HTTP Boot è voce separata: abilitala esplicitamente.

Automazione completa di esempio (PowerShell)

Uno script minimo per impostare opzioni e testare la raggiungibilità:

$prefix    = "2001:db8:100::/64"
$bootHttp  = "http://[2001:db8::1]/boot/wds/boot.wim"
$bootParam = "imgargs=quiet splash"

Definizioni (idempotenti)

if (-not (Get-DhcpServerv6OptionDefinition -OptionId 59 -ErrorAction SilentlyContinue)) {
Add-DhcpServerv6OptionDefinition -OptionId 59 -Name "BootFileUrl" -Type String
}
if (-not (Get-DhcpServerv6OptionDefinition -OptionId 60 -ErrorAction SilentlyContinue)) {
Add-DhcpServerv6OptionDefinition -OptionId 60 -Name "BootFileParams" -Type String
}

Valori d'ambito

Set-DhcpServerv6OptionValue -Prefix $prefix -OptionId 59 -Value $bootHttp
Set-DhcpServerv6OptionValue -Prefix $prefix -OptionId 60 -Value $bootParam

Test web se usi HTTP

Invoke-WebRequest -Uri $bootHttp -Method Head -UseBasicParsing | Select-Object StatusCode, Headers 

Coesistenza IPv4/IPv6 e migrazione

Puoi mantenere il boot PXE IPv4 per i client legacy e abilitare in parallelo il boot IPv6 per i sistemi UEFI recenti. Una strategia tipica:

  • IPv4: continua a usare WDS con ProxyDHCP o con le opzioni 60/66/67 dove necessario.
  • IPv6: usa Opzione 59 con HTTP/HTTPS o TFTP. Progressivamente sposta i client moderni su HTTP Boot e lascia il TFTP ai casi limite.
  • Uniforma i contenuti (WinPE, WIM, script) così da avere una pipeline comune indipendente dal protocollo di trasporto.

Sicurezza: HTTPS, Secure Boot e integrità

  • Seleziona HTTPS boot quando possibile: protegge contro man-in-the-middle durante il download del loader/WIM.
  • Firma i binari personalizzati e mantieni aggiornati i certificati. Importa in UEFI le CA necessarie secondo le policy della tua organizzazione.
  • Limita l’accesso alla share RemoteInstall e ai virtual directory IIS che servono i file di boot.

Cosa cambia rispetto a IPv4

  • Niente opzioni 66/67 in v6: al loro posto Opzione 59 (URL) e, se serve, 60.
  • Nessun broadcast, ma multicast e link-local: verifica MLD/relay.
  • UEFI obbligatorio: i client legacy BIOS avviano solo via IPv4.

Risultato ottenuto

Dopo aver aggiunto e popolato l’Opzione 59 nell’ambito DHCPv6, il server ha iniziato a fornire correttamente i file di avvio su IPv6: i client UEFI ricevono l’URL, scaricano il loader via HTTP/TFTP e avviano WinPE o l’immagine prevista. Il PXE boot ora funziona in entrambi i protocolli (IPv4/IPv6), come confermato dal richiedente.

Approfondimenti utili

  • RFC 5970 definisce le opzioni DHCPv6 per il network boot: 59 (URL), 60 (parametri), 61 (architettura), 62 (NII), 63 (machine identifier).
  • L’avvio via HTTP (supportato da WDS in modalità Transport Server o da iPXE) è sensibilmente più rapido del classico TFTP; basta indicare l’URL HTTP nell’opzione 59.
  • In ambienti multi‑subnet conviene configurare un DHCPv6 relay anziché il solo IP‑Helper usato in IPv4.

Checklist finale

  • Ambito IPv6 creato e attivo.
  • Opzione 59 configurata con un URL tftp://, http:// o https:// corretto (con [IPv6]).
  • Opzione 60 impostata (se servono parametri addizionali).
  • WDS in ascolto su IPv6, regole firewall attive.
  • Relay DHCPv6 configurato tra le VLAN, se necessario.
  • Client UEFI aggiornati con Network Stack IPv6 abilitata.

In sintesi: abilitando Opzione 59 in DHCPv6 e ottimizzando WDS/rete, Windows Server 2022 offre una infrastruttura di boot unificata IPv4/IPv6 affidabile e veloce, ideale per il provisioning automatizzato di PC e server moderni con firmware UEFI.

Di seguito alcune risorse operative pronte da copiare nei tuoi ambienti.

Snippet riutilizzabili

Impostazione rapida via PowerShell

$prefix = "2001:db8:100::/64"
$boot  = "http://[2001:db8::1]/boot/menu.ipxe"
if (-not (Get-DhcpServerv6OptionDefinition -OptionId 59 -ErrorAction SilentlyContinue)) {
  Add-DhcpServerv6OptionDefinition -OptionId 59 -Name "BootFileUrl" -Type String
}
Set-DhcpServerv6OptionValue -Prefix $prefix -OptionId 59 -Value $boot

Menu iPXE minimale

#!ipxe
:menu
menu Seleziona ambiente di installazione
item winpe  Windows PE (Installazione)
item diag   Diagnostica hardware
choose target || goto menu

goto ${target}

:winpe
set base http://[2001:db8::1]/boot
kernel ${base}/wimboot
initrd ${base}/boot/bcd               BCD
initrd ${base}/boot/boot.sdi          boot.sdi
initrd ${base}/sources/boot.wim       boot.wim
boot

:diag
chain http://[2001:db8::1]/diag/ipxe/diag.ipxe 

Note di hardening

  • Se usi HTTPS, abilita TLS 1.2/1.3 e disabilita cipher deboli.
  • Proteggi i repository di immagini (WIM/EFI) con ACL e least privilege.
  • Monitora i log WDS/DHCPv6 con alert su errori ricorrenti e tempi di download anomali.

Questa guida fornisce istruzioni concrete, testate sul campo, per far funzionare l’avvio PXE su IPv6 in Windows Server 2022. Applicando i passaggi descritti, potrai accelerare il deployment, ridurre i tempi di rete e prepararti a un futuro full‑IPv6.

Indice