fortigate 透明模式配置建议 · 2019. 1. 23. · fortigate透明模式配置建议 版本 1.5...
TRANSCRIPT
目录1. 概述 ....................................................... 3 2. 二层部署模式................................................. 4
2.1. Vlanforward 简单二层透传部署 .......................... 4 2.2. Forward-domain 二层 vlan 映射部署 ...................... 5 2.3. 虚拟接口对部署(重点推荐部署)........................ 8
3. 重要概念及命令.............................................. 10 4. 排障方法及命令.............................................. 17
4.1. 先检查 FortiGate 的二层 MAC 地址表..................... 17 4.2. 使用 sniffer 验证数据包是否到达防火墙................. 18 4.3. 验证数据包是否穿越防火墙(vlanforward 无效) ........... 19 4.4. 验证数据包在防火墙上创建连接(vlanforward 无效) ....... 21
5. 参考文档资料................................................ 23
1. 概述
路由和透明模式是 FortiGate 的两种运行模式,路由模式根据 IP 包进行路
由转发,而透明模式则根据以太帧头作转发决定。
任何 VDOM 都可以配置为路由或透明模式,NGFW 或者 UTM 功能在两种模式都
是有效的。
2. 二层部署模式
透明模式墙有三种部署方式,强烈建议使用第三种虚拟接口对。
2.1. Vlanforward 简单二层透传部署
无法在二层环境下部署策略,并且只能部署一进一出端口的情况(多于
两个会造成环路),带vlan标记的流量不需要策略就能穿越FortiGate,
不建议部署。
测试拓扑如下:
配置截图:
FortiGate
SW2
SW3F0/1F0/2
PC2192.168.1.2
PC1192.168.1.1
F0/3
192.168.1.10192.168.2.10
vlan100 vlan200
port7
port8
F0/0
2.2. Forward-domain 二层 vlan 映射部署
配置复杂,需要在每个接口添加相应的 vlan 接口,默认所有 vlan 接口
都在一个转发域,需要把每对 vlan 接口都配置为不同的转发域(不同
的转发域接口不能加入同一条策略,或 Zone),否则 FortiGate 会把
交换机的 vlan100 和 vlan200 打通为一个转发域,非常容易出现环路。
FortiGate 依靠二层转发表项,而且遇上单臂的环境(如 PC1 访问
PC2)要对数据方向两对接口进行开通两条策略。
测试拓扑如下:
配置截图:
FortiGate
SW2
SW3F0/1F0/2
PC2192.168.1.2
PC1192.168.1.1
F0/3
port3port3vlan100port3vlan200
port2port2vlan100port2vlan200
F0/0
192.168.1.10192.168.2.10
vlan100 vlan200
Vlan 接口允许 vlan:
策略开放:
2.3. 虚拟接口对部署(重点推荐部署)
虚拟接口对部署简单,直接对两个端口进行转发,单独的 mac 表项,单
臂情况下只需要开通单向防火墙策略即可。
测试拓扑如下:
配置图:
(注:"set wildcard-vlan enable"建议开启,否则带有 vlan 接口的数据无法
转发)
FortiGate
SW2
SW3F0/1F0/2
PC2192.168.1.2
PC1192.168.1.1
F0/3
192.168.1.10192.168.2.10
vlan100 vlan200
port7
port8
F0/0
策略开放:
虚拟接口对需要另外的 mac 表项:
3. 重要概念及命令
l 默认情况下生成树的 BPDU 报文不进行转发;要注意 FortiGate 在二层
环网下部署透明模式会阻断生成树的数据包。
如果需要 FortiGate 设备在透明模式下进行转发 BPDU 报文,则必须要
在 CLI 下对所有归属透明模式的接口进行配置"set stpforward enable"。
测试拓如下:
防火墙配置:
FortiGate
SW2
SW3F0/1F0/2
PC2192.168.1.2
PC1192.168.1.1
F0/3
port3port3vlan100port3vlan200
port2port2vlan100port2vlan200
F0/0
192.168.1.10192.168.2.10
vlan100 vlan200
命令生效前 SW2 和 SW3 的生成树状态
SW2:
SW3:
命令在物理接口生效后 SW2 和 SW3,SW3 的只有不带标记的 vlan 生成树
根指向 SW2,没有在带 vlan 标记的端口配置则其余 vlan 生成树的根不
变
SW2:
SW3:
注:物理接口和 vlan 接口的"set stpforward enable"不一样,当物理接口下
有 vlan 接口,物理接口配置了该命令,只允许不打标记的 vlan 通过
stp 数据包,如果在 vlan 接口配置了该命令就在相应的 vlan 充许 stp
通过
l 通过使用转发域让数据仅在指定的接口或者 VLAN 之间转发流量,避免
使用 trunk 这种默认配置("set vlanforward enable")。FortiGate 应该为每
个 VLAN 创建单独的广播域,以便组播和广播在同一转发域的所有端口
进行转发。如有多于两个接口以上的情况,除非是特殊需求桥接多于两
个接口以上否则必须只配置两个接口在相同的转发域。
另外还可以单独为两个接口创建一个 VDOM。
注:物理端口"set vlanforward enable"是允许所有流量(包括组播)在没有
策略的情况下互相通信,而且会依据二层转发表进行转发数据。
(vlanforward 配置后看不到 sesssion 和 debug flow)
l 默认情况下透明模式的 FortiGage 只转发以太网帧,其余 IPX 或者其它
二层的协议帧不会进行转发。如需要进行转发,则在接口下配置" set
l2forward enable"。
l 关于组播
组播策略开启有如下两个命令:
命令 1: "conf firewall multicast-policy" (注:vdom 开启透明模式后系统会在
默认的组播策略自行添加所有方向 any any 的全通策略【配置图的策略
1】,该策略允许所有组播通过,不需要手工加策略)
默认配置如下图:
测试组播匹配策略:
命令 2:System setting 里命令:"set multicast-skip-policy" (说明:若命
令 1里的策略 1删除后,并且允许策略不存在,需要配置 enable 允许
所有组播通过)
配置如下图:
测试组播匹配策略:
注意:假设有部份没有组播默认策略的案例是 FortiGate 上的组播策略
定义了允许特定组播流量通过。例如,当 FotiGate 使用透明模式并配
置了组播策略部署在两台 OSPF 设备之间,那么要对组播地址
(224.0.0.5)和(224.0.0.6)进行双向放通(如果两端接口是 MA 网络类
型,存在单播的 DBD 播文,需要另外的单播策略放通,邻居才正常建
立),RIPV2 的(224.0.0.9)也是一样。
配置策略如图:
测试组播策略匹配:
l 关于广播
缺省情况下广播是不受策略控制的,接下口的广播转发是禁止的,但
arp 广播是允许的,看默认配置如下:
为了符合 dhcp 获取地址这种场合,建议开启,命令如下:
"set broadcast-forward [ enable | disable *]"
l 当有带外管理的场景,使用 root VDOM 作为管理 VDOM 并另外创建多个
透明模式的 VDOM 进行传输用户的数据。
l 当在透明模式下使用 VLANIF,在路由模式的 VDOM 上保留带有 VLAN 的
物理接口和只分配所需的 VLANIF 到透明模式的 VDOM 即可。
l 当 FortiGate 使用透明模式桥接 pc 和路由器,存在双向访问 MAC 不一
致的情况,例如:PC 使用路由器的虚拟 MAC 访问路由器,然后路由器
回应通信时使用另外的的物理 MAC(如使用 VRRP 或者 HSRP 协议),强烈
建议在透明的 VDOM 为虚拟 MAC 创建静态 MAC 条目,这样能保证在透明
模式下 FortiGate 能在二层转发表里找到该虚拟 MAC。(注意:只能在
默认的转发域创建接口的静态 MAC 条目)
4. 排障方法及命令
ForitGate 透明模式数据连接的故障处理步骤:
4.1. 先检查 FortiGate 的二层 MAC 地址表
注意:在透明模式下,FortiGate 是根据二层转发数据库进行转发二层数
据,该数据库只能在 Global 通过命令"diag netlink brctl name host root.b"进行导
出,ARP 表只能在有 IP 访问 FortiGate 的情况下出现。
外部设备发送的 ARP/GARP 会映射到二层转发表,并且当 MAC 地址变更的时
候会在会话同步更改目标 MAC 地址。
下面的命令能导出每一个 VDOM 桥实例的二层转发表,在转发表里可以单独
看到 VLAN/VDOM 里的 MAC 地址:
diag netlink brctl list diag netlink brctl name host <VDOM_name>.b
trans VDOM 查看二层转发表的例子:
diag netlink brctl name host trans.b
输出如下:
==================================================================
diagnose netlink brctl name host trans.b ================================================================== show bridge control interface trans.b host. fdb: size=2048, used=4, num=8, depth=3 Bridge trans.b host table port no device devname mac addr ttl attributes 7 21 port3vlan200 00:50:79:66:68:01 0 Static 1 3 port1 52:c9:fd:91:54:00 0 Local Static 6 20 port2vlan200 52:c9:fd:91:54:01 0 Local Static 3 17 port2vlan100 52:c9:fd:91:54:01 0 Local Static 2 4 port2 52:c9:fd:91:54:01 0 Local Static 8 5 port3 52:c9:fd:91:54:02 0 Local Static 7 21 port3vlan200 52:c9:fd:91:54:02 0 Local Static 5 19 port3vlan100 52:c9:fd:91:54:02 0 Local Static
虚拟接口对存在另外的 host,需要加_v 查找 mac 地址
4.2. 使用 sniffer 验证数据包是否到达防火墙
通过以下命令使用 sniffer 抓取相应信息;通过使用 ping 在 FortiGate 两
端进行测试可以初步分析问题。这个能看到在 FortiGate 上面流入以及流出的
数据包。保持运行抓取信息一段时间能查看一些典型的案例。(注意:下列命令
""里是过滤条件,如需参考更详细的过滤条件命令,请查看文章末尾的参考资
料)
4.2.1 全部数据包进行抓取
diagnose sniffer packet any "" 4 0 l 按 CTRL+C 进行停止
4.2.2 基于端口进行数所包抓取
diagnose sniffer packet portA "" 4 0 l diagnose sniffer packet portB "" 4 0 l
4.2.3 如有需要,可以通过每个 vlan 进行获取更明细内容
diagnose sniffer packet <each_vlan_interface> "" 6 0 l
参数 4和 6的区别(用于显示输出抓取数据参数):
1: print header of packets(只有 IP 头部) 2: print header and data from ip of packets(有 ip 头部和数据内容) 3: print header and data from ethernet of packets (if available) 4: print header of packets with interface name(只有 IP 头部和端口) 5: print header and data from ip of packets with interface name(有 ip 头部和数据内容以及端口) 6: print header and data from ethernet of packets (if available) with intf name
参数 0的用处:
输出个数
参数 l的用处(用于输出时候显示的时间格式):
a: absolute UTC time, yyyy-mm-dd hh:mm:ss.ms l: absolute LOCAL time, yyyy-mm-dd hh:mm:ss.ms
4.2.4 以抓取地址 192.168.2.1 相关的 icmp 的抓取条件
================================================================== diagnose sniffer packet any "host 192.168.2.1 and icmp" 4 0 l ==================================================================
当有触发排障的流,输出如下: diagnose sniffer packet port7 'host 192.168.2.1 and i filters=[host 192.168.2.1 and icmp] 2019-01-23 00:58:37.204850 port8 out 192.168.1.1 -> 192.168.2.1: icmp: echo request 2019-01-23 00:58:37.215519 port7 out 192.168.1.1 -> 192.168.2.1: icmp: echo request 2019-01-23 00:58:37.227232 port8 out 192.168.2.1 -> 192.168.1.1: icmp: echo reply 2019-01-23 00:58:37.235797 port7 out 192.168.2.1 -> 192.168.1.1: icmp: echo reply 2019-01-23 00:58:37.247349 port8 out 192.168.1.1 -> 192.168.2.1: icmp: echo request 2019-01-23 00:58:37.257759 port7 out 192.168.1.1 -> 192.168.2.1: icmp: echo request 2019-01-23 00:58:37.258426 port8 out 192.168.2.1 -> 192.168.1.1: icmp: echo reply 2019-01-23 00:58:37.298120 port7 out 192.168.2.1 -> 192.168.1.1: icmp: echo reply
4.3. 验证数据包是否穿越防火墙(vlanforward 无效)
在每一个 VDOM 使用"debug flow"命令进行跟踪流量。
通过使用 ping 在 FortiGate 两端进行测试可以初步分析问题。
这种排障的方法能够查看到流量是否因为某条策略导致数据包不通或者通
过设备。
4.3.1 以源地址为抓取条件
================================================================== diag debug flow filter add <IP_address_of_source_device> diag debug flow show function-name enable diag debug flow show console enable diag debug flow show iprope enable diag debug flow trace start 100 diag debug enable ==================================================================
如需要停止,可以敲"diag debug flow trace stop",也需要一并把过滤条件取消
" diag debug flow filter clear"(否则影响下一次的过滤条件)
4.3.2 以目标地址为抓取条件
================================================================== diag debug flow filter add <IP_address_of_destination_device> diag debug flow show function-name enable diag debug flow show console enable diag debug flow show iprope enable diag debug flow trace start 100 diag debug enable ==================================================================
如需要停止,可以敲"diag debug flow trace stop"
当有触发排障的流,输出如下:
id=20085 trace_id=1 func=print_pkt_detail line=5384 msg="vd-trans:0 received a packet(proto=1, 192.168.1.1:1->192.168.2.1:2048) from port7. type=8, code=0, id=1, seq=0."
id=20085 trace_id=1 func=init_ip_session_common line=5544 msg="allocate a new session-00000101"
id=20085 trace_id=1 func=iprope_dnat_check line=4942 msg="in-[port7], out-[]" id=20085 trace_id=1 func=iprope_dnat_check line=4955 msg="result: skb_flags-06000000,
vid-0, ret-no-match, act-accept, flag-00000000" id=20085 trace_id=1 func=iprope_fwd_check line=726 msg="in-[port7], out-[port8],
skb_flags-06000000, vid-0, app_id: 0, url_cat_id: 0" id=20085 trace_id=1 func=__iprope_check line=2238 msg="gnum-100004, check-
ffffffffa0021e4c" id=20085 trace_id=1 func=__iprope_check_one_policy line=1996 msg="checked gnum-
100004 policy-4, ret-matched, act-accept" id=20085 trace_id=1 func=__iprope_user_identity_check line=1806 msg="ret-matched" id=20085 trace_id=1 func=__iprope_check line=2238 msg="gnum-4e20, check-
ffffffffa0021e4c" id=20085 trace_id=1 func=__iprope_check_one_policy line=1996 msg="checked gnum-4e20
policy-6, ret-no-match, act-accept" id=20085 trace_id=1 func=__iprope_check_one_policy line=1996 msg="checked gnum-4e20
policy-6, ret-no-match, act-accept" id=20085 trace_id=1 func=__iprope_check_one_policy line=1996 msg="checked gnum-4e20
policy-6, ret-no-match, act-accept" id=20085 trace_id=1 func=__iprope_check line=2257 msg="gnum-4e20 check result: ret-no-
match, act-accept, flag-00000000, flag2-00000000" id=20085 trace_id=1 func=__iprope_check_one_policy line=2209 msg="policy-4 is matched,
act-accept" id=20085 trace_id=1 func=__iprope_check line=2257 msg="gnum-100004 check result: ret-
matched, act-accept, flag-08010000, flag2-00004000" id=20085 trace_id=1 func=iprope_fwd_auth_check line=781 msg="after
iprope_captive_check(): is_captive-0, ret-matched, act-accept, idx-4" id=20085 trace_id=1 func=br_fw_forward_handler line=539 msg="Allowed by Policy-4:"
id=20085 trace_id=1 func=__if_queue_push_xmit line=417 msg="send out via dev-port8, dst-mac-00:00:5e:00:01:01"
4.4. 验证数据包在防火墙上创建连接(vlanforward 无效)
在每一个 VDOM 使用"debug session"命令进行防火墙会话检查。
通过使用 ping 在 FortiGate 两端进行测试可以初步分析问题。
这种排障的方法能够查看防火墙是否会为流量创建会话,以及是否硬件加
速以及命中哪一条策略。
4.4.1 以源地址为抓取条件(单播)
================================================================== diag sys session filter src <IP_address_of_source_device> diag sys session list ==================================================================
当有触发排障的会话,输出如下: session info: proto=1 proto_state=00 duration=2 expire=58 timeout=0 flags=00000000
sockflag=00000000 sockport=0 av_idx=0 use=4 origin-shaper= reply-shaper= per_ip_shaper= class_id=0 ha_id=0 policy_dir=0 tunnel=/ vlan_cos=0/0 state=may_dirty br statistic(bytes/packets/allow_err): org=500/5/1 reply=500/5/1 tuples=2 tx speed(Bps/kbps): 248/1 rx speed(Bps/kbps): 248/1 orgin->sink: org pre->post, reply pre->post dev=9->10/10->9 gwy=0.0.0.0/0.0.0.0 hook=pre dir=org act=noop 192.168.1.1:64->192.168.2.1:8(0.0.0.0:0) hook=post dir=reply act=noop 192.168.2.1:64->192.168.1.1:0(0.0.0.0:0) misc=0 policy_id=4 auth_info=0 chk_client_info=0 vd=1 serial=00000512 tos=ff/ff app_list=0 app=0 url_cat=0 rpdb_link_id = 00000000 vlanid=100 dd_type=0 dd_mode=0 total session 1
4.4.2 以源地址为抓取条件(多播)
================================================================== diagnose sys mcast-session list ==================================================================
当有触发排障的会话,输出如下: session info: id=123 vf=1 proto=112 192.168.1.2.0->224.0.0.18.0 used=2 path=1 duration=1353 expire=179 indev=10 pkts=1360 bytes=54400 state=00000002:tp path: policy=0, outdev=9
session info: id=124 vf=1 proto=112 192.168.2.99.0->224.0.0.18.0 used=2 path=1 duration=1353 expire=179 indev=10 pkts=1360 bytes=54400 state=00000002:tp path: policy=0, outdev=9 Total 2 sessions diag sys session list
5. 参考文档资料
验证策略是否有流量命中,技术文章:
https://kb.fortinet.com/kb/documentLink.do?popup=true&externalID=100139&languageId=
对数据包,流,会话,路由表的连接问题进行诊断,故障诊断文章:
http://kb.fortinet.com/kb/documentLink.do?popup=true&externalID=FD30038&languageId=
诊断连接会话各选项的名词解释,技术文章:
http://kb.fortinet.com/kb/documentLink.do?popup=true&externalID=FD30042&languageId=
在透明模式下使用 forwading domain 进行映射 VLAN,技术文章:
http://kb.fortinet.com/kb/documentLink.do?popup=true&externalID=FD32877&languageId=
防火墙如何处理接到到免费 ARP 的数据包,技术文章:
https://kb.fortinet.com/kb/documentLink.do?popup=true&externalID=FD36490&languageId=
文章 4.2 的 sniffer 抓包工具介绍,技术文章:
https://kb.fortinet.com/kb/microsites/search.do?cmd=displayKC&docType=kc&externalId=11186&sliceId=1&docTy
peID=DT_KCARTICLE_1_1&dialogID=63346161&stateId=1%200%2063344177%27)