mirror of
https://github.com/eduardogsilva/wireguard_webadmin.git
synced 2025-04-19 08:55:12 +00:00
DNS apply configuration
This commit is contained in:
parent
414bc8076a
commit
da1513e560
33
dns/functions.py
Normal file
33
dns/functions.py
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
from .models import DNSSettings, StaticHost
|
||||||
|
|
||||||
|
|
||||||
|
def generate_unbound_config():
|
||||||
|
dns_settings = DNSSettings.objects.get(name='dns_settings')
|
||||||
|
static_hosts = StaticHost.objects.all()
|
||||||
|
if dns_settings.dns_primary:
|
||||||
|
do_not_query_localhost = 'yes'
|
||||||
|
forward_zone = f'\nforward-zone:\n name: "."\n forward-addr: {dns_settings.dns_primary}\n'
|
||||||
|
if dns_settings.dns_secondary:
|
||||||
|
forward_zone += f' forward-addr: {dns_settings.dns_secondary}\n'
|
||||||
|
else:
|
||||||
|
do_not_query_localhost = 'no'
|
||||||
|
forward_zone = ''
|
||||||
|
|
||||||
|
|
||||||
|
unbound_config = f'''
|
||||||
|
server:
|
||||||
|
interface: 0.0.0.0
|
||||||
|
port: 53
|
||||||
|
access-control: 0.0.0.0/0 allow
|
||||||
|
do-ip4: yes
|
||||||
|
do-ip6: no
|
||||||
|
do-udp: yes
|
||||||
|
local-zone: "local." static
|
||||||
|
do-not-query-localhost: {do_not_query_localhost}
|
||||||
|
verbosity: 1
|
||||||
|
recursion: yes
|
||||||
|
'''
|
||||||
|
unbound_config += forward_zone
|
||||||
|
for static_host in static_hosts:
|
||||||
|
unbound_config += f'local-data: "{static_host.hostname}. IN A {static_host.ip_address}"\n'
|
||||||
|
return unbound_config
|
19
dns/views.py
19
dns/views.py
@ -4,12 +4,28 @@ from django.contrib import messages
|
|||||||
from user_manager.models import UserAcl
|
from user_manager.models import UserAcl
|
||||||
from .models import DNSSettings, StaticHost
|
from .models import DNSSettings, StaticHost
|
||||||
from .forms import StaticHostForm, DNSSettingsForm
|
from .forms import StaticHostForm, DNSSettingsForm
|
||||||
|
from .functions import generate_unbound_config
|
||||||
|
from django.conf import settings
|
||||||
|
|
||||||
|
|
||||||
|
@login_required
|
||||||
|
def view_apply_dns_config(request):
|
||||||
|
dns_settings, _ = DNSSettings.objects.get_or_create(name='dns_settings')
|
||||||
|
dns_settings.pending_changes = False
|
||||||
|
dns_settings.save()
|
||||||
|
unbound_config = generate_unbound_config()
|
||||||
|
with open(settings.UNBOUND_CONFIG, 'w') as f:
|
||||||
|
f.write(unbound_config)
|
||||||
|
messages.success(request, 'DNS settings applied successfully')
|
||||||
|
return redirect('/dns/')
|
||||||
|
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
def view_static_host_list(request):
|
def view_static_host_list(request):
|
||||||
dns_settings, _ = DNSSettings.objects.get_or_create(name='dns_settings')
|
dns_settings, _ = DNSSettings.objects.get_or_create(name='dns_settings')
|
||||||
static_host_list = StaticHost.objects.all().order_by('hostname')
|
static_host_list = StaticHost.objects.all().order_by('hostname')
|
||||||
|
if dns_settings.pending_changes:
|
||||||
|
messages.warning(request, 'Pending Changes|There are pending DNS changes that have not been applied')
|
||||||
context = {
|
context = {
|
||||||
'dns_settings': dns_settings,
|
'dns_settings': dns_settings,
|
||||||
'static_host_list': static_host_list,
|
'static_host_list': static_host_list,
|
||||||
@ -25,8 +41,7 @@ def view_manage_dns_settings(request):
|
|||||||
form = DNSSettingsForm(request.POST or None, instance=dns_settings)
|
form = DNSSettingsForm(request.POST or None, instance=dns_settings)
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
form.save()
|
form.save()
|
||||||
messages.success(request, 'DNS settings saved successfully')
|
return redirect('/dns/apply_config/')
|
||||||
return redirect('/dns/')
|
|
||||||
|
|
||||||
form_description_content = '''
|
form_description_content = '''
|
||||||
<strong>DNS Forwarders</strong>
|
<strong>DNS Forwarders</strong>
|
||||||
|
@ -131,7 +131,7 @@ STATICFILES_DIRS = [
|
|||||||
|
|
||||||
# Default primary key field type
|
# Default primary key field type
|
||||||
# https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field
|
# https://docs.djangoproject.com/en/5.0/ref/settings/#default-auto-field
|
||||||
|
UNBOUND_CONFIG = '/config/unbound.conf'
|
||||||
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
|
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
|
||||||
|
|
||||||
WIREGUARD_WEBADMIN_VERSION = 9607
|
WIREGUARD_WEBADMIN_VERSION = 9607
|
||||||
|
@ -24,7 +24,7 @@ from accounts.views import view_create_first_user, view_login, view_logout
|
|||||||
from wireguard_tools.views import export_wireguard_configs, download_config_or_qrcode, restart_wireguard_interfaces
|
from wireguard_tools.views import export_wireguard_configs, download_config_or_qrcode, restart_wireguard_interfaces
|
||||||
from api.views import wireguard_status, cron_check_updates, cron_update_peer_latest_handshake, routerfleet_get_user_token, routerfleet_authenticate_session
|
from api.views import wireguard_status, cron_check_updates, cron_update_peer_latest_handshake, routerfleet_get_user_token, routerfleet_authenticate_session
|
||||||
from firewall.views import view_redirect_rule_list, manage_redirect_rule, view_firewall_rule_list, manage_firewall_rule, view_manage_firewall_settings, view_generate_iptables_script, view_reset_firewall, view_firewall_migration_required
|
from firewall.views import view_redirect_rule_list, manage_redirect_rule, view_firewall_rule_list, manage_firewall_rule, view_manage_firewall_settings, view_generate_iptables_script, view_reset_firewall, view_firewall_migration_required
|
||||||
from dns.views import view_static_host_list, view_manage_static_host, view_manage_dns_settings
|
from dns.views import view_static_host_list, view_manage_static_host, view_manage_dns_settings, view_apply_dns_config
|
||||||
|
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
@ -32,6 +32,7 @@ urlpatterns = [
|
|||||||
path('', view_welcome, name='welcome'),
|
path('', view_welcome, name='welcome'),
|
||||||
path('status/', view_wireguard_status, name='wireguard_status'),
|
path('status/', view_wireguard_status, name='wireguard_status'),
|
||||||
path('dns/', view_static_host_list, name='static_host_list'),
|
path('dns/', view_static_host_list, name='static_host_list'),
|
||||||
|
path('dns/apply_config/', view_apply_dns_config, name='apply_dns_config'),
|
||||||
path('dns/manage_static_host/', view_manage_static_host, name='manage_static_host'),
|
path('dns/manage_static_host/', view_manage_static_host, name='manage_static_host'),
|
||||||
path('dns/manage_settings/', view_manage_dns_settings, name='manage_dns_settings'),
|
path('dns/manage_settings/', view_manage_dns_settings, name='manage_dns_settings'),
|
||||||
path('peer/list/', view_wireguard_peer_list, name='wireguard_peer_list'),
|
path('peer/list/', view_wireguard_peer_list, name='wireguard_peer_list'),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user