Multiple IPs on Multiple NICs same subnet
5,684
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.
Related videos on Youtube
Author by
Hugh
Updated on September 18, 2022Comments
-
Hugh over 1 year
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.
-
jason about 10 yearsI'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. -
Ankit Sagar about 10 yearsWich distribution are you using?
-
Daniel B about 10 yearsWhat happens when you add explicit routing rules for all outgoing IP addresses?
-
jason about 10 yearsWhere is your initial connection(s) to the Internet? Which interface(s)? What are configuration details for such interface(s).
-
Ankit Sagar about 10 yearsPlease explain why you have those IPs assigned. BTW:
ip route get $IP
will show you which interface will be used for that target IP. -
Hugh about 10 yearsBecause its on AWS VPC
-
David Schwartz about 10 yearsWhatever it is you are trying to do, this is not the way to do it. Linux fundamentally follows the weak end system model (IP addresses belong to machines) and your configuration only makes sense under a strong end system model (IP addresses belong to interfaces).
-
Ankit Sagar about 10 yearsFollow the bonding link in my answer. Everything is explained there...
-
davidgo over 8 yearsHave you set reverse path filtering off ? Its possible that traffic for eth1:0 is leaving one interface and coming back on the other.
-
David Schwartz over 8 yearsIt sounds like you want a strong host model, which Linux just doesn't do.
-
LawrenceC almost 8 yearsRead my answer here: superuser.com/questions/1056054/… - if you are not interested in bonding the two interfaces (making them look like 1 to the OS and also the receiving end), then it should explain things.
-
-
Hugh about 10 yearsOk, 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?
-
Daniel B about 10 yearsI 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.
-
Hugh about 10 yearsCan I still choose which IPs are used for outbound requests over that bond for each interface? Thanks.
-
Ankit Sagar about 10 years@James Why would you want to do that?