Fixed OPT record forwarding.
This commit is contained in:
+4
-2
@@ -23,9 +23,11 @@ listen = "127.0.0.1:53"
|
|||||||
# How many threads to spawn by DNS server
|
# How many threads to spawn by DNS server
|
||||||
threads = 50
|
threads = 50
|
||||||
# AdGuard DNS servers to filter ads and trackers
|
# AdGuard DNS servers to filter ads and trackers
|
||||||
forwarders = ["https://dns.adguard.com/dns-query", "94.140.14.14:53", "94.140.15.15:53"]
|
forwarders = ["https://dns.adguard.com/dns-query"]
|
||||||
|
#forwarders = ["94.140.14.14:53", "94.140.15.15:53"]
|
||||||
# Cloudflare servers
|
# Cloudflare servers
|
||||||
#forwarders = ["https://cloudflare-dns.com/dns-query", "1.1.1.1:53", "1.0.0.1:53"]
|
#forwarders = ["https://cloudflare-dns.com/dns-query"]
|
||||||
|
#forwarders = ["1.1.1.1:53", "1.0.0.1:53"]
|
||||||
|
|
||||||
# Bootstrap DNS-servers to resolve domains of DoH providers
|
# Bootstrap DNS-servers to resolve domains of DoH providers
|
||||||
bootstraps = ["9.9.9.9:53", "94.140.14.140:53"]
|
bootstraps = ["9.9.9.9:53", "94.140.14.140:53"]
|
||||||
|
|||||||
+4
-1
@@ -369,7 +369,9 @@ impl HttpsDnsClient {
|
|||||||
|
|
||||||
let agent = ureq::AgentBuilder::new()
|
let agent = ureq::AgentBuilder::new()
|
||||||
.user_agent(&client_name)
|
.user_agent(&client_name)
|
||||||
.timeout(std::time::Duration::from_secs(3))
|
.timeout(std::time::Duration::from_secs(5))
|
||||||
|
.max_idle_connections_per_host(8)
|
||||||
|
.max_idle_connections(16)
|
||||||
.resolver(move |addr: &str| {
|
.resolver(move |addr: &str| {
|
||||||
let addr = match addr.find(":") {
|
let addr = match addr.find(":") {
|
||||||
Some(index) => addr[0..index].to_string(),
|
Some(index) => addr[0..index].to_string(),
|
||||||
@@ -468,6 +470,7 @@ impl DnsClient for HttpsDnsClient {
|
|||||||
}
|
}
|
||||||
Err(e) => warn!("DoH error: {}", &e.to_string())
|
Err(e) => warn!("DoH error: {}", &e.to_string())
|
||||||
}
|
}
|
||||||
|
warn!("Lookup of {} failed", qname);
|
||||||
Err(ClientError::LookupFailed)
|
Err(ClientError::LookupFailed)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-1
@@ -422,7 +422,17 @@ impl DnsRecord {
|
|||||||
buffer.write_u8(*b)?;
|
buffer.write_u8(*b)?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DnsRecord::OPT { .. } => {}
|
DnsRecord::OPT { packet_len, flags, ref data } => {
|
||||||
|
buffer.write_u8(0)?;
|
||||||
|
buffer.write_u16(QueryType::OPT.to_num())?;
|
||||||
|
buffer.write_u16(packet_len)?;
|
||||||
|
buffer.write_u32(flags)?;
|
||||||
|
buffer.write_u16(data.len() as u16)?;
|
||||||
|
|
||||||
|
for b in data.as_bytes() {
|
||||||
|
buffer.write_u8(*b)?;
|
||||||
|
}
|
||||||
|
}
|
||||||
DnsRecord::UNKNOWN { .. } => {
|
DnsRecord::UNKNOWN { .. } => {
|
||||||
println!("Skipping record: {:?}", self);
|
println!("Skipping record: {:?}", self);
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-5
@@ -113,9 +113,9 @@ pub fn execute_query(context: Arc<ServerContext>, request: &DnsPacket) -> DnsPac
|
|||||||
packet.questions.push(question.clone());
|
packet.questions.push(question.clone());
|
||||||
|
|
||||||
let mut resolver = context.create_resolver(Arc::clone(&context));
|
let mut resolver = context.create_resolver(Arc::clone(&context));
|
||||||
let rescode = match resolver.resolve(&question.name, question.qtype, request.header.recursion_desired) {
|
let res_code = match resolver.resolve(&question.name, question.qtype, request.header.recursion_desired) {
|
||||||
Ok(result) => {
|
Ok(result) => {
|
||||||
let rescode = result.header.rescode;
|
let res_code = result.header.rescode;
|
||||||
if result.header.authoritative_answer {
|
if result.header.authoritative_answer {
|
||||||
packet.header.authoritative_answer = true;
|
packet.header.authoritative_answer = true;
|
||||||
}
|
}
|
||||||
@@ -125,7 +125,7 @@ pub fn execute_query(context: Arc<ServerContext>, request: &DnsPacket) -> DnsPac
|
|||||||
|
|
||||||
resolve_cnames(&unmatched, &mut results, &mut resolver, 0);
|
resolve_cnames(&unmatched, &mut results, &mut resolver, 0);
|
||||||
|
|
||||||
rescode
|
res_code
|
||||||
}
|
}
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
error!("Failed to resolve {:?} {}: {:?}", question.qtype, question.name, err);
|
error!("Failed to resolve {:?} {}: {:?}", question.qtype, question.name, err);
|
||||||
@@ -133,7 +133,7 @@ pub fn execute_query(context: Arc<ServerContext>, request: &DnsPacket) -> DnsPac
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
packet.header.rescode = rescode;
|
packet.header.rescode = res_code;
|
||||||
|
|
||||||
for result in results {
|
for result in results {
|
||||||
for rec in result.answers {
|
for rec in result.answers {
|
||||||
@@ -246,7 +246,7 @@ impl DnsServer for DnsUdpServer {
|
|||||||
Ok(x) => x,
|
Ok(x) => x,
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
if let Some(code) = err.raw_os_error() {
|
if let Some(code) = err.raw_os_error() {
|
||||||
if code == 10004 {
|
if code == 10004 || code == 10093 {
|
||||||
debug!("UDP service loop has finished");
|
debug!("UDP service loop has finished");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -229,10 +229,11 @@ fn setup_logger(opt_matches: &Matches) {
|
|||||||
.add_filter_ignore_str("mio::poll")
|
.add_filter_ignore_str("mio::poll")
|
||||||
.add_filter_ignore_str("rustls::client")
|
.add_filter_ignore_str("rustls::client")
|
||||||
.add_filter_ignore_str("ureq::")
|
.add_filter_ignore_str("ureq::")
|
||||||
.set_thread_level(LevelFilter::Off)
|
.set_thread_level(LevelFilter::Error)
|
||||||
.set_location_level(LevelFilter::Off)
|
.set_location_level(LevelFilter::Off)
|
||||||
.set_target_level(LevelFilter::Error)
|
.set_target_level(LevelFilter::Error)
|
||||||
.set_time_level(LevelFilter::Error)
|
.set_time_level(LevelFilter::Error)
|
||||||
|
.set_time_format_str("%F %T%.3f")
|
||||||
.set_time_to_local(true)
|
.set_time_to_local(true)
|
||||||
.build();
|
.build();
|
||||||
match opt_matches.opt_str("l") {
|
match opt_matches.opt_str("l") {
|
||||||
|
|||||||
Reference in New Issue
Block a user