The information in your post is a bit unclear to me - your problem states that you have 3 WANs, but your sample configurations make it sound as if you have one WAN, and then two firewalls attached to your router - as if they’re clients…
If your configuration is truly multi-wan, then you have some work to do in the mangle table in order to implement policy routing.
The reason the pings are most likely failing (if the pings are coming in WAN2, for instance) is that the reply is probably being sent out WAN1, and the ISP is doing anti-spoofing (a good thing) on that connection, thus dropping the reply packet as it’s coming “from” an IP address that is not connected to this interface.
Configure policy routing as follows:
**Step1: **Set up policy-based default GW routes.
[size=100]/ip route add dst=0.0.0.0/0 gateway=4.4.8.73 routing-mark=ISP1[/size]
[size=100]/ip route add dst=0.0.0.0/0 gateway=4.4.8.205 routing-mark=ISP2[/size]
[size=100]/ip route add dst=0.0.0.0/0 gateway=4.4.9.81 routing-mark=ISP3[/size]
These routes will be used for any packet with a matching routing mark applied to them.
Step2: Exempt any of your locally-connected IP ranges from policy routing using route rules
/ip route rule add dst=192.168.0.0/16 action=lookup-only-in-table table=main
Step3: Use connection marking to make IP connections “sticky” to whatever interface they should be routed to…
For firewall efficiency, make a custom chain “classify” that marks new connections so they stick to a particular ISP
/ip firewall mangle
add chain=prerouting connection-mark=no-mark action=jump jump-target=classify
Mark inbound connections from the various ISP connections.
/ip firewall mangle
add chain=classify in-interface=ether1 action=mark-connection new-connection-mark=wan1
add chain=classify in-interface=ether2 action=mark-connection new-connection-mark=wan2
add chain=classify in-interface=ether3 action=mark-connection new-connection-mark=wan3
add chain=classify connection-mark=!no-mark action=return comment="exit chain if connection has been marked"
Mark outbound connections from the LAN based on some balancing criteria, such as PCC, and return from the chain when finished
/ip firewall mangle
add chain=classify per-connection-classifier=src-address-and-port:3/0 action=mark-connection new-connection-mark=wan1
add chain=classify connection-mark=no-mark per-connection-classifier=src-address-and-port:3/1 action=mark-connection new-connection-mark=wan2
add chain=classify connection-mark=no-mark per-connection-classifier=src-address-and-port:3/2 action=mark-connection new-connection-mark=wan3
add chain=classify action=return
Step 4: apply routing marks to packets in prerouting and output chains
/ip firewall mangle
add chain=output connection-mark=wan1 action=mark-routing new-routing-mark=ISP1
add chain=output connection-mark=wan2 action=mark-routing new-routing-mark=ISP2
add chain=output connection-mark=wan3 action=mark-routing new-routing-mark=ISP3
add chain=prerouting connection-mark=wan1 action=mark-routing new-routing-mark=ISP1
add chain=prerouting connection-mark=wan2 action=mark-routing new-routing-mark=ISP2
add chain=prerouting connection-mark=wan3 action=mark-routing new-routing-mark=ISP3
Step5: Use masquerade as src-nat for packets leaving each WAN interface:
/ip firewall nat
add chain=srcnat action=masquerade out-interface=ether1
add chain=srcnat action=masquerade out-interface=ether2
add chain=srcnat action=masquerade out-interface=ether3
Step6: Ensure that your firewall filter rules protect the router on all 3 WAN interfaces, etc.
/ip firewall filter
add chain=input connection-state=established,related action=accept
add chain=input protocol=icmp action=accept
add chain=input in-interface=ether4 action=accept
add chain=input action=drop
Note that in-interface=ether4 assumes that ether4 is your LAN. If you have multiple LAN interfaces, then add duplicates of this rule for each LAN IP interface you have in your configuration.
Your forward chain should be similar in structure to the input chain:
Pseudo-code:
fast-track established,related
allow established,related (for protocols that don’t work with fasttrack)
allow out-interface=ether1
allow out-interface=ether2
allow out-interace=ether3
allow in-interface=LAN
drop