Concept of the solution!!
Two WAN load balancing scenario. No vlans, no servers on LAN. Single LAN. Only caveat is that users going to a website described by address-list=WebAddress, have to use WAN2.
So my solution is simple, ensure WAN2 is primary in main routes. That means all traffic normally will go out WAN2.
When we load balance, traffic will be equally distributed via WAN1 and WAN2 as per the mangles.
Therefore in mangling is we put this single rule in FIRST in the order, we have solved the requirement as simply as possible.
(before LB mangling put this rule in)
/firewall mangle
add action=accept chain=prerouting src-address=192.168.8.0/24 dst-address-list=WebAddress
Logic: Since WAN2 is the primary WAN, this traffic will always go out through that WAN as required and not get caught up in LB.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Changes Required: MISSING FIREWALL!!
/routing table { removed un-needed tables }
add disabled=no fib name=to_WAN1
add disabled=no fib name=to_WAN2
/ip dhcp-server network { missing dns server }
add address=192.168.8.0/24 dns-server=192.168.8.1 gateway=192.168.8.1
/interface list
add name=WAN
add name=LAN
/interface list members
add interface=ether1-WAN1 list=WAN
add interface=ether2-WAN2 list=WAN
add interface=bridge1_LAN list=LAN
/ip firewall address-list
add address=192.168.8.X list=Authorized Comment=Admin desktop
add address=192.168.8.Y list=Authorized Comment=Admin laptop
/ip firewall filter
add action=accept chain=input comment=“defconf: accept established,related,untracked” connection-state=established,related,untracked
add action=accept chain=input comment=“defconf: accept ICMP” protocol=icmp
add action=drop chain=input comment=“defconf: drop invalid” connection-state=invalid
add action=accept chain=input comment=“defconf: accept to local loopback (for CAPsMAN)” dst-address=127.0.0.1
add action=accept chain=input comment=“admin access” src-address-list=Authorized
add action=accept chain=input comment=“users DNS services” dst-port=53 protocol=udp in-interface-list=LAN
add action=accept chain=input comment=“users DNS services” dst-port=53 protocol=tcp in-interface-list=LAN
add action=drop chain=input comment=“Drop all else” { Put this rule in last so you dont lock yourself out }
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
add action=fasttrack-connection chain=forward comment=“defconf: fasttrack” connection-state=established,related hw-offload=yes connection-mark=no-mark
add action=accept chain=forward comment=“defconf: accept established,related, untracked” connection-state=established,related,untracked
add action=drop chain=forward comment=“defconf: drop invalid” connection-state=invalid
add action=accept chain=forward comment=“internet traffic” in-interface=list=LAN out-interface-list=WAN
add action=accept chain=forward comment=“port forwarding” connection-nat-state=dstnat disabled=yes { enable or remove if not required }
add action=drop chain=forward comment=“Drop all else”
/ip firewall mangle
add action=accept chain=prerouting src-address=192.168.8.0/24 dst-address-list**=LiverERP**
+++++++++++++++++++++++++++++++++++++++
add action=mark-connection chain=forward connection-mark=no-mark dst-address-type=!local
in-interface=bridge1_LAN new-connection-mark=wan1_conn passthrough=yes
per-connection-classifier=both-addresses-and-ports:2/0
add action=mark-connection chain=forward connection-mark=no-mark dst-address-type=!local
in-interface=bridge1_LAN new-connection-mark=wan2_conn passthrough=yes
per-connection-classifier=both-addresses-and-ports:2/1
+++++++++++++++++++++
add action=mark-routing chain=prerouting connection-mark=wan1_conn
new-routing-mark=to_WAN1 passthrough**=no**
add action=mark-routing chain=prerouting connection-mark=wan2_conn
new-routing-mark=to_WAN2 passthrough**=no**
add action=mark-routing chain=prerouting connection-mark=wan3_conn disabled=\
/ip firewall nat { Do not put in source addresses unless needed, in this case NOT, src nat is NOT normally to be used as some sort of firewall rule
add action=masquerade chain=srcnat out-interface=ether1-WAN1
add action=masquerade chain=srcnat out-interface=ether2-WAN2
I noted that you want to do nested recursive for ROUTING… ( we choose 10.10.10.2 as a arbitrary address )
ALSO do not use same DNS endpoints in Recursive, as used in DNS servers for LAN users
/ip route { No need for % symbols, as the gateways are differerent !! }
add check-gateway=ping dst-address=0.0.0.0/0 gateway=10.10.10.2 routing-table=main scope=10 target-scope=14
++++++++++++++++++++++++
add check-gateway=ping distance=2 dst-address=10.10.10.2/32 gateway=1.0.0.1
comment=“WAN2 Primary” routing-table=main scope=10 target-scope=13
add check-gateway=ping distance=4 dst-address=10.10.10.2/32 gateway=9.9.9.9
comment=“WAN1 Secondary” routing-table=main scope=10 target-scope=13
+++++++++++++
add distance=2 dst-address=1.0.0.1/32 gateway=192.168.102.1 comment=“WAN2 Primary”
routing-table=main scope=10 target-scope=12
add distance=4 dst-address=9.9.9.9/32 gateway=192.168.101.1 comment=“WAN1 Secondary”
routing-table=main scope=10 target-scope=12
NOW FOR THE SPECIAL TABLE ROUTES
add dst-address=0.0.0.0/0 gateway=192.168.101.1 routing-table=to_WAN1
add dst-address=0.0.0.0/0 gateway=192.168.102.1 routing-table=to_WAN2