diff --git a/netbox/ipam/forms/filtersets.py b/netbox/ipam/forms/filtersets.py
index 9433f3cb3..0bd60ef4f 100644
--- a/netbox/ipam/forms/filtersets.py
+++ b/netbox/ipam/forms/filtersets.py
@@ -352,6 +352,7 @@ class IPAddressFilterForm(ContactModelFilterForm, TenancyFilterForm, PrimaryMode
),
FieldSet('vrf_id', 'present_in_vrf_id', name=_('VRF')),
FieldSet('device_id', 'virtual_machine_id', name=_('Device/VM')),
+ FieldSet('nat_inside_id', name=_('NAT')),
FieldSet('tenant_group_id', 'tenant_id', name=_('Tenant')),
FieldSet('owner_group_id', 'owner_id', name=_('Ownership')),
FieldSet('contact', 'contact_role', 'contact_group', name=_('Contacts')),
@@ -397,6 +398,11 @@ class IPAddressFilterForm(ContactModelFilterForm, TenancyFilterForm, PrimaryMode
required=False,
label=_('Assigned VM'),
)
+ nat_inside_id = DynamicModelMultipleChoiceField(
+ queryset=IPAddress.objects.all(),
+ required=False,
+ label=_('NAT inside'),
+ )
status = forms.MultipleChoiceField(
label=_('Status'),
choices=IPAddressStatusChoices,
diff --git a/netbox/ipam/tests/test_filtersets.py b/netbox/ipam/tests/test_filtersets.py
index fdbb0767f..900436d62 100644
--- a/netbox/ipam/tests/test_filtersets.py
+++ b/netbox/ipam/tests/test_filtersets.py
@@ -1307,6 +1307,10 @@ class IPAddressTestCase(TestCase, ChangeLoggedFilterSetTests):
)
IPAddress.objects.bulk_create(ipaddresses)
+ IPAddress.objects.filter(pk__in=[ipaddresses[1].pk, ipaddresses[2].pk]).update(
+ nat_inside=ipaddresses[0]
+ )
+
services = (
Service(
parent=devices[0],
@@ -1476,6 +1480,11 @@ class IPAddressTestCase(TestCase, ChangeLoggedFilterSetTests):
params = {'service_id': [services[0].pk, services[1].pk]}
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
+ def test_nat_inside(self):
+ inside = IPAddress.objects.filter(nat_outside__isnull=False).distinct().first()
+ params = {'nat_inside_id': [inside.pk]}
+ self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
+
class FHRPGroupTestCase(TestCase, ChangeLoggedFilterSetTests):
queryset = FHRPGroup.objects.all()
diff --git a/netbox/templates/ipam/ipaddress/attrs/nat_outside.html b/netbox/templates/ipam/ipaddress/attrs/nat_outside.html
index 73dd72035..558e4a6c0 100644
--- a/netbox/templates/ipam/ipaddress/attrs/nat_outside.html
+++ b/netbox/templates/ipam/ipaddress/attrs/nat_outside.html
@@ -1,2 +1,17 @@
{% load helpers %}
-{% for ip in value.all %}{{ ip|linkify }}{% if ip.assigned_object %} ({{ ip.assigned_object.parent_object|linkify }}){% endif %}
{% empty %}—{% endfor %}
+{% with ips=value.all|slice:":11" %}
+ {% if ips %}
+