Merge branch 'develop'

This commit is contained in:
Shreyas Zare
2024-09-23 19:11:00 +05:30
6 changed files with 107 additions and 30 deletions

View File

@@ -1,5 +1,10 @@
# Technitium DNS Server Change Log # Technitium DNS Server Change Log
## Version 13.0.1
Release Date: 23 September 2024
- Fixed issue in using proxy with forwarders that caused failure to use DNS-over-TOR with Cloudflare's hidden service.
## Version 13.0 ## Version 13.0
Release Date: 22 September 2024 Release Date: 22 September 2024

View File

@@ -6,7 +6,7 @@
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework> <TargetFramework>net8.0</TargetFramework>
<ApplicationIcon>logo2.ico</ApplicationIcon> <ApplicationIcon>logo2.ico</ApplicationIcon>
<Version>13.0</Version> <Version>13.0.1</Version>
<IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion> <IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>
<Company>Technitium</Company> <Company>Technitium</Company>
<Product>Technitium DNS Server</Product> <Product>Technitium DNS Server</Product>

View File

@@ -3315,7 +3315,9 @@ namespace DnsServerCore.Dns
//use forwarders //use forwarders
if (_concurrentForwarding) if (_concurrentForwarding)
{ {
//recursive resolve forwarder if (_proxy is null)
{
//recursive resolve forwarders only when proxy is null else let proxy resolve it to allow using .onion or private domains
foreach (NameServerAddress forwarder in _forwarders) foreach (NameServerAddress forwarder in _forwarders)
{ {
if (forwarder.IsIPEndPointStale) if (forwarder.IsIPEndPointStale)
@@ -3323,10 +3325,11 @@ namespace DnsServerCore.Dns
//refresh forwarder IPEndPoint if stale //refresh forwarder IPEndPoint if stale
await TechnitiumLibrary.TaskExtensions.TimeoutAsync(delegate (CancellationToken cancellationToken1) await TechnitiumLibrary.TaskExtensions.TimeoutAsync(delegate (CancellationToken cancellationToken1)
{ {
return forwarder.RecursiveResolveIPAddressAsync(dnsCache, _proxy, _preferIPv6, _udpPayloadSize, _randomizeName, _resolverRetries, _resolverTimeout, _resolverConcurrency, _resolverMaxStackCount, cancellationToken1); return forwarder.RecursiveResolveIPAddressAsync(dnsCache, null, _preferIPv6, _udpPayloadSize, _randomizeName, _resolverRetries, _resolverTimeout, _resolverConcurrency, _resolverMaxStackCount, cancellationToken1);
}, RECURSIVE_RESOLUTION_TIMEOUT, cancellationToken); }, RECURSIVE_RESOLUTION_TIMEOUT, cancellationToken);
} }
} }
}
//query forwarders and update cache //query forwarders and update cache
DnsClient dnsClient = new DnsClient(_forwarders); DnsClient dnsClient = new DnsClient(_forwarders);
@@ -3352,15 +3355,18 @@ namespace DnsServerCore.Dns
foreach (NameServerAddress forwarder in _forwarders) foreach (NameServerAddress forwarder in _forwarders)
{ {
//recursive resolve forwarder if (_proxy is null)
{
//recursive resolve forwarder only when proxy is null else let proxy resolve it to allow using .onion or private domains
if (forwarder.IsIPEndPointStale) if (forwarder.IsIPEndPointStale)
{ {
//refresh forwarder IPEndPoint if stale //refresh forwarder IPEndPoint if stale
await TechnitiumLibrary.TaskExtensions.TimeoutAsync(delegate (CancellationToken cancellationToken1) await TechnitiumLibrary.TaskExtensions.TimeoutAsync(delegate (CancellationToken cancellationToken1)
{ {
return forwarder.RecursiveResolveIPAddressAsync(dnsCache, _proxy, _preferIPv6, _udpPayloadSize, _randomizeName, _resolverRetries, _resolverTimeout, _resolverConcurrency, _resolverMaxStackCount, cancellationToken1); return forwarder.RecursiveResolveIPAddressAsync(dnsCache, null, _preferIPv6, _udpPayloadSize, _randomizeName, _resolverRetries, _resolverTimeout, _resolverConcurrency, _resolverMaxStackCount, cancellationToken1);
}, RECURSIVE_RESOLUTION_TIMEOUT, cancellationToken); }, RECURSIVE_RESOLUTION_TIMEOUT, cancellationToken);
} }
}
//query forwarder and update cache //query forwarder and update cache
DnsClient dnsClient = new DnsClient(forwarder); DnsClient dnsClient = new DnsClient(forwarder);
@@ -3441,16 +3447,20 @@ namespace DnsServerCore.Dns
if (forwarder.Forwarder.Equals("this-server", StringComparison.OrdinalIgnoreCase)) if (forwarder.Forwarder.Equals("this-server", StringComparison.OrdinalIgnoreCase))
continue; //skip resolving continue; //skip resolving
//recursive resolve name server NetProxy proxy = forwarder.GetProxy(_proxy);
if (proxy is null)
{
//recursive resolve forwarder only when proxy is null else let proxy resolve it to allow using .onion or private domains
if (forwarder.NameServer.IsIPEndPointStale) if (forwarder.NameServer.IsIPEndPointStale)
{ {
//refresh forwarder IPEndPoint if stale //refresh forwarder IPEndPoint if stale
resolveTasks.Add(TechnitiumLibrary.TaskExtensions.TimeoutAsync(delegate (CancellationToken cancellationToken1) resolveTasks.Add(TechnitiumLibrary.TaskExtensions.TimeoutAsync(delegate (CancellationToken cancellationToken1)
{ {
return forwarder.NameServer.RecursiveResolveIPAddressAsync(dnsCache, forwarder.GetProxy(_proxy), _preferIPv6, _udpPayloadSize, _randomizeName, _resolverRetries, _resolverTimeout, _resolverConcurrency, _resolverMaxStackCount, cancellationToken1); return forwarder.NameServer.RecursiveResolveIPAddressAsync(dnsCache, null, _preferIPv6, _udpPayloadSize, _randomizeName, _resolverRetries, _resolverTimeout, _resolverConcurrency, _resolverMaxStackCount, cancellationToken1);
}, RECURSIVE_RESOLUTION_TIMEOUT)); }, RECURSIVE_RESOLUTION_TIMEOUT));
} }
} }
}
if (resolveTasks.Count > 0) if (resolveTasks.Count > 0)
await Task.WhenAll(resolveTasks); await Task.WhenAll(resolveTasks);
@@ -4500,8 +4510,16 @@ namespace DnsServerCore.Dns
private async Task StopDoHAsync() private async Task StopDoHAsync()
{ {
if (_dohWebService is not null) if (_dohWebService is not null)
{
try
{ {
await _dohWebService.DisposeAsync(); await _dohWebService.DisposeAsync();
}
catch (Exception ex)
{
_log?.Write(ex);
}
_dohWebService = null; _dohWebService = null;
} }
} }
@@ -4948,22 +4966,76 @@ namespace DnsServerCore.Dns
} }
foreach (Socket udpListener in _udpListeners) foreach (Socket udpListener in _udpListeners)
{
try
{
udpListener.Dispose(); udpListener.Dispose();
}
catch (Exception ex)
{
_log?.Write(ex);
}
}
foreach (Socket udpProxyListener in _udpProxyListeners) foreach (Socket udpProxyListener in _udpProxyListeners)
{
try
{
udpProxyListener.Dispose(); udpProxyListener.Dispose();
}
catch (Exception ex)
{
_log?.Write(ex);
}
}
foreach (Socket tcpListener in _tcpListeners) foreach (Socket tcpListener in _tcpListeners)
{
try
{
tcpListener.Dispose(); tcpListener.Dispose();
}
catch (Exception ex)
{
_log?.Write(ex);
}
}
foreach (Socket tcpProxyListener in _tcpProxyListeners) foreach (Socket tcpProxyListener in _tcpProxyListeners)
{
try
{
tcpProxyListener.Dispose(); tcpProxyListener.Dispose();
}
catch (Exception ex)
{
_log?.Write(ex);
}
}
foreach (Socket tlsListener in _tlsListeners) foreach (Socket tlsListener in _tlsListeners)
{
try
{
tlsListener.Dispose(); tlsListener.Dispose();
}
catch (Exception ex)
{
_log?.Write(ex);
}
}
foreach (QuicListener quicListener in _quicListeners) foreach (QuicListener quicListener in _quicListeners)
{
try
{
await quicListener.DisposeAsync(); await quicListener.DisposeAsync();
}
catch (Exception ex)
{
_log?.Write(ex);
}
}
_udpListeners.Clear(); _udpListeners.Clear();
_udpProxyListeners.Clear(); _udpProxyListeners.Clear();

View File

@@ -12,7 +12,7 @@
<RepositoryType></RepositoryType> <RepositoryType></RepositoryType>
<Description></Description> <Description></Description>
<PackageId>DnsServer</PackageId> <PackageId>DnsServer</PackageId>
<Version>13.0</Version> <Version>13.0.1</Version>
<IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion> <IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>
</PropertyGroup> </PropertyGroup>

View File

@@ -8,7 +8,7 @@
<RootNamespace>DnsServerWindowsService</RootNamespace> <RootNamespace>DnsServerWindowsService</RootNamespace>
<AssemblyName>DnsService</AssemblyName> <AssemblyName>DnsService</AssemblyName>
<ApplicationIcon>logo2.ico</ApplicationIcon> <ApplicationIcon>logo2.ico</ApplicationIcon>
<Version>13.0</Version> <Version>13.0.1</Version>
<IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion> <IncludeSourceRevisionInInformationalVersion>false</IncludeSourceRevisionInInformationalVersion>
<Authors>Shreyas Zare</Authors> <Authors>Shreyas Zare</Authors>
<Company>Technitium</Company> <Company>Technitium</Company>

View File

@@ -2,7 +2,7 @@
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
#define MyAppName "Technitium DNS Server" #define MyAppName "Technitium DNS Server"
#define MyAppVersion "13.0" #define MyAppVersion "13.0.1"
#define MyAppPublisher "Technitium" #define MyAppPublisher "Technitium"
#define MyAppURL "https://technitium.com/dns/" #define MyAppURL "https://technitium.com/dns/"
#define MyAppExeName "DnsServerSystemTrayApp.exe" #define MyAppExeName "DnsServerSystemTrayApp.exe"