Files
yakpanel-core/class_v2/ssl_dnsV2/conf.py
2026-04-07 02:04:22 +05:30

138 lines
4.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# coding: utf-8
# -------------------------------------------------------------------
# YakPanel
# -------------------------------------------------------------------
# Copyright (c) 2014-2099 YakPanel(www.yakpanel.com) All rights reserved.
# -------------------------------------------------------------------
# Author: yakpanel
# -------------------------------------------------------------------
# aaDNS config
# ------------------------------
import json
import os
import re
import sys
if not "class_v2" in sys.path:
sys.path.append("class_v2")
__all__ = [
"aaDnsConfig",
"zone_pattern",
"file_pattern",
"record_pattern",
"ZONES_DIR",
"ZONES",
"APP_DIR",
"SERVICE_INSTALL_NAME",
"PUBLIC_SERVER",
"DNS_AUTH_LOCK",
"aaDNS_CONF",
]
zone_pattern = re.compile(r'zone\s+"[^"]+"\s*(?:IN)?\s*\{[\s\S]*?};', re.MULTILINE)
file_pattern = re.compile(r'file\s+"([^"]+)"')
record_pattern = re.compile(r'^(\S+)\s+(?:(\d+)\s+)?(?:(IN)\s+)?(\S+)\s+(.*)$')
ZONES_DIR = "/var/named/chroot/var/named/"
ZONES = "/var/named/chroot/etc/named.rfc1912.zones"
APP_DIR = os.path.dirname(os.path.abspath(__file__))
SERVICE_INSTALL_NAME = f"{APP_DIR}/aadns.pl"
aaDNS_CONF = os.path.join(APP_DIR, "aaDns_conf.json")
DNS_AUTH_LOCK = f"{APP_DIR}/dns_auth.pl"
PUBLIC_SERVER = [
("Google", ["8.8.8.8"]),
("Cloudflare", ["1.1.1.1"]),
("Quad9", ["9.9.9.9"]),
("OpenDNS", ["208.67.222.222"]),
("DNS.Watch", ["84.200.69.80"]),
("Comodo Secure DNS", ["8.26.56.26"]),
("AdGuard DNS", ["94.140.14.14"]),
("CleanBrowsing", ["185.228.168.9"]),
("Neustar DNS", ["207.177.68.4"]),
("Freenom World", ["83.145.86.7"]),
]
class aaDnsConfig:
if os.path.exists("/etc/redhat-release"):
os_type = "redhat"
package = "yum"
else:
os_type = "ubuntu"
package = "apt"
def __init__(self):
self.install_service = None
self.ns_server = None
self.bind_service_name = "named"
self.pnds_service_name = "pdns"
self._init_env()
def _init_env(self):
# RHEL/CentOS检查 bind-chroot 服务具体名称
if os.path.exists("/usr/lib/systemd/system/named-chroot.service"):
self.bind_service_name = "named-chroot"
if os.path.exists(SERVICE_INSTALL_NAME):
with open(SERVICE_INSTALL_NAME, "r") as f:
self.install_service = f.read().strip()
if self.install_service not in ["bind", "pdns"]:
try:
os.remove(SERVICE_INSTALL_NAME)
except:
pass
self.install_service = None
if os.path.exists(aaDNS_CONF):
try:
with open(aaDNS_CONF, "r") as f:
content = f.read().strip()
self.ns_server = json.loads(content) if content else None
except:
pass
@property
def pdns_paths(self):
if self.os_type == "ubuntu": # debian
return {
"config": "/etc/powerdns/pdns.conf",
"zones": ZONES,
"zone_dir": ZONES_DIR,
"service_name": self.pnds_service_name,
"package_name": "pdns-server",
}
else: # redhat, centos
return {
"config": "/etc/pdns/pdns.conf",
"zones": ZONES,
"zone_dir": ZONES_DIR,
"service_name": self.pnds_service_name,
"package_name": "bind-chroot" if self.os_type == "redhat" else "bind9",
"main": "/var/named/chroot/etc/named.conf",
}
@property
def bind_paths(self):
return {
"config": "/var/named/chroot/etc/named.conf",
"zones": "/var/named/chroot/etc/named.conf.local",
"zone_dir": ZONES_DIR,
"service_name": self.bind_service_name,
"package_name": "bind-chroot" if self.os_type == "redhat" else "bind9",
"main": "/var/named/chroot/etc/named.conf",
}
@property
def service_path(self):
if self.install_service == "bind":
return self.bind_paths
elif self.install_service == "pdns":
return self.pdns_paths
else:
return {}