{% extends 'base.html' %} {% load form_helpers %} {% block title %}Build IPsec Tunnel{% endblock %} {% block content %}
{# ------------------------------------------------------------------ #} {# Page header #} {# ------------------------------------------------------------------ #}

Build IPsec Tunnel

Configure a policy-based IKEv1 or IKEv2 IPsec tunnel on a Cisco IOS-XE device.

{# ------------------------------------------------------------------ #} {# Django messages #} {# ------------------------------------------------------------------ #} {% if messages %} {% for message in messages %} {% endfor %} {% endif %} {# ------------------------------------------------------------------ #} {# Form #} {# ------------------------------------------------------------------ #}
{% csrf_token %} {# ---- Device ---------------------------------------------------- #}
Target Device
{{ form.device }} {% if form.device.help_text %}
{{ form.device.help_text }}
{% endif %} {% for error in form.device.errors %}
{{ error }}
{% endfor %}
{# ---- IKE Version + Remote Peer --------------------------------- #}
IKE Version & Remote Peer
{{ form.ike_version }} {% if form.ike_version.help_text %}
{{ form.ike_version.help_text }}
{% endif %} {% for error in form.ike_version.errors %}
{{ error }}
{% endfor %}
{{ form.remote_peer_ip }} {% if form.remote_peer_ip.help_text %}
{{ form.remote_peer_ip.help_text }}
{% endif %} {% for error in form.remote_peer_ip.errors %}
{{ error }}
{% endfor %}
{# /row #}
{# ---- Interesting Traffic (Crypto ACL) -------------------------- #}
Interesting Traffic (Crypto ACL)
{{ form.local_network }} {% if form.local_network.help_text %}
{{ form.local_network.help_text }}
{% endif %} {% for error in form.local_network.errors %}
{{ error }}
{% endfor %}
{{ form.remote_network }} {% if form.remote_network.help_text %}
{{ form.remote_network.help_text }}
{% endif %} {% for error in form.remote_network.errors %}
{{ error }}
{% endfor %}
{{ form.crypto_acl_name }} {% if form.crypto_acl_name.help_text %}
{{ form.crypto_acl_name.help_text }}
{% endif %} {% for error in form.crypto_acl_name.errors %}
{{ error }}
{% endfor %}
{# /row #}
{# ---- Crypto Map ------------------------------------------------- #}
Crypto Map
{{ form.wan_interface }} {% if form.wan_interface.help_text %}
{{ form.wan_interface.help_text }}
{% endif %} {% for error in form.wan_interface.errors %}
{{ error }}
{% endfor %}
{{ form.crypto_map_name }} {% for error in form.crypto_map_name.errors %}
{{ error }}
{% endfor %}
{{ form.crypto_map_sequence }} {% if form.crypto_map_sequence.help_text %}
{{ form.crypto_map_sequence.help_text }}
{% endif %} {% for error in form.crypto_map_sequence.errors %}
{{ error }}
{% endfor %}
{# /row #}
{# ---- Shared IKE Parameters ------------------------------------- #}
Shared IKE Parameters
{{ form.ike_dh_group }} {% if form.ike_dh_group.help_text %}
{{ form.ike_dh_group.help_text }}
{% endif %} {% for error in form.ike_dh_group.errors %}
{{ error }}
{% endfor %}
{{ form.ike_lifetime }} {% if form.ike_lifetime.help_text %}
{{ form.ike_lifetime.help_text }}
{% endif %} {% for error in form.ike_lifetime.errors %}
{{ error }}
{% endfor %}
{# /row #}
{# ---- IKEv1 Settings (shown only when IKEv1 selected) ----------- #}
IKEv1 / ISAKMP Settings IKEv1 only
{{ form.isakmp_policy_priority }} {% if form.isakmp_policy_priority.help_text %}
{{ form.isakmp_policy_priority.help_text }}
{% endif %} {% for error in form.isakmp_policy_priority.errors %}
{{ error }}
{% endfor %}
{{ form.ikev1_encryption }} {% if form.ikev1_encryption.help_text %}
{{ form.ikev1_encryption.help_text }}
{% endif %} {% for error in form.ikev1_encryption.errors %}
{{ error }}
{% endfor %}
{{ form.ikev1_hash }} {% for error in form.ikev1_hash.errors %}
{{ error }}
{% endfor %}
{# /row #}
{# ---- IKEv2 Settings (shown only when IKEv2 selected) ----------- #}
IKEv2 Settings IKEv2 only
{{ form.ikev2_proposal_name }} {% for error in form.ikev2_proposal_name.errors %}
{{ error }}
{% endfor %}
{{ form.ikev2_policy_name }} {% for error in form.ikev2_policy_name.errors %}
{{ error }}
{% endfor %}
{{ form.ikev2_keyring_name }} {% for error in form.ikev2_keyring_name.errors %}
{{ error }}
{% endfor %}
{{ form.ikev2_profile_name }} {% for error in form.ikev2_profile_name.errors %}
{{ error }}
{% endfor %}
{{ form.ikev2_encryption }} {% if form.ikev2_encryption.help_text %}
{{ form.ikev2_encryption.help_text }}
{% endif %} {% for error in form.ikev2_encryption.errors %}
{{ error }}
{% endfor %}
{{ form.ikev2_integrity }} {% for error in form.ikev2_integrity.errors %}
{{ error }}
{% endfor %}
{# /row #}
{# ---- IPsec Phase 2 Settings ------------------------------------ #}
IPsec Phase 2 Settings
{{ form.ipsec_transform_set_name }} {% for error in form.ipsec_transform_set_name.errors %}
{{ error }}
{% endfor %}
{{ form.ipsec_encryption }} {% for error in form.ipsec_encryption.errors %}
{{ error }}
{% endfor %}
{{ form.ipsec_integrity }} {% if form.ipsec_integrity.help_text %}
{{ form.ipsec_integrity.help_text }}
{% endif %} {% for error in form.ipsec_integrity.errors %}
{{ error }}
{% endfor %}
{{ form.ipsec_lifetime }} {% if form.ipsec_lifetime.help_text %}
{{ form.ipsec_lifetime.help_text }}
{% endif %} {% for error in form.ipsec_lifetime.errors %}
{{ error }}
{% endfor %}
{# /row #}
{# ---- Authentication -------------------------------------------- #}
Authentication
{{ form.pre_shared_key }} {% if form.pre_shared_key.help_text %}
{{ form.pre_shared_key.help_text }}
{% endif %} {% for error in form.pre_shared_key.errors %}
{{ error }}
{% endfor %}
{# ---- Non-field errors ------------------------------------------ #} {% if form.non_field_errors %}
    {% for error in form.non_field_errors %}
  • {{ error }}
  • {% endfor %}
{% endif %} {# ---- Submit / Cancel ------------------------------------------ #}
Cancel
{# /col #} {# -------------------------------------------------------------------- #} {# Sidebar: config preview #} {# -------------------------------------------------------------------- #}
What this does

Submitting this form enqueues a Nautobot Job that SSHes into the selected device and pushes a policy-based IPsec configuration.

IKEv2 pushes:

  • crypto ikev2 proposal
  • crypto ikev2 policy
  • crypto ikev2 keyring
  • crypto ikev2 profile

IKEv1 pushes:

  • crypto isakmp policy
  • crypto isakmp key

Both versions push:

  • ip access-list extended
  • crypto ipsec transform-set
  • crypto map (applied to WAN interface)
  • copy running-config startup-config

Device credentials are read from the environment variables NAUTOBOT_DEVICE_USERNAME and NAUTOBOT_DEVICE_PASSWORD.

{# /outer row #} {# -------------------------------------------------------------------- #} {# IKE version show/hide script #} {# -------------------------------------------------------------------- #} {% endblock %}