Files
AI Agent 0a18b94d84 feat: BIND DNS Web Manager - Web interface for managing BIND9 DNS server
- Flask + SQLite web app with user authentication
- Zone management: create/delete zones, edit raw zone files
- Record management: add/delete A/AAAA/CNAME/MX/TXT/NS/PTR/SRV/CAA records
- Service control: start/stop/restart/reload BIND via systemctl/rndc
- Configuration editor: edit named.conf.options/local with syntax validation
- DNS query testing: online dig tool
- Audit log: all operations logged with user/timestamp
- BIND9 backend, listening on port 53
2026-07-09 17:24:44 +08:00

49 lines
2.1 KiB
HTML

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}DNS 管理系统{% endblock %}</title>
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
</head>
<body>
{% if current_user %}
<nav class="navbar">
<div class="nav-brand">
<span class="logo">🌐</span>
<a href="{{ url_for('dashboard') }}">DNS 管理系统</a>
</div>
<div class="nav-links">
<a href="{{ url_for('dashboard') }}" class="{% if request.endpoint == 'dashboard' %}active{% endif %}">仪表盘</a>
<a href="{{ url_for('zone_list') }}" class="{% if request.endpoint in ('zone_list', 'zone_create', 'zone_detail', 'zone_raw') %}active{% endif %}">域名管理</a>
<a href="{{ url_for('query_test') }}" class="{% if request.endpoint == 'query_test' %}active{% endif %}">DNS 查询</a>
<a href="{{ url_for('config_view') }}" class="{% if request.endpoint == 'config_view' %}active{% endif %}">配置管理</a>
<a href="{{ url_for('logs') }}" class="{% if request.endpoint == 'logs' %}active{% endif %}">操作日志</a>
</div>
<div class="nav-user">
<span>{{ current_user.username }}</span>
<a href="{{ url_for('change_password') }}" class="btn-sm">改密</a>
<a href="{{ url_for('logout') }}" class="btn-sm btn-danger">退出</a>
</div>
</nav>
{% endif %}
<main class="container">
{% with messages = get_flashed_messages(with_categories=true) %}
{% if messages %}
<div class="flash-messages">
{% for category, message in messages %}
<div class="flash flash-{{ category }}">{{ message }}</div>
{% endfor %}
</div>
{% endif %}
{% endwith %}
{% block content %}{% endblock %}
</main>
<footer class="footer">
<p>BIND DNS Web Manager &copy; 2026 | BIND 9.18+ | <a href="https://www.isc.org/bind/" target="_blank">ISC BIND</a></p>
</footer>
</body>
</html>