^^^^^^^^^^^^
- ^^version command (requested by Mike Benoit)
-- delegation-only, a Verisign special.
- Generic `SQLite <http://www.sqlite.org>`__ support, by Michel 'Who da
man?' Stol. See `Generic SQLite
backend <authoritative/backend-generic-sqlite.md>`__.
<< broadcastAccFunction<uint64_t>(pleaseGetFailedServersSize)<<", ednsmap: "
<<broadcastAccFunction<uint64_t>(pleaseGetEDNSStatusesSize)<<endl;
g_log<<Logger::Notice<<"stats: outpacket/query ratio "<<ratePercentage(SyncRes::s_outqueries, SyncRes::s_queries)<<"%";
- g_log<<Logger::Notice<<", "<<ratePercentage(SyncRes::s_throttledqueries, SyncRes::s_outqueries+SyncRes::s_throttledqueries)<<"% throttled, "
- <<SyncRes::s_nodelegated<<" no-delegation drops"<<endl;
+ g_log<<Logger::Notice<<", "<<ratePercentage(SyncRes::s_throttledqueries, SyncRes::s_outqueries+SyncRes::s_throttledqueries)<<"% throttled"<<endl;
g_log<<Logger::Notice<<"stats: "<<SyncRes::s_tcpoutqueries<<" outgoing tcp connections, "<<
broadcastAccFunction<uint64_t>(pleaseGetConcurrentQueries)<<" queries running, "<<SyncRes::s_outgoingtimeouts<<" outgoing timeouts"<<endl;
l_initialized = true;
}
-
-static void setupDelegationOnly()
-{
- vector<string> parts;
- stringtok(parts, ::arg()["delegation-only"], ", \t");
- for(const auto& p : parts) {
- SyncRes::addDelegationOnly(DNSName(p));
- }
-}
-
static std::map<unsigned int, std::set<int> > parseCPUMap()
{
std::map<unsigned int, std::set<int> > result;
g_log<<Logger::Warning<<"PowerDNS Recursor itself will distribute queries over threads"<<endl;
}
- setupDelegationOnly();
g_outgoingEDNSBufsize=::arg().asNum("edns-outgoing-bufsize");
if(::arg()["trace"]=="fail") {
#else
)="";
#endif
- ::arg().set("delegation-only","Which domains we only accept delegations from")="";
::arg().set("query-local-address","Source IP address for sending queries")="0.0.0.0";
::arg().set("client-tcp-timeout","Timeout in seconds when talking to TCP clients")="2";
::arg().set("max-mthreads", "Maximum number of simultaneous Mtasker threads")="2048";
::arg().set("socket-dir") = "/";
}
- ::arg().set("delegation-only")=toLower(::arg()["delegation-only"]);
-
if(::arg().asNum("threads")==1) {
if (::arg().mustDo("pdns-distributes-queries")) {
g_log<<Logger::Warning<<"Only one thread, no need to distribute queries ourselves"<<endl;
addGetStat("over-capacity-drops", &g_stats.overCapacityDrops);
addGetStat("policy-drops", &g_stats.policyDrops);
addGetStat("no-packet-error", &g_stats.noPacketError);
- addGetStat("dlg-only-drops", &SyncRes::s_nodelegated);
addGetStat("ignored-packets", &g_stats.ignoredCount);
addGetStat("empty-queries", &g_stats.emptyQueriesCount);
addGetStat("max-mthread-stack", &g_stats.maxMThreadStackUsage);
MAX-ACCESS read-only
STATUS current
DESCRIPTION
- "Number of records dropped because of they belonged to a delegation-only zone"
+ "Obsolete"
::= { stats 46 }
ignoredPackets OBJECT-TYPE
``pdns_recursor --config | grep ' config-dir='``.
--daemon
Operate as a daemon.
---delegation-only
- Which domains we only accept delegations from (a Verisign special).
--entropy-source=<file>
Read new entropy from *file*, defaults to /dev/urandom.
--export-etc-hosts
Stolen time, which is the time spent by the whole system in other operating systems when running in a virtualized environment, in units of USER_HZ.
-dlg-only-drops
-^^^^^^^^^^^^^^
-number of records dropped because of :ref:`setting-delegation-only` setting
-
dnssec-authentic-data-queries
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. versionadded:: 4.2
Operate in the background.
-.. _setting-delegation-only:
-
-``delegation-only``
--------------------
-- Domains, comma separated
-
-Which domains we only accept delegations from (a Verisign special).
-
.. _setting-dont-throttle-names:
``dont-throttle-names``
SyncRes::addEDNSLocalSubnet("::/0");
SyncRes::clearEDNSRemoteSubnets();
SyncRes::clearEDNSDomains();
- SyncRes::clearDelegationOnly();
SyncRes::clearDontQuery();
SyncRes::setECSScopeZeroAddress(Netmask("127.0.0.1/32"));
SyncRes::s_qnameminimization = false;
BOOST_CHECK_EQUAL(getRR<ARecordContent>(cached.at(0))->getCA().toString(), ComboAddress("192.0.2.2").toString());
}
-BOOST_AUTO_TEST_CASE(test_delegation_only)
-{
- std::unique_ptr<SyncRes> sr;
- initSR(sr);
-
- primeHints();
-
- /* Thanks, Verisign */
- SyncRes::addDelegationOnly(DNSName("com."));
- SyncRes::addDelegationOnly(DNSName("net."));
-
- const DNSName target("nx-powerdns.com.");
-
- sr->setAsyncCallback([target](const ComboAddress& ip, const DNSName& domain, int type, bool doTCP, bool sendRDQuery, int EDNS0Level, struct timeval* now, boost::optional<Netmask>& srcmask, boost::optional<const ResolveContext&> context, LWResult* res, bool* chained) {
- if (isRootServer(ip)) {
- setLWResult(res, 0, false, false, true);
- addRecordToLW(res, "com.", QType::NS, "a.gtld-servers.net.", DNSResourceRecord::AUTHORITY, 172800);
- addRecordToLW(res, "a.gtld-servers.net.", QType::A, "192.0.2.1", DNSResourceRecord::ADDITIONAL, 3600);
- return LWResult::Result::Success;
- }
- else if (ip == ComboAddress("192.0.2.1:53")) {
-
- setLWResult(res, 0, true, false, true);
- addRecordToLW(res, domain, QType::A, "192.0.2.42");
- return LWResult::Result::Success;
- }
-
- return LWResult::Result::Timeout;
- });
-
- vector<DNSRecord> ret;
- int res = sr->beginResolve(target, QType(QType::A), QClass::IN, ret);
- BOOST_CHECK_EQUAL(res, RCode::NXDomain);
- BOOST_CHECK_EQUAL(ret.size(), 0U);
-}
-
BOOST_AUTO_TEST_CASE(test_unauth_any)
{
std::unique_ptr<SyncRes> sr;
thread_local SyncRes::ThreadLocalStorage SyncRes::t_sstorage;
thread_local std::unique_ptr<addrringbuf_t> t_timeouts;
-std::unordered_set<DNSName> SyncRes::s_delegationOnly;
std::unique_ptr<NetmaskGroup> SyncRes::s_dontQuery{nullptr};
NetmaskGroup SyncRes::s_ednslocalsubnets;
NetmaskGroup SyncRes::s_ednsremotesubnets;
std::atomic<uint64_t> SyncRes::s_throttledqueries;
std::atomic<uint64_t> SyncRes::s_dontqueries;
std::atomic<uint64_t> SyncRes::s_qnameminfallbacksuccess;
-std::atomic<uint64_t> SyncRes::s_nodelegated;
std::atomic<uint64_t> SyncRes::s_unreachables;
std::atomic<uint64_t> SyncRes::s_ecsqueries;
std::atomic<uint64_t> SyncRes::s_ecsresponses;
else if (rec.d_type == QType::DS && rec.d_name == auth) {
LOG("NO - DS provided by child zone"<<endl);
}
- else if (lwr.d_aabit && lwr.d_rcode==RCode::NoError && rec.d_place==DNSResourceRecord::ANSWER && ((rec.d_type != QType::DNSKEY && rec.d_type != QType::DS) || rec.d_name != auth) && s_delegationOnly.count(auth)) {
- LOG("NO! Is from delegation-only zone"<<endl);
- s_nodelegated++;
- return RCode::NXDomain;
- }
else {
bool haveLogged = false;
if (isDNAMEAnswer && rec.d_type == QType::CNAME) {
static uint64_t doDumpFailedServers(int fd);
static uint64_t doDumpNonResolvingNS(int fd);
static int getRootNS(struct timeval now, asyncresolve_t asyncCallback, unsigned int depth);
- static void clearDelegationOnly()
- {
- s_delegationOnly.clear();
- }
- static void addDelegationOnly(const DNSName& name)
- {
- s_delegationOnly.insert(name);
- }
static void addDontQuery(const std::string& mask)
{
if (!s_dontQuery)
static std::atomic<uint64_t> s_authzonequeries;
static std::atomic<uint64_t> s_outqueries;
static std::atomic<uint64_t> s_tcpoutqueries;
- static std::atomic<uint64_t> s_nodelegated;
static std::atomic<uint64_t> s_unreachables;
static std::atomic<uint64_t> s_ecsqueries;
static std::atomic<uint64_t> s_ecsresponses;
ComboAddress d_requestor;
ComboAddress d_cacheRemote;
- static std::unordered_set<DNSName> s_delegationOnly;
static NetmaskGroup s_ednslocalsubnets;
static NetmaskGroup s_ednsremotesubnets;
static SuffixMatchNode s_ednsdomains;
{"cpu-msec-thread-0",
MetricDefinition(PrometheusMetricType::counter,
"Number of milliseconds spent in thread n")},
- {"dlg-only-drops",
- MetricDefinition(PrometheusMetricType::counter,
- "Number of records dropped because of `setting-delegation-only` setting")},
-
{"dnssec-authentic-data-queries",
MetricDefinition(PrometheusMetricType::counter,
"Number of queries received with the AD bit set")},
- export-etc-hosts and -suffix
- lua stuff
- auth-zones
-- delegation-only
- forward-zones