下边来看SNAT怎么实现,SNAT的配置方法和DNAT是不一样的,DNAT可以直接在FW上配置,SNAT我们可以通过UDR实现,如果想让所有出站流量都经过FW,我们可以通过UDR配置默认路由的出口为FW,这样访问internet的流量就必须要走FW了



    首先来看下FW做DNAT时对IP的改写,从家里电脑curl到FW IP

    Azure Firewall 实现SNAT_备份


    在Nginx log里可以看到源IP会是FW的IP,也就是说在做DNAT时,FW会重写请求的源IP

Azure Firewall 实现SNAT_云_02


    而如果curl 服务器的公网IP

Azure Firewall 实现SNAT_云_03


    Log里会看到源IP是客户端的公网IP

Azure Firewall 实现SNAT_备份_04


    

    从各个region curl到web服务器公网IP,包括FW的VNET和peer的VNET

直接Curl web服务器公网IP,看到的源IP都是服务器的公网IP,说明出站是直接走到internet,不经过FW,没有SNAT


    下边来看SNAT怎么配置,首先在各个region创建UDR

Azure Firewall 实现SNAT_备份_05


添加默认路由到FW

Azure Firewall 实现SNAT_备份_06


    关联到各个subnet中

Azure Firewall 实现SNAT_备份_07

    之后尝试从VM 继续curl到web服务器,会发现流量被FW拒绝了,因为没有出站的允许规则Azure Firewall 实现SNAT_Azure_08



    解决这个问题可以在FW上开通网络规则

Azure Firewall 实现SNAT_云_09

 

    10.88网段的可以curl www.baidu.com

    

    不在88网段的就不行

Azure Firewall 实现SNAT_Cloud_10





    再次添加其他网段的网络规则Azure Firewall 实现SNAT_云_11



    尝试单独再添加linux2所在网段的规则Azure Firewall 实现SNAT_备份_12


    再次尝试,可以连接,DNAT就简单实现了

Azure Firewall 实现SNAT_Cloud_13