MikroTik FastTrack and tunnel traffic
What RouterOS FastTrack skips, why a mangle mark or tunnel route can stop seeing a flow, and the exemption rule that fixes it, with a CHR counter run.
Key takeaways
- 8 stages are skipped by a fasttracked packet, per MikroTik, including the firewall, connection tracking, simple queues and IPsec.
- A mangle mark is a firewall rule, so once a flow is fasttracked the mark and its routing table stop being applied to it.
- 2 accept rules above the fasttrack-connection rule keep tunnel flows out of FastTrack; below it they never run.
- In our CHR run the exemption took flagged flows from 2 to 1; on a hardware router, from 2 to 0.
- The find expression disabled=no matched 0 fasttrack rules on a CHR where !disabled matched 1, so an exemption written with it installs nothing.
On this page (10)
- What does FastTrack skip on RouterOS?
- Is FastTrack the same as FastPath?
- Why does a tunnel or policy route break with FastTrack on?
- How do I exempt tunnel traffic from FastTrack?
- Does a FastTrack exemption stop connections being flagged?
- Does the F flag mean packets skipped the firewall?
- What does turning FastTrack off cost?
- How do I check whether a connection is fasttracked?
- Why does find disabled=no match no firewall rules in RouterOS?
- What should you do with FastTrack on a tunnel router?
FastTrack (fasttrack-connection) is a RouterOS shortcut that forwards established TCP and UDP connections without running them through the firewall again. A mangle mark, and the routing table chosen from it, depend on that firewall pass. Once a tunnel flow is fasttracked, it loses its mark and leaves by the main table.
What this page shows:
- Which stages a fasttracked packet skips, taken from MikroTik's own list.
- Why a policy route needs an exemption, and where that rule must sit.
- A CHR counter run with and without the exemption, and what it did not show.
- A find-expression trap that made our own exemption install nothing.
What does FastTrack skip on RouterOS?
MikroTik's documentation (read 2026-10-29) says FastTracked packets skip eight things, and that firewall filter and mangle rules are not applied to them. FastTrack itself is a handler for TCP and UDP connections that a rule has marked with the fasttrack-connection action.
MikroTik adds that not every packet of a flagged connection can be fasttracked, so some still take the slow path. That is why the action is normally followed by an identical accept rule.
| Skipped stage | What it means when a tunnel is involved |
|---|---|
| Firewall | Filter rules, including a kill switch drop rule, are not evaluated for the flow |
| Connection tracking | The flow is no longer re-examined per packet |
| Simple queues | A per-device speed limit is not applied |
| Queue tree, parent=global | A global shaper is not applied |
| IP accounting | Counters for the flow are not updated |
| IPsec | Policy-based encryption is skipped for the flow |
| Hotspot universal client | Hotspot handling is skipped |
| VRF assignment | The flow is not placed in a VRF |
The table is MikroTik's list, with our reading of the tunnel consequence in the right column. The vendor page ends its description with one sentence we take at face value: it is up to the administrator to make sure FastTrack does not interfere with other configuration.
Is FastTrack the same as FastPath?
No. FastPath is a separate fast-forwarding mechanism that is switched on in the IP settings, and FastTrack is a per-connection decision made by a firewall rule. MikroTik's page states that while both are enabled on a device, only one can be active at a time.
The two names sit side by side in the IP settings. For a tunnel the distinction is practical: you decide FastTrack with a rule you can see and reorder, and that is the rule this page is about.
Why does a tunnel or policy route break with FastTrack on?
A policy route needs the firewall to run on every packet, and FastTrack takes that away. A mangle rule puts a routing mark on the packet, and a route in the table with that name sends the packet into the tunnel. Per MikroTik, a fasttracked packet skips the mangle rule, so it carries no mark.
No mark, so the main table routes it. On a typical home router the main table has a default route out of the WAN link. So a long flow meant for the tunnel can leave over the normal connection.
Two things follow. Both are quiet:
- The flow works. Just over the wrong path.
- A drop rule meant as a kill switch is a filter rule, so it is skipped as well.
Our kill switch test covers where a drop rule must sit relative to the exemption, so we do not repeat that here. The choose-traffic help page states the same warning for the ForestVPN container: a fasttracked connection never reaches mangle or the filter rules again.
How do I exempt tunnel traffic from FastTrack?
Put accept rules for tunnel flows above the fasttrack-connection rule. RouterOS reads the forward chain from the top and stops at the first matching rule, so a flow accepted at rule 1 is never offered to rule 3.
You need one rule for each direction, for established and related connections, matched on the interfaces that face the tunnel side. This is the recipe's form, with our lab's names: br-a is the LAN side and br-b the tunnel side (the recipe uses the LAN bridge and veth-fvpn):
:local ft [/ip/firewall/filter/find where chain=forward and action=fasttrack-connection and !disabled]
:if ([:len $ft] > 0) do={
/ip/firewall/filter/add chain=forward action=accept connection-state=established,related \
in-interface=br-a out-interface=br-b place-before=($ft->0)
/ip/firewall/filter/add chain=forward action=accept connection-state=established,related \
in-interface=br-b out-interface=br-a place-before=($ft->0)
}The full script, with the interface lists and the mangle rules, is on the choose-traffic page and the install page. The routers they are written for are on the MikroTik download page.
Does a FastTrack exemption stop connections being flagged?
On a CHR (Cloud Hosted Router), which is RouterOS running as a virtual machine, the exemption took the number of flagged flows from two to one, and the exempted flow was the one that stopped being flagged. That is the whole claim of this run.
How this was tested
- Product
- MikroTik RouterOS Cloud Hosted Router (CHR), free licence level, device-mode advanced
- Version
- 7.24.1 (stable, build 2026-08-21)
- System
- x86_64 QEMU guest, 512 MiB, virtual router, not hardware
- Checked
- Runs
- 1
Not tested
The router held the factory-style fasttrack rule, the established-and-related accept and drop-invalid rules, a mangle rule marking two flows for a routing table named via-fvpn, and that table with routes for both destinations. The table stands in for the tunnel table. It is not a WireGuard or any other tunnel, and no packet was encrypted.
Two helper containers sat behind bridges, from the router's container package: a client and a listener. Each run sent about 300 KiB over TCP on two flows. Flow 1 went to the listener behind the exempted pair of interfaces. Flow 2 went to the WAN side and was not covered by the exemption. Run A had the two accept rules disabled; run B had them enabled. Each ran once.
Not tested: throughput or CPU (the free licence caps a CHR at 1 Mbit/s), a real tunnel, the ForestVPN container, and any actual skipping of packets by the fast path.
| Measure | A: exemption disabled | B: exemption enabled |
|---|---|---|
| Flagged flows (F) of 2 | 2 | 1 |
| Flow 1, exempted pair | F set | not flagged |
| Flow 2, not exempted | F set | F set |
| Packets on the two accept rules (flows rule / replies rule) | 0 / 0 | 46 / 38 |
| Packets on the fasttrack rule | 419 | 299 |
| Packets counted by the mark-routing rules (flow 1 / flow 2) | 63 / 85 | 47 / 80 |
| Measure | Without the exemption | With the exemption |
|---|---|---|
| Fasttrack-flagged client flows | 2 | 0 |
Does the F flag mean packets skipped the firewall?
One caveat matters more than the table. On this CHR the connections were flagged, but no packet was actually fasttracked.
orig-fasttrack-packets and repl-fasttrack-packets read 0 in every run, the fast-path counters in the IP settings stayed at 0, and the mark-routing counters equal each connection's packet count. So every packet still passed mangle.
We can show the flag and the exemption's effect on it. We cannot show a mark going missing, and we did not establish why. Virtual NICs and bridges inside a virtual machine are candidates, and we did not test them.
The second table is a hardware record, not a repeat of the CHR run. It comes from verifying our own recipe on a MikroTik cAP ax, RouterOS 7.24.5. The router's own fasttrack rule was disabled, so two test fasttrack rules stood in. With the exemption disabled, two client flows were flagged; with it enabled, none were, during a 33 s download.
Our recipe is on the choose-traffic page; we saw orig-fasttrack-packets=0 on the router as well, so we did not reproduce the leak the exemption prevents on that hardware. We cite it as our recipe's result, and do not generalise it to other boards.
What does turning FastTrack off cost?
Turning FastTrack off costs the shortcut: every packet of every forwarded connection then goes through connection tracking, the filter chain and mangle. That is the mechanism, and all we claim.
We did not measure the effect on throughput or CPU, so we give no figure. Our virtual router was the wrong place to try, and a hardware router would need its own test.
Which is the case for the exemption over disabling the rule. The exemption removes only the tunnel flows from the shortcut, and everything else stays fasttracked.
How do I check whether a connection is fasttracked?
Read the connection table. In /ip firewall connection print, a connection with the F flag has been marked by the fasttrack rule. The detail view then adds orig-fasttrack-packets and repl-fasttrack-packets, which count the packets that were really fasttracked in each direction.
Two counters tell you the rest:
- The mangle rule that marks your flow, read with
/ip firewall mangle print stats. If it counts every packet of the connection, the flow still passes mangle. - The accept rules of the exemption. A rule at zero packets matches nothing.
The flag alone is not proof of skipping, as the CHR run shows. Read the packet counters beside it.
Why does find disabled=no match no firewall rules in RouterOS?
Our script found the fasttrack rule with disabled=no, and that matches only rules that have the flag set explicitly. On the CHR we added rules without a disabled= argument and counted what each form found.
| Menu | disabled=no | !disabled |
|---|---|---|
| Filter, all rules | 0 | 4 |
| Filter, the fasttrack rule | 0 | 1 |
| Mangle | 0 | 5 |
| Route | 0 | 9 |
The filter count of 4 includes the dynamic dummy rule that RouterOS adds to show fasttrack counters.
On the R2 router the same trap gave 0 against 5 for filter, 0 against 6 for mangle and 1 against 9 for route. An exemption that looks for the fasttrack rule with disabled=no finds none, so it has nothing to place its accept rules before and installs nothing. The script reports no error. We changed the recipe to !disabled.
This is a finding about our own script and the way it adds rules, not a claim about RouterOS in general. If you write your own, count what your find expression returns before you rely on it.
What should you do with FastTrack on a tunnel router?
Keep FastTrack on for the traffic that is not going through the tunnel, put the two accept rules above it for the traffic that is, and check the rule counters and the F flag afterwards. Do not disable the fasttrack rule to make a tunnel work unless you have decided you can afford the full path for every packet.
Questions and answers
What does FastTrack skip on RouterOS?
MikroTik lists eight things a fasttracked packet skips: firewall, connection tracking, simple queues, queue tree with parent=global, IP accounting, IPsec, hotspot universal client and VRF assignment. Firewall filter and mangle rules are not applied to the traffic either.
Is FastTrack the same as FastPath?
No. FastPath is a separate fast-forwarding mechanism in the same IP settings. MikroTik says that while both are enabled on a device, only one can be active at a time. FastTrack is chosen per connection by a firewall rule.
Why does a tunnel or policy route break with FastTrack on?
Marks come from mangle rules and routing tables are chosen from those marks. FastTracked packets skip mangle, so a flow that was flagged before or without its mark is forwarded by the main table instead of the tunnel table.
How do I exempt tunnel traffic from FastTrack?
Add accept rules in the forward chain for established and related flows to and from the tunnel side, and place them before the fasttrack-connection rule. The first matching rule wins, so a rule below it is never reached by those flows.
What does turning FastTrack off cost?
Every packet of every forwarded connection then takes the normal path through connection tracking, the filter chain and mangle. That is the mechanism. We did not measure the effect on throughput or CPU, so we give no figure.
How do I check whether a connection is fasttracked?
Run /ip firewall connection print and look for the F flag. Then read orig-fasttrack-packets on the connection: a flagged connection can still show zero fasttracked packets, as it did on our CHR.
Sources
- MikroTik documentation: Connection tracking (FastTrack section) (read October 29, 2026)
- MikroTik documentation: Mangle (read October 29, 2026)
- MikroTik documentation: Route (read October 29, 2026)
How this was made
Drafted with AI assistance from MikroTik's documentation, a counter run on a virtual RouterOS CHR on 2026-10-29 and the verification record of our own router recipe, checked by automated gates and an editor.