Active Directory(简称AD)是企业基础架构的基石,做好其灾备是非常重要的。Active Directory 灾难恢复 (DR) 计划应涵盖执行完整 AD林恢复所需的所有内容。AD的备份有多种方式,例如,使用 Windows Server Backup 可以实现完整的服务器备份与恢复;也可以使用建立多台额外域控,转移或者夺取FSMO角色的方式快速恢复服务。在建立备份的同时,我们甚至还需要考虑异地灾备,可以在异地IDC或者云中(如Azure)建立灾备中心。本序列文章将介绍如何将本地AD,通过在Azure中部署额外域控,实现本地AD的异地灾备。本文所介绍的环境简要拓扑图如下:


在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_Server

其中AD环境有根域和子域构成,根域和子域在本地均有有多台域控。计划在本地站点和Azure站点中通过lPsec lKEv2 S2S Tunnel建立连接,打通Azure和本地站点内网通信。本文将介绍如何先打通Azure 虚拟网络和本地网络。

一、创建虚拟网络

使用虚拟网络作为跨界体系结构的一部分时,请务必与本地网络管理员进行协调,以划分一个 IP 地址范围专供此虚拟网络使用。 如果 VPN 连接的两端存在重复的地址范围,则会以意外方式路由流量。 此外,若要将此虚拟网络连接到另一个虚拟网络,地址空间不能与另一虚拟网络重叠。 相应地规划网络配置。接下来,我们先进行虚拟网络的创建。

1.登录Azure 门户

2.在所有服务中,点击网络--虚拟网络

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_Azure_02

3. 在“虚拟网络”页面上,选择“创建”以打开“创建虚拟网络”页面。

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_Azure_03

4.在“基本信息”选项卡上的“项目详细信息”和“实例详细信息”中配置虚拟网络设置。 验证输入的值时,将看到一个绿色对勾。 你可以根据自己需要的设置调整示例中显示的值。

·

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_Server_04

       订阅确认列出的订阅是正确的。 你可以使用下拉框来更改订阅。

·       资源组:选择一个现有资源组,或选择“新建”以创建一个新资源组。

·       名称:输入虚拟网络的名称。

·       区域:选择你的虚拟网络的位置。 该位置决定了部署到此虚拟网络的资源将位于哪里。

5.选择“下一步”或“安全性”,转到“安全性”选项卡。我这是Demo环境,保留此页上所有服务的默认值,生产环境根据实际需要进行设置。

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_Azure_05

6.选择“IP 地址”以转到“IP 地址”选项卡。在“IP 地址”选项卡上配置设置。

·       IPv4 地址空间:默认情况下,系统会自动创建一个地址空间。 可以选择该地址空间,将其调整为你所需要的值。 还可以添加其他地址空间并移除自动创建的默认值。 例如,可以将起始地址指定为“10.1.0.0”,将地址空间大小指定为“/16”。 然后选择“添加”以添加该地址空间。

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_Azure_06

因系统自动创建的子网,已经被我其他资源使用了,这会造成无法对缔造者空间重叠的虚拟网络对等互联,因此最后删除并重新创建。

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_服务器备份_07

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_服务器备份_08

点击   + 添加子网:如果你使用默认地址空间,则系统会自动创建一个默认子网。 如果更改地址空间,请在该地址空间中添加一个新子网。 选择“+添加子网”,打开“添加子网”窗口 。 配置以下设置,然后选择页面底部的“添加”以添加这些值。

o   子网名称:例如“FrontEnd”。

o   子网地址范围:此子网的地址范围。 我设置为“10.10.0.0”和“/16”。

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_Server_09

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_服务器备份_10

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_Azure_11

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_Server_12

7.点击“审阅 + 创建”,验证虚拟网络设置,验证设置后,选择“创建”以创建虚拟网络。

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_服务器备份_13

创建虚拟网络后,可以选择配置 Azure DDoS 防护。 在任何新的或现有的虚拟网络上可以轻松启用 Azure DDoS 防护,且无需对应用程序或资源做出任何更改。

二、创建网关子网

虚拟网络创建之后,需要创建一个名为“GatewaySubnet”的特定子网。网关子网是虚拟网络的 IP 地址范围的一部分,包含虚拟网络网关资源和服务使用的 IP 地址。创建网关子网时,需指定子网包含的 IP 地址数。 所需的 IP 地址数目取决于要创建的 VPN 网关配置。 有些配置需要具有比其他配置更多的 IP 地址。 最好为网关子网指定 /27 或更大的值(/26、/25 等)。如果出现错误,指出地址空间与子网重叠,或者子网不包含在虚拟网络的地址空间中,请检查虚拟网络地址范围。 出错的原因可能是为虚拟网络创建的地址范围中没有足够的可用 IP 地址。 例如,如果默认子网包含整个地址范围,则不会有剩余的 IP 地址用于创建更多子网。 可以调整现有地址空间中的子网以释放 IP 地址,或指定另一个地址范围并在其中创建网关子网。

  1. 在虚拟网络页面的左侧窗格中,选择“子网”以打开“子网”页。
  2. 在页面顶部,选择“+ 网关子网”以打开“添加子网”窗格。

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_Server_14

3.不要调整该页面上的其他值。 选择页面底部的保存以保存子网。

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_Azure_15

收到成功添加子网的消息,子网创建成功。


在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_Server_16

三、创建VPN网关

子网创建完成之后,接着我们为虚拟网络创建虚拟网络网关。 创建网关通常需要 45 分钟或更长的时间,具体取决于所选的网关 SKU。

  1. 在“搜索资源、服务和文档(G+/)”中,输入“虚拟网络网关”。 在市场搜索结果中找到“虚拟网络网关”,选择它以打开“创建虚拟网络网关”页面。

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_Azure_17


2.点击创建虚拟网络网关

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_Azure_18

3.在“基本信息”选项卡上,填写“项目详细信息”和“实例详细信息”的值 。

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_Server_19

 

·       订阅:从下拉列表中选择要使用的订阅。

·       资源组:在此页上选择虚拟网络时,会自动填充此设置。

·       名称:为网关命名。 为网关命名与为网关子网命名不同。 它是要创建的网关对象的名称。

·       区域:选择要在其中创建此资源的区域。 网关的区域必须与虚拟网络相同。

·       网关类型:选择“VPN”。 VPN 网关使用虚拟网络网关类型“VPN” 。

·       SKU:从下拉列表中选择支持你想要使用的功能的网关 SKU。 请参阅网关 SKU。 在门户中,下拉列表中提供的 SKU 取决于你选择的VPN类型 基本 SKU 只能使用 Azure CLI 或 PowerShell 进行配置。 无法在 Azure 门户中配置基本 SKU。

·       代系:选择想要使用的代系。 建议使用第 2 代 SKU。

·       虚拟网络:从下拉列表中选择要将此网关添加到的虚拟网络。 如果看不到要为其创建网关的虚拟网络,请确保在以前的设置中选择了正确的订阅和区域。

·       “网关子网地址范围”或“子网”:创建 VPN 网关时需要网关子网。

此时,此字段具有几种不同的行为,具体取决于虚拟网络地址空间,以及是否已为虚拟网络创建名为 GatewaySubnet 的子网。如果你没有网关子网,并且此页面上也未显示用于创建网关子网的选项,请返回到你的虚拟网络并创建网关子网。 然后,返回到此页面并配置 VPN 网关。

4.指定“公共 IP 地址”的值。 这些设置指定与 VPN 网关关联的公共 IP 地址对象。 创建 VPN 网关后,会将公共 IP 地址分配给此对象。 仅当删除并重新创建网关时,主公共 IP 地址才会发生更改。 该地址不会因为 VPN 网关大小调整、重置或其他内部维护/升级而更改。

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_Server_20

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_Server_21

5.点击“查看 + 创建” ,运行验证。

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_Azure_22

6.验证通过后,选择“创建”以部署 VPN 网关。

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_Azure_23

7.查看公共 IP 地址

网关创建完成之后,可以在网关的“概述”页面查看网关的公共 IP 地址,在后续配置VPN设备时需要用到。

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_Azure_24

四、创建本地网络网关

本地网络网关是代表用于路由的本地位置(站点)的特定对象。 可以为站点提供一个名称供 Azure 引用,然后指定本地 VPN 设备的 IP 地址,以便创建一个连接来连接到该设备。 此外还可指定 IP 地址前缀,以便通过 VPN 网关将其路由到 VPN 设备。 指定的地址前缀是位于本地网络的前缀。 如果之后本地网络发生了更改,或需要更改 VPN 设备的公共 IP 地址,可轻松更新这些值。

1.在Azure门户,所有服务中,点击网络,在混合链接中点击本地网络网关

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_Server_25

2.点击创建本地网络网关

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_服务器备份_26

3.在“项目详细信息”和“实例详细信息”中,选择需要使用的订阅,资源组和区域,输入本地网络名称和IP地址,并添加地址空间,然后点击“下一步:高级”

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_Server_27


4.点击“查看+创建”,运行验证

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_Server_28

5.验证通过后,点击创建

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_服务器备份_29

五、创建VPN连接

创建VPN网关之后,在虚拟网关和本地 VPN 设备之间还要创建站点到站点 VPN 连接。

  1. 转到虚拟网络。 在虚拟网络页面的左侧选择“连接的设备”。 找到 VPN 网关,然后选中它以将它打开。

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_Azure_30

  1. 在网关的页面上,点击“添加”以打开创建连接页面。

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_Server_31

3.在“创建连接”页的“基本信息”选项卡上,配置连接的各个值:

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_Server_32

4.选择“设置”选项卡,配置以下值:

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_Server_33

·       虚拟网络网关:从下拉列表中选择虚拟网络网关。

·       本地网络网关:从下拉列表中选择本地网络网关。

·       共享密钥:此处的值必须与用于本地 VPN 设备的值匹配。

·       IKE 协议:选择“IKEv2”。

·       使用 Azure 专用 IP 地址:不选。

·       启用 BGP:不选。

·       FastPath:不选。

·       IPsec/IKE 策略:选择“默认”。

·       使用基于策略的流量选择器:选择“禁用”。

·       DPD 超时(秒):选择“45”。

·       连接模式:选择“默认”。 此设置用于指定哪个网关可以启动连接。

·       “NAT 规则关联”:请将“流入量”和“流出量”保留为“已选 0”。

5.点击“查看+创建”,确认连接设置

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_服务器备份_34

6.点击“创建”以创建连接

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_Azure_35

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_Azure_36


六、配置VPN设备


通过站点到站点连接连接到本地网络需要 VPN 设备。 在此步骤中,请配置 VPN 设备。 配置 VPN 设备时,需要以下值:

·       共享密钥:此共享密钥与创建站点到站点 VPN 连接时指定的密钥相同。 在示例中,我们使用基本的共享密钥。 建议生成更复杂的可用密钥。

·       虚拟网络网关的公共 IP 地址:可以使用 Azure 门户、PowerShell 或 Azure CLI 查看公共 IP 地址。 要使用 Azure 门户查找你的 VPN 网关的公共 IP 地址,请转到“虚拟网络网关”,然后选择你的网关的名称。

1.在VPN连接概述页面中,点击下载配置

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_Server_37

2.根据所用的 VPN 设备,有时可以下载 VPN 设备配置脚本(如果你的设备供应商在下来列表中可以找到,则可以直接下载相应的脚本,如果没有找到你的设备供应商,则下载Generic Samples,然后根据实际情况进行修改)。

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_Azure_38

七、配置Windows Server RRAS(可选)

如果你是做实验、搭测试环境,但又没有VPN设备,那你可以像我一样,使用Windows Server RRAS进行配置,打通Azure虚拟网络和本地网络的连接。你可以使用以下的Powershell命令进行配置,

# Microsoft Corporation

# Windows Azure Virtual Network

# This configuration template applies to Microsoft RRAS running on Windows Server 2012.

# It configures an IPSec VPN tunnel connecting your on-premise VPN device with the Azure gateway.

# !!! Please notice that we have the following restrictions in our support for RRAS:

# !!! 1. Only IKEv2 is currently supported

# !!! 2. Only route-based VPN configuration is supported.

# !!! 3. Admin priveleges are required in order to run this script

Function Invoke-WindowsApi(  

   [string] $dllName,  

   [Type] $returnType,  

   [string] $methodName,  

   [Type[]] $parameterTypes,  

   [Object[]] $parameters  

   )

{

 ## Begin to build the dynamic assembly  

 $domain = [AppDomain]::CurrentDomain  

 $name = New-Object Reflection.AssemblyName 'PInvokeAssembly'  

 $assembly = $domain.DefineDynamicAssembly($name, 'Run')  

 $module = $assembly.DefineDynamicModule('PInvokeModule')  

 $type = $module.DefineType('PInvokeType', "Public,BeforeFieldInit")  

 $inputParameters = @()  

 for($counter = 1; $counter -le $parameterTypes.Length; $counter++)  

 {  

    $inputParameters += $parameters[$counter - 1]  

 }  

 $method = $type.DefineMethod($methodName, 'Public,HideBySig,Static,PinvokeImpl',$returnType, $parameterTypes)  

 ## Apply the P/Invoke constructor  

 $ctor = [Runtime.InteropServices.DllImportAttribute].GetConstructor([string])  

 $attr = New-Object Reflection.Emit.CustomAttributeBuilder $ctor, $dllName  

 $method.SetCustomAttribute($attr)  

 ## Create the temporary type, and invoke the method.  

 $realType = $type.CreateType()  

 $ret = $realType.InvokeMember($methodName, 'Public,Static,InvokeMethod', $null, $null, $inputParameters)  

 return $ret

}

Function Set-PrivateProfileString(  

   $file,  

   $category,  

   $key,  

   $value)  

{

 ## Prepare the parameter types and parameter values for the Invoke-WindowsApi script  

 $parameterTypes = [string], [string], [string], [string]  

 $parameters = [string] $category, [string] $key, [string] $value, [string] $file  

 ## Invoke the API  

 [void] (Invoke-WindowsApi "kernel32.dll" ([UInt32]) "WritePrivateProfileString" $parameterTypes $parameters)

}

# Install RRAS role

Import-Module ServerManager

Install-WindowsFeature RemoteAccess -IncludeManagementTools

Add-WindowsFeature -name Routing -IncludeManagementTools

# !!! NOTE: A reboot of the machine might be required here after which the script can be executed again.

# Install S2S VPN

Import-Module RemoteAccess

if ((Get-RemoteAccess).VpnS2SStatus -ne "Installed")

{

 Install-RemoteAccess -VpnType VpnS2S

}

# Add and configure S2S VPN interface

#请将4.227.171.85替换为你的网关公共IP地址,"192.168.1.0/24:100","172.16.103.0/24:100","192.168.110.0/24:100","172.25.32.0/20:100" 替换为你本地需要跟Azure虚拟网络连接的相应网段

Add-VpnS2SInterface -Protocol IKEv2 -AuthenticationMethod PSKOnly -NumberOfTries 3 -ResponderAuthenticationMethod PSKOnly -Name 4.227.171.85 -Destination 4.227.171.85 -IPv4Subnet @("192.168.1.0/24:100","172.16.103.0/24:100","192.168.110.0/24:100","172.25.32.0/20:100") -SharedSecret "替换为你的共享密钥"

Set-VpnServerIPsecConfiguration -EncryptionType MaximumEncryption

# default value for Windows 2012 is 100MB, which is way too small. Increase it to 32GB.

Set-VpnServerIPsecConfiguration -SADataSizeForRenegotiationKilobytes 33553408

New-ItemProperty -Path HKLM:\System\CurrentControlSet\Services\RemoteAccess\Parameters\IKEV2 -Name SkipConfigPayload -PropertyType DWord -Value 1

# Set S2S VPN connection to be persistent by editing the router.pbk file (required admin priveleges)

Set-PrivateProfileString $env:windir\System32\ras\router.pbk "4.227.171.85" "IdleDisconnectSeconds" "0"

Set-PrivateProfileString $env:windir\System32\ras\router.pbk "4.227.171.85" "RedialOnLinkFailure" "1"

# Restart the RRAS service

Restart-Service RemoteAccess

# Dial-in to Azure gateway

Connect-VpnS2SInterface -Name 4.227.171.85

将以上内容保存为.ps1的文件,然后用Powershell运行。运行完成之后,在路由和远程访问中就可以看到已创建相应的VPN连接,并连接到Azure虚拟网络

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_服务器备份_39

在Azure中的VPN连接,也可以看到状态变为已连接。

在Azure中部署本地Active Diretory额外域控之一:打通Azure与本地网络_服务器备份_40


经过以上配置之后,Azure虚拟网络和本地网络之间的连接就建立好了。后续我们就可以在Azure中进行根域和子域额外域控制器的部署了。