The Linux bonding driver provides a method for aggregating multiple network interfaces into a single logical "bonded" interface. The behavior of the bonded interfaces depends on the mode. Generally speaking, modes provide either hot standby or load balancing services. Additionally, link integrity monitoring may be performed.
https://www.kernel.org/doc/Documentation/networking/bonding....
And, ahem, correct load balancing over bonded interfaces is not trivial as it may seem (although, usually it's more likely you'll be able to distribute approximately evenly than not)
EDIT: Yep: https://home.regit.org/netfilter-en/links-load-balancing/
It is possible to do per-packet load sharing in Linux as the link above suggests. Both links need to be able to source traffic using the same IP address, i.e. you can't mix comcast and dsl. The way to get around this is to have an upstream router that will source your traffic from the same IP address:
client - routerD --upstream1---routerU -- the internets |-------upstream2-----|
The iptables statistic module with random mode seems to work better than nth packet.
Keep in mind PPS load sharing is not the most effective way to utilize links as retransmissions will slow things down. Now if you have two links to the same provider it's probably OK. You can even buy a bonded connection from most providers where they do all of this for you.
You are much better off doing flow based ECMP routing: http://lkml.indiana.edu/hypermail/linux/net/0207.2/0047.html
ECMP is only useful if you have a large number of clients. So you can do PPS load sharing, knowing full well that it's going to be slower than a single link some percentage of the time or just buy a faster connection.
TL;DR again, just buy a faster connection.
Mmmhmm, that's the true hacker spirit right there...
I can always make more of one of those.