Azure 防火墙是托管的基于云的网络安全服务,可保护 Azure 虚拟网络资源。 它是一个服务形式的完全有状态防火墙,具有内置的高可用性和不受限制的云可伸缩性。可以跨订阅和虚拟网络集中创建、实施和记录应用程序与网络连接策略。 Azure 防火墙对虚拟网络资源使用静态公共 IP 地址,使外部防火墙能够识别来自你的虚拟网络的流量。 该服务与用于日志记录和分析的 Azure Monitor 完全集成。
来看下这样的一个架构,web服务器默认路由指向FW,web服务器前有一个standard load balancer,web服务器是它的后端池,LB上配置了80端口的规则,web服务器本身没有公网IP,再这样的架构下,有两个问题
Web服务器是否能访问internet
在internet通过standard lb是否能访问web服务器上的nginx
我们一个个来看,standard lb后端的服务器,默认是不能访问internet的,那么如果它的默认路由指向Firewall呢?
经过测试发现,访问完全没有问题
那么,第二个问题呢,首先来看下LB的配置,其实很简单
可以看到只是简单配置了一个80的规则
但是测试发现,lb的ip一直没办法ping通
但是,在把指向FW的默认路由去掉之后,我们发现可以ping通了
这是为什么呢?其实微软的文档已经给了我们解释
这种现象叫非对称路由,理解上其实很简单,因为入站的时候是通过LB进来的,但是回去的时候因为默认路由的原因,却要从FW出去,FW上没有这个会话,就回导致把包丢掉
非对称路由
非对称路由是指数据包采用一条路径发往目标,并采用另一条路径返回到源。 如果子网的默认路由转到防火墙的专用 IP 地址,并且使用的是公共负载均衡器,则会出现非对称路由问题。 在这种情况下,将通过负载均衡器的公共 IP 地址接收传入的负载均衡器流量,但返回路径将通过防火墙的专用 IP 地址。 由于防火墙是有状态的,并且无法识别此类已建立的会话,因此会丢弃返回的数据包。
这个问题其实也是可以有办法解决的,官网的解释是说,如果防火墙后边跟的是public lb,则需要创建一个到防火墙public ip的UDR规则,下一条是internet,否则azure会通过默认路由发给防火墙的private ip,同时流量的入口也不能是LB,而应该是FW
下边我们就来试下,整个流量是这样的FW -> Public Standard LB -> WEB
首先,先在FW上配置到LB的NAT规则
但是测试发现,端口连不上
接下来再试下添加到FW 公网IP的路由
这次终于访问成功了