64 lines
2.0 KiB
PowerShell
64 lines
2.0 KiB
PowerShell
#Requires -RunAsAdministrator
|
|
|
|
param(
|
|
[Parameter(Mandatory=$true)]
|
|
[string]$DnsServer,
|
|
|
|
[Parameter(Mandatory=$false)]
|
|
[string]$InterfaceAlias
|
|
)
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
|
|
# Verify running as Administrator
|
|
$identity = [Security.Principal.WindowsIdentity]::GetCurrent()
|
|
$principal = [Security.Principal.WindowsPrincipal]$identity
|
|
if (-not $principal.IsInRole([Security.Principal.WindowsBuiltInRole]::Administrator)) {
|
|
Write-Error "This script must be run as a machine Administrator."
|
|
exit 1
|
|
}
|
|
|
|
# Verify Nebula service is running
|
|
$nebulaSvc = Get-Service -Name "nebula" -ErrorAction SilentlyContinue
|
|
if (-not $nebulaSvc -or $nebulaSvc.Status -ne "Running") {
|
|
Write-Error "Nebula service is not running. Run install-nebula.ps1 first."
|
|
exit 1
|
|
}
|
|
|
|
# Validate DNS server is a valid IP
|
|
if (-not ($DnsServer -as [System.Net.IPAddress])) {
|
|
Write-Error "Invalid DNS server address: $DnsServer"
|
|
exit 1
|
|
}
|
|
|
|
# Default to the Nebula tunnel adapter — physical adapters should keep their local DNS
|
|
if ($InterfaceAlias) {
|
|
$adapters = Get-NetAdapter -Name $InterfaceAlias -ErrorAction SilentlyContinue
|
|
if (-not $adapters) {
|
|
Write-Error "Network adapter '$InterfaceAlias' not found."
|
|
exit 1
|
|
}
|
|
} else {
|
|
$adapters = Get-NetAdapter -Name "nebula1" -ErrorAction SilentlyContinue
|
|
if (-not $adapters) {
|
|
Write-Error "Nebula adapter 'nebula1' not found. Is the Nebula service running?"
|
|
exit 1
|
|
}
|
|
}
|
|
|
|
foreach ($adapter in $adapters) {
|
|
Write-Host "Setting DNS to $DnsServer on '$($adapter.Name)'..."
|
|
Set-DnsClientServerAddress -InterfaceIndex $adapter.ifIndex -ServerAddresses $DnsServer
|
|
}
|
|
|
|
# Verify
|
|
foreach ($adapter in $adapters) {
|
|
$dns = Get-DnsClientServerAddress -InterfaceIndex $adapter.ifIndex -AddressFamily IPv4
|
|
if ($dns.ServerAddresses -contains $DnsServer) {
|
|
Write-Host "Verified: '$($adapter.Name)' DNS is now $DnsServer"
|
|
} else {
|
|
Write-Error "Failed to verify DNS on '$($adapter.Name)'"
|
|
exit 1
|
|
}
|
|
}
|