有没有办法根据 Azure 中使用的端口将对同一私有 IP 地址的请求路由到不同的目标?
语境
我们有一个通过 SFTP(SSH;不是 FTPS)和 HTTP 提供内容的虚拟机。
这些服务在同一个公共主机名上公开展示。
为了提高安全性,我将一个公共 IP 与 Azure 防火墙实例关联,并使用 DNAT 将端口 22 路由到 VM,同时将端口 80 和 443 路由到应用程序网关,该网关将端口 80 上的请求重定向到 443 的侦听器,并对 443 上的请求执行 TLS 卸载,将 HTTP 请求传递到后端 VM。
我现在被要求修改 SFTP 配置,以便只有 2 个外部客户端可以连接到 SFTP 服务;同时继续允许内部客户端访问 SFTP 并且允许所有人访问 HTTPS。
仅将外部客户端的公共 IP 列入白名单很简单;但由于防火墙具有公共 IP,因此所有内部请求都会首先路由到互联网,因此我们的内部用户不会显示在私有 IP 范围内,但也会显示公共 IP。我们的用户分布在多个国家/地区,并使用不同的 VPN 服务(取决于他们的国家/地区),这意味着简单地将用户连接的分界点列入白名单并不简单(即每个国家/地区有 1 个分界点,使用 VPN 的用户将显示在他们自己的 IP 下,因为我们不会覆盖 VPN 中公共 IP 的路由;只会覆盖私有 IP)。
我希望可以为同一个主机名专用一个私有 IP,并在我们的私有 DNS 上进行设置,这样当用户在内部时,他们就会被路由到私有 IP;但是这个 IP 解析到同一个防火墙,然后使用 DNAT 规则允许 SFTP 与 HTTP(S) 请求像我们对公共 IP 所做的那样进行路由。
我不能只使用后端虚拟机的 IP,否则我们会绕过应用程序网关完成的 TLS 卸载/最终会得到 HTTP 连接。
我必须对 SFTP 和 HTTP(S) 端点使用相同的主机名,因此必须将两者都放在同一个 IP 上(因为 DNS 不知道端口/协议)。
对于如何实现这一目标的任何建议都将不胜感激。
答案1
我建议创建一些额外的 DNS 区域,例如 *.sftp-external.com *.sftp-internal.com,然后您就可以将同一主机添加到两个 DNS 区域和 IP。(裂脑 DNS)。您还可以使用正确的名称服务器配置使内部区域只能在内部解析。创建具有公共访问权限的存储帐户也是一个不错的选择,已启用 SFTP供外部用户使用。这样可以节省大量 DNS 工作。