diff --git a/templates/base.html b/templates/base.html
index 7831c89..543f2b5 100644
--- a/templates/base.html
+++ b/templates/base.html
@@ -192,7 +192,7 @@
diff --git a/templates/wireguard/welcome.html b/templates/wireguard/welcome.html
index 99b480c..1b7e2d3 100644
--- a/templates/wireguard/welcome.html
+++ b/templates/wireguard/welcome.html
@@ -7,10 +7,8 @@
If you encounter any issues or have suggestions, please open an issue on GitHub so I can review it.
TODO list
- - The DNS server provided to the peer is still hardcoded.
- AllowedIPs on client configuration side.
- Make Peer's last handshake permanent
- - Setting for refresh interval in Peer list
- wireguard_webadmin Update notification
diff --git a/templates/wireguard/wireguard_manage_server.html b/templates/wireguard/wireguard_manage_server.html
index c82c939..7598752 100644
--- a/templates/wireguard/wireguard_manage_server.html
+++ b/templates/wireguard/wireguard_manage_server.html
@@ -24,18 +24,21 @@
{% csrf_token %}
-
+
-
+
@@ -77,6 +82,22 @@
+
+
+
+
+
+
diff --git a/templates/wireguard/wireguard_peer_list.html b/templates/wireguard/wireguard_peer_list.html
index 361703b..5820bc3 100644
--- a/templates/wireguard/wireguard_peer_list.html
+++ b/templates/wireguard/wireguard_peer_list.html
@@ -136,7 +136,7 @@
};
fetchWireguardStatus();
- setInterval(fetchWireguardStatus, 30000);
+ setInterval(fetchWireguardStatus, {{ current_instance.peer_list_refresh_interval }} * 1000);
});
const updateUI = (data) => {
diff --git a/wireguard/admin.py b/wireguard/admin.py
index 66cf0d8..ef6c0ed 100644
--- a/wireguard/admin.py
+++ b/wireguard/admin.py
@@ -3,8 +3,8 @@ from .models import WireGuardInstance, Peer, PeerAllowedIP
class WireGuardInstanceAdmin(admin.ModelAdmin):
- list_display = ('name', 'instance_id', 'private_key', 'hostname', 'listen_port', 'address', 'netmask', 'post_up', 'post_down', 'persistent_keepalive', 'created', 'updated', 'uuid')
- search_fields = ('name', 'instance_id', 'private_key', 'hostname', 'listen_port', 'address', 'netmask', 'post_up', 'post_down', 'persistent_keepalive', 'created', 'updated', 'uuid')
+ list_display = ('name', 'instance_id', 'private_key', 'hostname', 'listen_port', 'address', 'netmask', 'post_up', 'post_down', 'created', 'updated', 'uuid')
+ search_fields = ('name', 'instance_id', 'private_key', 'hostname', 'listen_port', 'address', 'netmask', 'post_up', 'post_down', 'created', 'updated', 'uuid')
admin.site.register(WireGuardInstance, WireGuardInstanceAdmin)
diff --git a/wireguard/forms.py b/wireguard/forms.py
index e64368c..b901ee0 100644
--- a/wireguard/forms.py
+++ b/wireguard/forms.py
@@ -14,12 +14,15 @@ class WireGuardInstanceForm(forms.ModelForm):
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='Keepalive')
+ peer_list_refresh_interval = forms.IntegerField(label='Web Refresh Interval', initial=20)
+ dns_primary = forms.GenericIPAddressField(label='Primary DNS', initial='1.1.1.1')
+ dns_secondary = forms.GenericIPAddressField(label='Secondary DNS', initial='1.0.0.1', required=False)
class Meta:
model = WireGuardInstance
fields = [
- 'name', 'instance_id', 'private_key', 'public_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', 'peer_list_refresh_interval', 'dns_primary', 'dns_secondary'
]
def clean(self):
@@ -27,6 +30,9 @@ class WireGuardInstanceForm(forms.ModelForm):
hostname = cleaned_data.get('hostname')
address = cleaned_data.get('address')
netmask = cleaned_data.get('netmask')
+ peer_list_refresh_interval = cleaned_data.get('peer_list_refresh_interval')
+ if peer_list_refresh_interval < 10:
+ raise forms.ValidationError('Peer List Refresh Interval must be at least 10 seconds')
if not is_valid_ip_or_hostname(hostname):
raise forms.ValidationError('Invalid hostname or IP Address')
diff --git a/wireguard/migrations/0007_remove_wireguardinstance_persistent_keepalive.py b/wireguard/migrations/0007_remove_wireguardinstance_persistent_keepalive.py
new file mode 100644
index 0000000..d70fd3b
--- /dev/null
+++ b/wireguard/migrations/0007_remove_wireguardinstance_persistent_keepalive.py
@@ -0,0 +1,17 @@
+# Generated by Django 5.0.1 on 2024-02-17 17:21
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('wireguard', '0006_peerstatus'),
+ ]
+
+ operations = [
+ migrations.RemoveField(
+ model_name='wireguardinstance',
+ name='persistent_keepalive',
+ ),
+ ]
diff --git a/wireguard/migrations/0008_wireguardinstance_dns_primary_and_more.py b/wireguard/migrations/0008_wireguardinstance_dns_primary_and_more.py
new file mode 100644
index 0000000..75e0269
--- /dev/null
+++ b/wireguard/migrations/0008_wireguardinstance_dns_primary_and_more.py
@@ -0,0 +1,28 @@
+# Generated by Django 5.0.1 on 2024-02-17 17:25
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('wireguard', '0007_remove_wireguardinstance_persistent_keepalive'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='wireguardinstance',
+ name='dns_primary',
+ field=models.GenericIPAddressField(default='1.1.1.1', protocol='IPv4', unique=True),
+ ),
+ migrations.AddField(
+ model_name='wireguardinstance',
+ name='dns_secondary',
+ field=models.GenericIPAddressField(blank=True, default='1.0.0.1', null=True, protocol='IPv4', unique=True),
+ ),
+ migrations.AddField(
+ model_name='wireguardinstance',
+ name='peer_list_refresh_interval',
+ field=models.IntegerField(default=20),
+ ),
+ ]
diff --git a/wireguard/models.py b/wireguard/models.py
index dbc6c72..a9b1a23 100644
--- a/wireguard/models.py
+++ b/wireguard/models.py
@@ -40,7 +40,9 @@ class WireGuardInstance(models.Model):
netmask = models.IntegerField(default=24, choices=NETMASK_CHOICES)
post_up = models.TextField(blank=True, null=True)
post_down = models.TextField(blank=True, null=True)
- persistent_keepalive = models.IntegerField(default=25)
+ peer_list_refresh_interval = models.IntegerField(default=20)
+ dns_primary = models.GenericIPAddressField(unique=True, protocol='IPv4', default='1.1.1.1')
+ dns_secondary = models.GenericIPAddressField(unique=True, protocol='IPv4', default='1.0.0.1', blank=True, null=True)
pending_changes = models.BooleanField(default=True)
created = models.DateTimeField(auto_now_add=True)
diff --git a/wireguard_tools/views.py b/wireguard_tools/views.py
index 6fd857a..7f2c3f6 100644
--- a/wireguard_tools/views.py
+++ b/wireguard_tools/views.py
@@ -36,7 +36,7 @@ def generate_peer_config(peer_uuid):
"[Interface]",
f"PrivateKey = {peer.private_key}" if peer.private_key else "",
f"Address = {client_address}",
- f"DNS = 8.8.8.8",
+ f"DNS = {wg_instance.dns_primary}" + (f", {wg_instance.dns_secondary}" if wg_instance.dns_secondary else ""),
"\n[Peer]",
f"PublicKey = {wg_instance.public_key}",
f"Endpoint = {wg_instance.hostname}:{wg_instance.listen_port}",