AVD 专用终结点 Private Link详解
工作原理
使用场景:当本地与云端使用VPN或者专线连接的混合云架构的时候,我们可以通过创建专用终结点,使用一个 Azure 专用链接的方式来,使得本地客户端与Azure虚拟桌面的数据交互走VPN通道,即全部在微软的骨干网内传输,不用经过公网。
说人话就是,我们的目的就是让用户离开了内网环境,离开自己的办公室网络,除非用VPN连进来内网,不然无法登录AVD服务。
怎么实现呢?通过创建专用终结点来实现,而且是创建起码三个专用终结点。
因为Azure 虚拟桌面有三个工作流,或者说三种相应的资源类型,
所以配置流程里面,我们得给工作区创建的两个终结点连接的feed和global资源类型,给主机池创建专用终结点连接connection资源类型,
都要创建之后才能在私有的去访问AVD服务。这些工作流的分别是:
1. 初始源发现(workspace global)
作用:让客户端找到所有分配给用户的工作区。
配置:创建一个专用终结点,用于全局发现。整个Azure虚拟桌面部署只需要一个这样的终结点。
2. 源下载(workspace feed)
作用:客户端下载其工作区的详细连接信息。
配置:为每个工作区创建一个专用终结点。
3. 主机池连接(hostpool connection)
作用:客户端与主机池中的会话主机建立连接。
配置:为每个主机池创建一个专用终结点。
通过这些专用终结点,确保Azure虚拟桌面资源的安全和高效访问。
目的 | 资源类型 | 目标子资源 | 终结点数量 |
---|---|---|---|
与主机池的连接 | Microsoft.DesktopVirtualization/hostpools | 连接 | 每个主机池一个终结点 |
源下载 | Microsoft.DesktopVirtualization/workspaces | feed | 每个工作区一个终结点 |
初始源发现 | Microsoft.DesktopVirtualization/workspaces | 全局 | 仅需一个,可用于你的所有 Azure 虚拟桌面部署 |
连接示意图
官方文档有详细讲客户端连接顺序,比较专业性满满
参考客户端连接顺序
我用人话说一遍就是,当你创建了这三个终结点以后,原本是PAAS服务,被托管的各种AVD的组件,比如说broker,gateway,webaccess这些组件突然在你部署终结点的那个网络有了一个个当前网段的内网IP地址,一个终结点对应一个NIC网络接口(网卡)。
AVD客户端往这些IP(终结点)发送数据,他们就会把数据通过一个叫private link的隧道,发往后端对应的AVD组件,就是上面图示。
但问题就出在这里了,AVD客户端去发送数据给终结点的IP,但IP是根据网络情况随机生成的,AVD客户端预先哪里知道它们的IP是什么?他们只能通过预先设置的往某个设好的域名去发送数据,比如说rdweb.wvd.microsoft.com。
你要根据域名去找到对应的IP肯定得去找DNS服务器做地址解析,问题是谁来给你做解析?
有三种办法
Azure 专用DNS区域
Azure private resolver
在本地DNS上手写A记录
先说第一种,解决不了问题,但是说一下原理。你创建终结点的时候会问你要不要使用集成的DNS,你使用了就会创建一个专用DNS区域连接到你想要连接的那个虚拟网络网络,然后在那里建成一个记录集,记录IP和域名的映射关系,如果你那个虚拟网络网络的DNS服务器还是默认的Azure提供的DNS,也即是168.63.129.16的话,那么DNS解析会自动帮你那个虚拟网络的设备解析到不同域名对应的终结点内网IP。
但是如果你改了DNS,比如说我的spoke为了里面的会话主机可以加入本地DC的域,虚拟网络的DNS服务器写了本地DC的内网ip,手动把DNS指向了DC,让DC去做域名解析。可是DC不知道云上的这些域名对应的IP啊,你找他,他只会给你去公网找,然后找到公网这些AVD组件的公网IP,但是你之前禁用了公网访问,访问不了。
所以你要在本地DNS服务器上一条条写这些域名和对应的IP的解析。。。。。,就是手写A记录,让DNS服务器知道,哦,这些域名(终结点)是去这个地址的。然后告诉AVD客户端和spoke里的机器,或者其他所有DNS是本地DNS的设备知道。然后就能成功访问了
第三种方法不说也罢。
然后你看,AVD客户端成功把数据转发向了终结点,和AVD的组件建立了连接,然后就完成注册、验证等一系列动作,这些组件就会告诉AVD客户端会话主机的内网IP地址是哪些,然后AVD客户端就回去连接被分配到的会话主机了。
配置流程
一、主机池创建终结点
Microsoft.DesktopVirtualization/hostpools
- 正常流程创建主机池和工作区、会话主机加入AD域
- 在主机池服务里面,侧边栏的“设置”里找到“网络”,禁用公网访问,创建专用终结点
- 专用终结点网络接口的区域选择和会话主机一个区域,目标子资源默认connection
- 连接资源类型为,默认选中,世纪互联的azure需要激活
- 终结点部署在为会话主机、主机池所在的vnet,专用IP和应用程序安全组可保持默认,如无需要
- DNS集成选择NO,因为我会话主机的虚拟网络spoke,它的DNS服务器我指向了用vpn连接的本地网络的DNS服务器
二、工作区创建Feed和Global终结点
Microsoft.DesktopVirtualization/workspaces
- 同样,在工作区服务的侧边栏找到网络选项,禁用公网访问,创建专用终结点
- 剩余流程同主机池,唯一不同是在目标子资源的时候选择Feed,或者global,一共两个终结点都要建一次
三、手动填写A记录配置DNS解析
-
在资源组里面找到创建的工作区feed、global、主机池的任意一个专用终结点,进去在侧边栏找到DNS配置,复制rdweb.wvd.microsoft.com的后缀wvd.microsoft.com
-
在DC的服务器管理上,右上角的“工具”,找到“DNS”,打开DNS管理器
-
DNS管理上,找到DC的正向查找区域,右键“新建区域”
-
新区域视情况所有选项默认,域名填写复制的wvd.microsoft.com
-
右键新建的区域,右键新建主机,添加A记录
-
名称填写wvd.microsoft.com之前的,比如rdweb.microsoft.com就只写rdweb,IP填写终结点之前对应的内网IP
-
在powershell用nslookup一下,可以发现如果成功,解析到的会是代理组件内网的IP而非公网。
三个终结点缺一不可,都要配置,少一个都可能不成功,feed,global和主机池的终结点
DNS配置A记录示例