两条运营商线服务器两边都要能访问?华为防火墙双出口NAT Server配好源进源出

双出口企业对外发布服务器,藏着两个容易翻车的细节。一是地址:公司从两家 ISP 各申请了一个对外服务的公网地址,指望外网用户不管从哪家线过来都能访问到同一台内网服务器——单条映射满足不了,得按安全区域分别做 NAT Server;二是回程:从 ISP1 线进来的访问,回包如果按默认路由从 ISP2 线出去,来回路径不一致,运营商圈里就把包丢了,现象是"单线测试都通、双线一起挂"。华为防火墙对这两点都有对应机制:nat server 命令带 zone 参数按出口分别映射,接口下 redirect-reverse 源进源出让回包从进来的口出去。华为官方文档有一套完整的 CLI 举例——双出口环境下公网用户通过NAT Server访问内部服务器(双出口属于不同安全区域),本篇按这套示例配一台双线双地址发布的 FTP 服务器,命令逐段给出,配置脚本一并附上。

本文的组网需求、配置思路与命令步骤,整理自华为官方发布的典型配置案例,参数可直接参考使用。

组网需求

某公司在网络边界处部署了DeviceA作为安全网关,通过两个ISP接入Internet。为了使私网FTP服务器能够对外提供服务,需要在设备上配置指定zone参数的NAT Server功能。除了公网接口的IP地址外,公司还向ISP1和ISP2分别申请了1.1.1.10和2.2.2.10作为内网服务器对外提供服务的地址。其中Router是ISP1和ISP2提供的接入网关。

本图中interface1、interface2和interface7分别代表GE0/0/1、GE0/0/2和GE0/0/7。

各接口与服务器映射的规划如下:

项目 数据 说明
GE0/0/1 IP地址:1.1.1.1/24;安全区域:Untrust1 实际配置时需要按照ISP的要求进行配置
GE0/0/7 IP地址:2.2.2.2/24;安全区域:Untrust2 实际配置时需要按照ISP的要求进行配置
GE0/0/2 IP地址:10.2.0.1/24;安全区域:DMZ -
NAT Server(policy_ftp1) 安全区域:Untrust1;公网地址:1.1.1.10;私网地址:10.2.0.8;公网端口:21;私网端口:21 通过该映射,外网用户访问1.1.1.10的流量能够发送给内网的FTP服务器
NAT Server(policy_ftp2) 安全区域:Untrust2;公网地址:2.2.2.10;私网地址:10.2.0.8;公网端口:21;私网端口:21 通过该映射,外网用户访问2.2.2.10的流量能够发送给内网的FTP服务器

翻译成白话:GE0/0/1 接 ISP1、GE0/0/7 接 ISP2,两个口分别划进两个新建的外部区域 Untrust1、Untrust2;GE0/0/2 接内网服务器网段,划进 DMZ。同一台 FTP 服务器(10.2.0.8)在两个出口各挂一个公网地址——ISP1 侧用 1.1.1.10、ISP2 侧用 2.2.2.10,两边用户各访问各的地址,进防火墙后都落到同一台机器上。

配置思路

  • 配置接口IP地址和安全区域,完成网络基本参数配置。
  • 配置安全策略,允许外部网络用户访问内部服务器。
  • 配置NAT Server。
  • 在GE0/0/1和GE0/0/7上配置源进源出功能和默认网关。请根据设备上配置的路由分析可能出现来回路径不一致的访问流量入接口,然后在接口上配置源进源出功能。
  • 在Router上配置到NAT Server的公网地址的静态路由。

第三步为什么nat server要带zone:两个出口属于不同的安全区域,公网地址也分属两个ISP,如果不指定区域,两条映射会互相干扰、选路混乱;指定zone untrust1/untrust2后,1.1.1.10 的映射只在 ISP1 侧生效、2.2.2.10 只在 ISP2 侧生效。第四步源进源出则是给回程上保险:从哪个口进来的会话,回包强制从同一个口出去,绕开来回路径不一致的坑。

操作步骤

一、配置接口IP地址和安全区域,完成网络基本参数配置

配置接口GE0/0/1的IP地址:

<HUAWEI> system-view
[HUAWEI] sysname DeviceA
[DeviceA] interface ge 0/0/1
[DeviceA-GE0/0/1] ip address 1.1.1.1 24
[DeviceA-GE0/0/1] quit

配置接口GE0/0/2的IP地址:

[DeviceA] interface ge 0/0/2
[DeviceA-GE0/0/2] ip address 10.2.0.1 24
[DeviceA-GE0/0/2] quit

配置接口GE0/0/7的IP地址:

[DeviceA] interface ge 0/0/7
[DeviceA-GE0/0/7] ip address 2.2.2.2 24
[DeviceA-GE0/0/7] quit

将接口GE0/0/2加入DMZ区域:

[DeviceA] firewall zone dmz
[DeviceA-zone-dmz] add interface ge 0/0/2
[DeviceA-zone-dmz] quit

将接口GE0/0/1加入Untrust1区域(新建区域,优先级设为10):

[DeviceA] firewall zone name untrust1
[DeviceA-zone-untrust1] set priority 10
[DeviceA-zone-untrust1] add interface ge 0/0/1
[DeviceA-zone-untrust1] quit

将接口GE0/0/7加入Untrust2区域(新建区域,优先级设为20):

[DeviceA] firewall zone name untrust2
[DeviceA-zone-untrust2] set priority 20
[DeviceA-zone-untrust2] add interface ge 0/0/7
[DeviceA-zone-untrust2] quit

系统自带的 untrust 区域只有一个,双出口要分清"从哪家线来",就得新建两个外部区域把两条线分开——Untrust1、Untrust2 是自定义区域,优先级随便设了两个不同值(10 和 20),只要不与既有区域冲突即可。

二、配置安全策略,允许外部网络用户访问内部服务器

[DeviceA] security-policy
[DeviceA-policy-security] rule name policy1
[DeviceA-policy-security-rule-policy1] source-zone untrust1
[DeviceA-policy-security-rule-policy1] source-zone untrust2
[DeviceA-policy-security-rule-policy1] destination-zone dmz
[DeviceA-policy-security-rule-policy1] destination-address 10.2.0.0 24
[DeviceA-policy-security-rule-policy1] action permit
[DeviceA-policy-security-rule-policy1] quit
[DeviceA-policy-security] quit

一条规则放行两个外部区域:源区域同时写了 untrust1 和 untrust2(两条线进来的访问都认),目的区域 DMZ、目的地址是服务器网段。

三、配置NAT Server功能

[DeviceA] nat server policy_ftp1 zone untrust1 protocol tcp global 1.1.1.10 ftp inside 10.2.0.8 ftp route
[DeviceA] nat server policy_ftp2 zone untrust2 protocol tcp global 2.2.2.10 ftp inside 10.2.0.8 ftp route

两条映射只差三处:名称(policy_ftp1/policy_ftp2)、绑定区域(untrust1/untrust2)、公网地址(1.1.1.10/2.2.2.10),私网侧完全一致——同一台 10.2.0.8 的 21 端口。行尾的 route 参数表示同时下发对应的服务器路由,让去往公网地址的流量能被引到防火墙本地处理。

四、开启FTP协议的NAT ALG功能

[DeviceA] firewall interzone dmz untrust1
[DeviceA-interzone-dmz-untrust1] detect ftp
[DeviceA-interzone-dmz-untrust1] quit
[DeviceA] firewall interzone dmz untrust2
[DeviceA-interzone-dmz-untrust2] detect ftp
[DeviceA-interzone-dmz-untrust2] quit

FTP 是多通道协议,数据连接的端口是在控制连接里协商出来的,不开 ALG 防火墙看不见协商内容,数据通道就建不起来。两个外部区域与 DMZ 之间各开一份 detect ftp,两边都不能漏。

五、配置源进源出功能和默认网关

[DeviceA] interface ge 0/0/1
[DeviceA-GE0/0/1] redirect-reverse next-hop 1.1.1.254
[DeviceA-GE0/0/1] gateway 1.1.1.254
[DeviceA-GE0/0/1] quit
[DeviceA] interface ge 0/0/7
[DeviceA-GE0/0/7] redirect-reverse next-hop 2.2.2.254
[DeviceA-GE0/0/7] gateway 2.2.2.254
[DeviceA-GE0/0/7] quit

每个外网口两件事:gateway 指定本口默认网关(ISP 侧接入网关地址),redirect-reverse next-hop 指定反向流量引导的下一跳——从 GE0/0/1 进来的会话回包强制从 GE0/0/1 发往 1.1.1.254,从 GE0/0/7 进来的回包走 GE0/0/7 发往 2.2.2.254,进哪个口、出哪个口,一一对应。

六、在Router上配置到服务器映射的公网地址的静态路由

在ISP侧的Router上配置到服务器映射的公网地址的静态路由,使得去服务器的流量能够送往DeviceA。通常需要联系ISP的网络管理员来配置此静态路由。

结果验证

公网用户可以访问内网服务器。当公网用户访问内网服务器时,执行display firewall session table命令查询目的地址为内网服务器的公网地址的表项,查看本次NAT转换的信息。存在该表项,且NAT转换后的IP地址为服务器私网地址,表示NAT策略配置成功。"[]“中的内容为NAT转换后的IP地址和端口。

<DeviceA> display firewall session table
Current Total Sessions : 2
 tcp  VPN:public --> public  1.1.1.35:2474-->1.1.1.10:21[10.2.0.8:21]
 tcp  VPN:public --> public  2.2.2.22:2025-->2.2.2.10:21[10.2.0.8:21]

两条会话正好各走一线:一条从 ISP1 侧访问 1.1.1.10、一条从 ISP2 侧访问 2.2.2.10,方括号里转换后的地址都是 10.2.0.8:21——两个公网地址、同一台服务器,双线发布成立。哪条线的会话建不起来,就顺着那条线的映射、区域与源进源出配置往下查。

配置脚本

DeviceA的配置文件:

#
 sysname DeviceA
#
 nat server policy_ftp1 zone untrust1 protocol tcp global 1.1.1.10 ftp inside 10.2.0.8 ftp route
 nat server policy_ftp2 zone untrust2 protocol tcp global 2.2.2.10 ftp inside 10.2.0.8 ftp route
#
interface GE0/0/1
 ip address 1.1.1.1 255.255.255.0
 redirect-reverse next-hop 1.1.1.254
 gateway 1.1.1.254
#
interface GE0/0/2
 ip address 10.2.0.1 255.255.255.0 
#
interface GE0/0/7
 ip address 2.2.2.2 255.255.255.0 
 redirect-reverse next-hop 2.2.2.254
 gateway 2.2.2.254
#
firewall zone dmz
 set priority 50
 add interface GE0/0/2
#
firewall zone name untrust1 id 4
 set priority 10
 add interface GE0/0/1
#
firewall zone name untrust2 id 5
 set priority 20
 add interface GE0/0/7
# 
firewall interzone dmz untrust1 
 detect ftp 
# 
firewall interzone dmz untrust2 
 detect ftp 
#  
security-policy   
  rule name policy1
    source-zone untrust1 
    source-zone untrust2
    destination-zone dmz 
    destination-address 10.2.0.0 24 
    action permit 
# 
return

注意事项

  • nat server 的 zone 参数是本方案的骨架:两个公网地址分属两个区域,漏了 zone 两条映射会搅在一起;区域名(untrust1/untrust2)自定义,但两条 nat server、安全策略源区域、接口划区三处必须严格对齐。
  • 源进源出别只配一边:GE0/0/1 和 GE0/0/7 都要配 redirect-reverse next-hop,且下一跳必须是对应线路 ISP 侧的接入网关,填反了回程还是串线。
  • FTP 服务必须开 ALG,且两个外部区域与 DMZ 的 interzone 各开一份;换成别的多通道协议(如 SIP)同样要开对应 ALG。
  • ISP 侧 Router 的静态路由是上线前置条件:去往 1.1.1.10/2.2.2.10 的流量要能送到 DeviceA,这步通常要联系 ISP 网络管理员,别漏了约。
  • 对外服务地址是专门申请的(1.1.1.10/2.2.2.10),与接口地址(1.1.1.1/2.2.2.2)分开——混用接口地址发布服务时规划方式不同,别照搬。
  • 验证时两条线分开测:分别用走 ISP1、ISP2 的外网客户端访问两个公网地址,再到防火墙上对 display firewall session table 的转换表项。

双出口发布服务器,两线两地址的映射关系与回程走向,建议请诚鑫致达科技整理成一张流量流向图贴在机柜里,出了"单线通双线断"这类问题按图排查,比临时翻配置快得多。各厂商设备的命令与默认参数存在差异,本文步骤与命令均出自华为官方文档,操作前请核对你的设备型号与软件版本。

源:华为USG防火墙6000F-S官方文档