pfSense 出站 NAT:先读懂自动生成的规则
远程访问 VPN 地址池往往已被 pfSense 自动生成的规则覆盖。先看清模式,再判断是否需要 Hybrid 例外。
打开 Firewall,再依次打开 NAT、Outbound,先看清模式再动手添加。在 Automatic 模式下,pfSense 会为 WAN 接口生成规则,其中也包括远程访问 VPN 网段,因此你准备添加的地址池往往已被覆盖。缺少一条手写规则,并不能证明缺少转换。按下面的顺序操作,就能避免为了一个地址池把整台防火墙切到 Manual。
模式决定了整台设备上其他所有网段的转换由谁维护,这比单个 VPN 例外重要得多。
Automatic 模式已覆盖 VPN 地址池
每种模式都有各自的责任人。Automatic 为 WAN 接口生成规则,并把远程访问 VPN 网段列入来源。Hybrid 保留这些自动生成的规则,同时允许你在旁边添加手工规则。Manual 不再生成任何规则,于是防火墙上的每条转换都要由你负责,包括你没写过的那些。第四种设置会彻底关闭出站 NAT。看起来像手写的规则,在弄清当前是哪种模式之前,什么也证明不了。
在 Automatic 和 Hybrid 下,页面也会显示自动生成的规则。在断定某个 VPN 地址池没有转换之前,先读这些规则:在来源列里找地址池网段,在接口列里找 WAN 接口。
只有经过复核的例外才选 Hybrid
当出口策略确实不同时,仍然可以有书面例外。设想一台服务器分配 10.90.0.0/24,防火墙应提供 IPv4 互联网出口,而路由已经选中 WAN。预期的转换是把源 10.90.0.23 改写为 WAN 地址。先检查该出口上是否已有自动生成的规则完成这件事;如果没有,Hybrid 会在保留自动覆盖的同时加入你复核过的规则。
来源要使用真实的 VPN 地址池,或为其受支持的别名,绝不能因为选择器里找不到 OpenVPN 实例名就随便选一个无关地址。避免使用 any 作为来源,那也会转换防火墙自身产生的流量。
不要为了一个地址池把整台防火墙切到 Manual。那会让每个内部网段和今后每次 WAN 变更的维护都落到你身上。
NAT 不决定出口
决定出口接口的是路由;出站 NAT 规则只描述数据包离开后源地址如何被改写。WAN 的映射不会把路由已送往别处的数据包强行拉回 WAN,所以加 NAT 修不好错误的路由。也要检查适用的 1:1 NAT 条目和例外,因为顺序很重要,新加的规则未必生效。另外,出站页面并不是过滤页面。
源地址被转换,并不等于被允许访问任何目标。客户端仍然需要一条穿过隧道的路由,以及放行其流量的防火墙规则,选定的出口还需要可用的回程路径。仅限 LAN 的访问要与互联网出口权限分开。
在新连接上验证转换
变更获批后,要用新的授权连接测试,而不是复用已有连接,因为已建立的状态会保留先前的转换。确认真正离开 WAN 的源地址,以及回包经过同一状态返回。不要把清空整张状态表当作第一步,那样就掩盖了究竟是哪条规则改变了结果。在变更单里记录模式、规则、地址池和出口。
本示例只涉及 IPv4 出口。它不涉及 IPv6 转换或过滤策略,需要这些的设计必须另行说明。完整记录要列出允许的客户端流量、承载它的接口,以及为什么源地址本来就需要改写。