Build1 publisher3 min readPublished
FortiOS blocks central NAT while a single policy still references a VIP
Moving an ASA or PAN-OS rulebase onto a FortiGate means picking the NAT model on an empty appliance, because the toggle that gives back one shared NAT table is gated on every VIP and IP pool reference in the policy set.
The Engineer · Build desk

What happened
- One ASA twice-NAT statement covering traffic matched by fourteen ACEs has to be rewritten as fourteen separate per-policy translations on the FortiGate side.
- FortiOS refuses set central-nat enable while any policy references a VIP, answering "Cannot enable central-nat with firewall policy using vip".
- Once central NAT is on, destination translation happens before policy evaluation, so an inbound policy has to match the VIP's mapped internal address instead of the public one.
Compiled by The EngineerSomething wrong?How this is made
Why it matters
- decision The NAT model belongs in the appliance-prep step of a migration runbook, ahead of interfaces and objects, and on a new box it has to be set and re-logged-in before the first rule exists.
- cost Getting the destination object wrong costs time inside the maintenance window, and the symptom sends the on-call engineer to look at routes first.
- exposure Pre-cut-over review has to walk the VIP table itself, since searching the policy set will not surface a translation that no policy references.
- constraint A converted ASA NAT table cannot be ported line for line, because FortiGate matches on destination interface and three ASA ordering sections have to be collapsed into one list by hand.
The inbound failure is an ordering problem. With central NAT enabled, the DNAT and Virtual IPs table applies to every policy on the box, whether or not the policy mentions a VIP [15]. Destination translation has already happened by the time the policy is evaluated, so the policy has to match the VIP's mapped address, the internal one [16]. Under per-policy NAT the same rule names the VIP object as its destination [14]. Engineers arriving from PAN-OS carry the harder habit, because that rulebase wants the pre-NAT address and the post-NAT zone in the same rule, and on a central-NAT FortiGate, according to the dev.to write-up from Hexward Labs, that habit silently denies every inbound session [17].
Duplication drives converted configurations into central NAT in the first place. ASA keeps NAT in its own ordered table, object NAT and twice NAT evaluated in sections, separate from the ACLs [3]. PAN-OS keeps NAT in its own rulebase, separate from security rules [4]. In both, one NAT rule serves many policy rules [5]. Per-policy NAT has no way to write that down. The post's example is a single ASA twice-NAT statement covering traffic matched by fourteen ACEs [6]. Per-policy NAT turns that into fourteen translations, one on each converted policy [6]. Thirteen of them are copies of the first, and each is an edit the next time the pool changes [7]. Central NAT gives back one ordered SNAT table, one DNAT table, and firewall policies that only decide allow or deny [8]. For a greenfield FortiGate the post still recommends per-policy NAT, which is the FortiOS default and puts a `nat enable` and an optional IP pool on each policy [2][1].
FortiOS blocks the toggle by counting references. `set central-nat enable` answers "Cannot enable central-nat with firewall policy using vip", and the equivalent IP pool error names the policy ID [9][10]. The objects have to reach zero references; the post notes they do not strictly have to be deleted, though on a freshly built policy set it usually amounts to the same thing [11]. Its failure scenario is two days of interfaces, zones, address objects, service objects and four hundred policies, followed by editing all four hundred to strip VIP references before the mode will take [12]. On a new appliance the order it gives is: enable central NAT, log out and back in so the GUI redraws, then build [13]. Needing a fresh login before the menus change is a fair indicator of how far down the setting sits.
Getting the mode right does not make a converted SNAT table a line-for-line port. It reads top down and first match wins, the same as an ACL or an ASA NAT section [19]. A central SNAT entry matches on source interface, destination interface, source address, destination address, protocol, destination port and original source port [20]. An ASA NAT rule has no destination interface as a match key in the same way, and ASA's section order, manual NAT before auto NAT before after-auto NAT, does not map onto one flat list [21].
The two central tables run independently. Every VIP and DNAT rule is in effect once central NAT is on, whatever the central SNAT table contains, including one created earlier and forgotten [18].
What to watch
- Whether FortiOS gates disabling central-nat the same way it gates enabling it; the post documents only the enable direction.
- Whether automated conversion tooling emits central NAT for every ASA and PAN-OS input, given the claim that converted configurations tend to land there.
- Later notes in the series, which the author says are verified against vendor docs and real migrations.