diff --git a/DnsServerCore/Dns/DnsServer.cs b/DnsServerCore/Dns/DnsServer.cs index c79a00e9..32c57781 100644 --- a/DnsServerCore/Dns/DnsServer.cs +++ b/DnsServerCore/Dns/DnsServer.cs @@ -193,6 +193,8 @@ enum ServiceState int _dnsOverTlsPort = 853; int _dnsOverHttpsPort = 443; int _dnsOverQuicPort = 853; + string _dnsOverHttpUnixSocket; + string _dnsOverHttpsUnixSocket; string _dnsTlsCertificatePath; string _dnsTlsCertificatePassword; string _dnsOverHttpRealIpHeader = "X-Real-IP"; @@ -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 @@ -6394,6 +6433,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 @@ -6416,6 +6458,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; @@ -6457,6 +6515,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) { @@ -6471,6 +6541,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) @@ -7600,6 +7682,18 @@ public int DnsOverQuicPort } } + public string DnsOverHttpUnixSocket + { + get { return _dnsOverHttpUnixSocket; } + set { _dnsOverHttpUnixSocket = value; } + } + + public string DnsOverHttpsUnixSocket + { + get { return _dnsOverHttpsUnixSocket; } + set { _dnsOverHttpsUnixSocket = value; } + } + public string DnsTlsCertificatePath { get { return _dnsTlsCertificatePath; } } diff --git a/DnsServerCore/DnsWebService.cs b/DnsServerCore/DnsWebService.cs index df5ad6ca..33457b25 100644 --- a/DnsServerCore/DnsWebService.cs +++ b/DnsServerCore/DnsWebService.cs @@ -99,6 +99,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; @@ -451,7 +453,7 @@ private void ReadConfigFrom(Stream s) BinaryReader bR = new BinaryReader(s); int version = bR.ReadByte(); - if (version > 1) + if (version > 2) throw new InvalidDataException("Web Service config version not supported."); _webServiceHttpPort = bR.ReadInt32(); @@ -512,6 +514,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) @@ -519,7 +534,7 @@ private void WriteConfigTo(Stream s) BinaryWriter bW = new BinaryWriter(s); bW.Write(Encoding.ASCII.GetBytes("WC")); //format - bW.Write((byte)1); //version + bW.Write((byte)2); //version bW.Write(_webServiceHttpPort); bW.Write(_webServiceTlsPort); @@ -546,7 +561,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 @@ -1694,6 +1729,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)) { @@ -1714,6 +1752,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; @@ -1795,6 +1849,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 { @@ -1808,6 +1871,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 b329274f..92b52dd2 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 f9ac38fa..261ae497 100644 --- a/DnsServerCore/WebServiceSettingsApi.cs +++ b/DnsServerCore/WebServiceSettingsApi.cs @@ -190,6 +190,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); @@ -216,6 +219,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("reverseProxyNetworkACL"); { jsonWriter.WriteStartArray(); @@ -874,6 +880,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) @@ -1093,6 +1117,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("reverseProxyNetworkACL", NetworkAccessControl.Parse, out NetworkAccessControl[] reverseProxyNetworkACL)) _dnsWebService._dnsServer.ReverseProxyNetworkACL = reverseProxyNetworkACL; diff --git a/DnsServerCore/www/index.html b/DnsServerCore/www/index.html index 9a76064a..d2377098 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.
+
+
@@ -1571,6 +1587,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.
+
+
@@ -1589,6 +1613,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 1f141588..ce27ea24 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); $("#txtReverseProxyNetworkACL").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); $("#txtReverseProxyNetworkACL").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,12 +1161,15 @@ 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); $("#txtWebServiceTlsCertificatePath").prop("disabled", !responseJSON.response.webServiceEnableTls); $("#txtWebServiceTlsCertificatePassword").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); $("#txtWebServiceTlsCertificatePath").val(responseJSON.response.webServiceTlsCertificatePath); @@ -1186,13 +1198,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); $("#txtReverseProxyNetworkACL").prop("disabled", !responseJSON.response.enableEDnsClientSubnetSourceAddress && !responseJSON.response.enableDnsOverUdpProxy && !responseJSON.response.enableDnsOverTcpProxy && !responseJSON.response.enableDnsOverHttp && !responseJSON.response.enableDnsOverHttps); @@ -1704,8 +1719,10 @@ function saveDnsSettings(objBtn) { var webServiceTlsCertificatePath = $("#txtWebServiceTlsCertificatePath").val(); var webServiceTlsCertificatePassword = $("#txtWebServiceTlsCertificatePassword").val(); var webServiceRealIpHeader = $("#txtWebServiceRealIpHeader").val(); + var webServiceHttpUnixSocket = $("#txtWebServiceHttpUnixSocket").val(); + var webServiceTlsUnixSocket = $("#txtWebServiceTlsUnixSocket").val(); - formData += "&webServiceLocalAddresses=" + encodeURIComponent(webServiceLocalAddresses) + "&webServiceHttpPort=" + webServiceHttpPort + "&webServiceEnableTls=" + webServiceEnableTls + "&webServiceEnableHttp3=" + webServiceEnableHttp3 + "&webServiceHttpToTlsRedirect=" + webServiceHttpToTlsRedirect + "&webServiceUseSelfSignedTlsCertificate=" + webServiceUseSelfSignedTlsCertificate + "&webServiceTlsPort=" + webServiceTlsPort + "&webServiceTlsCertificatePath=" + encodeURIComponent(webServiceTlsCertificatePath) + "&webServiceTlsCertificatePassword=" + encodeURIComponent(webServiceTlsCertificatePassword) + "&webServiceRealIpHeader=" + encodeURIComponent(webServiceRealIpHeader); + formData += "&webServiceLocalAddresses=" + encodeURIComponent(webServiceLocalAddresses) + "&webServiceHttpPort=" + webServiceHttpPort + "&webServiceEnableTls=" + webServiceEnableTls + "&webServiceEnableHttp3=" + webServiceEnableHttp3 + "&webServiceHttpToTlsRedirect=" + webServiceHttpToTlsRedirect + "&webServiceUseSelfSignedTlsCertificate=" + webServiceUseSelfSignedTlsCertificate + "&webServiceTlsPort=" + webServiceTlsPort + "&webServiceTlsCertificatePath=" + encodeURIComponent(webServiceTlsCertificatePath) + "&webServiceTlsCertificatePassword=" + encodeURIComponent(webServiceTlsCertificatePassword) + "&webServiceRealIpHeader=" + encodeURIComponent(webServiceRealIpHeader) + "&webServiceHttpUnixSocket=" + encodeURIComponent(webServiceHttpUnixSocket) + "&webServiceTlsUnixSocket=" + encodeURIComponent(webServiceTlsUnixSocket); } //optional protocols @@ -1772,8 +1789,11 @@ function saveDnsSettings(objBtn) { var dnsTlsCertificatePassword = $("#txtDnsTlsCertificatePassword").val(); var dnsOverHttpRealIpHeader = $("#txtDnsOverHttpRealIpHeader").val(); + 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 + "&reverseProxyNetworkACL=" + encodeURIComponent(reverseProxyNetworkACL) + "&dnsTlsCertificatePath=" + encodeURIComponent(dnsTlsCertificatePath) + "&dnsTlsCertificatePassword=" + encodeURIComponent(dnsTlsCertificatePassword) + "&dnsOverHttpRealIpHeader=" + encodeURIComponent(dnsOverHttpRealIpHeader); - 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 + "&reverseProxyNetworkACL=" + encodeURIComponent(reverseProxyNetworkACL) + "&dnsTlsCertificatePath=" + encodeURIComponent(dnsTlsCertificatePath) + "&dnsTlsCertificatePassword=" + encodeURIComponent(dnsTlsCertificatePassword) + "&dnsOverHttpRealIpHeader=" + encodeURIComponent(dnsOverHttpRealIpHeader); } //tsig