diff --git a/app.py b/app.py index b118509..16d6cb6 100644 --- a/app.py +++ b/app.py @@ -1067,6 +1067,31 @@ def _listen_on_v4_set(content): return bool(re.search(r'(?;'.""" + m = re.search(r'recursion\s+(\w+)\s*;', content) + if not m: + return "yes" + val = m.group(1).lower() + return val if val in ("yes", "no") else "yes" + + def _replace_or_append_option(content, directive, new_block): """Replace an existing 'directive { ... };' or 'directive ;' in an options block with new_block, or append it after the opening 'options {' if @@ -1079,16 +1104,15 @@ def _replace_or_append_option(content, directive, new_block): Nested braces are matched by counting depth. """ pattern = re.compile( - r'(' + re.escape(directive) + r')\b(?!\-)', + r'(? listen-on port 53 { any; }; (default safe) + if not new_listen: + new_listen = ["any"] + new_content = _replace_or_append_option( + new_content, "listen-on", + _format_list_block("listen-on port 53", new_listen), + ) + new_content = _replace_or_append_option( + new_content, "recursion", + f"recursion {recursion_in};", + ) # Validate BEFORE writing to the live file tmp = "/tmp/named_check.tmp" @@ -1368,8 +1412,14 @@ def config_upstream_save(): u = current_user() AuditLog.log(u.username, "修改上游DNS转发配置", - f"forwarders={new_fwd}; allow-recursion={new_rc}; dnssec={dnssec_in}") - flash(f"已保存:forwarders {len(new_fwd)} 条,allow-recursion {len(new_rc)} 条,dnssec-validation {dnssec_in}", "success") + f"forwarders={new_fwd}; allow-recursion={new_rc}; " + f"dnssec={dnssec_in}; listen-on={new_listen}; recursion={recursion_in}") + flash( + f"已保存:forwarders {len(new_fwd)} 条,allow-recursion {len(new_rc)} 条," + f"dnssec-validation {dnssec_in},listen-on {len(new_listen)} 项," + f"recursion {recursion_in}", + "success", + ) return redirect(url_for("config_view")) diff --git a/templates/config.html b/templates/config.html index 073f62e..1c88e34 100644 --- a/templates/config.html +++ b/templates/config.html @@ -59,10 +59,29 @@ {% endfor %} +
+ + +
+
+ + +
- 此处只改 forwarders / allow-recursion / dnssec-validation;其它 options 字段请用下方文本编辑器。 + 此处改 forwarders / allow-recursion / dnssec-validation / listen-on / recursion;其它字段请用下方文本编辑器。