DnsServer: updated ProcessConnectionAsync() to read server domain name from TLS request to set it as request local EP. Updated ProcessQuicConnectionAsync() to read target hostname from the QUIC connection to set it as request local EP.

This commit is contained in:
Shreyas Zare
2024-02-17 18:08:04 +05:30
parent 55e51a88b9
commit c00a2a15a6

View File

@@ -596,9 +596,22 @@ namespace DnsServerCore.Dns
case DnsTransportProtocol.Tls:
SslStream tlsStream = new SslStream(new NetworkStream(socket));
await tlsStream.AuthenticateAsServerAsync(_sslServerAuthenticationOptions).WithTimeout(_tcpReceiveTimeout);
string serverName = null;
await ReadStreamRequestAsync(tlsStream, remoteEP, new NameServerAddress(socket.LocalEndPoint, DnsTransportProtocol.Tls), protocol);
await tlsStream.AuthenticateAsServerAsync(delegate (SslStream stream, SslClientHelloInfo clientHelloInfo, object? state, CancellationToken cancellationToken)
{
serverName = clientHelloInfo.ServerName;
return ValueTask.FromResult(_sslServerAuthenticationOptions);
}, null, default).WithTimeout(_tcpReceiveTimeout);
NameServerAddress dnsEP;
if (string.IsNullOrEmpty(serverName))
dnsEP = new NameServerAddress(socket.LocalEndPoint, DnsTransportProtocol.Tls);
else
dnsEP = new NameServerAddress(serverName, socket.LocalEndPoint as IPEndPoint, DnsTransportProtocol.Tls);
await ReadStreamRequestAsync(tlsStream, remoteEP, dnsEP, protocol);
break;
case DnsTransportProtocol.TcpProxy:
@@ -765,7 +778,12 @@ namespace DnsServerCore.Dns
{
try
{
NameServerAddress dnsEP = new NameServerAddress(quicConnection.LocalEndPoint, DnsTransportProtocol.Quic);
NameServerAddress dnsEP;
if (string.IsNullOrEmpty(quicConnection.TargetHostName))
dnsEP = new NameServerAddress(quicConnection.LocalEndPoint, DnsTransportProtocol.Quic);
else
dnsEP = new NameServerAddress(quicConnection.TargetHostName, quicConnection.LocalEndPoint, DnsTransportProtocol.Quic);
while (true)
{