Files
wireguard_webadmin/dns/functions.py
2025-12-31 18:01:00 -03:00

106 lines
3.4 KiB
Python

import os
import tarfile
from cluster.models import ClusterSettings
from .models import DNSSettings, StaticHost, DNSFilterList
def compress_dnsmasq_config():
output_file = "/etc/dnsmasq/dnsmasq_config.tar.gz"
base_dir = "/etc/dnsmasq"
if not ClusterSettings.objects.filter(enabled=True, name='cluster_settings').exists():
if os.path.exists(output_file):
os.remove(output_file)
return None
with tarfile.open(output_file, "w:gz") as tar:
for filename in os.listdir(base_dir):
if filename.endswith(".conf"):
fullpath = os.path.join(base_dir, filename)
tar.add(fullpath, arcname=filename)
return output_file
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
'''
unbound_config += forward_zone
if static_hosts:
unbound_config += '\nlocal-zone: "." transparent\n'
for static_host in static_hosts:
unbound_config += f' local-data: "{static_host.hostname}. IN A {static_host.ip_address}"\n'
return unbound_config
def generate_dnsdist_config():
dns_settings = DNSSettings.objects.get(name='dns_settings')
static_hosts = StaticHost.objects.all()
dnsdist_config = "setLocal('0.0.0.0:53')\n"
dnsdist_config += "setACL('0.0.0.0/0')\n"
if dns_settings.dns_primary:
dnsdist_config += f"newServer({{address='{dns_settings.dns_primary}', pool='upstreams'}})\n"
if dns_settings.dns_secondary:
dnsdist_config += f"newServer({{address='{dns_settings.dns_secondary}', pool='upstreams'}})\n"
if static_hosts:
dnsdist_config += "addAction(makeRule(''), PoolAction('staticHosts'))\n"
for static_host in static_hosts:
dnsdist_config += f"addLocal('{static_host.hostname}', '{static_host.ip_address}')\n"
return dnsdist_config
def generate_dnsmasq_config():
dns_settings = DNSSettings.objects.get(name='dns_settings')
static_hosts = StaticHost.objects.all()
dns_lists = DNSFilterList.objects.filter(enabled=True)
dnsmasq_config = f'''
no-dhcp-interface=
listen-address=0.0.0.0
bind-interfaces
'''
if dns_settings.dns_primary:
dnsmasq_config += f'server={dns_settings.dns_primary}\n'
if dns_settings.dns_secondary:
dnsmasq_config += f'server={dns_settings.dns_secondary}\n'
if static_hosts:
dnsmasq_config += '\n'
for static_host in static_hosts:
dnsmasq_config += f'address=/{static_host.hostname}/{static_host.ip_address}\n'
if dns_lists:
dnsmasq_config += '\n'
for dns_list in dns_lists:
file_path = os.path.join("/etc/dnsmasq/", f"{dns_list.uuid}.conf")
dnsmasq_config += f'addn-hosts={file_path}\n'
return dnsmasq_config