NAPT(Network Address Port Translation,网络地址端口转换),与NAT No-pat区别在于NAPT不仅转换IP包中的IP地址,还会对TCP、UDP等源端口执行转换。NAPT是多对一转换方式,多个内网主机可以使用一个公网IP实现对互联网的访问。
一、实验拓扑
拓扑图-1
实验拓扑图-1要求实现Trust区域 HTTP Client、PC1访问Untrust区域HTTP Server,因为Client、PC1在内网,Server在外网,需要在FW1部署NAPT技术实现。
1.1 基本配置
表1是拓扑中接口、IP地址、安全区域规划:
1.2 实验步骤
步骤1 在FW1上将各接口划入相应安全区域。
<FW1>system-view //进入system-view
Enter system view, return user view with Ctrl+Z.
[FW1]firewall zone trust
[FW1-zone-trust]addinterface GigabitEthernet 1/0/1//将FW1的内网接口G1/0/1划入Trust区域
[FW1-zone-trust]quit
[FW1]firewall zone untrust
[FW1-zone-untrust]addinterface GigabitEthernet 1/0/2//将FW1的外网接口G1/0/2划入Utrust区域
[FW1-zone-untrust]quit
步骤2 在FW1上定义NAT地址池
[FW1]nat address-group 1
[FW1-address-group-1]mode pat //在公网地址池中定义NAPT转换方式
[FW1-address-group-1]section0 202.100.1.100 202.100.1.100 //定义公网地址池公网IP范围,只定义了一个公网IP
步骤3 在FW1配置NAT策略
[FW1]nat-policy
[FW1-policy-nat]rule name Source_NAT
[FW1-policy-nat-rule-Soure_NAT]source-zone trust
[FW1-policy-nat-rule-Soure_NAT]destination-zone untrust
[FW1-policy-nat-rule-Soure_NAT]source-address 172.16.1.0 24//定义哪些私网主机做源NAT转换访问外网server
[FW1-policy-nat-rule-Soure_NAT]action source-nat address-group 1 //关联公网地址池
步骤4 在FW1配置安全策略
[FW1]security-policy
[FW1-policy-security]rule name A
[FW1-policy-security-rule-A]source-address 172.16.1.1 32
[FW1-policy-security-rule-A]source-address 172.16.1.2 32//定义NAT转换前的私网IP地址 *因为华为防火墙安全策略检查在NAT策略之前,如果源IP定义的是转换后的公网IP,则流量无法通过检查
[FW1-policy-security-rule-A]source-zone trust
[FW1-policy-security-rule-A]destination-zone untrust
[FW1-policy-security-rule-A]service http //允许HTTP业务通过
[FW1-policy-security-rule-A]service icmp //允许ICMP业务通过
[FW1-policy-security-rule-A]action permit
步骤5 在FW1、R1与R2上配置路由
[FW1]ip route-static 0.0.0.0 0.0.0.0 202.100.1.2 //在FW1配置默认路由指向公网下一跳R2
[FW1]ip route-static 172.16.1.0 255.255.255.0 10.1.11.1//在FW1配置去往私网主机的路由
[R1]ip route-static 0.0.0.0 0.0.0.0 10.1.11.2 //在R1配置默认路由指向FW1边界
[R2]ip route-static 202.100.1.100 32 202.100.1.1//防火墙FW1上NAT地址池与公网接口地址不在一个网段,路由器R2需配置一条到达NAT地址池的路由
NAPT配置与NAT No-PAT是一样的,区别在nat address group中需要定义mode pat表示NAPT转换模式。
二、实验分析
A. 在HTTP Client上访问HTTP Server,在PC1 ping HTTP Server:
图-2
图-3
当HTTP Client的TCP流量、以及PC1的ICMP流量抵达防火墙,按照FW1对于报文处理流程,类似NAT No-PAT,在匹配NAT策略之前,首先安全策略需要检查通过。
B. 安全策略检查通过之后,NAT策略对流量执行NAPT转换,查看防火墙会话表:
图-4
图4是HTTP Client访问Server的TCP协议报文流量172.16.1.1:2061[202.100.1.100:2049]--> 100.1.1.1:80,其中源IP 172.16.1.1被转换成nat address group中的公网IP 202.100.1.100,同时TCP源端口2061被转换成2049,因为TCP协议报文流有端口号,即可以被NAPT执行端口转换。
但是对于没有端口号的ICMP协议报文流,FW1上会话表中关于ICMP五元组信息的端口是如何生成的呢?
图-5
图5是PC1去ping访问Server的ICMP协议报文流 172.16.1.2:43637[ 202.100.1.100:2049] --> 100.1.1.1:2048,PC1访问Server的ICMP流量源IP也被转换成nat address group中的公网IP 202.100.1.100,即多对一转换,Client与PC公用一个公网IP访问外网Server,同时ICMP报文流的源端口43637被转换至2049。
那么ICMP协议报文流的端口号从何而来?对于ICMP报文流,是提取ICMP报文中的Id值做源端口,目的端口固定为2048,观察PC1访问Server的ICMP报文:
图-6
图6是FW1收到PC1发送至Server的初始ICMP报文,发现Id值43637,提取至会话表中当作ICMP协议的源端口(NAPT转换后是2049),这也就不难解释FW1会话表关于ICMP的五元组信息了。通过FW1的会话表我们还发现HTTP Client、PC1访问Server的流量源端口都被转成2049这个端口,考虑一下,转换后的公网IP、端口都是一样的,这好像是NAPT转换冲突啊。
其实TCP、ICMP协议在FW1会话表中体现的五元组还是有不不同的部分,那就是目的端口,TCP报文流目的端口是80、ICMP报文流目的端口是2048,我们还是可以通过目的端口区分两组不同的报文流的,只要五元组不完全相同,我们是不必担心NAPT转换冲突问题的。注意,NAPT不会像NAT No-PAT生成Server-map表项:
图-7
NAPT主要用于让内网大量主机访问互联网,如果为每个数据流建立Server-map表项,会占用设备资源。
以上是对源NAT基础实现的介绍,如果想让外网Client访问内网Server,我们应该怎么做呢?下期分享防火墙NAT Server实现方式:
下期再见!!
网友评论