When you really want to use the multiple internet connections to get faster download speeds (vs the use that small businesses have, which is more focused on redundancy and uses the balancing more to spread the download amount over the different subscriptions), I would advise to setup some system of bundling.
There are many names for such technology (of course determined by the marketing folks, buzzwords like "SDN") but the idea is that you have some externally hosted service that provides your external IP address, and to there you have two different connections (tunnels or whatever you want to call them) to transport your traffic to the local site. With such a service you can actually add the download performance of your connections for a single connection, e.g. a download.
Interesting option, but I guess it would have two downsides:
- I would have to find such service close to both of my ISPs, otherwise I would add unwanted latency ( and neither of my ISPs offer such bundling as of now )
- it would be additional cost
Regarding my specific issue, I just found workable solution. I investigated what I suggested in previous post, about only doing per-connection balancing for Steam downloads (since that is almost only case where I need double speed), and I found that:
1) steam indeed download from its own download servers, and not from game developer sites
2) while steam has 70+ registered network ranges, they could all be grouped in three loose groups: 146.66.x.x , 185.25.x.x , other
3) my own downloads always used IP from 146.66.x.x group, few connections at start, then steam adds tens of connections as time pass
4) for really big downloads, Steam starts downloading from another IP ( not necessarily from 146.66.x.x range), also up to tens of connections.
5) it does not go beyond those two IPs for real big download, although 2-3 other IPs appear for some small traffic
Therefore, if "dst address" PCC balancing is used, for really big downloads there is 50% chance that Steam will use both my ISPs anyway ( if second server in #4 has different even/odd hash from first server in #3 ). In fact, that makes Steam very "LB friendly", since their client can use multiple server IPs, and thus even per 'dst address' balancing can sometimes utilize both ISPs.
But since I was not happy with just 50% chance on really big Steam downloads ( and even less on other ) to use 2nd ISP, I set my load balancing rules in this order:
*** IP/FIREWALL/MANGLE ***
- mark connection for_ISP2 on prerouting/bridge using PCC "dst address" /2:0 on new connections if destination is
not 146.66.x.x or local // so per-destination balancing for non-Steam traffic
- mark connection for_ISP2 on prerouting/bridge using NTH 2,1 on new connections if destination
is 146.66.x.x // so per-connection balancing for default Steam traffic
- mark connection for_ISP2 on input/ISP2link // I only allow incoming VPN connections
- mark routing to TO_ISP2 on prerouting/bridge if connection mark==for_ISP2
- mark routing to TO_ISP2 on output if connection mark==for_ISP2
*** IP/ROUTES ***
- default route distance 10 to ISP2 if it has route mark TO_ISP2 ( check:ping)
- default route distance 20 to ISP1 ( check:ping)
- default route distance 30 to ISP2
Above resulted in conservative and safe load balancing ( per destination address) to internet, with aggressive and faster load balancing for Steam downloads. I actually used address list instead of fixed 146.66.x.x , so that I can later easily add some other site from which I need fast download. For now, this "opt in" approach ( where I add sites to list if I need fast download from them) is good enough for me - sites like Mikrotik forum now work as usual, without problems, and Steam download at near 500Mbs speeds. Although I still hope internet will in general become more per-connection LB friendly