mirror of
https://github.com/netbox-community/netbox.git
synced 2026-01-11 21:10:29 +01:00
Don't allow the creation of IP addresses on already allocated prefixes, from within its parent prefix #6599
Closed
opened 2025-12-29 19:42:50 +01:00 by adam
·
20 comments
No Branch/Tag Specified
main
update-changelog-comments-docs
feature-removal-issue-type
20911-dropdown
20239-plugin-menu-classes-mutable-state
21097-graphql-id-lookups
feature
fix_module_substitution
20923-dcim-templates
20044-elevation-stuck-lightmode
feature-ip-prefix-link
v4.5-beta1-release
20068-import-moduletype-attrs
20766-fix-german-translation-code-literals
20378-del-script
7604-filter-modifiers-v3
circuit-swap
12318-case-insensitive-uniqueness
20637-improve-device-q-filter
20660-script-load
19724-graphql
20614-update-ruff
14884-script
02496-max-page
19720-macaddress-interface-generic-relation
19408-circuit-terminations-export-templates
20203-openapi-check
fix-19669-api-image-download
7604-filter-modifiers
19275-fixes-interface-bulk-edit
fix-17794-get_field_value_return_list
11507-show-aggregate-and-rir-on-api
9583-add_column_specific_search_field_to_tables
v4.5.0
v4.4.10
v4.4.9
v4.5.0-beta1
v4.4.8
v4.4.7
v4.4.6
v4.4.5
v4.4.4
v4.4.3
v4.4.2
v4.4.1
v4.4.0
v4.3.7
v4.4.0-beta1
v4.3.6
v4.3.5
v4.3.4
v4.3.3
v4.3.2
v4.3.1
v4.3.0
v4.2.9
v4.3.0-beta2
v4.2.8
v4.3.0-beta1
v4.2.7
v4.2.6
v4.2.5
v4.2.4
v4.2.3
v4.2.2
v4.2.1
v4.2.0
v4.1.11
v4.1.10
v4.1.9
v4.1.8
v4.2-beta1
v4.1.7
v4.1.6
v4.1.5
v4.1.4
v4.1.3
v4.1.2
v4.1.1
v4.1.0
v4.0.11
v4.0.10
v4.0.9
v4.1-beta1
v4.0.8
v4.0.7
v4.0.6
v4.0.5
v4.0.3
v4.0.2
v4.0.1
v4.0.0
v3.7.8
v3.7.7
v4.0-beta2
v3.7.6
v3.7.5
v4.0-beta1
v3.7.4
v3.7.3
v3.7.2
v3.7.1
v3.7.0
v3.6.9
v3.6.8
v3.6.7
v3.7-beta1
v3.6.6
v3.6.5
v3.6.4
v3.6.3
v3.6.2
v3.6.1
v3.6.0
v3.5.9
v3.6-beta2
v3.5.8
v3.6-beta1
v3.5.7
v3.5.6
v3.5.5
v3.5.4
v3.5.3
v3.5.2
v3.5.1
v3.5.0
v3.4.10
v3.4.9
v3.5-beta2
v3.4.8
v3.5-beta1
v3.4.7
v3.4.6
v3.4.5
v3.4.4
v3.4.3
v3.4.2
v3.4.1
v3.4.0
v3.3.10
v3.3.9
v3.4-beta1
v3.3.8
v3.3.7
v3.3.6
v3.3.5
v3.3.4
v3.3.3
v3.3.2
v3.3.1
v3.3.0
v3.2.9
v3.2.8
v3.3-beta2
v3.2.7
v3.3-beta1
v3.2.6
v3.2.5
v3.2.4
v3.2.3
v3.2.2
v3.2.1
v3.2.0
v3.1.11
v3.1.10
v3.2-beta2
v3.1.9
v3.2-beta1
v3.1.8
v3.1.7
v3.1.6
v3.1.5
v3.1.4
v3.1.3
v3.1.2
v3.1.1
v3.1.0
v3.0.12
v3.0.11
v3.0.10
v3.1-beta1
v3.0.9
v3.0.8
v3.0.7
v3.0.6
v3.0.5
v3.0.4
v3.0.3
v3.0.2
v3.0.1
v3.0.0
v2.11.12
v3.0-beta2
v2.11.11
v2.11.10
v3.0-beta1
v2.11.9
v2.11.8
v2.11.7
v2.11.6
v2.11.5
v2.11.4
v2.11.3
v2.11.2
v2.11.1
v2.11.0
v2.10.10
v2.10.9
v2.11-beta1
v2.10.8
v2.10.7
v2.10.6
v2.10.5
v2.10.4
v2.10.3
v2.10.2
v2.10.1
v2.10.0
v2.9.11
v2.10-beta2
v2.9.10
v2.10-beta1
v2.9.9
v2.9.8
v2.9.7
v2.9.6
v2.9.5
v2.9.4
v2.9.3
v2.9.2
v2.9.1
v2.9.0
v2.9-beta2
v2.8.9
v2.9-beta1
v2.8.8
v2.8.7
v2.8.6
v2.8.5
v2.8.4
v2.8.3
v2.8.2
v2.8.1
v2.8.0
v2.7.12
v2.7.11
v2.7.10
v2.7.9
v2.7.8
v2.7.7
v2.7.6
v2.7.5
v2.7.4
v2.7.3
v2.7.2
v2.7.1
v2.7.0
v2.6.12
v2.6.11
v2.6.10
v2.6.9
v2.7-beta1
Solcon-2020-01-06
v2.6.8
v2.6.7
v2.6.6
v2.6.5
v2.6.4
v2.6.3
v2.6.2
v2.6.1
v2.6.0
v2.5.13
v2.5.12
v2.6-beta1
v2.5.11
v2.5.10
v2.5.9
v2.5.8
v2.5.7
v2.5.6
v2.5.5
v2.5.4
v2.5.3
v2.5.2
v2.5.1
v2.5.0
v2.4.9
v2.5-beta2
v2.4.8
v2.5-beta1
v2.4.7
v2.4.6
v2.4.5
v2.4.4
v2.4.3
v2.4.2
v2.4.1
v2.4.0
v2.3.7
v2.4-beta1
v2.3.6
v2.3.5
v2.3.4
v2.3.3
v2.3.2
v2.3.1
v2.3.0
v2.2.10
v2.3-beta2
v2.2.9
v2.3-beta1
v2.2.8
v2.2.7
v2.2.6
v2.2.5
v2.2.4
v2.2.3
v2.2.2
v2.2.1
v2.2.0
v2.1.6
v2.2-beta2
v2.1.5
v2.2-beta1
v2.1.4
v2.1.3
v2.1.2
v2.1.1
v2.1.0
v2.0.10
v2.1-beta1
v2.0.9
v2.0.8
v2.0.7
v2.0.6
v2.0.5
v2.0.4
v2.0.3
v2.0.2
v2.0.1
v2.0.0
v2.0-beta3
v1.9.6
v1.9.5
v2.0-beta2
v1.9.4-r1
v1.9.3
v2.0-beta1
v1.9.2
v1.9.1
v1.9.0-r1
v1.8.4
v1.8.3
v1.8.2
v1.8.1
v1.8.0
v1.7.3
v1.7.2-r1
v1.7.1
v1.7.0
v1.6.3
v1.6.2-r1
v1.6.1-r1
1.6.1
v1.6.0
v1.5.2
v1.5.1
v1.5.0
v1.4.2
v1.4.1
v1.4.0
v1.3.2
v1.3.1
v1.3.0
v1.2.2
v1.2.1
v1.2.0
v1.1.0
v1.0.7-r1
v1.0.7
v1.0.6
v1.0.5
v1.0.4
v1.0.3-r1
v1.0.3
1.0.0
Labels
Clear labels
beta
breaking change
complexity: high
complexity: low
complexity: medium
needs milestone
netbox
pending closure
plugin candidate
pull-request
severity: high
severity: low
severity: medium
status: accepted
status: backlog
status: blocked
status: duplicate
status: needs owner
status: needs triage
status: revisions needed
status: under review
topic: GraphQL
topic: Internationalization
topic: OpenAPI
topic: UI/UX
topic: cabling
topic: event rules
topic: htmx navigation
topic: industrialization
topic: migrations
topic: plugins
topic: scripts
topic: templating
topic: testing
type: bug
type: deprecation
type: documentation
type: feature
type: housekeeping
type: translation
Mirrored from GitHub Pull Request
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/netbox#6599
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @BrunoBlanes on GitHub (Jun 27, 2022).
NetBox version
v3.2.4
Feature type
Change to existing functionality
Proposed functionality
When a prefix is created don't allow the creation of IP addresses for that prefix, from its parent prefix, for example:
Parent prefix:
10.0.0.0/24Child prefix:
10.0.0.0/30The IP addresses
10.0.0.0 - 10.0.0.4should only be allowed to be created from within the child prefix. That way, it avoids the assignment of duplicate IP addresses beforehand.Use case
We allocate a lot of prefixes as an ISP and eventually need to allocate 32 bit length subnet-mask IP addresses to our clients as well. Since prefixes and IP addresses don't share a common logic from within the prefix page, Netbox will allow (and suggest) to create a
/32IP address from an already assigned prefix.This causes some headaches as we have to double check every IP assignment so that we don't assign an IP to client
Awhen it is part of the prefix already assigned to clientB.Database changes
I don't think any is applicable.
External dependencies
None.
@empusas commented on GitHub (Jul 4, 2022):
That won't really work well and put unnecessary restrictions on netbox IP management. One feature of netbox is that it can deal with duplicate IPs to some degree, which is common requirement in a provider network where every customer is using private RFC1918 IP address space and you have to deal with IP overlap and duplicates.
I suggest you mark your parent prefixes as "container", the child prefixes as "active" and tell people only to assign IPs in "active" prefixes.
@BrunoBlanes commented on GitHub (Jul 4, 2022):
The "tell people" part doesn't seem the ideal solution, also I don't see how this wouldn't work well. It doesn't impose unnecessary restrictions since you'd still be able to do everything you can do now; it would just be moved to safer spaces.
Netbox can really deal with duplicate IP addresses, but not when the address is not specified, which is my point, since I cannot specify where my client is using said IP, so I have to rely on the prefix itself.
@empusas commented on GitHub (Jul 4, 2022):
You currently have two choices to identify a prefix by adding the site or the tenant information. That does not work for you?
Not sure how you use netbox, by using the API with your own provisioning/automation it should not be a big problem to add a check if an IP is free or not in the right prefix, before one is assigned.
If users assign them, then I guess a proper work instruction and selectively given the access to do so is the right way.
I have seen tools like Netbrain completely fail in an environment where the customer always used the same private network for the HA clusters build from a build template. So same site, same tenant, always the same IP prefix. That never caused a technical problem, but then they had to spend thousands of hours to change all HW cluster network to unique ones, just to make netbrian work. This is the kind of restrictions I would not like to see in netbox.
@BrunoBlanes commented on GitHub (Jul 4, 2022):
Mate, it doesn't matter how we identify prefixes, identifying them doesn't fix the problem.
Currently we have users assign them and you clearly haven't worked with people. They make mistakes, we're only human. I'm trying to avoid them.
@empusas commented on GitHub (Jul 19, 2022):
I had a look at the NB data model. There is no direct relationship between the IP address and the prefix. And that would be necessary to avoid blocking the IP creating if there a duplicate IPs for a good reason(multi tenant, different VRFs etc)
The lookup between prefix and IP addresses is purely done by matching the IP to the prefix with this code:
So enforcing that no duplicate IP could be created within a prefix requires either
a) to force all prefixes and IP must be assigned to a VRF(VRF then becomes then the common denominator between IP address and prefix)
b) change the database model to have a relation between IP address and prefix.
@BrunoBlanes commented on GitHub (Jul 21, 2022):
By default aren't they already assigned to the
globalVRF?@DorianBourgeoisat commented on GitHub (Aug 14, 2022):
The problem with restricting possible entries is that it might hinder another usecase even though it makes it better for yours.
I would instead suggest making it possible to have user-defined validation rules.
Or at the very least make it a warning like the duplicate IP address warning.
@BrunoBlanes commented on GitHub (Aug 14, 2022):
Could you give me an example of a use case where this might break?
I am ok with a warning, but I still think it could be fully implemented.
@DorianBourgeoisat commented on GitHub (Aug 14, 2022):
I cannot, but there might be one, thus my stance on prefering flexibility.
@BrunoBlanes commented on GitHub (Aug 15, 2022):
I don't think there is one, because you are not forbidding users from doing what they already do, you are just moving it somewhere else. Sure, it might add additional clicks to get there, but at the benefit of not creating duplicate addresses.
@empusas commented on GitHub (Aug 15, 2022):
One use case I had in a company that I worked for. They have used the same IP range for the connectivity to their customers, but that have been always different server in the backend. The reason was they did not have sufficient public IPs to assign per customer. They did not want to use the VRF feature from Netbox. Instead the used the tenant field to distinguish between them, so they still got a warning about duplicate IPs, but they did not care.
A similar use case would be link local IPs(169.254. 0.0/16) for transfer segments between network devices that are used everywhere between NW devices in the same VRF.
That does not mean that all those use cases are the proper way to do it, but with the lack of registered IPv4 addresses people got "creative".
I would agree that the code for the loopup between IP and prefixes I posted above is not optimal (I would add the tenant also as filter )and I think there is another request open to have as relation between IPs and prefixes, which would be the best solution I guess.
But the root cause I still see for your problem is that you setup Netbox, give everybody R/W access without given them any training on your standards how to use it.
There are many features in Netbox where there is not only one way to do it. So if users don't stick to a defined standard it will lead to problem at some point. At the latest when you start developing an automation that uses Netbox as SoT you expect the data in some form.
Netbox gives you many flexibility on how to use it. For example nobody is forced yet to use the VRF feature.
@BrunoBlanes commented on GitHub (Aug 15, 2022):
Your use case would not be affected at all with this change. I am not trying to make it impossible to add duplicate addresses, I only want the ability to do it to be moved to the appropriate place.
As I've said already, people make mistakes, they have received proper training, and they need permission to assign addresses for them to be able to do their work, but as it happens sometimes you do forget to check both the "IP Address" and "Prefixes" tab.
@github-actions[bot] commented on GitHub (Oct 15, 2022):
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. NetBox is governed by a small group of core maintainers which means not all opened issues may receive direct feedback. Do not attempt to circumvent this process by "bumping" the issue; doing so will result in its immediate closure and you may be barred from participating in any future discussions. Please see our contributing guide.
@elipsion commented on GitHub (Oct 20, 2022):
If/when #7845 is implemented, this can be enforced via permissions and an access constraint:
@BrunoBlanes commented on GitHub (Oct 20, 2022):
It still wouldn't solve it though. We currently set all of our public /24 IPv4 prefixes to be containers given that that's the minimum mask you can advertise on the internet, it seemed suitable. However, from those we assign /32 IPs for enterprise clients, /30 prefixes for point-to-point connection with client providers, /27 prefixes for CGNAT, and so on.
The
Containertype is really more of an organizational characteristic than anything else. We couldn't use that to enforce a restriction on usage.@kkthxbye-code commented on GitHub (Oct 20, 2022):
@BrunoBlanes - You can prevent creation during form validation using custom validators, not sure if that is a usable workaround for you specific usecase.
@BrunoBlanes commented on GitHub (Oct 20, 2022):
I haven't used this feature, could you link me to some documentation?
@kkthxbye-code commented on GitHub (Oct 20, 2022):
https://docs.netbox.dev/en/stable/customization/custom-validation/
Under
Custom Validation Logicyou can see a small example. You would have to write a manual check in python. if I understand your issue correctly, you would have to check that the netmask matches the closest parent prefix.@BrunoBlanes commented on GitHub (Oct 21, 2022):
It sure is a workaround that I'll implement on our instance, however doing it this way means if the user makes a mistake, he will have to go back to square one and find the right prefix for the task. Doing it natively we could avoid rework by just not showing this as a free IP addresses in the front-end.
@jeremystretch commented on GitHub (Dec 9, 2022):
The prescribed behavior, as far as I can tell, seems rather esoteric and would likely break competing use cases. As this FR has not found any substantial support in the community and a (potentially) viable alternative solution has been proposed, I'm going to close this for inactivity.