在工业网络场景中,可能会用到NAT的地方,包括现场级/工厂级/企业级之间存在地址重叠、厂区之间有系统互联需求但使用了同网段、需要隐藏工业现场的IP地址、从工业现场总线过渡到工业以太网、前期信息网规划不尽合理、淘工厂兴起将线下工厂搬到线上等。本篇先为大家介绍双向NAT在工业场景的应用。
场景一:工业现场会遇到客户将网络设备外包给第三方维护。操作员站与PLC无法通信,但均能与工业防火墙通信,在不修改网络设备的情况下如何实现操作员站与PLC通信呢?
场景二:工业现场部署安全防护类产品时,常会遇到工业PLC无法配置网关、工业摄像机无法修改网关等问题,没有网关或网关错误的情况下如何实现跨网段通信呢?
场景三:客户现场由于当初规划不合理,没有将服务器单独划分网段或DMZ区域,内网用户访问内网服务器想隐藏内网地址,同时还想进行安全检测及保护,应该如何解决?
1、什么是双向NAT
双向NAT是针对同一条流同时转换报文的源IP地址和目的IP地址。
2、双向NAT应用场景
① 域间双向NAT:工业现场一些设备不允改动,例如网络设备不能修改路由、工业摄像机无法修改网关、工业PLC无法配置网关。
② 域内双向NAT:想让内网用户通过外网地址访问DMZ区的服务器,且想经过出口墙检查来增加安全性。
1、场景一解决方案介绍
① 需求:由于三层交换机到操作员站1的路由没有配置或配置错误,导致操作员站1与西门子PLC无法通信。在不修改三层交换机的情况下,实现操作员站1与西门子PLC通信。
② 方案:配置域间双向NAT,来解决中间网络设备没有路由的场景。
③ 原理:通过域间双向NAT,使操作员站1通过工业防火墙地址(192.168.40.1),来间接访问到西门子PLC。PLC回应时通过防火墙地址(192.168.182.100),来将数据报文送达操作员站1。
2、场景二解决方案介绍
① 需求:由于PLC没有配置网关或网关错误,导致操作员站1与西门子PLC无法通信。客户反馈PLC没有条件修改网关,希望在此条件下能够解决问题。
② 方案:配置域间双向NAT,来解决PLC没有网关或网关错误的场景。
③ 原理:通过域间双向NAT,使操作员站1通过工业防火墙地址(192.168.40.1),来间接访问到西门子PLC。PLC回应时通过访问工业防火墙地址(192.168.120.1),此时是同网段不需要网关,发送ARP来获取工业防火墙(192.168.120.1)接口的MAC来完成通信,最终将数据报文送达操作员站1。
3、场景三解决方案介绍
① 需求:由于管理员在规划网络时“偷懒”,将内网用户和内网服务器规划到同一个网段中。现在希望内网用户通过外网地址访问内网服务器。作用是隐藏内网服务器地址,并使流量经过防火墙,由此来提高网络的安全性。
② 方案:配置域内双向NAT,将内网用户访问内网服务器的报文的源地址进行转换,转换后源地址可以是外网地址池IP地址(也可以是内网地址,只要不和内网服务器地址在同网段),这样内网服务器的回应报文就会被发送到防火墙。
③ 原理:配置域内双向NAT,当内网用户通过访问防火墙外网地址(1.1.1.1),来间接访问到内网服务器(10.1.1.2)时,防火墙将源地址转换为地址池中地址(1.1.1.100)。此时服务器回应报文目的地址为地址池中地址(1.1.1.100),使流量仍然经过防火墙处理,再转换后发给内网用户。
1、任务说明
三层交换机没有到操作员站1的路由,导致操作员站1与西门子PLC无法通信,但均能与工业防火墙通信。在不修改三层交换机的情况下,完成操作员站1与西门子PLC通信。
2、配置说明
① 定义感兴趣流
CLI(方法一):acl acl01 src-ip net 192.168.40.0 255.255.255.0 dst-ip net 192.168.40.1 255.255.255.255 protocol-object s7/mms permit
WEB(方法二):
② 配置域间双向NAT
CLI(方法一):
nat acl acl01 dnat ip 192.168.120.101 no-port-transfer
nat acl acl01 snat ip 192.168.182.100 no-port-transfer
WEB(方法二):
3、验证说明
① 在操作员站1用WinCC向西门子PLC下发温度和湿度指令:
② 在工业防火墙上可以看到s7工业协议
③ 在工业防火墙上可以看到查看会话信息:
④ 分别在入口(192.168.40.1)和出口(192.168.182.100)抓包
⑤ 通过会话和抓包,可以看到工业防火墙的域间双向NAT转换过程
1)IP报文从操作员站到西门子PLC的转换过程:
操作员站下发的指令报文经过工业防火墙,目的地址(192.168.40.1)
经过DNAT转换为PLC地址(192.168.120.101):(Ge0/0/4)192.168.40.1:102[192.168.120.101:102]
通过会话信息可以看到西门子S7协议使用TCP协议102端口。
源地址(192.168.40.3)经过SNAT转换为工业防火墙地址(192.168.182.100):
(Ge0/0/5.30)192.168.40.3:63948[192.168.182.100:63948]。
这样报文的源地址和目的地址就同时进行了转换,即完成了域间双向NAT。
2)IP报文从西门子PLC到操作员站的转换过程:
当PLC的回应报文经过工业防火墙时,目的地址(192.168.182.100)根据session表
((Ge0/0/5.30)192.168.40.3:63948[192.168.182.100:63948])转换为操作员站地址(192.168.40.3)
源地址(192.168.120.101)经session表((Ge0/0/4)192.168.40.1:102[192.168.120.101:102])转换为工业防火墙地址(192.168.40.1)
这样报文再次进行域间双向NAT转换,报文的源地址和目的地址均进行了转换。
4、NAT补充说明
细心的同学可能会问,会不会影响访问工业防火墙的管理流量?可能会,有2个方案供参考。
①工业防火墙启用第三个口(建议是Ge0/0/0),插上第三根网线,也就是带外管理。
②SNAT和DNAT都可以增加地址池,方便内网和外网通过带内的方式来管理工业防火墙。
1、任务说明
PLC没有配置网关或网关错误,导致操作员站1与西门子PLC无法通信。在不修改PLC的情况下,实现操作员站1与西门子PLC通信。
2、配置说明
① 定义感兴趣流
acl acl01 src-ip net 192.168.40.0 255.255.255.0 dst-ip net 192.168.40.1 255.255.255.255 protocol-object s7/mms permit
② 配置域间双向NAT
nat acl acl01 dnat ip 192.168.120.101 no-port-transfer
nat acl acl01 snat ip 192.168.120.1 no-port-transfer
3、验证说明
① 在操作员站1用WinCC向西门子PLC下发温度和湿度指令:
② 在工业防火墙上可以看到s7工业协议
③ 在工业防火墙上可以看到查看会话信息:
④ 通过查看会话,可以看到工业防火墙的域间双向NAT转换过程
1)IP报文从操作员站到西门子PLC的转换过程:
操作员站访问西门子PLC的报文到达工业防火墙时,目的地址(192.168.40.1)经过DNAT转换为西门子PLC(192.168.120.101):
(Ge0/0/4)192.168.40.1:102[192.168.120.101:102]
源地址(192.168.40.3)经过SNAT转换为工业防火墙地址(192.168.120.1)
与西门子PLC属于同一网段:
(Ge0/0/5.30)192.168.40.3:64066[192.168.120.1:64066]
这样报文的源地址和目的地址就同时进行了转换,即完成了域间双向NAT。
2)IP报文从西门子PLC到操作员站的转换过程:
西门子PLC的回应报文经过工业防火墙时,目的地址(192.168.120.1)根据session表
((Ge0/0/5.30)192.168.40.3:64066[192.168.120.1:64066])转换为操作员站地址(192.168.40.3)
西门子PLC的源地址(192.168.120.101),根据session表
((Ge0/0/4)192.168.40.1:102[192.168.120.101:102])转换为工业防火墙地址(192.168.40.1)
这样报文再次进行域间双向NAT转换,报文的源地址和目的地址均进行了转换。
4、西门子PLC没有网关是如何通信的?如果操作员站没有网关,域间双向NAT可以解决吗?
① 没有网关还能跨网段通信的大体过程:当西门子PLC回应操作员站的请求时,发现自己的地址(192.168.120.101)和目的地址(192.168.120.1)在同一网段,此时西门子PLC就不会去查找路由,而是发送ARP广播报文询问目的地址对应的MAC地址。
工业防火墙会收到ARP广播,一看目的IP正是自己的(192.168.120.1),于是将(192.168.120.1)对应接口MAC地址发给西门子PLC,告诉PLC:“把回应报文发送给我即可”,所以西门子PLC将回应报文发送至工业防火墙,工业防火墙再对其进行后续处理。
既然西门子PLC上省去了查找路由的环节,那就不用设置网关了,这就是配置域间双向NAT的好处。
② 操作员站没有网关,通过域间双向NAT是可以解决的。此场景中操作员站1可以删除网关,因为操作员站与工业防火墙在同网段。
1、任务说明
内网用户和内网服务器在同一个网段,使内网用户通过外网地址访问内网服务器。隐藏内网服务器地址,同时使流量经过防火墙来提高安全性。
2、配置说明
① 配置感兴趣流、配置域内双向NAT(DNAT配置)
CLI(方法一):
acl acl01 dst-ip net 1.1.1.1 255.255.255.255 permit
nat acl acl01 dnat ip 10.1.1.2 no-port-transfer
WEB(方法二):
② 配置感兴趣流、配置域内双向NAT(SNAT配置)
CLI(方法一):
acl acl02 src-ip net 10.1.1.3 255.255.255.255 permit
object address-pool address_pool
ip address 1.1.1.100 1.1.1.100
nat acl acl02 snat interface Ge0/0/3 ip-pool address_pool hash-mapping no-port-transfer
WEB(方法二):
3、验证说明
① 访问内网服务器(验证http和ping)
② 查看会话(nat和icmp)
③ 查看抓包(icmp)
1)内网用户处抓包
2)内网服务器抓包
④ 通过会话和抓包,可以清晰看到FW做了什么
1)IP报文从内网用户到内网服务器的转换过程:
当内网用户访问内网服务器的报文到达防火墙时,目的地址(1.1.1.1)经过DNAT转换为内网服务器地址(10.1.1.2):(Ge0/0/2)1.1.1.1:NA[10.1.1.2:NA]
源地址(10.1.1.3)经过SNAT转换为外网地址(1.1.1.100),与内网服务器(10.1.1.3)在不同网段:(Ge0/0/2)10.1.1.3:NA[1.1.1.100:NA]
这样报文的源地址和目的地址就同时进行了转换,即完成了域内双向NAT。
② IP报文从内网服务器到内网用户的转换过程:
当内网服务器的回应报文经过防火墙时,目的地址(1.1.1.100)根据session表
((Ge0/0/2)10.1.1.3:NA[1.1.1.100:NA])转换为内网用户地址(10.1.1.3)
源地址(10.1.1.2)根据session表
((Ge0/0/2)1.1.1.1:NA[10.1.1.2:NA])转换为外网地址(1.1.1.1)
这样报文再次进行域内双向NAT转换,报文的源地址和目的地址均转换为外网地址
4、域内双向NAT补充说明
① 文中说为了便于防火墙管理使用了地址池,但如果不使用地址池地址,直接使用外网出口地址可以吗?
1)直接使用外网出口地址是可以的,一样可以达到需求所要求的效果。
2)其实内网地址也是可以的,只要不和内网服务器在同一网段即可。
② 也许有人会说“内网用户与内网服务器连接防火墙的不同口,会有什么变化呢?”
1)如果将内网用户和内网服务器通过不同的接口连接到防火墙,此时内网用户和内网服务器交互的所有报文会经过防火墙转发,所以只配置DNAT就可以了。
2)关键要明确NAT转换的方向和转换后地址的作用,而不要纠结于转换后是外网地址还是内网地址,灵活应用域内双向NAT可以起到事半功倍的效果。
六方云作为工业互联网的资深厂商,有责任和义务尽可能多的向合作伙伴及客户,传播正能量的、有价值的、更具深度的解决方案和技术原理,帮助客户解决问题的同时也实现我们公司的自身价值。