完善dns配置检测
This commit is contained in:
parent
99646b8700
commit
1c693e2282
@ -1,5 +1,6 @@
|
|||||||
using System.Diagnostics.CodeAnalysis;
|
using System.Diagnostics.CodeAnalysis;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
|
using System.Net.NetworkInformation;
|
||||||
|
|
||||||
namespace FastGithub
|
namespace FastGithub
|
||||||
{
|
{
|
||||||
@ -29,14 +30,43 @@ namespace FastGithub
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 验证
|
/// 验证dns
|
||||||
|
/// 防止使用自己使用自己来解析域名造成死循环
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public bool Validate()
|
public bool Validate()
|
||||||
{
|
{
|
||||||
return System.Net.IPAddress.TryParse(this.IPAddress, out var address)
|
if (System.Net.IPAddress.TryParse(this.IPAddress, out var address) == false)
|
||||||
? !(address.Equals(System.Net.IPAddress.Loopback) && this.Port == 53)
|
{
|
||||||
: 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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -12,7 +12,7 @@ namespace FastGithub.ReverseProxy
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 受信任的域名解析器
|
/// 受信任的域名解析器
|
||||||
/// </summary>
|
/// </summary>
|
||||||
sealed class TrustedResolver
|
sealed class DomainResolver
|
||||||
{
|
{
|
||||||
private readonly IMemoryCache memoryCache;
|
private readonly IMemoryCache memoryCache;
|
||||||
private readonly TimeSpan cacheTimeSpan = TimeSpan.FromSeconds(10d);
|
private readonly TimeSpan cacheTimeSpan = TimeSpan.FromSeconds(10d);
|
||||||
@ -22,7 +22,7 @@ namespace FastGithub.ReverseProxy
|
|||||||
/// 受信任的域名解析器
|
/// 受信任的域名解析器
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="options"></param>
|
/// <param name="options"></param>
|
||||||
public TrustedResolver(
|
public DomainResolver(
|
||||||
IMemoryCache memoryCache,
|
IMemoryCache memoryCache,
|
||||||
IOptionsMonitor<FastGithubOptions> options)
|
IOptionsMonitor<FastGithubOptions> options)
|
||||||
{
|
{
|
||||||
@ -66,6 +66,7 @@ namespace FastGithub.ReverseProxy
|
|||||||
throw new Exception($"解析不到{domain}的ip");
|
throw new Exception($"解析不到{domain}的ip");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 受干扰的dns,常常返回127.0.0.1来阻断请求
|
||||||
// 如果解析到的ip为本机ip,会产生反向代理请求死循环
|
// 如果解析到的ip为本机ip,会产生反向代理请求死循环
|
||||||
if (address.Equals(IPAddress.Loopback))
|
if (address.Equals(IPAddress.Loopback))
|
||||||
{
|
{
|
||||||
@ -13,7 +13,7 @@ namespace FastGithub.ReverseProxy
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
class NoSniHttpClientHanlder : DelegatingHandler
|
class NoSniHttpClientHanlder : DelegatingHandler
|
||||||
{
|
{
|
||||||
private readonly TrustedResolver trustedDomainResolver;
|
private readonly DomainResolver trustedDomainResolver;
|
||||||
private readonly ILogger<NoSniHttpClientHanlder> logger;
|
private readonly ILogger<NoSniHttpClientHanlder> logger;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@ -21,7 +21,7 @@ namespace FastGithub.ReverseProxy
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="trustedDomainResolver"></param>
|
/// <param name="trustedDomainResolver"></param>
|
||||||
public NoSniHttpClientHanlder(
|
public NoSniHttpClientHanlder(
|
||||||
TrustedResolver trustedDomainResolver,
|
DomainResolver trustedDomainResolver,
|
||||||
ILogger<NoSniHttpClientHanlder> logger)
|
ILogger<NoSniHttpClientHanlder> logger)
|
||||||
{
|
{
|
||||||
this.trustedDomainResolver = trustedDomainResolver;
|
this.trustedDomainResolver = trustedDomainResolver;
|
||||||
|
|||||||
@ -18,7 +18,7 @@ namespace FastGithub
|
|||||||
return services
|
return services
|
||||||
.AddMemoryCache()
|
.AddMemoryCache()
|
||||||
.AddHttpForwarder()
|
.AddHttpForwarder()
|
||||||
.AddSingleton<TrustedResolver>()
|
.AddSingleton<DomainResolver>()
|
||||||
.AddTransient<NoSniHttpClientHanlder>();
|
.AddTransient<NoSniHttpClientHanlder>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user