13

I really need to know this for a linux server, but since it also applies to client OSes, I figured the question should be posed here instead of server fault.

16

According to the replies to this post to the linux-net mailing list,

  • At one point, the Linux kernel had a limit of 255 aliases per physical interface device.
  • As of Linux kernel version 2.2, there is no (practical) limit, with the second response citing personal experience with having aliased over 5,000 addresses to a single ethernet card.

Of course, binding large numbers of aliases to a single device will impose memory requirements and may have performance implications, so it's entirely possible that your hardware may limit the number of aliases you can add, even if the kernel itself doesn't.

  • There's no need to create aliases for this; ip addr add can bind the addresses to a single device. – Ignacio Vazquez-Abrams Jan 11 '11 at 10:03
  • 3
    Yes, and it does so by aliasing additional addresses onto the same device. Whether the alias is named (eth0:0) or not, it's still an alias. Granted, the authors of the ip(8) man page choose not to use the term "alias" because it treats all addresses as equal, pretty much the entire rest of the world agrees that assigning multiple addresses to the same interface is called "IP aliasing". – Dave Sherohman Jan 11 '11 at 15:32
  • 1
    At some point I had the need to assign lots of IPv6 addresses to a single host, and once I reached around 4000 addresses neighbor discovery broke. The exact number of addresses it took to break neighbor discovery varied a bit between experiments, but it was always quite close to 4000. – kasperd Dec 16 '15 at 0:31
6

More than you could ever possibly need. Use ip addr add to add addresses to an interface.

3

The maximum would be 4,294,967,294 IP addresses (assuming you're talking about IPV4, you have enough RAM, and we take out one for the broadcast address and one for the network address).

0

The linux kernel has a feature called AnyIP which allows you to answer for a contiguous block of IPv4 or IPv6 addresses via your linux loopback interface for very little cost in DRAM/CPU.

For instance, assume I want my linux machine to answer for any address in 10.7.0.0/16:

  • On the linux system add a local route: ip -4 route add local 10.7.0.0/16 dev lo
  • Ask your network engineers to advertise a route for 10.7.0.0/16 pointing to the eth0 address of the machine you did this with.

Congratulations, you now answer for a massive number of addresses (over 65,000 in this example), and your RAM consumption is practically nothing from this exercise. In terms of scalability, this solution is far better than adding individual interface aliases on eth0 for all the IPs you want to answer for.

There is no limit for how many addresses you can answer for like this.

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.