Added DNS-over-HTTPS support for forwarded queries.
This commit is contained in:
+13
-8
@@ -7,7 +7,7 @@ use derive_more::{Display, Error, From};
|
||||
|
||||
use crate::dns::authority::Authority;
|
||||
use crate::dns::cache::SynchronizedCache;
|
||||
use crate::dns::client::{DnsClient, DnsNetworkClient};
|
||||
use crate::dns::client::{DnsClient, DnsNetworkClient, HttpsDnsClient};
|
||||
use crate::dns::filter::DnsFilter;
|
||||
use crate::dns::resolve::{DnsResolver, ForwardingDnsResolver, RecursiveDnsResolver};
|
||||
|
||||
@@ -44,7 +44,8 @@ pub struct ServerContext {
|
||||
pub authority: Authority,
|
||||
pub cache: SynchronizedCache,
|
||||
pub filters: Vec<Box<dyn DnsFilter + Sync + Send>>,
|
||||
pub client: Box<dyn DnsClient + Sync + Send>,
|
||||
pub old_client: Box<dyn DnsClient + Sync + Send>,
|
||||
pub doh_client: Box<dyn DnsClient + Sync + Send>,
|
||||
pub dns_listen: String,
|
||||
pub api_port: u16,
|
||||
pub resolve_strategy: ResolveStrategy,
|
||||
@@ -58,18 +59,19 @@ pub struct ServerContext {
|
||||
|
||||
impl Default for ServerContext {
|
||||
fn default() -> Self {
|
||||
ServerContext::new()
|
||||
ServerContext::new(String::from("0.0.0.0:53"), Vec::new())
|
||||
}
|
||||
}
|
||||
|
||||
impl ServerContext {
|
||||
pub fn new() -> ServerContext {
|
||||
pub fn new(dns_listen: String, bootstraps: Vec<String>) -> ServerContext {
|
||||
ServerContext {
|
||||
authority: Authority::new(),
|
||||
cache: SynchronizedCache::new(),
|
||||
filters: Vec::new(),
|
||||
client: Box::new(DnsNetworkClient::new(10000 + (rand::random::<u16>() % 20000))),
|
||||
dns_listen: String::from("0.0.0.0:53"),
|
||||
old_client: Box::new(DnsNetworkClient::new(10000 + (rand::random::<u16>() % 20000))),
|
||||
doh_client: Box::new(HttpsDnsClient::new(bootstraps)),
|
||||
dns_listen,
|
||||
api_port: 5380,
|
||||
resolve_strategy: ResolveStrategy::Recursive,
|
||||
allow_recursive: true,
|
||||
@@ -83,7 +85,9 @@ impl ServerContext {
|
||||
|
||||
pub fn initialize(&mut self) -> Result<()> {
|
||||
// Start UDP client thread
|
||||
self.client.run()?;
|
||||
self.old_client.run()?;
|
||||
// Start DoH client
|
||||
self.doh_client.run()?;
|
||||
|
||||
// Load authority data
|
||||
self.authority.load()?;
|
||||
@@ -117,7 +121,8 @@ pub mod tests {
|
||||
authority: Authority::new(),
|
||||
cache: SynchronizedCache::new(),
|
||||
filters: Vec::new(),
|
||||
client: Box::new(DnsStubClient::new(callback)),
|
||||
old_client: Box::new(DnsStubClient::new(callback)),
|
||||
doh_client: Box::new(HttpsDnsClient::new()),
|
||||
dns_listen: String::from("0.0.0.0:53"),
|
||||
api_port: 5380,
|
||||
resolve_strategy: ResolveStrategy::Recursive,
|
||||
|
||||
Reference in New Issue
Block a user