我有一台物理主机,用作虚拟化实验室,还有多台 Hyper-V 上的虚拟机,它们通过内部网络连接到主机。我让物理主机充当远程桌面网关,路由器指向网关,一切正常,我可以通过互联网登录到我的虚拟机。
此后,我将网关移至内部网络上的虚拟机,该虚拟机位于我的活动目录 DNS remote.example.com 中,具有静态 IP 地址。这样,各个虚拟机将执行特定角色,并且我最终将能够在我的虚拟机上使用负载平衡。
目前,仅使用 1 个虚拟机作为 RDG,我便能够从主机顺利访问内部网络上的所有虚拟机,因为它可以看到 remote.example.com 的 IP 地址。我认为我需要向主机添加一些转发/路由/重定向,以使网关从“外部”可见。
(互联网)==1==>(路由器)==2==> [主机] ==3==> [remote.example.com] ==4==> [VM_1 | VM_2 | VM_3]
让我的主机代理请求到我的内部虚拟机/网关的正确方法是什么?
我当前在 ApplicationHost.config 中对 ARR 的设置:
<webFarms>
<webFarm name="Remote" enabled="true">
<server address="192.168.1.3" enabled="true" />
<applicationRequestRouting>
<protocol>
<cache enabled="false" />
</protocol>
</applicationRequestRouting>
</webFarm>
<applicationRequestRouting>
<hostAffinityProviderList>
<add name="Microsoft.Web.Arr.HostNameRoundRobin" />
<add name="Microsoft.Web.Arr.HostNameMemory" />
</hostAffinityProviderList>
</applicationRequestRouting>
</webFarms>
在 system.webServer/rewrite/globalRules 下:
<globalRules>
<rule name="ARR_Remote_loadbalance_SSL" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
<match url="*" />
<conditions>
<add input="{HTTPS}" pattern="on" />
<add input="{HTTP_HOST}" pattern="remote.example.com" />
</conditions>
<action type="Rewrite" url="https://Remote/{R:0}" />
</rule>
<rule name="ARR_Remote_loadbalance" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
<match url="*" />
<action type="Rewrite" url="http://Remote/{R:0}" />
<conditions>
<add input="{HTTP_HOST}" pattern="remote.example.com" />
</conditions>
</rule>
</globalRules>
编辑:
当我尝试通过 RDP 客户端使用网关服务器时,我收到
The gateway failed to connect with the message: 404 not found
重新启动主机和虚拟机后,我能够从外部设备访问该站点,并且能够对 RDP 连接执行失败请求跟踪。
看起来 ARR 正在尝试自己处理请求,而不是将请求转发给远程 VM
答案1
事实证明,这只是一个配置稍有错误的简单案例。我发布的 ARR 路由模式是 {HTTP_HOST} = remote.example.com。根据失败的请求日志,这并不匹配
我相信这是因为 ARR 规则只会查看主机名,即 remote.example,而不是 remote.example.com 作为各种组合,例如 remote.example。, 偏僻的。,remote* 确实匹配并且被正确转发,也许我错过了一些 ARR 模式匹配的技巧。
作为参考,我主要遵循了以下指南:http://www.msexchange.org/articles-tutorials/exchange-server-2013/mobility-client-access/iis-application-request-routing-part1.html
答案2
我很确定使用 ARR 是不受支持的,即使它可以工作。最简单的解决方法是允许网关 VM 与“外部”网络通信,以便路由器可以直接向其发送流量。或者您需要可以将流量路由到网关 VM 的“某些东西”,NATing 防火墙或类似的东西。我不会把这个“东西”放在我的 Hyper-V 盒子上,那些应该尽可能保持干净。