只有一个公网IP两台服务器都要对外?华为防火墙目的NAT一个地址两个端口各找各机

公司对外发布服务器,最理想的是一个公网IP对一台服务器。现实常常是:ISP 只批了一个额外公网地址,内网却有两台 FTP 服务器都要对外提供服务。硬要再加地址,申请周期长还要多花钱。华为防火墙的目的 NAT 有一种「公网端口与私网地址一对一」的转换方式,专门解这个局:同一个公网 IP,端口 3000 的访问交给第一台服务器,端口 3001 的交给第二台,两台服务器共用一个地址互不干扰。下面这套配置出自华为 USG 防火墙官方 Web 举例,路径和参数照抄就能用。

配置步骤

先把接口和安全区域定下来。GE0/0/1 接外网,地址 1.1.1.1/24,加入 untrust 区域;GE0/0/2 接服务器区,地址 10.2.0.1/24,加入 dmz 区域。Web 上选择「网络 > 接口」,分别点开两个接口按上面的参数填写即可。内网服务器要把 10.2.0.1 配成默认网关。

第二步配安全策略,允许外部用户访问服务器区:选择「策略 > 安全策略 > 安全策略」,新建策略 policy1,源安全区域 untrust,目的安全区域 dmz,目的地址 10.2.0.0/24,动作允许。

第三步配 NAT。选择「策略 > NAT策略 > NAT策略 > 目的转换地址池」,新建地址池 addressgroup1,地址段 10.2.0.7~10.2.0.8,也就是两台 FTP 服务器的内网地址。然后到「策略 > NAT策略 > NAT策略」新建 NAT 策略 policy_nat1:源安全区域 untrust,目的地址 1.1.10.10/32,服务为 tcp 目的端口 3000 到 3001,动作选目的 NAT、转换方式为公网端口与私网地址一对一,目的端口转换为 21。配置「服务」这项时,官方给了专门的操作指引:单击「服务」所在列的输入框,选择「新建 > 添加协议或协议号」,把 3000 到 3001 的端口范围建出来再引用。这里还有个官方明确提醒:这种转换场景下,「目的地址」和「目的端口转换为」都只能配置一个值,填多了系统不认。对应到配置脚本就是这几行核心命令:

destination-nat address-group addressgroup1 0
 section 10.2.0.7 10.2.0.8
#
nat-policy
 rule name policy_nat1
   source-zone untrust
   destination-address 1.1.10.10 32
   service protocol tcp destination-port  3000 to 3001
   action destination-nat static port-to-address address-group addressgroup1 21

外网用户访问 1.1.10.10 的 3000 端口,设备把目的地址换成 10.2.0.7、端口换成 21;访问 3001 则换到 10.2.0.8。一个公网地址带两台服务器,各走各的。

第四步是两个容易漏的关键动作。一是配黑洞路由防环:选择「网络 > 路由 > 静态路由」,新建一条目的地址 1.1.10.10、掩码 255.255.255.255、出接口 NULL0 的静态路由。1.1.10.10 是申请来专门发布服务器用的公网地址,设备本身并没有这个地址的明细路由,不配这条,发往 1.1.10.10 的流量可能又被转发出去形成环路。脚本里对应 ip route-static 1.1.10.10 255.255.255.255 NULL0。二是开启 FTP 协议的 NAT ALG 功能:FTP 是多通道协议,控制通道和数据通道端口不一样,不开 ALG 只能连上控制通道传不了文件。Web 上选择「策略 > ASPF配置」,勾选「FTP」即可,脚本对应 firewall interzone dmz untrust 下的 detect ftp。

最后补一条去 Internet 的缺省路由,目的地址 0.0.0.0/0.0.0.0,下一跳 1.1.1.254,让内网服务器对外回包能正常转发到 ISP 的路由器。还有一步在设备之外:ISP 接入网关 Router 上要配一条到服务器映射公网地址 1.1.10.10 的静态路由,下一跳指向 1.1.1.1,让去服务器的流量先送到防火墙——这一步通常需要联系 ISP 的网络管理员来配,自己设备上配得再对,Router 不指路流量也进不来。

验证

配置完成后,公网用户直接访问 ftp://1.1.10.10:3000 和 ftp://1.1.10.10:3001,应分别落到两台服务器上。设备侧选择「监控 > 会话表」,当公网用户访问内网服务器时,能看到目的地址为服务器公网地址 1.1.10.10 的会话条目,说明转换在正常工作。会话表里看不到记录,回头按顺序查三处:安全策略 policy1 是否放行 untrust 到 dmz、黑洞路由和缺省路由是否都在、Router 上指回防火墙的静态路由配没配。三处都对还不通,再看 FTP ALG 有没有勾上——能登录却列不出目录,九成是 ALG 没开。

一个公网地址按端口拆开用,是小地址段企业发布多台服务器的常用解法。贵州诚鑫致达科技在帮客户规划出口时,公网地址怎么拆分映射都会写进交付文档。你的公司是不是也有公网地址不够用、服务器排着队等发布的情况?