I use Ubuntu 18 with KDE Plasma, and I cannot use 2 network interfaces at same time. I have "Wired connection 1" from my IPS (ethernet cable) and "Wired connection 2" using my phone "USB tethering", always works only one interface, if I use phone's connection it works, and if I use connection from my ISP it works too, but if are both connected, only one works, another is like 0 KB/s, I tried several speed tests.
This is from ip addr
:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether d8:50:e6:54:28:d1 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.25/24 brd 192.168.1.255 scope global dynamic noprefixroute enp3s0
valid_lft 599667sec preferred_lft 599667sec
inet6 fe80::6bd6:81a4:afcf:564f/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether 52:54:00:3c:0c:63 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
4: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc fq_codel master virbr0 state DOWN group default qlen 1000
link/ether 52:54:00:3c:0c:63 brd ff:ff:ff:ff:ff:ff
18: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel master virbr0 state UNKNOWN group default qlen 1000
link/ether fe:54:00:e7:18:69 brd ff:ff:ff:ff:ff:ff
inet6 fe80::fc54:ff:fee7:1869/64 scope link
valid_lft forever preferred_lft forever
19: enp0s20u7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 1000
link/ether 0e:67:33:17:48:a0 brd ff:ff:ff:ff:ff:ff
inet 192.168.42.188/24 brd 192.168.42.255 scope global dynamic noprefixroute enp0s20u7
valid_lft 7175sec preferred_lft 7175sec
inet6 fe80::b0e:b959:2f6a:926e/64 scope link noprefixroute
valid_lft forever preferred_lft forever
enp0s20u7
is my phone's connection.
Some background first, with some details simplified so I don't have to write an entire textbook on networks :)
To "download" something, a TCP connection is created between your machine and some remote machine. Which interface is chosen for that connection if determined by the routing table (technically: the FIB, forwarding information base), what you get when you type
ip route list
. What you see is a list of destinations (address / prefix length) along with the corresponding interface. The interface that gets picked is the one with the longest match of the destination IP address. Normally, most of these destinations are for stuff in your local network, plus a default route, which is what all connections to the rest of the Internet will use.When you (well, not you, some process on your machine!) open a TCP connection, that connection is known by the tuple (source IP address, source port, destination IP address, destination port). The actual code that runs usually starts by setting the source IP address and port to 0, and the actual values are filled in when the first packet leaves the machine, the source IP address being, of course, the IP address of the outgoing interface (ignore for now the effects of NAT).
If you have more than one outgoing interfaces, as in your case with a DSL and an LTE link, you will correspondingly have two
default
routes. Since they both have the same prefix length (namely, 0), which one gets picked depends on the route metric. The one with the lower metric is the one that gets picked.Linux always picks the route with the lower metric. If you want to be able to use both interfaces, you have to adjust the interface metrics to the same number. You can do that manually or by specifying the metric in the NetworkManager or whatever.
However, this will still not send out packets belonging to the same connection out both interfaces. This is because if you try to send out a packet with the source IP address of one interface out the other, the ISP will (if it's behaving according to best current practices) drop that packet and refuse to forward it (why this is so is beyond the scope of this discussion). So once the first packet of a connection has gone out, all subsequent packets of that connection will go out the same interface. I can't imagine Windows working any differently in that respect.
However, if you have multiple transfers going on at the same time, and you have identical metrics on your outgoing interfaces, then about half the connections will go out one interface, and the other half will go out the other. It is possible to adjust which fraction of traffic will go out the one and which out the other, if, e.g., your DSL interface is faster than your LTE and you want more connections to go out that way, but that involves setting policy routing which requires more than a single command.
Some people mentioned interface bonding; this concept is not applicable here as it requires cooperation from the "other" side, which clearly you do not have since you are talking to different ISPs.