diff --git a/DnsServerCore/Dns/DnsServer.cs b/DnsServerCore/Dns/DnsServer.cs index c031cbe9..4b7f7661 100644 --- a/DnsServerCore/Dns/DnsServer.cs +++ b/DnsServerCore/Dns/DnsServer.cs @@ -192,6 +192,8 @@ enum ServiceState int _dnsOverTlsPort = 853; int _dnsOverHttpsPort = 443; int _dnsOverQuicPort = 853; + string _dnsOverHttpUnixSocket; + string _dnsOverHttpsUnixSocket; IReadOnlyCollection _dnsReverseProxyNetworkACL; string _dnsTlsCertificatePath; string _dnsTlsCertificatePassword; @@ -1125,6 +1127,23 @@ private void ReadConfigFrom(Stream s, bool isConfigTransfer) int maxStatFileDays = bR.ReadInt32(); if (!isConfigTransfer) _statsManager.MaxStatFileDays = maxStatFileDays; + + if (version >= 3) + { + if (bR.ReadByte() > 0) + { + string socket = bR.ReadShortString(); + if (!isConfigTransfer) + _dnsOverHttpUnixSocket = socket; + } + + if (bR.ReadByte() > 0) + { + string socket = bR.ReadShortString(); + if (!isConfigTransfer) + _dnsOverHttpsUnixSocket = socket; + } + } } private void WriteConfigTo(Stream s) @@ -1409,6 +1428,26 @@ private void WriteConfigTo(Stream s) bW.Write(_queryLog is not null); //log all queries bW.Write(_statsManager.EnableInMemoryStats); bW.Write(_statsManager.MaxStatFileDays); + + if (string.IsNullOrWhiteSpace(_dnsOverHttpUnixSocket)) + { + bW.Write((byte)0); + } + else + { + bW.Write((byte)1); + bW.WriteShortString(_dnsOverHttpUnixSocket); + } + + if (string.IsNullOrWhiteSpace(_dnsOverHttpsUnixSocket)) + { + bW.Write((byte)0); + } + else + { + bW.Write((byte)1); + bW.WriteShortString(_dnsOverHttpsUnixSocket); + } } #endregion @@ -6431,6 +6470,9 @@ private async Task StartDoHAsync(bool throwIfBindFails) { foreach (IPAddress localAddress in localAddresses) serverOptions.Listen(localAddress, _dnsOverHttpPort); + + if (!string.IsNullOrWhiteSpace(_dnsOverHttpUnixSocket)) + serverOptions.ListenUnixSocket(_dnsOverHttpUnixSocket); } //bind to https port @@ -6453,6 +6495,22 @@ private async Task StartDoHAsync(bool throwIfBindFails) }, null); }); } + + if (!string.IsNullOrWhiteSpace(_dnsOverHttpsUnixSocket)) + { + serverOptions.ListenUnixSocket(_dnsOverHttpsUnixSocket, delegate (ListenOptions listenOptions) + { + if (IsHttp2Supported()) + listenOptions.Protocols = HttpProtocols.Http1AndHttp2; + else + listenOptions.Protocols = HttpProtocols.Http1; + + listenOptions.UseHttps(delegate (SslStream stream, SslClientHelloInfo clientHelloInfo, object state, CancellationToken cancellationToken) + { + return ValueTask.FromResult(_dohSslServerAuthenticationOptions); + }, null); + }); + } } serverOptions.AddServerHeader = false; @@ -6494,6 +6552,18 @@ private async Task StartDoHAsync(bool throwIfBindFails) if (_enableDnsOverHttps && (_dohSslServerAuthenticationOptions is not null)) _log.Write(new IPEndPoint(localAddress, _dnsOverHttpsPort), "Https", "DNS Server was bound successfully."); } + + if (_enableDnsOverHttp) + { + if (!string.IsNullOrWhiteSpace(_dnsOverHttpUnixSocket)) + _log.Write(new IPEndPoint(IPAddress.None, 0), "Http", $"DNS Server was bound successfully on unix socket: {_dnsOverHttpUnixSocket}"); + } + + if (_enableDnsOverHttps && (_dohSslServerAuthenticationOptions is not null)) + { + if (!string.IsNullOrWhiteSpace(_dnsOverHttpsUnixSocket)) + _log.Write(new IPEndPoint(IPAddress.None, 0), "Https", $"DNS Server was bound successfully on unix socket: {_dnsOverHttpsUnixSocket}"); + } } catch (Exception ex) { @@ -6508,6 +6578,18 @@ private async Task StartDoHAsync(bool throwIfBindFails) _log.Write(new IPEndPoint(localAddress, _dnsOverHttpsPort), "Https", "DNS Server failed to bind."); } + if (_enableDnsOverHttp) + { + if (!string.IsNullOrWhiteSpace(_dnsOverHttpUnixSocket)) + _log.Write(new IPEndPoint(IPAddress.None, 0), "Http", $"DNS Server failed to bind on unix socket: {_dnsOverHttpUnixSocket}"); + } + + if (_enableDnsOverHttps && (_dohSslServerAuthenticationOptions is not null)) + { + if (!string.IsNullOrWhiteSpace(_dnsOverHttpsUnixSocket)) + _log.Write(new IPEndPoint(IPAddress.None, 0), "Https", $"DNS Server failed to bind on unix socket: {_dnsOverHttpsUnixSocket}"); + } + _log.Write(ex); if (throwIfBindFails) @@ -7623,6 +7705,18 @@ public int DnsOverQuicPort } } + public string DnsOverHttpUnixSocket + { + get { return _dnsOverHttpUnixSocket; } + set { _dnsOverHttpUnixSocket = value; } + } + + public string DnsOverHttpsUnixSocket + { + get { return _dnsOverHttpsUnixSocket; } + set { _dnsOverHttpsUnixSocket = value; } + } + public IReadOnlyCollection DnsReverseProxyNetworkACL { get { return _dnsReverseProxyNetworkACL; } diff --git a/DnsServerCore/DnsWebService.cs b/DnsServerCore/DnsWebService.cs index 619c2342..0146a48b 100644 --- a/DnsServerCore/DnsWebService.cs +++ b/DnsServerCore/DnsWebService.cs @@ -103,6 +103,8 @@ public sealed partial class DnsWebService : IAsyncDisposable, IDisposable //web service IReadOnlyList _webServiceLocalAddresses = [IPAddress.Any, IPAddress.IPv6Any]; + string _webServiceHttpUnixSocket; + string _webServiceTlsUnixSocket; int _webServiceHttpPort = 5380; int _webServiceTlsPort = 53443; bool _webServiceEnableTls; @@ -548,6 +550,19 @@ private void ReadConfigFrom(Stream s) CheckAndLoadSelfSignedCertificate(false, false); _webServiceRealIpHeader = s.ReadShortString(); + + if (version >= 2) + { + if (s.ReadByte() > 0) + { + _webServiceHttpUnixSocket = s.ReadShortString(); + } + + if (s.ReadByte() > 0) + { + _webServiceTlsUnixSocket = s.ReadShortString(); + } + } } private void WriteConfigTo(Stream s) @@ -584,7 +599,27 @@ private void WriteConfigTo(Stream s) else s.WriteShortString(_webServiceTlsCertificatePassword); - s.WriteShortString(_webServiceRealIpHeader); + bW.WriteShortString(_webServiceRealIpHeader); + + if (string.IsNullOrWhiteSpace(_webServiceHttpUnixSocket)) + { + bW.Write((byte)0); + } + else + { + bW.Write((byte)1); + bW.WriteShortString(_webServiceHttpUnixSocket); + } + + if (string.IsNullOrWhiteSpace(_webServiceTlsUnixSocket)) + { + bW.Write((byte)0); + } + else + { + bW.Write((byte)1); + bW.WriteShortString(_webServiceTlsUnixSocket); + } } #endregion @@ -1764,6 +1799,9 @@ private async Task StartWebServiceAsync(bool httpOnlyMode) foreach (IPAddress webServiceLocalAddress in _webServiceLocalAddresses) serverOptions.Listen(webServiceLocalAddress, _webServiceHttpPort); + if (!string.IsNullOrWhiteSpace(_webServiceHttpUnixSocket)) + serverOptions.ListenUnixSocket(_webServiceHttpUnixSocket); + //https if (!httpOnlyMode && _webServiceEnableTls && (_webServiceSslServerAuthenticationOptions is not null)) { @@ -1784,6 +1822,22 @@ private async Task StartWebServiceAsync(bool httpOnlyMode) }, null); }); } + + if (!string.IsNullOrWhiteSpace(_webServiceTlsUnixSocket)) + { + serverOptions.ListenUnixSocket(_webServiceTlsUnixSocket, delegate (ListenOptions listenOptions) + { + if (IsHttp2Supported()) + listenOptions.Protocols = HttpProtocols.Http1AndHttp2; + else + listenOptions.Protocols = HttpProtocols.Http1; + + listenOptions.UseHttps(delegate (SslStream stream, SslClientHelloInfo clientHelloInfo, object state, CancellationToken cancellationToken) + { + return ValueTask.FromResult(_webServiceSslServerAuthenticationOptions); + }, null); + }); + } } serverOptions.AddServerHeader = false; @@ -1865,6 +1919,15 @@ private async Task StartWebServiceAsync(bool httpOnlyMode) if (!httpOnlyMode && _webServiceEnableTls && (_webServiceSslServerAuthenticationOptions is not null)) _log.Write(new IPEndPoint(webServiceLocalAddress, _webServiceTlsPort), "Https", "Web Service was bound successfully."); } + + if (!string.IsNullOrWhiteSpace(_webServiceHttpUnixSocket)) + _log.Write(new IPEndPoint(IPAddress.None, 0), "Http", $"Web Service was bound successfully on unix socket: {_webServiceHttpUnixSocket}"); + + if (!httpOnlyMode && _webServiceEnableTls && (_webServiceSslServerAuthenticationOptions is not null)) + { + if (!string.IsNullOrWhiteSpace(_webServiceTlsUnixSocket)) + _log.Write(new IPEndPoint(IPAddress.None, 0), "Https", $"Web Service was bound successfully on unix socket: {_webServiceTlsUnixSocket}"); + } } catch { @@ -1878,6 +1941,15 @@ private async Task StartWebServiceAsync(bool httpOnlyMode) _log.Write(new IPEndPoint(webServiceLocalAddress, _webServiceTlsPort), "Https", "Web Service failed to bind."); } + if (!string.IsNullOrWhiteSpace(_webServiceHttpUnixSocket)) + _log.Write(new IPEndPoint(IPAddress.None, 0), "Http", $"Web Service failed to bind on unix socket: {_webServiceHttpUnixSocket}"); + + if (!httpOnlyMode && _webServiceEnableTls && (_webServiceSslServerAuthenticationOptions is not null)) + { + if (!string.IsNullOrWhiteSpace(_webServiceTlsUnixSocket)) + _log.Write(new IPEndPoint(IPAddress.None, 0), "Https", $"Web Service failed to bind on unix socket: {_webServiceTlsUnixSocket}"); + } + throw; } diff --git a/DnsServerCore/WebServiceAuthApi.cs b/DnsServerCore/WebServiceAuthApi.cs index 3b5425e2..474505d9 100644 --- a/DnsServerCore/WebServiceAuthApi.cs +++ b/DnsServerCore/WebServiceAuthApi.cs @@ -85,6 +85,7 @@ private void WriteCurrentSessionDetails(Utf8JsonWriter jsonWriter, UserSession c jsonWriter.WriteStartObject("info"); jsonWriter.WriteString("version", _dnsWebService.GetServerVersion()); + jsonWriter.WriteBoolean("supportsUnixSockets", Environment.OSVersion.Platform == PlatformID.Unix || Environment.OSVersion.Platform == PlatformID.MacOSX); jsonWriter.WriteString("uptimestamp", _dnsWebService._uptimestamp); jsonWriter.WriteString("dnsServerDomain", _dnsWebService._dnsServer.ServerDomain); jsonWriter.WriteNumber("defaultRecordTtl", _dnsWebService._dnsServer.AuthZoneManager.DefaultRecordTtl); diff --git a/DnsServerCore/WebServiceSettingsApi.cs b/DnsServerCore/WebServiceSettingsApi.cs index 5f0786fa..f23b1b6c 100644 --- a/DnsServerCore/WebServiceSettingsApi.cs +++ b/DnsServerCore/WebServiceSettingsApi.cs @@ -191,6 +191,9 @@ private void WriteDnsSettings(Utf8JsonWriter jsonWriter) jsonWriter.WriteEndArray(); + jsonWriter.WriteString("webServiceHttpUnixSocket", _dnsWebService._webServiceHttpUnixSocket); + jsonWriter.WriteString("webServiceTlsUnixSocket", _dnsWebService._webServiceTlsUnixSocket); + jsonWriter.WriteNumber("webServiceHttpPort", _dnsWebService._webServiceHttpPort); jsonWriter.WriteBoolean("webServiceEnableTls", _dnsWebService._webServiceEnableTls); jsonWriter.WriteBoolean("webServiceEnableHttp3", _dnsWebService._webServiceEnableHttp3); @@ -231,6 +234,9 @@ private void WriteDnsSettings(Utf8JsonWriter jsonWriter) jsonWriter.WriteNumber("dnsOverHttpsPort", _dnsWebService._dnsServer.DnsOverHttpsPort); jsonWriter.WriteNumber("dnsOverQuicPort", _dnsWebService._dnsServer.DnsOverQuicPort); + jsonWriter.WriteString("dnsOverHttpUnixSocket", _dnsWebService._dnsServer.DnsOverHttpUnixSocket); + jsonWriter.WriteString("dnsOverHttpsUnixSocket", _dnsWebService._dnsServer.DnsOverHttpsUnixSocket); + jsonWriter.WritePropertyName("dnsReverseProxyNetworkACL"); { jsonWriter.WriteStartArray(); @@ -889,6 +895,24 @@ public async Task SetDnsSettingsAsync(HttpContext context) _dnsWebService._webServiceLocalAddresses = WebUtilities.GetValidKestrelLocalAddresses(webServiceLocalAddresses); } + if (request.TryGetQueryOrForm("webServiceHttpUnixSocket", out string webServiceHttpUnixSocket)) + { + if (_dnsWebService._webServiceHttpUnixSocket != webServiceHttpUnixSocket) + { + restartWebService = true; + } + _dnsWebService._webServiceHttpUnixSocket = webServiceHttpUnixSocket; + } + + if (request.TryGetQueryOrForm("webServiceTlsUnixSocket", out string webServiceTlsUnixSocket)) + { + if (_dnsWebService._webServiceTlsUnixSocket != webServiceTlsUnixSocket) + { + restartWebService = true; + } + _dnsWebService._webServiceTlsUnixSocket = webServiceTlsUnixSocket; + } + if (request.TryGetQueryOrForm("webServiceHttpPort", int.Parse, out int webServiceHttpPort)) { if (_dnsWebService._webServiceHttpPort != webServiceHttpPort) @@ -1118,6 +1142,18 @@ public async Task SetDnsSettingsAsync(HttpContext context) } } + if (request.TryQueryOrFormArray("dnsOverHttpUnixSocket", NetworkAccessControl.Parse, out NetworkAccessControl[] dnsOverHttpUnixSocket)) + { + _dnsWebService._dnsServer.DnsOverHttpUnixSocket = dnsOverHttpUnixSocket.Length > 0 ? dnsOverHttpUnixSocket[0] : string.Empty; + restartDnsService = true; + } + + if (request.TryQueryOrFormArray("dnsOverHttpsUnixSocket", NetworkAccessControl.Parse, out NetworkAccessControl[] dnsOverHttpsUnixSocket)) + { + _dnsWebService._dnsServer.DnsOverHttpsUnixSocket = dnsOverHttpsUnixSocket.Length > 0 ? dnsOverHttpsUnixSocket[0] : string.Empty; + restartDnsService = true; + } + if (request.TryQueryOrFormArray("dnsReverseProxyNetworkACL", NetworkAccessControl.Parse, out NetworkAccessControl[] dnsReverseProxyNetworkACL)) _dnsWebService._dnsServer.DnsReverseProxyNetworkACL = dnsReverseProxyNetworkACL; else if (request.TryQueryOrFormArray("reverseProxyNetworkACL", NetworkAccessControl.Parse, out dnsReverseProxyNetworkACL)) diff --git a/DnsServerCore/www/index.html b/DnsServerCore/www/index.html index c42237b8..f6790151 100644 --- a/DnsServerCore/www/index.html +++ b/DnsServerCore/www/index.html @@ -1397,6 +1397,22 @@

Local addresses are the network interface IP addresses you want the Web Service to listen for requests. ANY addresses (0.0.0.0 & [::]) cannot be used together with unicast IP addresses. The web server uses dual-mode sockets by default so the IPv6 ANY address ([::]) works for IPv4 too. The default values work for most scenarios so, do not change these defaults unless you have a requirement for the Web Service to listen on specific networks. Configured unicast IP addresses will be included as Subject Alternative Name (SAN) in the self signed TLS certificate.
+
+ +
+ +
+
Optional Unix domain socket path you want the web service to listen on for HTTP requests.
+
+ +
+ +
+ +
+
Optional Unix domain socket path you want the web service to listen on for HTTPS requests.
+
+
@@ -1579,6 +1595,14 @@

Specify the TCP port number for DNS-over-HTTP protocol.

+
+ +
+ +
+
Optional Unix domain socket path you want the DNS server to listen on for DNS-over-HTTP protocol requests.
+
+
@@ -1597,6 +1621,14 @@

Specify the TCP port number for DNS-over-HTTPS protocol.

+
+ +
+ +
+
Optional Unix domain socket path you want the DNS server to listen on for DNS-over-HTTPS protocol requests.
+
+
diff --git a/DnsServerCore/www/js/main.js b/DnsServerCore/www/js/main.js index a8b65bfa..02c2e4b4 100644 --- a/DnsServerCore/www/js/main.js +++ b/DnsServerCore/www/js/main.js @@ -326,6 +326,7 @@ $(function () { $("#chkWebServiceHttpToTlsRedirect").prop("disabled", !webServiceEnableTls); $("#chkWebServiceUseSelfSignedTlsCertificate").prop("disabled", !webServiceEnableTls); $("#txtWebServiceTlsPort").prop("disabled", !webServiceEnableTls); + $("#txtWebServiceTlsUnixSocket").prop("disabled", !webServiceEnableTls); $("#txtWebServiceTlsCertificatePath").prop("disabled", !webServiceEnableTls); $("#txtWebServiceTlsCertificatePassword").prop("disabled", !webServiceEnableTls); }); @@ -371,6 +372,7 @@ $(function () { var enableDnsOverHttps = $("#chkEnableDnsOverHttps").prop("checked"); $("#txtDnsOverHttpPort").prop("disabled", !enableDnsOverHttp); + $("#txtDnsOverHttpUnixSocket").prop("disabled", !enableDnsOverHttp); $("#txtDnsReverseProxyNetworkACL").prop("disabled", !chkEnableEDnsClientSubnetSourceAddress && !enableDnsOverUdpProxy && !enableDnsOverTcpProxy && !enableDnsOverHttp && !enableDnsOverHttps); $("#txtDnsOverHttpRealIpHeader").prop("disabled", !enableDnsOverHttp && !enableDnsOverHttps); }); @@ -396,6 +398,7 @@ $(function () { $("#chkEnableDnsOverHttp3").prop("disabled", !enableDnsOverHttps); $("#txtDnsOverHttpsPort").prop("disabled", !enableDnsOverHttps); + $("#txtDnsOverHttpsUnixSocket").prop("disabled", !enableDnsOverHttps); $("#txtDnsReverseProxyNetworkACL").prop("disabled", !chkEnableEDnsClientSubnetSourceAddress && !enableDnsOverUdpProxy && !enableDnsOverTcpProxy && !enableDnsOverHttp && !enableDnsOverHttps); $("#txtDnsTlsCertificatePath").prop("disabled", !enableDnsOverTls && !enableDnsOverHttps && !enableDnsOverQuic); $("#txtDnsTlsCertificatePassword").prop("disabled", !enableDnsOverTls && !enableDnsOverHttps && !enableDnsOverQuic); @@ -1036,6 +1039,12 @@ function updateDnsSettingsDataAndGui(responseJSON) { } function loadDnsSettings(responseJSON) { + if (sessionData && sessionData.info && sessionData.info.supportsUnixSockets) { + $(".unix-socket-option").show(); + } else { + $(".unix-socket-option").hide(); + } + //update cluster nodes sessionData.info.clusterNodes = responseJSON.response.clusterNodes; updateAllClusterNodeDropDowns(); @@ -1152,10 +1161,13 @@ function loadDnsSettings(responseJSON) { $("#chkWebServiceHttpToTlsRedirect").prop("disabled", !responseJSON.response.webServiceEnableTls); $("#chkWebServiceUseSelfSignedTlsCertificate").prop("disabled", !responseJSON.response.webServiceEnableTls); $("#txtWebServiceTlsPort").prop("disabled", !responseJSON.response.webServiceEnableTls); + $("#txtWebServiceTlsUnixSocket").prop("disabled", !responseJSON.response.webServiceEnableTls); $("#chkWebServiceEnableHttp3").prop("checked", responseJSON.response.webServiceEnableHttp3); $("#chkWebServiceHttpToTlsRedirect").prop("checked", responseJSON.response.webServiceHttpToTlsRedirect); $("#chkWebServiceUseSelfSignedTlsCertificate").prop("checked", responseJSON.response.webServiceUseSelfSignedTlsCertificate); + $("#txtWebServiceHttpUnixSocket").val(responseJSON.response.webServiceHttpUnixSocket); + $("#txtWebServiceTlsUnixSocket").val(responseJSON.response.webServiceTlsUnixSocket); $("#txtWebServiceTlsPort").val(responseJSON.response.webServiceTlsPort); $("#txtWebServiceReverseProxyAddresses").val(getArrayAsString(responseJSON.response.webServiceReverseProxyAddresses)); @@ -1190,13 +1202,16 @@ function loadDnsSettings(responseJSON) { $("#txtDnsOverHttpPort").prop("disabled", !responseJSON.response.enableDnsOverHttp); $("#txtDnsOverTlsPort").prop("disabled", !responseJSON.response.enableDnsOverTls); $("#txtDnsOverHttpsPort").prop("disabled", !responseJSON.response.enableDnsOverHttps); + $("#txtDnsOverHttpsUnixSocket").prop("disabled", !responseJSON.response.enableDnsOverHttps); $("#txtDnsOverQuicPort").prop("disabled", !responseJSON.response.enableDnsOverQuic); $("#txtDnsOverUdpProxyPort").val(responseJSON.response.dnsOverUdpProxyPort); $("#txtDnsOverTcpProxyPort").val(responseJSON.response.dnsOverTcpProxyPort); $("#txtDnsOverHttpPort").val(responseJSON.response.dnsOverHttpPort); + $("#txtDnsOverHttpUnixSocket").val(responseJSON.response.dnsOverHttpUnixSocket); $("#txtDnsOverTlsPort").val(responseJSON.response.dnsOverTlsPort); $("#txtDnsOverHttpsPort").val(responseJSON.response.dnsOverHttpsPort); + $("#txtDnsOverHttpsUnixSocket").val(responseJSON.response.dnsOverHttpsUnixSocket); $("#txtDnsOverQuicPort").val(responseJSON.response.dnsOverQuicPort); $("#txtDnsReverseProxyNetworkACL").prop("disabled", !responseJSON.response.enableEDnsClientSubnetSourceAddress && !responseJSON.response.enableDnsOverUdpProxy && !responseJSON.response.enableDnsOverTcpProxy && !responseJSON.response.enableDnsOverHttp && !responseJSON.response.enableDnsOverHttps); @@ -1714,11 +1729,13 @@ function saveDnsSettings(objBtn) { $("#txtWebServiceReverseProxyAddresses").val(webServiceReverseProxyAddresses.replace(/,/g, "\n")); var webServiceRealIpHeader = $("#txtWebServiceRealIpHeader").val(); + var webServiceHttpUnixSocket = $("#txtWebServiceHttpUnixSocket").val(); + var webServiceTlsUnixSocket = $("#txtWebServiceTlsUnixSocket").val(); var webServiceTlsCertificatePath = $("#txtWebServiceTlsCertificatePath").val(); var webServiceTlsCertificatePassword = $("#txtWebServiceTlsCertificatePassword").val(); - formData += "&webServiceLocalAddresses=" + encodeURIComponent(webServiceLocalAddresses) + "&webServiceHttpPort=" + webServiceHttpPort + "&webServiceEnableTls=" + webServiceEnableTls + "&webServiceEnableHttp3=" + webServiceEnableHttp3 + "&webServiceHttpToTlsRedirect=" + webServiceHttpToTlsRedirect + "&webServiceUseSelfSignedTlsCertificate=" + webServiceUseSelfSignedTlsCertificate + "&webServiceTlsPort=" + webServiceTlsPort + "&webServiceReverseProxyAddresses=" + encodeURIComponent(webServiceReverseProxyAddresses) + "&webServiceRealIpHeader=" + encodeURIComponent(webServiceRealIpHeader) + "&webServiceTlsCertificatePath=" + encodeURIComponent(webServiceTlsCertificatePath) + "&webServiceTlsCertificatePassword=" + encodeURIComponent(webServiceTlsCertificatePassword); + formData += "&webServiceLocalAddresses=" + encodeURIComponent(webServiceLocalAddresses) + "&webServiceHttpPort=" + webServiceHttpPort + "&webServiceEnableTls=" + webServiceEnableTls + "&webServiceEnableHttp3=" + webServiceEnableHttp3 + "&webServiceHttpToTlsRedirect=" + webServiceHttpToTlsRedirect + "&webServiceUseSelfSignedTlsCertificate=" + webServiceUseSelfSignedTlsCertificate + "&webServiceTlsPort=" + webServiceTlsPort + "&webServiceReverseProxyAddresses=" + encodeURIComponent(webServiceReverseProxyAddresses) + "&webServiceRealIpHeader=" + encodeURIComponent(webServiceRealIpHeader) + "&webServiceHttpUnixSocket=" + encodeURIComponent(webServiceHttpUnixSocket) + "&webServiceTlsUnixSocket=" + encodeURIComponent(webServiceTlsUnixSocket) + "&webServiceTlsCertificatePath=" + encodeURIComponent(webServiceTlsCertificatePath) + "&webServiceTlsCertificatePassword=" + encodeURIComponent(webServiceTlsCertificatePassword); } //optional protocols @@ -1786,7 +1803,10 @@ function saveDnsSettings(objBtn) { var dnsTlsCertificatePath = $("#txtDnsTlsCertificatePath").val(); var dnsTlsCertificatePassword = $("#txtDnsTlsCertificatePassword").val(); - formData += "&enableEDnsClientSubnetSourceAddress=" + enableEDnsClientSubnetSourceAddress + "&enableDnsOverUdpProxy=" + enableDnsOverUdpProxy + "&enableDnsOverTcpProxy=" + enableDnsOverTcpProxy + "&enableDnsOverHttp=" + enableDnsOverHttp + "&enableDnsOverTls=" + enableDnsOverTls + "&enableDnsOverHttps=" + enableDnsOverHttps + "&enableDnsOverHttp3=" + enableDnsOverHttp3 + "&enableDnsOverQuic=" + enableDnsOverQuic + "&dnsOverUdpProxyPort=" + dnsOverUdpProxyPort + "&dnsOverTcpProxyPort=" + dnsOverTcpProxyPort + "&dnsOverHttpPort=" + dnsOverHttpPort + "&dnsOverTlsPort=" + dnsOverTlsPort + "&dnsOverHttpsPort=" + dnsOverHttpsPort + "&dnsOverQuicPort=" + dnsOverQuicPort + "&dnsReverseProxyNetworkACL=" + encodeURIComponent(dnsReverseProxyNetworkACL) + "&dnsOverHttpRealIpHeader=" + encodeURIComponent(dnsOverHttpRealIpHeader) + "&dnsTlsCertificatePath=" + encodeURIComponent(dnsTlsCertificatePath) + "&dnsTlsCertificatePassword=" + encodeURIComponent(dnsTlsCertificatePassword); + var dnsOverHttpUnixSocket = $("#txtDnsOverHttpUnixSocket").val(); + var dnsOverHttpsUnixSocket = $("#txtDnsOverHttpsUnixSocket").val(); + + formData += "&enableEDnsClientSubnetSourceAddress=" + enableEDnsClientSubnetSourceAddress + "&enableDnsOverUdpProxy=" + enableDnsOverUdpProxy + "&enableDnsOverTcpProxy=" + enableDnsOverTcpProxy + "&enableDnsOverHttp=" + enableDnsOverHttp + "&enableDnsOverTls=" + enableDnsOverTls + "&enableDnsOverHttps=" + enableDnsOverHttps + "&enableDnsOverHttp3=" + enableDnsOverHttp3 + "&enableDnsOverQuic=" + enableDnsOverQuic + "&dnsOverUdpProxyPort=" + dnsOverUdpProxyPort + "&dnsOverTcpProxyPort=" + dnsOverTcpProxyPort + "&dnsOverHttpPort=" + dnsOverHttpPort + "&dnsOverHttpUnixSocket=" + encodeURIComponent(dnsOverHttpUnixSocket) + "&dnsOverTlsPort=" + dnsOverTlsPort + "&dnsOverHttpsPort=" + dnsOverHttpsPort + "&dnsOverHttpsUnixSocket=" + encodeURIComponent(dnsOverHttpsUnixSocket) + "&dnsOverQuicPort=" + dnsOverQuicPort + "&dnsReverseProxyNetworkACL=" + encodeURIComponent(dnsReverseProxyNetworkACL) + "&dnsOverHttpRealIpHeader=" + encodeURIComponent(dnsOverHttpRealIpHeader) + "&dnsTlsCertificatePath=" + encodeURIComponent(dnsTlsCertificatePath) + "&dnsTlsCertificatePassword=" + encodeURIComponent(dnsTlsCertificatePassword); } //tsig