作者:网络之路一天  首发公众号:网络之路博客(ID:NetworkBlog)

实际案例:多出口下的NAT server应该如何部署

多出口下的NAT server(电信、联通多出口,源进源出与NAT ALG)_NAT

在实际场景中,为了保证业务的正常访问,很多企业都有双线路的部署,而内网也有业务要发布出去,所以两个公网的线路都需要发布该服务出去,让公网用户访问,目前带来的问题是,这两根线路的安全区域该如何划分?在同一个untrust里面呢 还是单独的各自划分一个独立的安全区域呢,下面就来实际验证下,这两种方式有什么不一样的地方,应该注意什么。

不同外网出口划分不同的安全区域场景

多出口下的NAT server(电信、联通多出口,源进源出与NAT ALG)_IP_02

介绍下网络环境,出口防火墙对接了两个ISP的外网,一个电信 一个联通,在电信联通的右边有一个家用办公用户需要同时通过公网地址202.100.1.10以及61.128.10.10的9898访问192.168.10.1的www服务,这里两个对接公网的接口划入了不同的安全区域。(有的朋友不知道怎么模拟这个环境,可以电信、联通与边缘出口跑OSPF即可,防火墙写两条默认路由)

新建安全区域

[USG6000V1]firewall zone name dianxin
[USG6000V1-zone-dianxin]set priority 5
[USG6000V1-zone-dianxin]add  interface g1/0/1
[USG6000V1]firewall zone name liantong
[USG6000V1-zone-liantong]set priority 2
[USG6000V1-zone-liantong]add  interface g1/0/2

端口映射相关

根据上一篇学到的,只要指定公网IP以及内网地址与端口号就行了,来试试看。

[USG6000V1]nat server  dianxin protocol tcp global 202.100.1.10 9898 inside 192.168.10.1 80
[USG6000V1]nat server liantong protocol tcp global 61.128.10.10 9898 inside 192.168.10.1 80
Error: This inside address has been used.

出现问题了,提示这inside地址在使用中,导致这个的原因就是server-map,回顾下server-map

多出口下的NAT server(电信、联通多出口,源进源出与NAT ALG)_IP_03

(PS:这里能显示两条,是博主去掉了另外一条,然后加上liantong的,两个都截图方便大家看。)

配置一个nat server(不管一对一还是端口映射)都会生成正反向server-map,假设两条都能配置上,两个都能生成正反server-map,正向的访问202.100.1.10以及61.128.10.10的9898都能转换成192.168.10.1的80,这个没问题,问题就出在反向server-map上,如果两个都生成了反向server-map,一条的192.168.10.1出去的时候会将源地址转换成202.100.1.10,另外一条的192.168.10.1会将源地址转换成61.128.1.10,这个时候当192.168.10.1发起访问后,抵达防火墙,防火墙就混乱了,到底转换成哪个,于是乎就出现了上面的提示,防火墙杜绝这种事情发生。

解决办法:加入安全区域

[USG6000V1]nat server liantong zone liantong protocol tcp global 61.128.10.10 9898 inside 192.168.10.1 80
[USG6000V1]nat server dianxinzone dianxin protocol tcp global 202.100.1.10 9898 inside 192.168.10.1 80

在之前学的基础上面加入了安全区域的绑定,这个时候就不在有什么提示了,在来看看server-map表

多出口下的NAT server(电信、联通多出口,源进源出与NAT ALG)_ide_04

多了一个安全区域的绑定,那么之前没配置安全区域不允许,为什么配置了安全区域后就可以了呢?安全区域就是为了分清楚数据的流动方向,有了安全区域的绑定后,防火墙能够清楚的通过路由表以及出接口来判断安全区域根据策略来做执行,之前没有绑定安全区域,防火墙压根就不知道如何去执行转发,所以不允许配置。

同一安全区域的场景

多出口下的NAT server(电信、联通多出口,源进源出与NAT ALG)_IP_05

有多出口的时候要同时都配置上面已经 有一个解决办法了,加入不同的Zone,然后NAT server里面携带zone的绑定就可以实现,那么还存在这样的一种情况,客户那边已经有多出口并且都是划入了untrust的安全区域,内网业务不能停,导致安全区域无法更改,这个时候同一个安全区域或者不加安全区域也不允许同时两个反向serve-map出现,竟然是反向server-map导致的,那么是不是可以不让它生成反向表项呢? 那肯定是可以的。

[USG6000V1]nat server zone untrust protocol tcp global 202.100.1.10 9898 inside 192.168.10.1 80 ?
 <1-65535>     Inside ending port of server
 description  Indicate the NAT server description
 nat-disable  Indicate nat server function disable
 no-reverse   No reverse NAT server
 unr-route    Indicate configure UNR
 vpn-instance Indicate a VPN instance
 <cr>          
其中有一个参数叫做no-reverse,这个的作用就是不生成反向server-map
[USG6000V1]nat server dianxin zone untrust protocol tcp global 202.100.1.10 9898 inside 192.168.10.1 www no-reverse
[USG6000V1]nat server liantong zone untrust protocol tcp global 61.128.10.10 9898 inside 192.168.10.1 www no-reverse


多出口下的NAT server(电信、联通多出口,源进源出与NAT ALG)_IP_06

这个时候可以发现只有正向server-map表了,没有反向了,所以配置上去没任何问题,当然如果说服务器需要去上网的话,需要给它配置源NAT的配置。

NAT server附带安全区域与不附带安全区域参数有什么区别

多出口下的NAT server(电信、联通多出口,源进源出与NAT ALG)_ide_07


在NAT server里面如果不附带 zone参数,那么在server-map表里面的表示为---(未绑定),如果附带了zone参数,那么就会现实绑定的具体zone的名称,绑定跟不绑定有什么区别呢?

这里博主说下,在实际环境中,比较建议大家绑定zone的,绑定了Zone的server-map,比如下面这条


Type: Nat Server,  ANY ->
61.128.10.10:9898[192.168.10.1:80],  Zone: untrust , protocol:tcp
Vpn: public -> public

任何流量从untrust方向过来访问61.128.10.10的9898才会被转换成192.168.10.1的80,而从其他安全区域过来的直接丢弃。反之没有绑定任何安全区域的server-map,则所有区域过来只要访问61.128.10.10的9898就会直接被转换192.168.10.1的80,通不通它不关心,先转换再说,所以绑定了安全区域的跟不绑定的区别就是,绑定了能够限制范围,安全性以及对设备的消耗会减少些。

源进源出功能

多出口下的NAT server(电信、联通多出口,源进源出与NAT ALG)_IP_08

上面一直在讲解多出口的情况下NAT server该如何配置,那么配置完后,来测试下是否都正常了,整个拓扑配置了简单的接口IP,两条默认路由,安全区域如图加入,安全策略放行了允许策略放行untrust到DMZ的192.168.10.1:80放行,模拟电信、联通、边缘出口都是配置了IP地址、OSPF,其中边缘端口随意配置了一个内网地址接入家庭用户,配置了NAT上网。(这里注意博主演示的都在同一个安全区域,不同安全区域只是安全策略要多注意下源区域的放行,另外服务器与client别忘记设置地址与启动服务        

[USG6000V1] nat server dianxin zone untrust protocol tcp global 202.100.1.10 9898 inside 192.168.10.1 www no-reverse
[USG6000V1] nat server liantong zone untrust protocol tcp global 61.128.10.10 9898 inside 192.168.10.1 www no-reverse

(如果是不同安全区域的则zone绑定对应的安全区域即可)

实际测试

#
interface GigabitEthernet1/0/0 
undo shutdown
ip address 192.168.10.254 255.255.255.0
service-manage ping permit
#
interface GigabitEthernet1/0/1
undo shutdown
ip address 202.100.1.10 255.255.255.0
service-manage ping permit
#
interface GigabitEthernet1/0/2
undo shutdown
ip address 61.128.10.10 255.255.255.0
service-manage ping permit

在测试之前,建议养成一个习惯,把防火墙的ping可以打开下,先测试基本的连通性是不是通的,不管是实验环境,还是实际部署中,都容易出现就是基本的网络都没通的情况,那就不用谈其他的了,养成一个测试习惯,对网络的排错跟测试会有很大帮助的。

多出口下的NAT server(电信、联通多出口,源进源出与NAT ALG)_NAT_09

多出口下的NAT server(电信、联通多出口,源进源出与NAT ALG)_NAT_10

服务器这里别忘记启动哦,这个最容易被忽略了。

多出口下的NAT server(电信、联通多出口,源进源出与NAT ALG)_IP_11

多出口下的NAT server(电信、联通多出口,源进源出与NAT ALG)_NAT_12

访问都正常,会话表也没问题,有去有回,那么回是怎么回去的呢?

情况分析

(1)访问联通地址,返回的时候从联通回来,这种情况肯定是最优的,也是我们最想要的。

多出口下的NAT server(电信、联通多出口,源进源出与NAT ALG)_ide_13

(2)访问联通的地址,返回的时候从电信回来的,这个就是最糟糕的情况了,会出现的情况

多出口下的NAT server(电信、联通多出口,源进源出与NAT ALG)_IP_14

(1)造成延迟,本来访问联通应该从联通返回,但是从电信“绕路回来”。

(2)绕路只是延迟大了点,但最糟糕的情况就是可能电信就给丢弃了。(运营商之间的选路非常复杂,而且涉及到利益关系)

导致这个原因的出现,就是防火墙在处理数据回包的时候,比如服务器回应客户端,抵达防火墙后,防火墙直接匹配会话表,把地址转换回公网IP了

多出口下的NAT server(电信、联通多出口,源进源出与NAT ALG)_IP_15

(比如这里192.168.10.1还原成61.128.10.10),但是还有一个选路问题存在,就是防火墙要通过路由表来决定从哪个接口发出去

多出口下的NAT server(电信、联通多出口,源进源出与NAT ALG)_NAT_16

由于这里配置的是直接两条默认路由指向各自出口,那么带来的问题就是防火墙会随机的选择一个接口发送出去,有可能是电信、有可能是从联通,出现的问题就在这,没办法保证用户从哪个接口进来,在从哪个接口出去,所以在UTM时代V2R3版本就已经推出了一个功能,叫做源进源出,它的作用就是当接口启用该功能后,访问该接口的数据(包括映射),从这个接口进入的,返回的时候依旧从这个接口出去,它的优选级高于路由表。

[USG6000V1]interface g1/0/1

[USG6000V1-GigabitEthernet1/0/1]redirect-reverse next-hop 202.100.1.1

[USG6000V1]interface g1/0/2

[USG6000V1-GigabitEthernet1/0/2]redirect-reverse next-hop 61.128.10.1

下一代防火墙只需要在接口上面配置这个命令即可,指定各自出口的网关。

NAT ALG的作用

又得回顾下ASPF的作用了,ASPF是解决多协议通道穿越防火墙带来的问题,那么NAT ALG(Application Lever Gateway,NAT的应用层)跟ASPF是一样的, 它是用来解决多协议通道在NAT技术中设备能够读取到应用层里面的临时通道,并且能够正常的进行NAT转换(比如源NAT,NAT server)如果不进行转换的话,比如外层已经转换了,但是临时通道应用层里面的协商还是原来的地址,那么就造成了问题了。但是华为设备不用管,它只要开启了ASPF,那么NAT ALG功能自动启用,一个命令实现两种功能,所以博主这里就简单提及下有这样一个技术存在。


思考:如果是ADSL拨号有动态公网IP的情况下,是否能支持源进源出功能,这个大家可以实验验证下

实战案例思考:如果内网有两台WWW服务需要对外提供访问,又只有一个公网地址的情况下该如何解决?

多出口下的NAT server(电信、联通多出口,源进源出与NAT ALG)_NAT_17

多出口下的NAT server(电信、联通多出口,源进源出与NAT ALG)_ide_18

作者:网络之路一天,公众号:网络之路博客(ID:NetworkBlog)。让你的网络之路不在孤单,一起学习,一起成长。