Network Aggregation

Matthew Seaman matthew at FreeBSD.org
Mon Dec 2 12:02:27 UTC 2019


On 02/12/2019 11:07, Jerry wrote:
> I am looking for a program that will automate combining IP addresses,
> usually referred to as aggregation. I have been doing it by hand, and
> it is a real PIA.

As in: take a list of IP numbers and output the smallest netblock
(network address, netmask) that will contain them all?

If you want a graphical approach, than most IP Address Managment
applications will pretty much do this.  Try Netbox for instance:

   https://netbox.readthedocs.io/en/stable/

In ports as net-mgmt/netbox.

Although netbox itself depends on the ip address data types provided by
postgresql:

   https://www.postgresql.org/docs/11/datatype-net-types.html
   https://www.postgresql.org/docs/11/functions-net.html

which suggests that reading your list of ip numbers into a table, and
then calling inet_merge() on the minimum and maximum values will give
you what you want.  Something like:

   CREATE TABLE ip_numbers ( ip inet );
   INSERT INTO ip_numbers (ip) VALUES ('192.168.1.1/32'),
'192.168.1.3/32'), ('192.168.24.234/32'),('192.168.63.1/32') ;

Then:

=> SELECT * FROM ip_numbers ORDER BY ip;
       ip
----------------
 192.168.1.1
 192.168.1.3
 192.168.24.234
 192.168.63.1
(4 rows)

=> SELECT inet_merge(MIN(ip), MAX(ip)) FROM ip_numbers ;
   inet_merge
----------------
 192.168.0.0/18
(1 row)

If you want a more scripted approach, then I'd turn to the netaddr
module in Python: https://netaddr.readthedocs.io/en/latest/ --
specifically this method:

https://netaddr.readthedocs.io/en/latest/_modules/netaddr/ip.html#spanning_cidr

but writing a very small script to apply that to a list of addresses is
left as an exercise for the student...

	Cheers,

	Matthew





-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 963 bytes
Desc: OpenPGP digital signature
URL: <http://lists.freebsd.org/pipermail/freebsd-questions/attachments/20191202/924cd097/attachment.sig>


More information about the freebsd-questions mailing list