2

So, I've got two NICs:

eth0
eth1

and I have multiple IP addresses assigned to each:

auto lo
iface lo inet loopback
allow-hotplug eth0
iface eth0 inet static
    address 10.0.0.194
    netmask 255.255.255.0
    gateway 10.0.0.1
    network 10.0.0.0

auto eth0:0
allow-hotplug eth0:0
iface eth0:0 inet static
    address 10.0.0.253
    netmask 255.255.255.0

auto eth0:1
allow-hotplug eth0:1
iface eth0:1 inet static
    address 10.0.0.252
    netmask 255.255.255.0

auto eth0:2
allow-hotplug eth0:2
iface eth0:2 inet static
    address 10.0.0.251
    netmask 255.255.255.0

auto eth1
allow-hotplug eth1
iface eth1 inet static
    address 10.0.0.74
    netmask 255.255.255.0
    gateway 10.0.0.1
    network 10.0.0.0

auto eth1:0
allow-hotplug eth1:0
iface eth1:0 inet static
    address 10.0.0.105
    netmask 255.255.255.0

auto eth1:1
allow-hotplug eth1:1
iface eth1:1 inet static
    address 10.0.0.104
    netmask 255.255.255.0

auto eth1:2
allow-hotplug eth1:2
iface eth1:2 inet static
    address 10.0.0.106
    netmask 255.255.255.0

I've also setup ip route like so:

sudo ip route add 10.0.0.0/24 dev eth0 table eth0
sudo ip route add default via 10.0.0.1 dev eth0 table eth0

sudo ip route add 10.0.0.0/24 dev eth1 table eth1
sudo ip route add default via 10.0.0.1 dev eth1 table eth1

sudo ip rule add from 10.0.0.194 table eth0
sudo ip rule add from 10.0.0.74 table eth1

Now when I execute the following commands, everything works fine I get back my external IP:

curl --interface eth0  http://ipecho.net/plain ; echo
curl --interface eth0:0  http://ipecho.net/plain ; echo
curl --interface eth0:1  http://ipecho.net/plain ; echo
curl --interface eth0:2  http://ipecho.net/plain ; echo
curl --interface eth1  http://ipecho.net/plain ; echo

However, when I run:

curl --interface eth1:0  http://ipecho.net/plain ; echo

Nothing happens. I've obviously messed up my routes or something. Can anyone help me out? Thanks.

ip route

default via 10.0.0.1 dev eth0 
10.0.0.0/24 dev eth0  proto kernel  scope link  src 10.0.0.194 
10.0.0.0/24 dev eth1  proto kernel  scope link  src 10.0.0.74

route -n

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.1        0.0.0.0         UG    0      0        0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 eth1

EDIT:

So I found this, which is what I'm trying to do however, I don't want to specify any subnets. I just want it to round-robin the requests.

https://unix.stackexchange.com/questions/111293/load-balancing-among-multiple-virtual-network-interfaces

11
  • I'm guessing you are statically assigning your IP addresses, no? If you are, wouldn't you agree that posting the contents of /etc/network/interfaces is more informative than the output of ifconfig? I'd like to see how you actually have it manually configured.
    – jason
    Mar 22 '14 at 21:37
  • Wich distribution are you using?
    – Nils
    Mar 23 '14 at 22:00
  • What happens when you add explicit routing rules for all outgoing IP addresses?
    – Daniel B
    Mar 24 '14 at 13:03
  • Where is your initial connection(s) to the Internet? Which interface(s)? What are configuration details for such interface(s).
    – jason
    Mar 24 '14 at 23:53
  • 1
    It sounds like you want a strong host model, which Linux just doesn't do. Dec 25 '15 at 22:41
1

I think you should read up about bonding interfaces.

If you want to load-balance using two interfaces the system you are connecting to has to "speak" exactly the same LB-protocol as you do.

Else you will loose packets.

2
  • Can I still choose which IPs are used for outbound requests over that bond for each interface? Thanks.
    – Hugh
    Mar 24 '14 at 17:45
  • 4
    @James Why would you want to do that?
    – Nils
    Mar 28 '14 at 15:40
0

If you are trying to load balance between two physical nics, then you might want to look into a bridged connection. The reason why you your second nic is not responding, is because the route you have for it is the same route you have for your first nic. So, all the virtual interfaces under nic 2 including the nic itself, is trying to route out to through the first nic, which isn't possible unless you bridge the nic's. It is easy under Linux to create bridge connections, and you can even make virtual bridges for the virtual interfaces as well.

-2

Having several NICs connected to the same network might just get you extra collisions. Unless you configure the network carefully, it won't work. And it is quite improbable that the last link is your bottleneck; if it is, you are probably better off with a high speed NIC (and upstream hardare to match).

The whole IP network idea is that you have one NIC on each net. A set up like the one you have is extremely out of line with what is normally done, and (if even legal) is unlikely to have ever been put through it's paces and any misbehaviour fixed.

2
  • Ok, I'll trying putting the interfaces on different subnets. Once I've done that how can I load-balance outbound requests over those two interfaces?
    – Hugh
    Mar 23 '14 at 19:37
  • 3
    I don't see how having multiple NICs on the same network would cause any problems at all. Packet collisions don't exist on a fully switched network. Address collisions won't occur with the OPs configuration.
    – Daniel B
    Mar 24 '14 at 12:59

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.