FortiGate 透明模式下配置注意事项和故障排错技巧
本文给出了透明模式下的 FortiGate 设备的一些在实际部署过程中的配置
注意事项和故障排除技巧,如果您部署了透明模式的 FortiGate,以下内容将可
能会帮助你解决一些在透明模式下遇到的各种问题。
透明模式下配置注意事项
- 生成树的 BPDU 默认情况下不转发,特别要注意引入网络中的二层 FortiGate
设备可能会影响 STP 的工作,因此而容易引起环路。
如果确定 FortiGate 需要转发生成树 BPDU,请在 CLI 中选择需要转发的接口
并配置“set stpforward enable”:
config system interface
edit “port1”
set stpforward enable - 避免使用 Trunk 接口的默认设置(vlan_Forward =enable),默认情况下 Trunk
接口上所有的 VLAN 属于一个大的广播域。大部分情况下建议在特定的接口
或 VLANs 上启用“Forward Domain“,例如将 VLAN10 的所有接口全部配置
到 VLAN10_ForwardDomain 域里面,这样的话相当于为 VLAN10 创建了一个独
立的广播域,同一域内所有接口之间的所有广播和多播只会在本 VLAN 内传
播,而不会广播到 vlan20 的所属接口上。
Trunk 配置时注意:配置 Trunk Vlan 的时候始终为这些在同一个 VLAN 里的
接口配置相同 Forward Domian,创建一个独立的广播域。除非你明确的想要
在两个不同的 VLAN 之间转发流量。而另一种方法是为每对接口/VLAN 创建
VDOM。
config system interface
edit “Inside_vlan10”
set vdom “root”
set forward-domain 10 相同的 vlan ID 配置相同的 fortward-domain
set interface “internal3”
set vlanid 10
next
edit “Outside_vlan10”
set vdom “root”
set forward-domain 10 相同的 vlan ID 配置相同的 fortward-domain
set interface “internal4”
set vlanid 10 - 默认情况下只有 Ethernet II 可以被转发,而其他的帧类型协议(如 IPX
等)是不转发的。如果需要开启转发需要在接口下开启 l2forward 属性:
config system interface
edit “internal”
set l2forward enable - 组播默认不能通过 FortiGate,如果有组播需要通过防火墙,需要配置策略
放通组播流量。例如:透明模式的 FortiGate 上下游为两台路由器,同时路
由器之间运行了 OSPF 路由协议,策略应该允许 IP 224.0.0.5 和 224.0.0.6
两个组播 IP 的双向流量,同理 RIP v2(224.0.0.9)的正常运行也需要策略
放通。 - 如果需要带外管理,最好创建一个 NAT 模式的 root_VDOM 用于带外管理 VDOM,
而新建一个透明模式的 user_VDOM 用于业务流量的转发。 - 如果一个物理接口配置了多个 VLAN 虚拟接口(例如 vlan_10 和 vlan_20),
且想要实现 vlan_10 运行于透明模式,而 vlan_20 运行路由/NAT 模式。这种
情况下,只需要创建两个 VDOM:一个 VDOM_10 为透明模式关联上 vlan_10,
另外一个 VDOM_20 为路由/NAT 模式关联上 vlan_20 即可。 - 在透明模式下的 FortiGate 设备转发流量 VRRP/HSRP 业务流量,数据报文转
发正方向源 MAC 为物理 MAC,反方向目的 MAC 为虚拟 MAC,此时强烈建议为
虚拟 IP 创建一条静态 IP/MAC 绑定。这是为了确保虚拟 MAC 在 FortiGate 不
被老化掉。注意:只能在 Forward_domain 0(默认转发域)的接口上配置静
态 IP/MAC 绑定。
透明模式下故障排错技巧
透明模式下 Troubleshooting 步骤
首先查看 FortiGate 的 L2 转发表项
在透明模式下,FortiGate 基于 L2 转发表(MAC 地址表项)转发二层流量,,
上下游设备发送的 arp 信息会被 FGT 动态的学习到自己 L2 转发表,如果目的 MAC
改变,FGT 会动态的更改会话中的目的 MAC 地址。而 arp 表项是用于 FGT 本地流
量发出时候使用的,如果遇到流量异常可以通过查看 L2 转发表是否正常。
diag netlink brctl list
diag netlink brctl name host <VDOM_name>.b
例如:查看 root VDOM 的 L2 转发表:
diag netlink brctl name host root.b
其次通过 debug sniffer 抓包进行定位
diagnose sniffer packet any " host 192.168.1.1" 4
抓全局接口的 192.168.1.1 流量转发情况,按 CTRL+C 中断抓包
diagnose sniffer packet portA " tcp port 80" 4
diagnose sniffer packet portB " icmp and host 192.168.1.1" 4
抓基于 portA / port B 的过滤流量转发情况
diagnose sniffer packet <each_vlan_interface> " host 192.168.1.1" 6
抓取 VLAN 接口上面的更加详细的携带 vlan-tag 的数据包转发信息
最后通过 debug flow 跟踪会话进行定位
在防火墙部署中,经常会遇到防火墙接收到了数据包,但并未进行转发。可
以通过 diagnose debug flow 命令来对数据包的处理过程进行跟踪,可以清晰
查看数据包再各个功能模块内的处理过程,判断出数据包如何被转发或者丢弃。
Debug flow 源 IP:
diag debug flow filter add <IP_address_of_source_device>
diag debug flow show console enable
diag debug flow show function-name enable
diag debug flow trace start 100
diag debug enable
… 停止 debug, 输入"diag debug flow trace stop / diag debug reset "
Debug flow 目的 IP:
diag debug flow filter add <IP_address_of_destination_device>
diag debug flow show console enable
diag debug flow show function-name enable
diag debug flow trace start 100
diag debug enable
…停止 debug, 输入 "diag debug flow trace stop / diag debug reset "
debug flow 输出信息参考:
id=20085 trace_id=113 msg=“vd-tp_mode received a packet(proto=6,
10.160.0.160:4370->10.160.0.152:23) from internal.”
id=20085 trace_id=113 msg=“Find an existing session, id-00000a40,
original direction”
id=20085 trace_id=113 msg=“enter fast path”
id=20085 trace_id=113 msg=“send out via dev-dmz1,
dst-mac-00:01:02:03:04:05”