1

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.

6
  • This is expected behaviour like other desktop OS'es ubuntu will simply choose one of the two interfaces offering a default route to be used as the default route as there can only ever be one default route. This is by definition as it is the default route ie the one route to use when nothing more specific matches the one chosen will often simply the most recently connected one. There are ways to configure split routing but this is a rather advanced and would get into specific personal advice for your use case to be of any help so perhaps more a matter for server fault etc.
    – MttJocy
    Oct 6, 2019 at 17:03
  • I have never tried bonding more than one ISP connection, but there is something you can look into: github.com/lstein/Net-ISP-Balance
    – Terrance
    Oct 6, 2019 at 17:05
  • @MttJocy Windows 10 supports multiple network interfaces out of box :/
    – tomsk
    Oct 6, 2019 at 17:51
  • @Terrance I made everything according their instructions and I still can use only 1 interface :/
    – tomsk
    Oct 6, 2019 at 18:22
  • Define "supports multiple network interfaces". What behavior are you expecting that you are not getting?
    – JayEye
    Oct 6, 2019 at 20:41

1 Answer 1

1

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.

2
  • So what is solution? I will set same metric and then? At DSL I have speed about 1.5 MB/s and at LTE about 2-3 MB/s, and when I was on Windows I was downloading (from Steam for example) about 5 MB/s at best, so that speeds were merged.
    – tomsk
    Oct 6, 2019 at 23:24
  • As I already said, if you want different utilization of each link, you'll have to learn about policy routing. Read the manual!
    – JayEye
    Oct 7, 2019 at 4:53

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .