Select uplink based on ping to destination

That’s an interesting idea.

Nothing like this is included into RouterOS, but it should not be too complex to implement it using scripting.

You would use one address-list for each of the WANs, and one more for the destinations which need to be evaluated.

Each SYN packet would be marked with a connection-mark corresponding to the WAN on whose address-list its destination address would be found. If its destination address would not be found on any of the four address lists associated with WANs, it would be added to the “evaluate” one and the packet would be dropped.

A script scheduled to run every second would scan through items on the “evaluate” address list and ping them using each WAN to determine the RTT; after identifying the WAN with the shortest response, it would move the address list item from the “evaluate” list to the list associated with that WAN. The re-sent SYN packet from the client would already be connection-marked to use the proper WAN.

The rest is here.