AD 实现多 DC + 多 ADFS 高可用部署

news2024/11/25 4:34:46

总览

在本篇文章中, 我将记录部署多 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 地址:

HostnameIPFQDN
DC110.1.1.11dc1.alian.com
DC210.1.1.12dc2.alian.com
ADFS110.1.1.21adfs1.alian.com
ADFS210.1.1.22adfs2.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 DSDNS 角色
在这里插入图片描述

部署 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.mscActive Directory 用户和计算机
dnsmgmt.mscDNS 管理器
inetmgrIIS 管理器
certtmpl.msc证书模板控制台
certsrv.msc证书颁发机构管理工具
certlm.msc证书 - 本地计算机

附2: 缩写解释

缩写全拼解释
ADActive Directory活动目录
DCDomain Contronller域控制器
ADCSActive Directory Certificate Services活动目录证书服务
CACertificate Authority证书授权
ADFSActive Directory Federation Services活动目录联合身份认证服务

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/534784.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NodeJs模块化之下半部分

Node.js 中的模块化 更多精彩内容,请微信搜索“前端爱好者“, 戳我 查看 。 官网地址:https://nodejs.cn/api/ fs 文件系统 地址:https://nodejs.cn/api/fs.html#%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F node:fs 模块能够以标准…

GPT-3 面试题

简介 1、GPT-3 是什么?它是基于什么模型的? GPT-3是一种基于深度学习原理的语言预测模型。它是由OpenAI开发的,可以从互联网数据中生成任何类型的文本。它只需要一小段文本作为输入,就可以生成大量的准确和复杂的机器生成文本⁴…

Akura Medica:新型静脉血栓切除系统,完成首次人体试验

Akura Medical公司宣布,其机械血栓切除平台在人体首次使用成功,这是一项具有突破性的技术,可以有效地治疗肺栓塞、深静脉血栓等血栓栓塞疾病。该平台使用了一种与众不同的方法,可以高效地清除血管内的血栓,同时保护血管…

测试分词工具Lucene.Net.Analysis.PanGu(盘古分词)

从微信公众号及百度文章来看,全文检索的前置工作是分词,首先将要做全文检索的内容分词,然后采用全文检索模块或工具进行全文检索。参考文献4介绍了基于Lucene.net实现全文检索的大致思路,其采用的是Lucene.net盘古分词的方式实现。…

蓝桥:前端开发笔面必刷题——Day1 数组(一)

文章目录 📋前言🎯数组中重复的数字📚题目内容✅解答 🎯两数之和📚题目内容✅解答 🎯替换空格📚题目内容✅解答 🎯二维数组中的查找📚题目内容✅解答 📝最后 …

C语言-程序环境与预处理

程序环境与预处理 程序环境翻译环境(编译链接)预编译编译汇编链接 执行环境 预处理预定义符#define定义的标识符 宏#define定义宏#define替换规则宏的命名约定带副作用的宏参数宏和函数的比较 其它#和##的使用字符串常量化运算符#标记粘贴运算符## 命令行…

fastled教程

文章目录 EVERY_N_MILLISECONDS(10)EVERY_N_SECONDS(5)fill_solid(leds, NUM_LEDS, CRGB::Red);fill_gradient_RGBfill_rainbow(leds, NUM_LEDS, i, 255 / NUM_LEDS);效果1fadeToBlackBy(leds, NUM_LEDS, 1); 效果2FastLED.setBrightness(2*i);// 效果3leds[i] CHSV(hue (i *…

scanf和scanf_s的区别、解决VS返回值被忽略的报错问题

一、scanf和scanf_s是什么? scanf()不会检查输入边界,可能造成数据溢出。 scanf_s()会进行边界检查。 二、分别分析 1.scanf scanf表示从键盘输入指定格式的数据。如:scanf("%d",x);指从键盘给x输入一个int型(整型&…

【计网】【TCP】浅析TCP三次握手

前言 之前学习计网时不认真,TCP三次握手稀里糊涂就过去了,最近在重新查漏补缺计网这方面的知识,饭要一口一口吃,我就没有把其中涉及到的大量知识点写在此博客中,此文仅管中窥豹,之后再详细写吧。 笔记中有…

初步认识性能测试和完成一次完整的性能测试

上一篇博文主要通过两个例子让测试新手了解一下测试思想,和在做测试之前应该了解人几点,那么我们在如何完成一次完整的性能测试呢? 测试报告是一次完整性能测试的体现,所以,这里我给出一个完整的性能测试报告&#xff…

搞懂@DateTimeFormat 注解 和 对应的时间类型

通常而言,前端时间控件,一般情况下直接会传一个yyyy-MM-dd的日期字符串到后台。如果我们直接用java.util.Date类型来接收,是无法获取的。这是因为Date类型默认的格式为:Tue May 16 00:00:00 CST 2023这种。 举例 ApiOperation(val…

Games104现代游戏引擎学习笔记08

渲染那部分看的云里雾里的,等学完其他图形学的内容再回头开吧 游戏动画的三个挑战: 1.根据交互实时的反应各种变化 2.一帧时间里的庞大计算 3.更真实自然的表现 2D动画 sprite animation 把每一帧精灵循环绘制出来 2D技术实现3D效果 在各个视角采了一…

shell脚本——流编辑器“三剑客”之awk命令

shell脚本——流编辑器“三剑客”之awk命令 一、awk1、工作原理2、命令格式3、awk常见的内建变量(可直接用)4、按行输出文本5、按字段输出文本’:’6、通过管道、双引号调用shell命令 一、awk 1、工作原理 逐行读取文本,默认以空格或TAB键为…

射频放大器的原理和作用(射频放大器和功率放大器的区别)

射频放大器是一种电子电路,用于将输入信号增强到足够高的电平以驱动射频输出负载。其原理和作用如下: 射频放大器的工作原理是利用晶体管的三极管效应,将输入信号放大到足够的电平以驱动输出负载。在射频放大器中,输入信号经过输入…

深入理解 python 虚拟机:破解核心魔法——反序列化 pyc 文件

深入理解 python 虚拟机:破解核心魔法——反序列化 pyc 文件 在前面的文章当中我们详细的对于 pyc 文件的结构进行了分析,pyc 文件主要有下面的四个部分组成:魔术、 Bite Filed 、修改日期和 Code Object 组成。在前面的文章当中我们已经对前…

Android NDK: 使用Python生成下载地址

文章目录 1. 目的2. NDK下载链接3. 生成链接的 Python 脚本4. Bonus: 生成表格的 Python 脚本 1. 目的 Android NDK 的 github wiki 中给出了部分历史版本 NDK 的下载地址,有些版本的下载地址并没有在网页中给出。实际上这些下载地址很有规律。本文给出具体的链接&…

无人水面艇声呐装备现状与发展趋势(水声功率放大器)

无人水面艇声呐装备是目前海洋探测和水下情报收集的重要工具,其发展趋势受到了国防、军事、海洋资源勘探等领域的广泛关注。本文将介绍当前无人水面艇声呐装备的现状以及未来的发展趋势。 一、现状 无人水面艇声呐装备主要应用于水下物体的探测和测量,其…

NDK OpenGL仿抖音极快极慢录制特效视频

NDK​系列之OpenGL仿抖音极快极慢录制特效视频,本节主要是在上一节OpenGL代码架构上增加极快极慢等特效的视频录制功能。 实现效果: 实现逻辑: 在上一节的特效效果的基础上,使用MediaCodec和自定义EGL,将效果视频录制…

CountDownLatch与Binder连接池

CountDownLatch与Binder连接池 CountDownLatch 如果现在有一个题,有5个数,这时候我想让这5个数同时都乘2,然后算出结果后再算它们的平均数 这时候就可以用CountDownLatch import java.util.concurrent.CountDownLatch; public class Example {public static void main(Stri…

总结853

学习目标: 月目标:5月(张宇强化前10讲,背诵15篇短文,熟词僻义300词基础词) 周目标:张宇强化前3讲并完成相应的习题并记录,英语背3篇文章并回诵 每日必复习(5分钟&#…