完善dns配置检测

This commit is contained in:
xljiulang 2021-07-17 18:24:56 +08:00
parent 99646b8700
commit 1c693e2282
4 changed files with 40 additions and 9 deletions

View File

@ -1,5 +1,6 @@
using System.Diagnostics.CodeAnalysis;
using System.Net;
using System.Net.NetworkInformation;
namespace FastGithub
{
@ -29,14 +30,43 @@ namespace FastGithub
}
/// <summary>
/// 验证
/// 验证dns
/// 防止使用自己使用自己来解析域名造成死循环
/// </summary>
/// <returns></returns>
public bool Validate()
{
return System.Net.IPAddress.TryParse(this.IPAddress, out var address)
? !(address.Equals(System.Net.IPAddress.Loopback) && this.Port == 53)
: false;
if (System.Net.IPAddress.TryParse(this.IPAddress, out var address) == false)
{
return false;
}
if (this.Port == 53 && IsLocalMachineIPAddress(address))
{
return false;
}
return true;
}
/// <summary>
/// 是否为本机ip
/// </summary>
/// <param name="address"></param>
/// <returns></returns>
private static bool IsLocalMachineIPAddress(IPAddress address)
{
foreach (var @interface in NetworkInterface.GetAllNetworkInterfaces())
{
foreach (var addressInfo in @interface.GetIPProperties().UnicastAddresses)
{
if (addressInfo.Address.Equals(address))
{
return true;
}
}
}
return false;
}
}
}

View File

@ -12,7 +12,7 @@ namespace FastGithub.ReverseProxy
/// <summary>
/// 受信任的域名解析器
/// </summary>
sealed class TrustedResolver
sealed class DomainResolver
{
private readonly IMemoryCache memoryCache;
private readonly TimeSpan cacheTimeSpan = TimeSpan.FromSeconds(10d);
@ -22,7 +22,7 @@ namespace FastGithub.ReverseProxy
/// 受信任的域名解析器
/// </summary>
/// <param name="options"></param>
public TrustedResolver(
public DomainResolver(
IMemoryCache memoryCache,
IOptionsMonitor<FastGithubOptions> options)
{
@ -66,6 +66,7 @@ namespace FastGithub.ReverseProxy
throw new Exception($"解析不到{domain}的ip");
}
// 受干扰的dns常常返回127.0.0.1来阻断请求
// 如果解析到的ip为本机ip会产生反向代理请求死循环
if (address.Equals(IPAddress.Loopback))
{

View File

@ -13,7 +13,7 @@ namespace FastGithub.ReverseProxy
/// </summary>
class NoSniHttpClientHanlder : DelegatingHandler
{
private readonly TrustedResolver trustedDomainResolver;
private readonly DomainResolver trustedDomainResolver;
private readonly ILogger<NoSniHttpClientHanlder> logger;
/// <summary>
@ -21,7 +21,7 @@ namespace FastGithub.ReverseProxy
/// </summary>
/// <param name="trustedDomainResolver"></param>
public NoSniHttpClientHanlder(
TrustedResolver trustedDomainResolver,
DomainResolver trustedDomainResolver,
ILogger<NoSniHttpClientHanlder> logger)
{
this.trustedDomainResolver = trustedDomainResolver;

View File

@ -18,7 +18,7 @@ namespace FastGithub
return services
.AddMemoryCache()
.AddHttpForwarder()
.AddSingleton<TrustedResolver>()
.AddSingleton<DomainResolver>()
.AddTransient<NoSniHttpClientHanlder>();
}
}