By stretch | Wednesday, June 15, 2016 at 1:16 p.m. UTC
Update: NetBox has been released!
Several years ago, I lamented the few options available for a provider-grade IPAM solution. Specifically, I explained why building a custom application would be undesirable:
Could I create a custom IPAM solution with everything we need? Sure! The problem is that I'm a network engineer, not a programmer (a natural division of labor which, it seems, is mostly to blame for the lack of robust IPAM solutions available). Even if I had the time to undertake such a project, I have little interest in providing long-term maintenance of it.
But I suppose time makes fools of us all.
Nearly one year ago, I started developing an IPAM application as part of my day job. Leveraging my experience with the Django Python framework, I had a working proof-of-concept in just a week. Over the next several months, the project grew more mature and began to take on additional roles: data center infrastructure management, circuit tracking, and credentials storage. Today, the tool functions as our "source of truth" for many aspects of our infrastructure. We call it NetBox.
What is NetBox?
NetBox is a web application for IPAM and DCIM. Its target audience comprises network engineers, data center techs, and systems administrators. NetBox is written in Python, utilizing the Django framework and a PostgreSQL database. Similar applications include:
NetBox was developed to provide features not found in these tools, with several guiding tenets in mind.
Single Converged Database
Whereas most open source IPAM tools available today provide little functionality around tracking physical connections, NetBox provides both IPAM and DCIM functions under one roof. NetBox provides a single view showing address information as well as physical connectivity for each device. Navigation between physical and logical infrastructure is seamless.
Model the Real World
NetBox's data model seeks to replicate the real world as closely as possible. For example, many tools require that you define exactly one IP address for a device. But that's not how the real world works: IP addresses are assigned not to devices but to specific interfaces within a device, and interfaces may have multiple IP addresses. NetBox was designed to minimize the degree of abstraction needed to represent a real network.
Robust IP Hierarchy
NetBox employs PostgreSQL's native network data types to construct a robust, efficient hierarchy of IP prefixes and addresses. For example, suppose you define a prefix 192.168.0.0/24, and then create 192.168.0.64/26 within it. NetBox will show the child prefix under its parent along with available allocations of 192.168.0.0/26 and 192.168.128.0/25. IP objects are arranged as a set of hierarchies defined at their root as arbitrary aggregate networks. And all IP objects can optionally be assigned to a VRF.
What NetBox is Not
While NetBox can fulfill a number of roles, I also want to point out what it does not do, in an attempt to mitigate any confusion. NetBox is not:
A network monitoring system (NMS). There are more than enough of those already. However, it can be used to tell your NMS what to monitor.
A ticketing system. NetBox does not track issues or outages. But it does provide an easy way to link to objects from an existing ticketing system.
Network discovery. NetBox will not automatically discover your network for you (although it does have limited inventorying functionality). It is intended to represent the correct state of your network, which can only be defined by a human. If you simply import the actual state of your network (which is most likely not 100% correct), you end up with a corrupted source of truth.
DNS service. NetBox does not provide DNS, although it can be used to populate records for BIND, PowerDNS, or other DNS services.
The one question flooding my inbox lately has been, "When will it be released?" While I can't yet provide an exact date, I'm shooting for late June/early July. My employer, DigitalOcean, is on board and we have made a lot of progress toward a public release. Now it's mostly a matter of finishing a few features that require modifying the database schema to avoid implementing potentially disruptive modifications soon after release.
Keep an eye out for updates here or follow me on Twitter!
About the Author
Jeremy Stretch is a network engineer living in the Raleigh-Durham, North Carolina area. He is known for his blog and cheat sheets here at Packet Life. You can reach him by email or follow him on Twitter.
Posted in Announcements
June 15, 2016 at 1:25 p.m. UTC
Very, very cool. Excellent work, congratulations on the public announcement!
June 15, 2016 at 7:25 p.m. UTC
Sounds really cool and exactly what I need.
June 15, 2016 at 8:15 p.m. UTC
Awesome! Will you release the source somewhere like Github so us fellow neteng/dev guys can contribute?
June 15, 2016 at 9:25 p.m. UTC
Does it do SWIPing?
June 16, 2016 at 12:28 a.m. UTC
Wow, super exciting! I can't wait until you release it! Thanks Stretch!
June 16, 2016 at 12:44 a.m. UTC
please, release it fast. :)
June 16, 2016 at 10:52 a.m. UTC
Does it have an API?
June 17, 2016 at 4:24 a.m. UTC
Any VXLAN support on the roadmap?
June 17, 2016 at 9:10 a.m. UTC
I remember seeing this on reddit last month. Good to see some progress towards release. Excited to use it.
June 17, 2016 at 10:20 a.m. UTC
That's a great news !!
June 17, 2016 at 2:12 p.m. UTC
@Cam: Not currently. Seems like it would be a reasonable feature to add (at some point).
@Bob: Yep, there's a REST API. Currently it's read-only but read-write functionality is planned.
@Drew: Interesting question. I'm not even sure what VXLAN tracking would look like. It's certainly a possibility.
June 19, 2016 at 6:22 a.m. UTC
This is brilliant! I'd be very on board with contributing if this was open sourced.
June 21, 2016 at 7:17 p.m. UTC
saw this when you put up the demo up on reddit. its really slick. biggest thing i would like to see is some manner of multi tenancy support. i see that with a bit of work it could probably be added with out too much trouble, but its not an area im super familiar with beyond building basic access databases. but with this being open source, i could see people developing it.
June 24, 2016 at 9:54 a.m. UTC
I'm pretty interested in this tool but I would really enjoy to have the "autodiscover host" feature. You're right with wanting to have a "photo of the network", with something that is always right. But having "autodiscover feature" would be really useful after the installation to have everything referenced in Netbox.
What do you guys think about this?
June 24, 2016 at 2:21 p.m. UTC
I have been testing this today, and must say that this is pretty much fitting all my needs. But I was wondering if it were possible to DNS Records as an object that can be associated with IP addresses as well.
I have a need to record all external DNS records, their associated External IPs and they entry point across the globe for the company I work for. Having a DNS record object in your software would be very handy for me.
Also, if possible being able to add images to objects would also be very handy too(rack photos, device photos, etc).
June 24, 2016 at 5:03 p.m. UTC
Seeing new IPAM ideas is so refreshing as their is a lot of cruddy options out there and no clear IPAM solution wins the prize. We are working on our own solution for top of rack provisioning (generating new running configs for switches) and we have to solve for this problem as well. Cannot wait to see the code:)
June 24, 2016 at 9:44 p.m. UTC
Good work !! with the included feature set looks like it beats commercial products...
June 28, 2016 at 7:45 a.m. UTC
this is awesome!
By using the Rest API is it possible to export to csv, xls, etc?
Thanks for this great tool!
June 30, 2016 at 12:21 a.m. UTC
Looks great. Is there any RBAC planned?
June 30, 2016 at 6:54 a.m. UTC
Hi Stretch (and Digital Ocean),
Thanks for releasing! Great timing for us too; we were about to migrate all our data into phpIPAM but this looks to have most of the features we are after and could be used to replace our racktables install as well! Thanks again!
I've been tinkering with the demo and have been impressed with everything though was wondering what the topology maps look like. I couldn't seem to get them working on the demo (and haven't yet had the time to spin up a box for it).
July 6, 2016 at 2:46 p.m. UTC
Hi ..I am very new to this web site. I see lots of very useful stuff here. Amazing work guys..thanks a lot..
How can I download "Netbox" and use it to understand it's functionality.
This site is full of classy study material. Awesome and thanks once again.
July 7, 2016 at 2:23 p.m. UTC
Looks good. Two questions:
1) why does it use ncclient? does it talk to the hardware somewhere?
2) can you allocate an IP address trough an API to integrate with existing provisioning tools?
July 8, 2016 at 6:03 a.m. UTC
Thank you for sharing, Jeremy!
We use handmade Django-based IPAM for several years - it's very useful but realy ugly compare to NetBox...
There are many other resources to manage - MPLS PW VC's, BGP communities, VRF RD's and so on. Will you add some 'TLV-approach' which allow a user to create additional tables for custom resources?
July 12, 2016 at 5:40 p.m. UTC
Just being curious, while deciding to build Netbox, did you look at "Ralph 3" ? It has a lot of similar functionality and build on the same technologies like Django. If yes, what was the reasoning to start from scratch and not build on already established project? Can you do a quick feature comparison if you are familiar with the project ?
July 15, 2016 at 8:14 a.m. UTC
Super cool. The main thing that keeps us falling back on spreadsheets shudder is tracking cable runs against machines or handling overlapping IP spaces. Most of the other asset/IP management tools either don't care about the power/network runs, or cant work with VRFs.
Any way I could sign up to get an announce when this is released?
August 31, 2016 at 6:10 p.m. UTC
Excellent job Jeremy! Thanks very much for sharing! I suppose we all got sick & tired of using Excel spreadsheets .. ;-)
November 11, 2016 at 2:43 p.m. UTC
Could you expand on the limited inventorying functionality? We have 5 DC's with over 3000 devices and having some form of discovery so we can have a base to start would be helpful when initializing netbox, we have a couple spreadsheets I wanted to compare the discovery with to validate and double check both sources. I'm debating between netbox, nipap and phpipam and netbox is what I personally am leaning towards but my teamlead wants some auto discovery feature. Also the demo server you had for netbox on reddit doesn't seem to be working anymore.