add wireguard instance public_key

This commit is contained in:
Eduardo Silva 2024-02-15 12:08:46 -03:00
parent f036daf779
commit 19d5e665ec
8 changed files with 43 additions and 11 deletions

View File

@ -35,16 +35,20 @@
<input type="number" class="form-control" id="{{ form.instance_id.id_for_label }}" name="{{ form.instance_id.html_name }}" placeholder="Instance ID" value="{{ form.instance_id.value|default_if_none:'' }}" required>
</div>
</div>
<!-- Line 2: Hostname and Listen Port -->
<!-- Line 2: Hostname, Listen Port and keepalive -->
<div class="form-row">
<div class="form-group col-md-6">
<label for="{{ form.hostname.id_for_label }}">{{ form.hostname.label }}</label>
<input type="text" class="form-control" id="{{ form.hostname.id_for_label }}" name="{{ form.hostname.html_name }}" placeholder="Hostname" value="{{ form.hostname.value|default_if_none:'' }}" required>
</div>
<div class="form-group col-md-6">
<div class="form-group col-md-3">
<label for="{{ form.listen_port.id_for_label }}">{{ form.listen_port.label }}</label>
<input type="number" class="form-control" id="{{ form.listen_port.id_for_label }}" name="{{ form.listen_port.html_name }}" placeholder="Listen Port" value="{{ form.listen_port.value|default_if_none:'' }}" required>
</div>
<div class="form-group col-md-3">
<label for="{{ form.persistent_keepalive.id_for_label }}">{{ form.persistent_keepalive.label }}</label>
<input type="number" class="form-control" id="{{ form.persistent_keepalive.id_for_label }}" name="{{ form.persistent_keepalive.html_name }}" placeholder="Persistent Keepalive" value="{{ form.persistent_keepalive.value|default_if_none:'' }}" required>
</div>
</div>
<!-- Line 3: Private Key and Persistent Keepalive -->
<div class="form-row">
@ -53,9 +57,10 @@
<input type="text" class="form-control" id="{{ form.private_key.id_for_label }}" name="{{ form.private_key.html_name }}" placeholder="Private Key" value="{{ form.private_key.value|default_if_none:'' }}" required>
</div>
<div class="form-group col-md-6">
<label for="{{ form.persistent_keepalive.id_for_label }}">{{ form.persistent_keepalive.label }}</label>
<input type="number" class="form-control" id="{{ form.persistent_keepalive.id_for_label }}" name="{{ form.persistent_keepalive.html_name }}" placeholder="Persistent Keepalive" value="{{ form.persistent_keepalive.value|default_if_none:'' }}" required>
<label for="{{ form.public_key.id_for_label }}">{{ form.public_key.label }}</label>
<input type="text" class="form-control" id="{{ form.public_key.id_for_label }}" name="{{ form.public_key.html_name }}" placeholder="public Key" value="{{ form.public_key.value|default_if_none:'' }}" required>
</div>
</div>
<!-- Line 4: Address and Netmask -->
<div class="form-row">

View File

@ -22,7 +22,13 @@
<div class="col-md-6">
<div class="callout callout-success">
<div class="d-flex justify-content-between align-items-start">
<h5>{% if peer.name %}{{ peer.name}}{% else %}{{ peer.public_key }}{% endif %}</h5>
<h5>
{% if peer.name %}
{{ peer.name}}
{% else %}
{{ peer.public_key|slice:":16" }}{% if peer.public_key|length > 16 %}...{% endif %}
{% endif %}
</h5>
<a href="/peer/manage/?peer={{ peer.uuid }}"><i class="far fa-edit"></i></a>
</div>
{% comment %}This needs to be improved{% endcomment %}

View File

@ -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):

View File

@ -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,
),
]

View File

@ -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')

View File

@ -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,

View File

@ -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():

View File

@ -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',
}
}