总览
在本篇文章中, 我将记录部署多 DC + 多 ADFS 实现高可用方案的详细步骤, 期间我会尽量使用 PowerShell 来实现相应的动作, 实在找不到命令或者 GUI 更方便的再附截图. 主要步骤分为:
- 部署 2 台 DC 服务器提供 AD 服务 (AD域名 alian.com)
- 安装 ADCS 角色为 ADFS 提供证书服务
- 部署 2 台 ADFS 提供联合身份认证服务 (ADFS场域名: adfs.alian.com)
网络规划
在 VMware Workstation 中先创建一个新的 Virtual Network, 类型为 Host-only 模拟私有内网环境, 为了方便 IP 地址输入, 我们将子网设置为 10.1.1.0, 掩码 255.255.255.0
启动 4 台 Windows Server 2019 虚拟机, 网卡均使用 VMnet2, 规划 IP 地址:
Hostname | IP | FQDN |
---|---|---|
DC1 | 10.1.1.11 | dc1.alian.com |
DC2 | 10.1.1.12 | dc2.alian.com |
ADFS1 | 10.1.1.21 | adfs1.alian.com |
ADFS2 | 10.1.1.22 | adfs2.alian.com |
这里启动多台虚拟机的过程可以先装第一台 Windows Server 2019, 安装完成后运行
sysprep
进行通用化处理关机后创建 Snapshot, 随后使用 Snapshot 再启动 3 台虚机加快速度.
部署 DC1
- 以本地管理员
administrator
登录系统, 首先修改主机名
> Rename-Computer -NewName "DC1"
# 重启
> Restart-Computer
# 检查主机名
> $env:computername
- 配置静态 IP 地址
> Get-NetAdapter
Name InterfaceDescription ifIndex Status MacAddress LinkSpeed
---- -------------------- ------- ------ ---------- ---------
Ethernet0 Intel(R) 82574L Gigabit Network Conn... 5 Up 00-0C-29-4E-15-12 1 Gbps
> New-NetIPAddress -InterfaceIndex 5 -IPAddress 10.1.1.11 -PrefixLength 24 -DefaultGateway 10.1.1.1
- 添加 AD 角色
> Install-WindowsFeature AD-Domain-Services -IncludeManagementTools
Success Restart Needed Exit Code Feature Result
------- -------------- --------- --------------
True No Success {Active Directory 域服务, 远程服务器管理工...
- 创建新的林和名为
alian.com
的域
> Install-ADDSForest -DomainName alian.com -InstallDNS
SafeModeAdministratorPassword: ************
确认 SafeModeAdministratorPassword: ************
安装完成后系统会自动重启, 重启后第一次进入系统由于需要初始化相关设置, 时间会略长, 大概 5 分钟左右, 进入系统后可以在服务器管理器中看到多出了AD DS
和 DNS
角色
部署 DC2
- 和部署 DC1 前面步骤一样, 先改主机名, 固定 IP
> Rename-Computer -NewName "DC2"
> New-NetIPAddress -InterfaceIndex 5 -IPAddress 10.1.1.12 -PrefixLength 24 -DefaultGateway 10.1.1.1
# 这里需要额外设置本地连接的 DNS 服务器指向 DC1
> Set-DnsClientServerAddress -InterfaceIndex 5 -ServerAddresses 10.1.1.11
> Restart-Computer
- 加入 DC1 的域
> Add-Computer -DomainName alian.com -Credential (Get-Credential "alian.com\administrator") -Restart
# 输入 AD 用户 administrator 密码, 加入成功后自动重启
重启后登录时使用 AD 用户 administrator@alian.com
这时我们也可以在 DC1 中运行 dsa.msc
打开 Active Directory 用户和计算, 在 Computers 中查看到 DC2:
- 添加 AD 角色, 提升为 DC
> Install-WindowsFeature AD-Domain-Services -IncludeManagementTools
> Install-ADDSDomainController -Credential (Get-Credntial "alian.com\administrator") -DomainName alian.com -InstallDns
SafeModeAdministratorPassword: ************
确认 SafeModeAdministratorPassword: ************
完成后系统自动重启, 再次检查 DC1 中的 AD 用户和计算机, 可以看到 DC2 已经从 Computers 移动到了 Domain Controllers 中:
添加 ADCS 角色
由于后面的 ADFS 需要使用 SSL 证书, 我们可以在现有的 DC1 上面添加 ADCS 角色进行自签名的证书颁发
# 添加"证书颁发机构"
> Install-WindowsFeature -Name ADCS-Cert-Authority -IncludeManagementTools
# 指定 CA 设置类型为 "企业 CA"
> Install-AdcsCertificationAuthority `
-CAType EnterpriseRootCa `
-CryptoProviderName "RSA#Microsoft Software Key Storage Provider" `
-KeyLength 2048 `
-HashAlgorithmName SHA1 `
-ValidityPeriod Years `
-ValidityPeriodUnits 10 `
-CACommonName "alian.com Root CA" `
-CADistinguishedNameSuffix "DC=alian,DC=com" `
-Force
上面的命令等同于使用服务器管理器中的 AD CS 配置向导图形界面:
# 添加"证书颁发机构 Web 注册", 期间会自动添加 IIS 依赖功能, 无需额外添加
> Install-WindowsFeature -Name ADCS-Web-Enrollment -IncludeManagementTools
# 初始化配置
> Install-AdcsWebEnrollment -Force
这一步初始化完成后, 即可打开 IE 浏览器访问 http://alian.com/certsrv/
使用 IIS 提供的证书服务 Web 界面
配置证书模板
运行 certsrv
打开证书颁发机构管理工具, 右键点击证书模板
-管理
-
右键点击
Kerberos 身份验证
- 复制模板 -
请求处理: 允许导出私钥
-
使用者名称: 在请求中提供
-
扩展: 应用程序策略 - 只保留
服务器身份认证
-
常规: 模板显示名称
ADFS模板
-
确定保存后关闭"证书模板控制台" 返回
certsrv
控制台 -
右键点击 证书模板 - 新建 - 要颁发的证书模板, 选择
ADFS模板
确定, 完成证书模板添加操作
颁发证书
规划中的两台 ADFS 服务器 FQDN 分别为 adfs1.alian.com 和 adfs2.alian.com, 我们后面会使用负载均衡将他们两个做成高可用, 对外提供访问的域名将会是 adfs.alian.com, 所以我们颁发证书时要制定的对象也应该是 adfs.alian.com
- 运行
certlm.msc
打开本地计算机证书管理工具 - 右键点击 个人 - 所有任务 - 申请新证书
- 选择
ADFS模板
, 展开详细信息 - 属性
- 常规: 友好名称
adfs.alian.com
- 使用者(Subject): 使用者名称: 类型: 公用名:
adfs.alian.com
- 添加 - 备用名称(Alternative name): 类型: DNS:
adfs.alian.com
- 添加
- 确定- 关闭属性窗口 - 注册 - 完成
- 右键点击
adfs.alian.com
证书 - 所有任务 - 导出 - 向导中选择"是, 导出私钥" - 设置密码 - 选择导出文件保存到桌面
adfs.pfx
, 该文件将用于后面的 ADFS 设置
部署 ADFS1
- 和上面一样, 也是先将当前主机加入到域中
> Rename-Computer -NewName "ADFS1"
> New-NetIPAddress -InterfaceIndex 5 -IPAddress 10.1.1.21 -PrefixLength 24 -DefaultGateway 10.1.1.1
# 设置本地连接的 DNS 主次服务器指向 DC1 和 DC2
> Set-DnsClientServerAddress -InterfaceIndex 5 -ServerAddresses 10.1.1.11, 10.1.1.12
> Restart-Computer
> Add-Computer -DomainName alian.com -Credential (Get-Credential "alian.com\administrator") -Restart
# 输入 AD 用户 administrator 密码, 加入成功后自动重启
- 重启后以
administrator@alian.com
域账号登录系统, 安装 ADFS, IIS 角色
> Install-WindowsFeature -Name ADFS-Federation -IncludeManagementTools
> Install-WindowsFeature -Name Web-Server -IncludeManagementTools
- 打开服务器管理器, 点击通知中的"在此服务器上配置联合身份验证服务"
- 选择"在联合服务器场中创建第一个联合服务器"
- SSL 证书导入上一步在 DC1 中通过 ADCS 颁发的
adfs.pfx
证书文件, 显示名称随便写一个Alian Coporation
- 指定服务账户 - 选择 AD 用户
administrator
, 输入密码
- 数据库使用 Windows 内部数据库(WIB), 下一步完成配置
- 手动重启一下系统
配置 IIS Https
- 运行
inetmgr
打开 IIS 管理器 - 依次展开 ADFS1 - 网站 - Default Web Site
- 点击右侧编辑网站下方的
绑定
- 添加 - 类型选择
https
, SSL 证书选择adfs.alian.com
- 打开 IE 浏览器, 访问
https://localhost/adfs/ls
由于我们签发的证书的颁发对象是adfs.alian.com
, 所以这里访问 localhost 出现证书错误属于正常现象. 不过由于目前两台 DC 中的 DNS 都还不知道域名adfs.alian.com
对应地址, 所以接下来手动先在 DC 的 DNS 中添加 A 类型解析记录
手动添加 DNS 解析记录
- 返回 DC1 服务器, 运行
dnsmgmt.msc
打开 DNS 管理器 - 依次展开 DC1 - 正向查询区域 - alian.com
- 右键点击
alian.com
- 新建主机(A 或 AAAA) - 名称: adfs, IP 地址: 10.1.1.21, 添加主机
再次返回 ADFS1 服务器中, IE 访问https://adfs.alian.com/adfs/ls
证书不再报错
部署 ADFS2
- 与部署 ADFS1 前面的步骤相同
> Rename-Computer -NewName "ADFS2"
> New-NetIPAddress -InterfaceIndex 5 -IPAddress 10.1.1.22 -PrefixLength 24 -DefaultGateway 10.1.1.1
# 设置本地连接的 DNS 主次服务器指向 DC1 和 DC2
> Set-DnsClientServerAddress -InterfaceIndex 5 -ServerAddresses 10.1.1.11, 10.1.1.12
> Restart-Computer
> Add-Computer -DomainName alian.com -Credential (Get-Credential "alian.com\administrator") -Restart
# 输入 AD 用户 administrator 密码, 加入成功后自动重启
- 重启后以
administrator@alian.com
域账号登录系统, 安装 ADFS, IIS 角色
> Install-WindowsFeature -Name ADFS-Federation -IncludeManagementTools
> Install-WindowsFeature -Name Web-Server -IncludeManagementTools
- 复制之前颁发过的
adfs.pfx
到桌面 - 打开服务器管理器, 点击通知中的提示, 配置联合身份验证服务
- 注意选择
将联合服务器添加到联合服务器场中
- 主联合服务器: adfs.alian.com
- SSL 证书, 导入桌面上的
adfs.pfx
- 服务账户仍然使用 AD 中的管理员账号 administrator, 输入密码后一路下一步完成配置
- 重启系统
状态检查
- 在 ADFS2 上使用命令检查 ADFS 服务的同步情况
> Get-AdfsSyncProperties
LastSyncFromPrimaryComputerName : adfs.alian.com
LastSyncStatus : 0
LastSyncTime : 2023/3/26 5:05:55
PollDuration : 300
PrimaryComputerName : adfs.alian.com
PrimaryComputerPort : 80
Role : SecondaryComputer
- 在 ADFS1 上检查
> Get-AdfsSyncProperties
Role
----
PrimaryComputer
> Get-AdfsFarmInformation
CurrentFarmBehavior FarmNodes FarmRoles
------------------- --------- ---------
4 {ADFS2.alian.com, ADFS1.alian.com} {UserState}
附1: 常用 GUI 管理工具打开命令
命令 | 对应工具 |
---|---|
dsa.msc | Active Directory 用户和计算机 |
dnsmgmt.msc | DNS 管理器 |
inetmgr | IIS 管理器 |
certtmpl.msc | 证书模板控制台 |
certsrv.msc | 证书颁发机构管理工具 |
certlm.msc | 证书 - 本地计算机 |
附2: 缩写解释
缩写 | 全拼 | 解释 |
---|---|---|
AD | Active Directory | 活动目录 |
DC | Domain Contronller | 域控制器 |
ADCS | Active Directory Certificate Services | 活动目录证书服务 |
CA | Certificate Authority | 证书授权 |
ADFS | Active Directory Federation Services | 活动目录联合身份认证服务 |