I got my first RouterOS devices recently: a CCR2004-16G-2S+ and a CRS309-1G-8S±IN. I was prepared for a steep learning curve and I’m very happy with what I’ve got. The only issue is with these dual WANs. I set up failover first, per https://help.mikrotik.com/docs/spaces/ROS/pages/26476608/Failover+WAN+Backup. That worked fine. Next, I upgraded it to load balancing via PCC as shown in the manual. That also worked fine with both connections up, or with one either disabled or physically disconnected.
Where it didn’t work correctly is when first one connection (say, isp1) then the other (isp2) was knocked out by a storm recently. isp2 came up within 24 hours, whereas isp1 took days. For as long as isp2 was up and isp1 was down, I practically couldn’t access anything outside my network unless I kept the isp1 interface disabled (or, I assume, physically disconnected). I verified that the gateway itself was inaccessible (ISP IPs anonymized here):
[shiv@ccr2004] > /tool/ping address="8.8.8.8" interface="ether1" count=3
SEQ HOST SIZE TTL TIME STATUS
0 10.1.1.5 84 64 262ms222us host unreachable
1 8.8.8.8 timeout
2 8.8.8.8 timeout
sent=3 received=0 packet-loss=100%
[shiv@ccr2004] > /tool/ping address="10.1.1.1" interface="ether1" count=3
SEQ HOST SIZE TTL TIME STATUS
0 10.1.1.1 timeout
1 10.1.1.5 84 64 71ms338us host unreachable
2 10.1.1.1 timeout
sent=3 received=0 packet-loss=100%
My inference is that packets were still being sent over that connection due to the classifier and the fallback routes weren’t being honoured for some reason, but then I’m completely new at this. I’d be grateful for any help figuring this out. Here are all the relevant parts (as far as I know) of my configuration, again with anonymized IPs:
# 2025-05-11 17:06:37 by RouterOS 7.18.2
# software id = WQLK-A9G0
#
# model = CCR2004-16G-2S+
/interface list
add name=LAN
add name=WAN
/interface list member
add interface=ether6 list=LAN
add interface=ether11 list=LAN
add interface=ether5 list=LAN
add interface=ether8 list=LAN
add interface=ether4 list=LAN
add interface=ether13 list=LAN
add interface=ether12 list=LAN
add interface=ether7 list=LAN
add interface=ether10 list=LAN
add interface=ether16 list=LAN
add interface=ether14 list=LAN
add interface=ether9 list=LAN
add interface=ether1 list=WAN
add interface=ether2 list=WAN
add interface=ether3 list=LAN
/ip route
add check-gateway=none disabled=no distance=2 dst-address=0.0.0.0/0 gateway=11.2.1.1 routing-table=main scope=30 suppress-hw-offload=no \
target-scope=10
add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=10.1.1.1 routing-table=main suppress-hw-offload=no
add check-gateway=ping disabled=no distance=1 dst-address=0.0.0.0/0 gateway=10.1.1.1 routing-table=to_isp1 scope=30 suppress-hw-offload=no \
target-scope=10
add check-gateway=ping disabled=no distance=1 dst-address=0.0.0.0/0 gateway=11.2.1.1 routing-table=to_isp2 scope=30 suppress-hw-offload=\
no target-scope=10
/ip address
add address=10.1.1.5/20 interface=ether1 network=10.1.1.0
add address=11.2.1.2/30 interface=ether2 network=11.2.1.0
/ip firewall filter
add action=accept chain=input comment="accept established,related,untracked" connection-state=established,related,untracked in-interface-list=WAN
add action=accept chain=forward connection-state=established,related,untracked
add action=drop chain=forward comment="drop invalid" connection-state=invalid
add action=accept chain=forward comment="allow dstnat" connection-nat-state=dstnat
add action=drop chain=input comment="drop invalid" connection-state=invalid in-interface-list=WAN
add action=accept chain=input comment="accept ICMP" in-interface-list=WAN protocol=icmp
add action=accept chain=input comment="allow SSH" disabled=yes in-interface-list=WAN port=22 protocol=tcp
add action=drop chain=input comment="block everything else" in-interface-list=WAN
/ip firewall mangle
add action=mark-connection chain=output comment="classify output (1)" connection-mark=no-mark connection-state=new new-connection-mark=balance1 \
passthrough=no per-connection-classifier=both-addresses-and-ports:2/1
add action=mark-connection chain=input comment="mark incoming (isp1)" connection-state=new in-interface=ether1 new-connection-mark=fromisp1
add action=mark-connection chain=input comment="mark incoming (isp2)" connection-state=new in-interface=ether2 new-connection-mark=\
fromisp2
add action=mark-connection chain=prerouting comment="classify prerouting (0)" connection-mark=no-mark connection-state=new dst-address-type=!local \
in-interface=lan new-connection-mark=balance0 per-connection-classifier=both-addresses-and-ports:2/0
add action=mark-connection chain=prerouting comment="classify prerouting (1)" connection-mark=no-mark connection-state=new dst-address-type=!local \
in-interface=lan new-connection-mark=balance1 per-connection-classifier=both-addresses-and-ports:2/1
add action=accept chain=prerouting comment="accept prerouting" dst-address=10.1.1.0/20 in-interface=lan
add action=accept chain=prerouting comment="accept prerouting" dst-address=11.2.1.0/30 in-interface=lan
add action=mark-routing chain=prerouting comment="balance prerouting (isp1)" connection-mark=balance0 in-interface=lan new-routing-mark=to_isp1
add action=mark-routing chain=prerouting comment="balance prerouting (isp2)" connection-mark=balance1 in-interface=lan new-routing-mark=\
to_isp2
add action=mark-connection chain=output comment="classify output (0)" connection-mark=no-mark connection-state=new new-connection-mark=balance0 \
per-connection-classifier=both-addresses-and-ports:2/0
add action=mark-routing chain=output comment="balance output (isp1)" connection-mark=balance0 new-routing-mark=to_isp1
add action=mark-routing chain=output comment="balance output (isp2)" connection-mark=balance1 new-routing-mark=to_isp2
/ip firewall nat
add action=masquerade chain=srcnat out-interface=ether1
add action=masquerade chain=srcnat out-interface=ether2
/routing table
add disabled=no fib name=to_isp1
add disabled=no fib name=to_isp2