ECMP works very well in ROS7, works with fasttrack enabled and applicable to the connections using ECMP, and since 7.16 you can use the L4 mode (for both IPv4 and IPv6), and in my tests with L4, you achieve the same results as with PCC both-address-and-ports (when the PCC remainder distribution is equal, which means you don't give more weight to a particular outgoing route). Before 7.16 the only choice was L3 and it worked like PCC both-addresses. When using IPv6 you'll need srcnat netmap (NAT66) rules to change the prefixes to the correct one for each outgoing interfaces. Other than that, it also works very well with IPv6.
For issue such as Incoming Wireguard connections, or generic port forwarding (dstnat), I've found that the following config simplified a lot, and most of the time mangle rules are no longer needed, only routing rules:
* In the main routing table, keep the routes with increasing distance (failover mode, NOT ECMP). We'll let Wireguard and the port forwarded (dstnat) connections use this main table and not being load balanced (only use the main route).
* Create an additional routing table named ECMP. In this table we add all the ECMP routes (with the same distance).
* For the Routing Rules table:
- First rule at the top (with this, connections between the router's subnets will use the main table):
/routing rule
add action=lookup min-prefix=0 table=main
- Followed by rules excluding dstnat hosts from ECMP by making them use the main routing table, as well as any other hosts/subnets that should skip ECMP:
/routing rule
add action=lookup dst-address=0.0.0.0/0 src-address=a.b.c.d/32 table=main
add action=lookup dst-address=0.0.0.0/0 src-address=e.f.g.h/24 table=main
...
- And the rules that tell the rest to use the ECMP table:
/routing rule
add action=lookup dst-address=0.0.0.0/0 src-address=192.168.0.0/16 table=ECMP
add action=lookup dst-address=0.0.0.0/0 src-address=172.16.0.0/12 table=ECMP
add action=lookup dst-address=0.0.0.0/0 src-address=10.0.0.0/8 table=ECMP
add action=lookup dst-address=2000::/3 src-address=2000::/3 table=ECMP
If you need more complex
exclusion (from ECMP) conditions than a few exclusion addresses, you can ressort to mangle (because mangle has priority over routing rules). Create a separate routing table, WAN1_ONLY for example, with only one default route. Add rules to the Mangle table to mark-connection & mark-routing for specific conditions for WAN1_ONLY to be used. Then add connection-mark=no-mark to the fasttrack rules. That way most of the outgoing traffic will still use ECMP and fasttrack.
The hEX RB750Gr3 with fasttrack can now with 7.18beta2 achieve over 900Mbps (919Mbps in my tests) download on speedtest.net using
IPv6 test servers too. Attached is the result before and after enabling fasttrack for IPv6 in 7.18beta2 on the old hEX.
You do not have the required permissions to view the files attached to this post.