Fortigate:启用定向广播以在最后一跳广播转换?

网络工程 加强 网络唤醒 定向广播
2021-07-07 08:18:05

我不太确定如何ip directed broadcast使用 FortiGate实现等效的效果。在这种情况下,FortiGate 60E 与 FortiOS 5.6.7。所以我开始挖一点。

问题: 任何人都可以确认,在 FortiGate 上,set broadcast-forward enable出口接口上确实将定向广播数据包作为广播(如: DstMAC ff:ff:ff:ff:ff:ff)从该接口转发到给定子网当然,假设合适的防火墙策略已经到位。

编辑:问题的那部分得到了回答:不,set broadcast-forward enable在出口接口上没有这种预期的效果。

附带问题:有没有其他方法可以在 FortiGate 上实现这一目标?

编辑 2020-07-21:是的,这是可能的。请参阅下面的“ADDON-2”。它基于 Lukas 的回答(见下文)。

请注意:我非常熟悉ip directed-broacast <someACL>Cisco 路由设备,并且我已经多次成功部署了 WoL 支持。

另请注意:我也不想让广播助手WoL 中继之类的东西在面向 WoL 魔术包发送主机的 FortiGate 接口上工作。该主机知道远程子网的定向广播地址并发送给它。

我一直在寻找提示(例如隔壁的serverfault),set broadcast-forward enable这些提示将添加支持定向广播作为附加子网中的广播转发。

引用文档(或 FortiOS 5.6 的等效文档)是这样说的:

ARP:默认情况下,ARP 广播和 ARP 回复包在属于同一转发域的所有端口或 VLAN 上进行泛洪/转发,无需端口之间的防火墙策略。此默认行为对于允许填充 FDB 并允许进一步的防火墙策略查找是必要的(有关更多详细信息,请参阅透明模式防火墙处理部分)。此选项可在接口设置级别使用参数 arpforward(默认启用)进行配置。

非 ARP:要转发非 ARP 广播,请使用以下 CLI 命令:

配置系统界面

编辑“端口 2”

设置广播转发使能

下一个
结束

但是这句话来自文档的透明模式网络部分(请参阅 -->数据包转发-->广播、多播、单播转发),我们没有在此处运行透明模式。

而且我确实觉得set broadcast-forward enable它更像是一种入口而不是出口。Fortinet 社区的这个帖子中的“最佳答案”证实了这种直觉。

我还阅读了FortiNet KB 文章,该文章也在其他地方被引用和引用,但是...静态 ARP 条目?真的吗?我们在那个站点有几十个客户!(好吧,我仍然可以使用 ff:ff:ff:ff:ff:ff 为定向广播地址添加静态 ARP 条目,但这似乎有些错误。)

感谢您的回答、评论和指点。


[插件-1]:

正如zac67 的回答中所建议的那样,我尝试使用多播地址、多播策略以及窄单播策略(允许源进行定向广播)。没有一个达到预期的效果。

另外:set broadcast-forward enable对出口接口没有影响。由于 ip 转发检查失败,数据包在入口处被丢弃

id=20085 trace_id=35 func=fw_local_in_handler line=402 msg="iprope_in_check() check failed on policy 0, drop"

有趣的是,尽管事实上防火墙在路由表中有一个条目将 192.168.10.255/32 映射到正确的出口接口,但还是会发生这种情况。

RemoteFirewall # diag ip route list | grep 192.168.10
tab=255 vf=0 scope=253 type=3 proto=2 prio=0 0.0.0.0/0.0.0.0/0->192.168.10.0/32 pref=192.168.10.1 gwy=0.0.0.0 dev=8(internal1)
tab=255 vf=0 scope=254 type=2 proto=2 prio=0 0.0.0.0/0.0.0.0/0->192.168.10.1/32 pref=192.168.10.1 gwy=0.0.0.0 dev=8(internal1)
tab=255 vf=0 scope=253 type=3 proto=2 prio=0 0.0.0.0/0.0.0.0/0->192.168.10.255/32 pref=192.168.10.1 gwy=0.0.0.0 dev=8(internal1)
tab=254 vf=0 scope=253 type=1 proto=2 prio=0 0.0.0.0/0.0.0.0/0->192.168.10.0/24 pref=192.168.10.1 gwy=0.0.0.0 dev=8(internal1)

只有在最后一跳 Fortigateset broadcast-forward enable入口接口上(原文如此!只是不要让我开始了解这个的含义!)我看到行为发生了变化。

请注意:我的测试是使用 ICMP 完成的。在 WoL 发送方附近,我只能访问可以发送 ICMP 的系统,而不能访问 udp/9。应该没有关系,在这里。

filters=[host 192.168.115.1]
3.881184 WAN1 in 192.168.115.1 -> 192.168.10.255: icmp: echo request
3.881469 internal1 out 192.168.115.1 -> 192.168.10.255: icmp: echo request
3.882015 internal1 in 192.168.10.3 -> 192.168.115.1: icmp: echo reply
3.882016 internal1 in 192.168.10.2 -> 192.168.115.1: icmp: echo reply
3.882033 internal1 in 192.168.10.4 -> 192.168.115.1: icmp: echo reply
4.896689 WAN1 in 192.168.115.1 -> 192.168.10.255: icmp: echo request
4.896771 internal1 out 192.168.115.1 -> 192.168.10.255: icmp: echo request
4.897309 internal1 in 192.168.10.2 -> 192.168.115.1: icmp: echo reply
4.897325 internal1 in 192.168.10.3 -> 192.168.115.1: icmp: echo reply
4.899076 internal1 in 192.168.10.4 -> 192.168.115.1: icmp: echo reply
    

所以至少,有些事情正在发生。但是这些数据包(在第 2 层)不是真正的广播,而是被发送到 DstMac 00:00:00:00:00:00(我期望的地方ff:ff:ff:ff:ff:ff

filters=[host 192.168.115.1]
4.492989 WAN1 in 192.168.115.1 -> 192.168.10.255: icmp: echo request
0x0000   0000 0000 0001 0000 0000 0000 0800 4500        ..............E.
0x0010   0054 2614 0000 4001 5544 c0a8 7301 c0a8        .T&...@.UD..s...
0x0020   0aff 0800 8984 5700 0000 13a2 c25c 0000        ......W......\..
0x0030   0000 3a7c 0700 0000 0000 0000 0000 0000        ..:|............
0x0040   0000 0000 0000 0000 0000 0000 0000 0000        ................
0x0050   0000 0000 0000 0000 0000 0000 0000 0000        ................
0x0060   0000                                           ..

4.493277 internal1 out 192.168.115.1 -> 192.168.10.255: icmp: echo request
0x0000   0000 0000 0000 0009 0f09 0b01 0800 4500        ..............E.
0x0010   0054 2614 0000 3f01 5644 c0a8 7301 c0a8        .T&...?.VD..s...
0x0020   0aff 0800 8984 5700 0000 13a2 c25c 0000        ......W......\..
0x0030   0000 3a7c 0700 0000 0000 0000 0000 0000        ..:|............
0x0040   0000 0000 0000 0000 0000 0000 0000 0000        ................
0x0050   0000 0000 0000 0000 0000 0000 0000 0000        ................
0x0060   0000                                           ..

无论是否存在任何多播配置位,以及是否存在窄单播防火墙策略,都可以看到此行为。

添加set broadcast-forward enable到出口接口不会更改出口数据包中使用的 DstMAC 地址。尽管如此,本地子网上的一些系统似乎会做出反应DstMAC 00:00:00:00:00:00并发送它们的 ping 回复。这些当然对防火墙来说是州外的并且会被丢弃 - 没有坏处。

我会让服务器团队尝试使用给定配置的 WoL - 如果这不起作用,我们将尝试将静态 ARP 条目映射 192.168.10.255 设置为 ff:ff:ff:ff:ff:ff

[/ADDON-1]:


[ADDON-2 2020-07-21]:

是的,Systems Managament 的人花了一段时间才回到这个话题上,并最终抽出时间通过 WAN 发送一些 WoL 魔术数据包。

测试是在装有 FortiOS 6.0.8 的 Fortigate 100E 上完成的。

有关配置示例,请参阅下面的 Lukas 回答。不需要任何形式broadcast-forward enable我知道 zac67 的回答是一样的,但包括broadcast-forward enable.

这是定向广播离开 FG100 进入给定 LAN/子网时的样子。您会注意到正确的广播目标地址 (ffff.ffff.ffff)。

87.273480 port7 -- 192.168.35.9.54525 -> 192.168.37.255.7: udp 102
0x0000   ffff ffff ffff 0009 0f09 2012 0800 4500        ..............E.
0x0010   0082 185b 0000 7e11 59b7 c0a8 2309 c0a8        ...[..~.Y...#...
0x0020   25ff d4fd 0007 006e 5494 ffff ffff ffff        %......nT.......
0x0030   f8b4 6a25 9dd7 f8b4 6a25 9dd7 f8b4 6a25        ..j%....j%....j%
0x0040   9dd7 f8b4 6a25 9dd7 f8b4 6a25 9dd7 f8b4        ....j%....j%....
0x0050   6a25 9dd7 f8b4 6a25 9dd7 f8b4 6a25 9dd7        j%....j%....j%..
0x0060   f8b4 6a25 9dd7 f8b4 6a25 9dd7 f8b4 6a25        ..j%....j%....j%
0x0070   9dd7 f8b4 6a25 9dd7 f8b4 6a25 9dd7 f8b4        ....j%....j%....
0x0080   6a25 9dd7 f8b4 6a25 9dd7 f8b4 6a25 9dd7        j%....j%....j%..

提示:FG100E 表现出与早期测试中的 FG60E 相似的行为。

随着diag sniffer packet any <someFilterString>,目标 MAC 显示为0000.0000.0000,但diag sniffer packet port7 <someFilterString>显示为ffff.ffff.ffff这不是人们所期望的,并且不必要地扩展了故障排除。

[/ADDON-2]:


3个回答

与 v5.6.11 相比,FortiGates 在 FortiOS v6.0.6 下的行为似乎有所不同。因此,如果这对您来说是可行的选择,您可能需要确保首先升级您的 FortiGate。我不知道行为究竟何时/使用哪个 FortiOS 版本发生了变化。但是到目前为止,我对 v6.0.6 非常满意,在涉及到几个 UTM 功能和深度检查时也是如此。

我最近刚刚升级到 v6.0.6 并实施了 Zac67 的建议。我配置的唯一内容是多播策略。在入口接口和出口接口上都不需要静态 ARP 条目和“设置广播转发启用”。

顺便说一句:我的发件人(“SCCM”)在多个跃点之外,它没有连接到与客户端子网相同的防火墙。

config firewall address
    edit "SCCM"
        set associated-interface "Z-WAN01"
        set subnet 192.168.10.20 255.255.255.255
    next
end

config firewall multicast-address
    edit "CLIENTNET_BROADCAST"
        set type broadcastmask
        set comment "BROADCAST ADDRESS OF WIRED CLIENT NETWORK USED FOR WAKE ON LAN"
        set color 9
        set subnet 10.0.0.255 255.255.255.255
    next
end

config firewall multicast-policy
    edit 1
        set logtraffic enable
        set srcintf "Z-WAN01"
        set dstintf "Z-INSIDE01"
        set srcaddr "SCCM"
        set dstaddr "CLIENTNET_BROADCAST"
        set protocol 17
        set start-port 9
        set end-port 9
    next
end

希望这可以帮助!

在某种程度上,你已经给出了所有问题的正确答案。只是为了确认:

1- 该选项set broadcast-forward enable仅对透明模式下的 FGT 有效,而不对路由/NAT 模式有效。emnoc 和 OP 在 FTNT 论坛帖子中证实了这一事实。

2- 如果您想通过路由 FGT 发送广播,您引用的知识库文章是一个有效的解决方案。请注意,您应该在配置中使用未使用的 IP 地址(示例中的 .19 而 .18 是目标主机的真实地址)。

如果您想向多个/多台主机发送定向广播,您必须为每个主机创建一个 IP/广播 MAC 对。

ede_pfau

我已经设置set broadcast-forward enable了入口和出口接口(通过 VPN)。

我添加了一个多播地址:

config firewall multicast-address
    edit "directed_broadcast"
        set type broadcastmask
        set comment "WoL"
        set associated-interface "internal"
        set subnet 172.16.15.255 255.255.255.255
    next
end

和多播策略:

config firewall multicast-policy
    edit 2
        set logtraffic enable
        set srcintf "SOURCE"
        set dstintf "DESTINATION"
        set srcaddr "all"
        set dstaddr "directed_broadcast"
        set protocol 17
        set start-port 0
        set end-port 255
    next
end

我还需要一个允许定向广播的明确策略 - 除了172.16.15.0/24我必须添加172.16.15.255为目的地之外(在 4.x 或 5.4 中做了)。

我不确定是否一切都(仍然)需要,但这确实有效。

之前,我们使用了“静态 ARP 技巧”,您可以保留一个普通的 IP 地址,然后在路由器上添加一个静态 ARP 条目以将该 IP 映射到ff:ff:ff:ff:ff:ff. 定向广播的优点是可以与普通 LANDesk WoL 配合使用。