先确定 VLAN 网关,再决定 VPN 出口
拥有默认网关的设备决定出口策略能应用在哪里。让两个 VLAN 都经过同一个中转,并按来源选择出口。
两个 VLAN 需要不同的 VPN 出口,而第一个问题不是写哪条策略,而是哪台设备负责应答默认网关。如果交换机在 VLAN 之间路由,防火墙规则可能描述一条数据包永远不会走的路径。先梳理拓扑,再动出口策略。
第一步:找出每个 VLAN 使用的网关
询问每台客户端的网关,并问交换机哪个接口拥有该 VLAN。默认网关决定离开子网的流量第一次路由决策,因此也决定哪台设备能够应用策略。
ip route show default
show ip interface brief
两种自洽的布局很常见。要么防火墙拥有 VLAN 接口并在它们之间路由,要么多层交换机拥有这些接口并在本地路由,只把外部目的地交给防火墙。两者都可行,只是把策略放在不同位置。
要有意识地选定一种,因为混合布局正是规则落到错误设备上的原因。
第二步:决定本地策略放在哪里
如果交换机在员工和实验室之间路由,防火墙规则无法检查根本到不了防火墙的交换。本地策略必须放在交换机自己的访问控制里,或者有意把流量引导到检查点。
反过来选也有代价。让防火墙成为每个 VLAN 的网关,会把本地路由流量纳入该设备的容量与可用性计划,于是防火墙重启就变成 VLAN 之间的中断。要评估实际硬件,而不是假定交换机无状态或防火墙很慢。当你要重启的设备不是两个繁忙子网之间的路径时,容量规划会更容易。
关键在于所选策略是否位于数据包实际经过的路径上。
第三步:让两台设备共用一条中转链路
当交换机负责路由时,单条中转子网能让拓扑保持清晰,而不是把两台设备作为竞争路由器挂到每个客户端 VLAN 上。交换机拥有客户端子网,防火墙拥有外侧。
# on the switch
ip route 0.0.0.0/0 10.255.0.2
# on the firewall
ip route add 10.20.10.0/24 via 10.255.0.1
ip route add 10.20.20.0/24 via 10.255.0.1
交换机把外部目的地发往防火墙的中转地址,防火墙则有经交换机返回两个客户端前缀的路由。迁移期间要保持管理访问、DHCP 网关设置和 VLAN 成员关系不变,因为正是这三样会把一次干净的切换变成拿着控制线忙一下午。
中转设计还让下一次更换防火墙变成路由变更,而不是重新布线工程。
第四步:根据到达的来源选择出口
在普通路由且中间没有源地址转换时,防火墙在中转接口上收到员工或实验室的原始地址。两个 VLAN 都经一条链路到达,它们的 IP 身份得以保留。
用该源地址和实际入口路径上的目标目的地来表达 VPN 选择。OPNsense 的规则文档区分了遵循系统路由的默认网关设置与调用基于策略路由的显式网关。当选择取决于数据包来自哪里时,使用显式形式。普通的默认路由没有任何理由去看来源。
把本地目的地排除在过于宽泛的出口规则之外,并核对你所运行版本支持的网关型号。
第五步:证明两条路径
把结果写成两句话:员工到已批准目的地的流量经出口 A 离开,实验室到已批准目的地的流量经出口 B 离开。再补上返回路由、转换规则,以及某个出口故障时的预期行为。
traceroute -n 198.51.100.10
然后单独测试一个本地跨 VLAN 服务,因为它会在同一设计中检验另一种决策。
每个 VLAN 的新流量、可用的本地服务以及有记录的故障路径共同证明设计;一次成功的 ping 只能证明那一刻存在一条路径。