mirror of
https://github.com/netbox-community/netbox.git
synced 2026-01-11 21:10:29 +01:00
Option to attatch MAC Address to IP Addresses #6511
Closed
opened 2025-12-29 19:41:48 +01:00 by adam
·
10 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
No Label
type: feature
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/netbox#6511
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 @Decafpancakes on GitHub (May 25, 2022).
NetBox version
v3.2.3
Feature type
New functionality
Proposed functionality
The ability to add an associated MAC to an IP under IPAM IP Addresses without creating Interfaces or Devices. Would also like some sort of validation on the MAC so that they cant repeat. There is also no duplicate check for DNS name either, this would also be important to have.
Use case
This would help the transition from IPPlan to NetBox. Also useful for when exporting to a DHCP server.
Database changes
No response
External dependencies
No response
@DanSheps commented on GitHub (May 27, 2022):
The problem with this is that MAC addresses are almost never associated to IP addresses. You get them associated to FHRP groups, interfaces, etc. Your import script should take this into account.
We try to replicate real-world models where possible, and not conform to the needs of other DCIM/IPAM packages which is why our models are setup the way they are.
For DNS names, you can create a custom validator for that.
@jeremystretch commented on GitHub (May 31, 2022):
I'd argue that what you want to model is analogous to an ARP record; a binding between an IP address and a MAC address. NetBox doesn't model these natively (the relationship between IPs and MACs exists through interfaces) but you could easily do so in a plugin.
@sleepinggenius2 commented on GitHub (Jun 1, 2022):
We have something like this implemented today using a custom field to capture the MAC address for static DHCP reservations. This is absolutely critical for our use case to be able to create the reservations in IPAM and subsequently generate the corresponding DHCP server config. I think OP is talking about a similar use case and I suspect a number of other people are also using NetBox within a DDI solution. We have a simple regex validator in place today for the custom field to catch obviously malformed input, but it would be really nice to have the value standardized/normalized like the interface MAC addresses are today and not have to do that work after they are retrieved for an integration. We are not able to use the Interface model for this, as these are primarily customer devices that we do not have in our network inventory and it would not be practical to do so.
@Decafpancakes commented on GitHub (Jun 1, 2022):
@sleepinggenius2 Would you be able to share how you got this setup? Would be a huge help, thanks!
@sleepinggenius2 commented on GitHub (Jun 1, 2022):
Sure, we have the custom field set up like this:
Models(s): IPAM > IP address
Name: mac_address
Label: MAC Address
Type: Text
Weight: 100
Required: false
Description: Only use if the IP cannot be associated with an interface, like for customer static DHCP assignments
Filter Logic: Loose
Default: null
Validation regex: ^(?:[A-Fa-f0-9]{2}:){5}[A-Fa-f0-9]{2}$
Interestingly enough, this was the first custom field created in our install. Hope this helps!
@Decafpancakes commented on GitHub (Jun 1, 2022):
@sleepinggenius2 Thank you for that, I did already have a very similar custom field set up but you filled in some details that I didn't have like the regex value. You had mentioned that you have a script that is exporting the reservations to a dhcp config, could you share this with me since I have to do the same thing? Feel free to msg me: decafpancakes@gmail.com
@DanSheps commented on GitHub (Jun 1, 2022):
This would be something you would want to develop a plugin for then. However, you could also obtain this information simply by querying the IP and getting the mac addresses of the interface that an IP is assigned to.
@sleepinggenius2 commented on GitHub (Jun 1, 2022):
We are using a combination of Webhooks and a periodic batch audit process to keep the data synchronized with our DHCP server today. Unfortunately, I'm not going to be able to provide that code, as it's part of a larger custom provisioning platform and would vary depending on the specific type of DHCP server that you're using.
The issue for us is that we can't associate the IP with an interface, since the device that the IP is assigned to does not exist within our NetBox platform. It is typically CPE that belongs to a customer, and we have not found a practical, non-hacky way to maintain that data in the platform.
I agree wholeheartedly with associating an IP to an interface where possible, which is exactly why I made the field description say what it does. In fact, I would love to see this implemented as maybe another tab under the Interface Assignment section of the IP address form, so you have to explicitly choose to enter the MAC manually. I'm actually working on a custom validator to make sure that the Status is DHCP, has our Static tag set, and is not otherwise assigned to be able to populate our current custom field.
@DanSheps commented on GitHub (Jul 2, 2022):
I think in the context of DHCP, you would be better of having a "DHCPScope" model and then having an association between IPAddress and the scope, with a field on the join table for "MacAddress"
Again, this would have to be done in a plugin as this is likely not to be included in Core.
@jeremystretch commented on GitHub (Jul 20, 2022):
To summarize the discussion above, there are several options to address this use case: