一、NPS高可用架构设计
1. 方案选择
- NPS独立服务器+共享配置(推荐)
- Windows故障转移集群
- 负载均衡器+NPS阵列
二、NPS主从同步实现步骤
1. 配置NPS主服务器
# 安装NPS角色
Install-WindowsFeature NPAS -IncludeManagementTools
# 配置RADIUS客户端和策略
# 在NPS控制台中完成基础配置
2. 导出NPS配置
# 方法1:使用netsh导出配置
netsh nps export filename="C:\NPSconfig.xml" exportPSK=YES
# 方法2:使用PowerShell导出
Export-NpsConfiguration -Path "C:\NPSconfig.xml"
3. 配置从服务器
# 在从服务器安装NPS角色
Install-WindowsFeature NPAS -IncludeManagementTools
# 导入主服务器配置
netsh nps import filename="\\主服务器\共享路径\NPSconfig.xml"
# 或使用PowerShell
Import-NpsConfiguration -Path "\\主服务器\共享路径\NPSconfig.xml"
4. 自动同步方案
创建同步脚本(Sync-NPS.ps1):
# 主服务器上创建导出任务
$ExportPath = "\\文件服务器\NPSShare\NPSconfig.xml"
$ExportPassword = "加密的共享密钥"
# 导出配置
netsh nps export filename=$ExportPath exportPSK=YES
# 设置ACL权限
icacls $ExportPath /grant "NPS从服务器计算机账户:RX"
# 从服务器创建同步脚本
$ConfigPath = "\\文件服务器\NPSShare\NPSconfig.xml"
$LocalConfig = "C:\Temp\NPSconfig.xml"
# 下载最新配置
Copy-Item $ConfigPath $LocalConfig -Force
# 导入配置
netsh nps import filename=$LocalConfig
配置计划任务:
# 主服务器定时导出
$Trigger = New-ScheduledTaskTrigger -Daily -At "00:30"
Register-ScheduledTask -TaskName "NPS配置导出" `
-Trigger $Trigger `
-Action (New-ScheduledTaskAction -Execute "PowerShell.exe" `
-Argument "-File C:\Scripts\Export-NPS.ps1") `
-Principal (New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount)
# 从服务器定时导入
$Trigger = New-ScheduledTaskTrigger -Daily -At "01:00"
Register-ScheduledTask -TaskName "NPS配置同步" `
-Trigger $Trigger `
-Action (New-ScheduledTaskAction -Execute "PowerShell.exe" `
-Argument "-File C:\Scripts\Sync-NPS.ps1") `
-Principal (New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount)
三、使用Windows故障转移集群
1. 创建故障转移集群
# 安装故障转移集群功能
Install-WindowsFeature Failover-Clustering -IncludeManagementTools
# 验证集群配置
Test-Cluster -Node "NPS1","NPS2"
# 创建集群
New-Cluster -Name "NPSCluster" -Node "NPS1","NPS2" -StaticAddress "192.168.1.100"
2. 配置NPS集群角色
# 创建通用服务角色
Add-ClusterGenericServiceRole -ServiceName "IAS" `
-Name "NPSService" `
-StaticAddress "192.168.1.101"
四、负载均衡配置
1. DNS轮询
# 创建DNS A记录
Add-DnsServerResourceRecordA -Name "nps" `
-ZoneName "domain.local" `
-AllowUpdateAny `
-IPv4Address "192.168.1.10","192.168.1.11"
2. 使用Windows负载均衡(NLB)
# 安装NLB功能
Install-WindowsFeature NLB
# 创建NLB集群
New-NlbCluster -InterfaceName "Ethernet" `
-ClusterName "NPSCluster" `
-ClusterPrimaryIP "192.168.1.100" `
-OperationMode Multicast
五、数据库配置同步
1. 使用SQL Server存储策略
# 配置NPS使用SQL数据库
# 1. 安装SQL Server Native Client
# 2. 配置ODBC数据源
# 3. 使用以下命令配置NPS
netsh nps set databaseconfigurationsettings `
datasourcename="NPSDB" `
initialcatalog="NPS" `
username="NPSUser" `
password="YourPassword"
六、监控和维护
1. 健康检查脚本
# 检查NPS服务状态
$NPSPrimary = "NPS-Primary"
$NPSSecondary = "NPS-Secondary"
function Test-NPSHealth {
param($Server)
$Service = Get-Service -ComputerName $Server -Name "IAS"
$RemoteReg = Test-NetConnection -ComputerName $Server -Port 1812
return @{
ServiceStatus = $Service.Status
RADIUSPort = $RemoteReg.TcpTestSucceeded
LastSync = (Get-Item "\\$Server\c$\NPSlog.txt").LastWriteTime
}
}
# 定期执行检查
Test-NPSHealth -Server $NPSPrimary
Test-NPSHealth -Server $NPSSecondary
2. 配置审计日志
# 启用NPS审计
auditpol /set /subcategory:"Network Policy Server" /success:enable /failure:enable
# 配置事件转发
wecutil qc /q
七、安全注意事项
共享密钥管理
- 使用Azure Key Vault或Windows凭据管理器
- 定期轮换RADIUS共享密钥
网络隔离
- NPS服务器置于安全网络区域
- 仅开放必要的端口(1812, 1813)
备份策略
# 定期备份NPS配置
$BackupPath = "\\备份服务器\NPSBackup\"
$Date = Get-Date -Format "yyyyMMdd"
netsh nps export filename="$BackupPath\NPSconfig_$Date.xml" exportPSK=YES
八、故障切换流程
手动切换
# 停止主NPS服务
Stop-Service IAS -ComputerName NPS-Primary
# 更新DNS记录
Set-DnsServerResourceRecord -ZoneName "domain.local" `
-Name "nps" `
-NewRecord (New-DnsServerResourceRecordA `
-Name "nps" `
-IPv4Address "192.168.1.11")
自动检测
这个方案提供了完整的NPS高可用和同步实现,可根据实际环境调整具体配置参数。