From 19d5e665ec61dde81791022a0a7ecbdee03b5fed Mon Sep 17 00:00:00 2001 From: Eduardo Silva Date: Thu, 15 Feb 2024 12:08:46 -0300 Subject: [PATCH] add wireguard instance public_key --- .../wireguard/wireguard_manage_server.html | 13 +++++++++---- templates/wireguard/wireguard_peer_list.html | 8 +++++++- wireguard/forms.py | 5 +++-- .../0004_wireguardinstance_public_key.py | 19 +++++++++++++++++++ wireguard/models.py | 1 + wireguard/views.py | 2 ++ wireguard_peer/views.py | 2 +- wireguard_webadmin/settings.py | 4 +--- 8 files changed, 43 insertions(+), 11 deletions(-) create mode 100644 wireguard/migrations/0004_wireguardinstance_public_key.py diff --git a/templates/wireguard/wireguard_manage_server.html b/templates/wireguard/wireguard_manage_server.html index 9d68cd4..c82c939 100644 --- a/templates/wireguard/wireguard_manage_server.html +++ b/templates/wireguard/wireguard_manage_server.html @@ -35,16 +35,20 @@ - +
-
+
+
+ + +
@@ -53,9 +57,10 @@
- - + +
+
diff --git a/templates/wireguard/wireguard_peer_list.html b/templates/wireguard/wireguard_peer_list.html index 7aec27e..883e088 100644 --- a/templates/wireguard/wireguard_peer_list.html +++ b/templates/wireguard/wireguard_peer_list.html @@ -22,7 +22,13 @@
-
{% if peer.name %}{{ peer.name}}{% else %}{{ peer.public_key }}{% endif %}
+
+ {% if peer.name %} + {{ peer.name}} + {% else %} + {{ peer.public_key|slice:":16" }}{% if peer.public_key|length > 16 %}...{% endif %} + {% endif %} +
{% comment %}This needs to be improved{% endcomment %} diff --git a/wireguard/forms.py b/wireguard/forms.py index 0132dfc..e64368c 100644 --- a/wireguard/forms.py +++ b/wireguard/forms.py @@ -7,18 +7,19 @@ class WireGuardInstanceForm(forms.ModelForm): name = forms.CharField(label='Display Name', required=False) instance_id = forms.IntegerField(label='Instance ID') private_key = forms.CharField(label='Private Key') + public_key = forms.CharField(label='Public Key') hostname = forms.CharField(label='Public Address') listen_port = forms.IntegerField(label='Listen Port') address = forms.GenericIPAddressField(label='VPN IP Address') netmask = forms.ChoiceField(choices=NETMASK_CHOICES, label='Netmask') post_up = forms.CharField(label='Post Up', required=False) post_down = forms.CharField(label='Post Down', required=False) - persistent_keepalive = forms.IntegerField(label='Persistent Keepalive') + persistent_keepalive = forms.IntegerField(label='Keepalive') class Meta: model = WireGuardInstance fields = [ - 'name', 'instance_id', 'private_key', 'hostname', 'listen_port', 'address', 'netmask', 'post_up', 'post_down', 'persistent_keepalive' + 'name', 'instance_id', 'private_key', 'public_key','hostname', 'listen_port', 'address', 'netmask', 'post_up', 'post_down', 'persistent_keepalive' ] def clean(self): diff --git a/wireguard/migrations/0004_wireguardinstance_public_key.py b/wireguard/migrations/0004_wireguardinstance_public_key.py new file mode 100644 index 0000000..4b193a0 --- /dev/null +++ b/wireguard/migrations/0004_wireguardinstance_public_key.py @@ -0,0 +1,19 @@ +# Generated by Django 5.0.1 on 2024-02-15 14:29 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('wireguard', '0003_peerallowedip_missing_from_wireguard'), + ] + + operations = [ + migrations.AddField( + model_name='wireguardinstance', + name='public_key', + field=models.CharField(default=' ', max_length=100), + preserve_default=False, + ), + ] diff --git a/wireguard/models.py b/wireguard/models.py index 7df7ae8..fabcf14 100644 --- a/wireguard/models.py +++ b/wireguard/models.py @@ -33,6 +33,7 @@ class WireGuardInstance(models.Model): name = models.CharField(max_length=100, blank=True, null=True) instance_id = models.PositiveIntegerField(unique=True, default=0) private_key = models.CharField(max_length=100) + public_key = models.CharField(max_length=100) hostname = models.CharField(max_length=100) listen_port = models.IntegerField(default=51820, unique=True) address = models.GenericIPAddressField(unique=True, protocol='IPv4') diff --git a/wireguard/views.py b/wireguard/views.py index 8fd9a7a..8bdaed3 100644 --- a/wireguard/views.py +++ b/wireguard/views.py @@ -17,6 +17,7 @@ def generate_instance_defaults(): new_listen_port = (max_listen_port + 1) if max_listen_port is not None else 51820 new_private_key = subprocess.check_output('wg genkey', shell=True).decode('utf-8').strip() + new_public_key = subprocess.check_output(f'echo {new_private_key} | wg pubkey', shell=True).decode('utf-8').strip() new_address = f'10.188.{new_instance_id}.1' @@ -52,6 +53,7 @@ def generate_instance_defaults(): 'instance_id': new_instance_id, 'listen_port': new_listen_port, 'private_key': new_private_key, + 'public_key': new_public_key, 'address': new_address, 'netmask': 24, 'persistent_keepalive': 25, diff --git a/wireguard_peer/views.py b/wireguard_peer/views.py index 2b99493..fcb4cad 100644 --- a/wireguard_peer/views.py +++ b/wireguard_peer/views.py @@ -21,7 +21,7 @@ def generate_peer_default(wireguard_instance): # the code below can be an issue for larger networks, for now it's fine, but it should be optimized in the future used_ips = set(WireGuardInstance.objects.all().values_list('address', flat=True)) | \ - set(PeerAllowedIP.objects.all().values_list('allowed_ip', flat=True)) + set(PeerAllowedIP.objects.filter(priority=0).values_list('allowed_ip', flat=True)) free_ip_address = None for ip in network.hosts(): diff --git a/wireguard_webadmin/settings.py b/wireguard_webadmin/settings.py index 6bf1378..353a567 100644 --- a/wireguard_webadmin/settings.py +++ b/wireguard_webadmin/settings.py @@ -78,9 +78,7 @@ WSGI_APPLICATION = 'wireguard_webadmin.wsgi.application' DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': '/etc/wireguard/wireguard-webadmin-db.sqlite3', - #'NAME': BASE_DIR / 'db.sqlite3', - + 'NAME': '/etc/wireguard/wireguard-webadmin.sqlite3', } }