pihole.toml 54 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177
  1. # Pi-hole configuration file (v6.0.3-14-gbb1ff28a-dirty)
  2. # Encoding: UTF-8
  3. # This file is managed by pihole-FTL
  4. # Last updated on 2025-03-03 11:05:52 UTC
  5. [dns]
  6. # Array of upstream DNS servers used by Pi-hole
  7. # Example: [ "8.8.8.8", "127.0.0.1#5335", "docker-resolver" ]
  8. #
  9. # Possible values are:
  10. # array of IP addresses and/or hostnames, optionally with a port (#...)
  11. upstreams = []
  12. # Use this option to control deep CNAME inspection. Disabling it might be beneficial
  13. # for very low-end devices
  14. CNAMEdeepInspect = true
  15. # Should _esni. subdomains be blocked by default? Encrypted Server Name Indication
  16. # (ESNI) is certainly a good step into the right direction to enhance privacy on the
  17. # web. It prevents on-path observers, including ISPs, coffee shop owners and
  18. # firewalls, from intercepting the TLS Server Name Indication (SNI) extension by
  19. # encrypting it. This prevents the SNI from being used to determine which websites
  20. # users are visiting.
  21. # ESNI will obviously cause issues for pixelserv-tls which will be unable to generate
  22. # matching certificates on-the-fly when it cannot read the SNI. Cloudflare and Firefox
  23. # are already enabling ESNI. According to the IEFT draft (link above), we can easily
  24. # restore piselserv-tls's operation by replying NXDOMAIN to _esni. subdomains of
  25. # blocked domains as this mimics a "not configured for this domain" behavior.
  26. blockESNI = true
  27. # Should we overwrite the query source when client information is provided through
  28. # EDNS0 client subnet (ECS) information? This allows Pi-hole to obtain client IPs even
  29. # if they are hidden behind the NAT of a router. This feature has been requested and
  30. # discussed on Discourse where further information how to use it can be found:
  31. # https://discourse.pi-hole.net/t/support-for-add-subnet-option-from-dnsmasq-ecs-edns0-client-subnet/35940
  32. EDNS0ECS = true
  33. # Should FTL hide queries made by localhost?
  34. ignoreLocalhost = false
  35. # Should FTL analyze and show internally generated DNSSEC queries?
  36. showDNSSEC = true
  37. # Should FTL analyze *only* A and AAAA queries?
  38. analyzeOnlyAandAAAA = false
  39. # Controls whether and how FTL will reply with for address for which a local interface
  40. # exists. Changing this setting causes FTL to restart.
  41. #
  42. # Possible values are:
  43. # - "NONE"
  44. # Pi-hole will not respond automatically on PTR requests to local interface
  45. # addresses. Ensure pi.hole and/or hostname records exist elsewhere.
  46. # - "HOSTNAME"
  47. # Serve the machine's hostname. The hostname is queried from the kernel through
  48. # uname(2)->nodename. If the machine has multiple network interfaces, it can
  49. # also have multiple nodenames. In this case, it is unspecified and up to the
  50. # kernel which one will be returned. On Linux, the returned string is what has
  51. # been set using sethostname(2) which is typically what has been set in
  52. # /etc/hostname.
  53. # - "HOSTNAMEFQDN"
  54. # Serve the machine's hostname (see limitations above) as fully qualified domain
  55. # by adding the local domain. If no local domain has been defined (config option
  56. # dns.domain), FTL tries to query the domain name from the kernel using
  57. # getdomainname(2). If this fails, FTL appends ".no_fqdn_available" to the
  58. # hostname.
  59. # - "PI.HOLE"
  60. # Respond with "pi.hole".
  61. piholePTR = "PI.HOLE"
  62. # How should FTL handle queries when the gravity database is not available?
  63. #
  64. # Possible values are:
  65. # - "BLOCK"
  66. # Block all queries when the database is busy.
  67. # - "ALLOW"
  68. # Allow all queries when the database is busy.
  69. # - "REFUSE"
  70. # Refuse all queries which arrive while the database is busy.
  71. # - "DROP"
  72. # Just drop the queries, i.e., never reply to them at all. Despite "REFUSE"
  73. # sounding similar to "DROP", it turned out that many clients will just
  74. # immediately retry, causing up to several thousands of queries per second. This
  75. # does not happen in "DROP" mode.
  76. replyWhenBusy = "ALLOW"
  77. # FTL's internal TTL to be handed out for blocked queries in seconds. This settings
  78. # allows users to select a value different from the dnsmasq config option local-ttl.
  79. # This is useful in context of locally used hostnames that are known to stay constant
  80. # over long times (printers, etc.).
  81. # Note that large values may render whitelisting ineffective due to client-side
  82. # caching of blocked queries.
  83. blockTTL = 2
  84. # Array of custom DNS records
  85. # Example: hosts = [ "127.0.0.1 mylocal", "192.168.0.1 therouter" ]
  86. #
  87. # Possible values are:
  88. # Array of custom DNS records each one in HOSTS form: "IP HOSTNAME"
  89. hosts = []
  90. # If set, A and AAAA queries for plain names, without dots or domain parts, are never
  91. # forwarded to upstream nameservers
  92. domainNeeded = false
  93. # If set, the domain is added to simple names (without a period) in /etc/hosts in the
  94. # same way as for DHCP-derived names
  95. expandHosts = false
  96. # The DNS domain used by your Pi-hole.
  97. #
  98. # This DNS domain is purely local. FTL may answer queries from its local cache and
  99. # configuration but *never* forwards any requests upstream *unless* you have
  100. # configured a dns.revServer exactly for this domain. In the latter case, all queries
  101. # for this domain are sent exclusively to this server (including reverse lookups).
  102. #
  103. # For DHCP, this has two effects; firstly it causes the DHCP server to return the
  104. # domain to any hosts which request it, and secondly it sets the domain which it is
  105. # legal for DHCP-configured hosts to claim. The intention is to constrain hostnames so
  106. # that an untrusted host on the LAN cannot advertise its name via DHCP as e.g.
  107. # "google.com" and capture traffic not meant for it. If no domain suffix is specified,
  108. # then any DHCP hostname with a domain part (ie with a period) will be disallowed and
  109. # logged. If a domain is specified, then hostnames with a domain part are allowed,
  110. # provided the domain part matches the suffix. In addition, when a suffix is set then
  111. # hostnames without a domain part have the suffix added as an optional domain part.
  112. # For instance, we can set domain=mylab.com and have a machine whose DHCP hostname is
  113. # "laptop". The IP address for that machine is available both as "laptop" and
  114. # "laptop.mylab.com".
  115. #
  116. # You can disable setting a domain by setting this option to an empty string.
  117. #
  118. # Possible values are:
  119. # <any valid domain>
  120. domain = "lan"
  121. # Should all reverse lookups for private IP ranges (i.e., 192.168.x.y, etc) which are
  122. # not found in /etc/hosts or the DHCP leases file be answered with "no such domain"
  123. # rather than being forwarded upstream?
  124. bogusPriv = true
  125. # Validate DNS replies using DNSSEC?
  126. dnssec = false
  127. # Interface to use for DNS (see also dnsmasq.listening.mode) and DHCP (if enabled)
  128. #
  129. # Possible values are:
  130. # a valid interface name
  131. interface = ""
  132. # Add A, AAAA and PTR records to the DNS. This adds one or more names to the DNS with
  133. # associated IPv4 (A) and IPv6 (AAAA) records
  134. #
  135. # Possible values are:
  136. # <name>[,<name>....],[<IPv4-address>],[<IPv6-address>][,<TTL>]
  137. hostRecord = ""
  138. # Pi-hole interface listening modes
  139. #
  140. # Possible values are:
  141. # - "LOCAL"
  142. # Allow only local requests. This setting accepts DNS queries only from hosts
  143. # whose address is on a local subnet, i.e., a subnet for which an interface
  144. # exists on the server. It is intended to be set as a default on installation,
  145. # to allow unconfigured installations to be useful but also safe from being used
  146. # for DNS amplification attacks if (accidentally) running public.
  147. # - "SINGLE"
  148. # Permit all origins, accept only on the specified interface. Respond only to
  149. # queries arriving on the specified interface. The loopback (lo) interface is
  150. # automatically added to the list of interfaces to use when this option is used.
  151. # Make sure your Pi-hole is properly firewalled!
  152. # - "BIND"
  153. # By default, FTL binds the wildcard address. If this is not what you want, you
  154. # can use this option as it forces FTL to really bind only the interfaces it is
  155. # listening on. Note that this may result in issues when the interface may go
  156. # down (cable unplugged, etc.). About the only time when this is useful is when
  157. # running another nameserver on the same port on the same machine. This may also
  158. # happen if you run a virtualization API such as libvirt. When this option is
  159. # used, IP alias interface labels (e.g. enp2s0:0) are checked rather than
  160. # interface names.
  161. # - "ALL"
  162. # Permit all origins, accept on all interfaces. Make sure your Pi-hole is
  163. # properly firewalled! This truly allows any traffic to be replied to and is a
  164. # dangerous thing to do as your Pi-hole could become an open resolver. You
  165. # should always ask yourself if the first option doesn't work for you as well.
  166. # - "NONE"
  167. # Do not add any configuration concerning the listening mode to the dnsmasq
  168. # configuration file. This is useful if you want to manually configure the
  169. # listening mode in auxiliary configuration files. This option is really meant
  170. # for advanced users only, support for this option may be limited.
  171. listeningMode = "LOCAL"
  172. # Log DNS queries and replies to pihole.log
  173. queryLogging = true
  174. # List of CNAME records which indicate that <cname> is really <target>. If the <TTL> is
  175. # given, it overwrites the value of local-ttl
  176. #
  177. # Possible values are:
  178. # Array of CNAMEs each on in one of the following forms: "<cname>,<target>[,<TTL>]"
  179. cnameRecords = []
  180. # Port used by the DNS server
  181. port = 53
  182. # Reverse server (former also called "conditional forwarding") feature
  183. # Array of reverse servers each one in one of the following forms:
  184. # "<enabled>,<ip-address>[/<prefix-len>],<server>[#<port>][,<domain>]"
  185. #
  186. # Individual components:
  187. #
  188. # <enabled>: either "true" or "false"
  189. #
  190. # <ip-address>[/<prefix-len>]: Address range for the reverse server feature in CIDR
  191. # notation. If the prefix length is omitted, either 32 (IPv4) or 128 (IPv6) are
  192. # substituted (exact address match). This is almost certainly not what you want here.
  193. # Example: "192.168.0.0/24" for the range 192.168.0.1 - 192.168.0.255
  194. #
  195. # <server>[#<port>]: Target server to be used for the reverse server feature
  196. # Example: "192.168.0.1#53"
  197. #
  198. # <domain>: Domain used for the reverse server feature (e.g., "fritz.box")
  199. # Example: "fritz.box"
  200. #
  201. # Possible values are:
  202. # array of reverse servers each one in one of the following forms:
  203. # "<enabled>,<ip-address>[/<prefix-len>],<server>[#<port>][,<domain>]", e.g.,
  204. # "true,192.168.0.0/24,192.168.0.1,fritz.box"
  205. revServers = []
  206. [dns.cache]
  207. # Cache size of the DNS server. Note that expiring cache entries naturally make room
  208. # for new insertions over time. Setting this number too high will have an adverse
  209. # effect as not only more space is needed, but also lookup speed gets degraded in the
  210. # 10,000+ range. dnsmasq may issue a warning when you go beyond 10,000+ cache entries.
  211. size = 10000
  212. # Query cache optimizer: If a DNS name exists in the cache, but its time-to-live has
  213. # expired only recently, the data will be used anyway (a refreshing from upstream is
  214. # triggered). This can improve DNS query delays especially over unreliable Internet
  215. # connections. This feature comes at the expense of possibly sometimes returning
  216. # out-of-date data and less efficient cache utilization, since old data cannot be
  217. # flushed when its TTL expires, so the cache becomes mostly least-recently-used. To
  218. # mitigate issues caused by massively outdated DNS replies, the maximum overaging of
  219. # cached records is limited. We strongly recommend staying below 86400 (1 day) with
  220. # this option.
  221. # Setting the TTL excess time to zero will serve stale cache data regardless how long
  222. # it has expired. This is not recommended as it may lead to stale data being served
  223. # for a long time. Setting this option to any negative value will disable this feature
  224. # altogether.
  225. optimizer = 3600
  226. # This setting allows you to specify the TTL used for queries blocked upstream. Once
  227. # the TTL expires, the query will be forwarded to the upstream server again to check
  228. # if the block is still valid. Defaults to caching for one day (86400 seconds).
  229. # Setting this value to zero disables caching of queries blocked upstream.
  230. upstreamBlockedTTL = 86400
  231. [dns.blocking]
  232. # Should FTL block queries?
  233. active = true
  234. # How should FTL reply to blocked queries?
  235. #
  236. # Possible values are:
  237. # - "NULL"
  238. # In NULL mode, which is both the default and recommended mode for Pi-hole
  239. # FTLDNS, blocked queries will be answered with the "unspecified address"
  240. # (0.0.0.0 or ::). The "unspecified address" is a reserved IP address specified
  241. # by RFC 3513 - Internet Protocol Version 6 (IPv6) Addressing Architecture,
  242. # section 2.5.2.
  243. # - "IP_NODATA_AAAA"
  244. # In IP-NODATA-AAAA mode, blocked queries will be answered with the local IPv4
  245. # addresses of your Pi-hole. Blocked AAAA queries will be answered with
  246. # NODATA-IPV6 and clients will only try to reach your Pi-hole over its static
  247. # IPv4 address.
  248. # - "IP"
  249. # In IP mode, blocked queries will be answered with the local IP addresses of
  250. # your Pi-hole.
  251. # - "NX"
  252. # In NXDOMAIN mode, blocked queries will be answered with an empty response
  253. # (i.e., there won't be an answer section) and status NXDOMAIN. A NXDOMAIN
  254. # response should indicate that there is no such domain to the client making the
  255. # query.
  256. # - "NODATA"
  257. # In NODATA mode, blocked queries will be answered with an empty response (no
  258. # answer section) and status NODATA. A NODATA response indicates that the domain
  259. # exists, but there is no record for the requested query type.
  260. mode = "NULL"
  261. # Should FTL enrich blocked replies with EDNS0 information?
  262. #
  263. # Possible values are:
  264. # - "NONE"
  265. # In NONE mode, no additional EDNS information is added to blocked queries
  266. # - "CODE"
  267. # In CODE mode, blocked queries will be enriched with EDNS info-code BLOCKED (15)
  268. # - "TEXT"
  269. # In TEXT mode, blocked queries will be enriched with EDNS info-code BLOCKED (15)
  270. # and a text message describing the reason for the block
  271. edns = "TEXT"
  272. [dns.specialDomains]
  273. # Should Pi-hole always reply with NXDOMAIN to A and AAAA queries of
  274. # use-application-dns.net to disable Firefox automatic DNS-over-HTTP? This is
  275. # following the recommendation on
  276. # https://support.mozilla.org/en-US/kb/configuring-networks-disable-dns-over-https
  277. mozillaCanary = true
  278. # Should Pi-hole always reply with NXDOMAIN to A and AAAA queries of mask.icloud.com
  279. # and mask-h2.icloud.com to disable Apple's iCloud Private Relay to prevent Apple
  280. # devices from bypassing Pi-hole? This is following the recommendation on
  281. # https://developer.apple.com/support/prepare-your-network-for-icloud-private-relay
  282. iCloudPrivateRelay = true
  283. [dns.reply.host]
  284. # Use a specific IPv4 address for the Pi-hole host? By default, FTL determines the
  285. # address of the interface a query arrived on and uses this address for replying to A
  286. # queries with the most suitable address for the requesting client. This setting can
  287. # be used to use a fixed, rather than the dynamically obtained, address when Pi-hole
  288. # responds to the following names: [ "pi.hole", "<the device's hostname>",
  289. # "pi.hole.<local domain>", "<the device's hostname>.<local domain>" ]
  290. force4 = false
  291. # Custom IPv4 address for the Pi-hole host
  292. #
  293. # Possible values are:
  294. # <valid IPv4 address> or empty string ("")
  295. IPv4 = ""
  296. # Use a specific IPv6 address for the Pi-hole host? See description for the IPv4
  297. # variant above for further details.
  298. force6 = false
  299. # Custom IPv6 address for the Pi-hole host
  300. #
  301. # Possible values are:
  302. # <valid IPv6 address> or empty string ("")
  303. IPv6 = ""
  304. [dns.reply.blocking]
  305. # Use a specific IPv4 address in IP blocking mode? By default, FTL determines the
  306. # address of the interface a query arrived on and uses this address for replying to A
  307. # queries with the most suitable address for the requesting client. This setting can
  308. # be used to use a fixed, rather than the dynamically obtained, address when Pi-hole
  309. # responds in the following cases: IP blocking mode is used and this query is to be
  310. # blocked, regular expressions with the ;reply=IP regex extension.
  311. force4 = false
  312. # Custom IPv4 address for IP blocking mode
  313. #
  314. # Possible values are:
  315. # <valid IPv4 address> or empty string ("")
  316. IPv4 = ""
  317. # Use a specific IPv6 address in IP blocking mode? See description for the IPv4 variant
  318. # above for further details.
  319. force6 = false
  320. # Custom IPv6 address for IP blocking mode
  321. #
  322. # Possible values are:
  323. # <valid IPv6 address> or empty string ("")
  324. IPv6 = ""
  325. [dns.rateLimit]
  326. # Rate-limited queries are answered with a REFUSED reply and not further processed by
  327. # FTL.
  328. # The default settings for FTL's rate-limiting are to permit no more than 1000 queries
  329. # in 60 seconds. Both numbers can be customized independently. It is important to note
  330. # that rate-limiting is happening on a per-client basis. Other clients can continue to
  331. # use FTL while rate-limited clients are short-circuited at the same time.
  332. # For this setting, both numbers, the maximum number of queries within a given time,
  333. # and the length of the time interval (seconds) have to be specified. For instance, if
  334. # you want to set a rate limit of 1 query per hour, the option should look like
  335. # RATE_LIMIT=1/3600. The time interval is relative to when FTL has finished starting
  336. # (start of the daemon + possible delay by DELAY_STARTUP) then it will advance in
  337. # steps of the rate-limiting interval. If a client reaches the maximum number of
  338. # queries it will be blocked until the end of the current interval. This will be
  339. # logged to /var/log/pihole/FTL.log, e.g. Rate-limiting 10.0.1.39 for at least 44
  340. # seconds. If the client continues to send queries while being blocked already and
  341. # this number of queries during the blocking exceeds the limit the client will
  342. # continue to be blocked until the end of the next interval (FTL.log will contain
  343. # lines like Still rate-limiting 10.0.1.39 as it made additional 5007 queries). As
  344. # soon as the client requests less than the set limit, it will be unblocked (Ending
  345. # rate-limitation of 10.0.1.39).
  346. # Rate-limiting may be disabled altogether by setting both values to zero (this
  347. # results in the same behavior as before FTL v5.7).
  348. # How many queries are permitted...
  349. count = 1000
  350. # ... in the set interval before rate-limiting?
  351. interval = 60
  352. [dhcp]
  353. # Is the embedded DHCP server enabled?
  354. active = false
  355. # Start address of the DHCP address pool
  356. #
  357. # Possible values are:
  358. # <valid IPv4 address> or empty string (""), e.g., "192.168.0.10"
  359. start = ""
  360. # End address of the DHCP address pool
  361. #
  362. # Possible values are:
  363. # <valid IPv4 address> or empty string (""), e.g., "192.168.0.250"
  364. end = ""
  365. # Address of the gateway to be used (typically the address of your router in a home
  366. # installation)
  367. #
  368. # Possible values are:
  369. # <valid IPv4 address> or empty string (""), e.g., "192.168.0.1"
  370. router = ""
  371. # The netmask used by your Pi-hole. For directly connected networks (i.e., networks on
  372. # which the machine running Pi-hole has an interface) the netmask is optional and may
  373. # be set to an empty string (""): it will then be determined from the interface
  374. # configuration itself. For networks which receive DHCP service via a relay agent, we
  375. # cannot determine the netmask itself, so it should explicitly be specified, otherwise
  376. # Pi-hole guesses based on the class (A, B or C) of the network address.
  377. #
  378. # Possible values are:
  379. # <any valid netmask> (e.g., "255.255.255.0") or empty string ("") for
  380. # auto-discovery
  381. netmask = ""
  382. # If the lease time is given, then leases will be given for that length of time. If not
  383. # given, the default lease time is one hour for IPv4 and one day for IPv6.
  384. #
  385. # Possible values are:
  386. # The lease time can be in seconds, or minutes (e.g., "45m") or hours (e.g., "1h")
  387. # or days (like "2d") or even weeks ("1w"). You may also use "infinite" as string
  388. # but be aware of the drawbacks
  389. leaseTime = ""
  390. # Should Pi-hole make an attempt to also satisfy IPv6 address requests (be aware that
  391. # IPv6 works a whole lot different than IPv4)
  392. ipv6 = false
  393. # Enable DHCPv4 Rapid Commit Option specified in RFC 4039. Should only be enabled if
  394. # either the server is the only server for the subnet to avoid conflicts
  395. rapidCommit = false
  396. # Advertise DNS server multiple times to clients. Some devices will add their own
  397. # proprietary DNS servers to the list of DNS servers, which can cause issues with
  398. # Pi-hole. This option will advertise the Pi-hole DNS server multiple times to
  399. # clients, which should prevent this from happening.
  400. multiDNS = false
  401. # Enable logging for DHCP. This will log all relevant DHCP-related activity, including,
  402. # e.g., all the options sent to DHCP clients and the tags used to determine them (if
  403. # any). This can be useful for debugging DHCP issues. The generated output is saved to
  404. # the file specified by files.log.dnsmasq below.
  405. logging = false
  406. # Ignore unknown DHCP clients.
  407. # If this option is set, Pi-hole ignores all clients which are not explicitly
  408. # configured through dhcp.hosts. This can be useful to prevent unauthorized clients
  409. # from getting an IP address from the DHCP server.
  410. # It should be noted that this option is not a security feature, as clients can still
  411. # assign themselves an IP address and use the network. It is merely a convenience
  412. # feature to prevent unknown clients from getting a valid IP configuration assigned
  413. # automatically.
  414. # Note that you will need to configure new clients manually in dhcp.hosts before they
  415. # can use the network when this feature is enabled.
  416. ignoreUnknownClients = false
  417. # Per host parameters for the DHCP server. This allows a machine with a particular
  418. # hardware address to be always allocated the same hostname, IP address and lease time
  419. # or to specify static DHCP leases
  420. #
  421. # Possible values are:
  422. # Array of static leases each on in one of the following forms:
  423. # "[<hwaddr>][,id:<client_id>|*][,set:<tag>][,tag:<tag>][,<ipaddr>][,<hostname>][,<lease_time>][,ignore]"
  424. hosts = []
  425. [ntp.ipv4]
  426. # Should FTL act as network time protocol (NTP) server (IPv4)?
  427. active = true
  428. # IPv4 address to listen on for NTP requests
  429. #
  430. # Possible values are:
  431. # <valid IPv4 address> or empty string ("") for wildcard (0.0.0.0)
  432. address = ""
  433. [ntp.ipv6]
  434. # Should FTL act as network time protocol (NTP) server (IPv6)?
  435. active = true
  436. # IPv6 address to listen on for NTP requests
  437. #
  438. # Possible values are:
  439. # <valid IPv6 address> or empty string ("") for wildcard (::)
  440. address = ""
  441. [ntp.sync]
  442. # Should FTL try to synchronize the system time with an upstream NTP server?
  443. active = true
  444. # NTP upstream server to sync with, e.g., "pool.ntp.org". Note that the NTP server
  445. # should be located as close as possible to you in order to minimize the time offset
  446. # possibly introduced by different routing paths.
  447. #
  448. # Possible values are:
  449. # valid NTP upstream server
  450. server = "pool.ntp.org"
  451. # Interval in seconds between successive synchronization attempts with the NTP server
  452. interval = 3600
  453. # Number of NTP syncs to perform and average before updating the system time
  454. count = 8
  455. [ntp.sync.rtc]
  456. # Should FTL update a real-time clock (RTC) if available?
  457. set = false
  458. # Path to the RTC device to update. Leave empty for auto-discovery
  459. #
  460. # Possible values are:
  461. # Path to the RTC device, e.g., "/dev/rtc0"
  462. device = ""
  463. # Should the RTC be set to UTC?
  464. utc = true
  465. [resolver]
  466. # Should FTL try to resolve IPv4 addresses to hostnames?
  467. resolveIPv4 = true
  468. # Should FTL try to resolve IPv6 addresses to hostnames?
  469. resolveIPv6 = true
  470. # Control whether FTL should use the fallback option to try to obtain client names from
  471. # checking the network table. This behavior can be disabled with this option.
  472. # Assume an IPv6 client without a host names. However, the network table knows -
  473. # though the client's MAC address - that this is the same device where we have a host
  474. # name for another IP address (e.g., a DHCP server managed IPv4 address). In this
  475. # case, we use the host name associated to the other address as this is the same
  476. # device.
  477. networkNames = true
  478. # With this option, you can change how (and if) hourly PTR requests are made to check
  479. # for changes in client and upstream server hostnames.
  480. #
  481. # Possible values are:
  482. # - "IPV4_ONLY"
  483. # Do hourly PTR lookups only for IPv4 addresses. This is the new default since
  484. # Pi-hole FTL v5.3.2. It should resolve issues with more and more very
  485. # short-lived PE IPv6 addresses coming up in a lot of networks.
  486. # - "ALL"
  487. # Do hourly PTR lookups for all addresses. This was the default until FTL
  488. # v5.3(.1). It has been replaced as it can create a lot of PTR queries for those
  489. # with many IPv6 addresses in their networks.
  490. # - "UNKNOWN"
  491. # Only resolve unknown hostnames. Already existing hostnames are never refreshed,
  492. # i.e., there will be no PTR queries made for clients where hostnames are known.
  493. # This also means that known hostnames will not be updated once known.
  494. # - "NONE"
  495. # Don't do any hourly PTR lookups. This means we look host names up exactly once
  496. # (when we first see a client) and never again. You may miss future changes of
  497. # host names.
  498. refreshNames = "IPV4_ONLY"
  499. [database]
  500. # Should FTL load information from the database on startup to be aware of the most
  501. # recent history?
  502. DBimport = true
  503. # How long should queries be stored in the database [days]?
  504. # Setting this value to 0 will disable the database.
  505. maxDBdays = 91
  506. # How often do we store queries in FTL's database [seconds]?
  507. DBinterval = 60
  508. # Should FTL enable Write-Ahead Log (WAL) mode for the on-disk query database
  509. # (configured via files.database)?
  510. # It is recommended to leave this setting enabled for performance reasons. About the
  511. # only reason to disable WAL mode is if you are experiencing specific issues with it,
  512. # e.g., when using a database that is accessed from multiple hosts via a network
  513. # share. When this setting is disabled, FTL will use SQLite3's default journal mode
  514. # (rollback journal in DELETE mode).
  515. useWAL = true
  516. [database.network]
  517. # Should FTL analyze the local ARP cache? When disabled, client identification and the
  518. # network table will stop working reliably.
  519. parseARPcache = true
  520. # How long should IP addresses be kept in the network_addresses table [days]? IP
  521. # addresses (and associated host names) older than the specified number of days are
  522. # removed to avoid dead entries in the network overview table.
  523. expire = 91
  524. [webserver]
  525. # On which domain is the web interface served?
  526. #
  527. # Possible values are:
  528. # <valid domain>
  529. domain = "pi.hole"
  530. # Webserver access control list (ACL) allowing for restrictions to be put on the list
  531. # of IP addresses which have access to the web server. The ACL is a comma separated
  532. # list of IP subnets, where each subnet is prepended by either a - or a + sign. A plus
  533. # sign means allow, where a minus sign means deny. If a subnet mask is omitted, such
  534. # as -1.2.3.4, this means to deny only that single IP address. If this value is not
  535. # set (empty string), all accesses are allowed. Otherwise, the default setting is to
  536. # deny all accesses. On each request the full list is traversed, and the last (!)
  537. # match wins. IPv6 addresses may be specified in CIDR-form [a:b::c]/64.
  538. #
  539. # Example 1: acl = "+127.0.0.1,+[::1]"
  540. # ---> deny all access, except from 127.0.0.1 and ::1,
  541. # Example 2: acl = "+192.168.0.0/16"
  542. # ---> deny all accesses, except from the 192.168.0.0/16 subnet,
  543. # Example 3: acl = "+[::]/0" ---> allow only IPv6 access.
  544. #
  545. # Possible values are:
  546. # <valid ACL>
  547. acl = ""
  548. # Ports to be used by the webserver.
  549. # Comma-separated list of ports to listen on. It is possible to specify an IP address
  550. # to bind to. In this case, an IP address and a colon must be prepended to the port
  551. # number. For example, to bind to the loopback interface on port 80 (IPv4) and to all
  552. # interfaces port 8080 (IPv4), use "127.0.0.1:80,8080". "[::]:80" can be used to
  553. # listen to IPv6 connections to port 80. IPv6 addresses of network interfaces can be
  554. # specified as well, e.g. "[::1]:80" for the IPv6 loopback interface. [::]:80 will
  555. # bind to port 80 IPv6 only.
  556. # In order to use port 80 for all interfaces, both IPv4 and IPv6, use either the
  557. # configuration "80,[::]:80" (create one socket for IPv4 and one for IPv6 only), or
  558. # "+80" (create one socket for both, IPv4 and IPv6). The '+' notation to use IPv4 and
  559. # IPv6 will only work if no network interface is specified. Depending on your
  560. # operating system version and IPv6 network environment, some configurations might not
  561. # work as expected, so you have to test to find the configuration most suitable for
  562. # your needs. In case "+80" does not work for your environment, you need to use
  563. # "80,[::]:80".
  564. # If the port is TLS/SSL, a letter 's' (secure) must be appended, for example,
  565. # "80,443s" will open port 80 and port 443, and connections on port 443 will be
  566. # encrypted. For non-encrypted ports, it is allowed to append letter 'r' (as in
  567. # redirect). Redirected ports will redirect all their traffic to the first configured
  568. # SSL port. For example, if webserver.port is "80r,443s", then all HTTP traffic coming
  569. # at port 80 will be redirected to HTTPS port 443.
  570. # When specifying 'o' (optional) behind a port, inability to use this port is not
  571. # considered an error. For instance, specifying "80o,8080o" will allow the webserver
  572. # to listen on either 80, 8080, both or even none of the two ports. This flag may be
  573. # combined with 'r' and 's' like "80or,443os,8080,4443s" (80 redirecting to SSL if
  574. # available, 443 encrypted if available, 8080 mandatory and unencrypted, 4443
  575. # mandatory and encrypted).
  576. # If this value is not set (empty string), the web server will not be started and,
  577. # hence, the API will not be available.
  578. #
  579. # Possible values are:
  580. # comma-separated list of <[ip_address:]port>
  581. port = "__PORT_WEB__"
  582. # Maximum number of worker threads allowed.
  583. # The Pi-hole web server handles each incoming connection in a separate thread.
  584. # Therefore, the value of this option is effectively the number of concurrent HTTP
  585. # connections that can be handled. Any other connections are queued until they can be
  586. # processed by a unoccupied thread.
  587. # The total number of threads you see may be lower than the configured value as
  588. # threads are only created when needed due to incoming connections.
  589. # The value 0 means the number of threads is 50 (as per default settings of CivetWeb)
  590. # for backwards-compatible behavior.
  591. threads = 50
  592. # Additional HTTP headers added to the web server responses.
  593. # The headers are added to all responses, including those for the API.
  594. # Note about the default additional headers:
  595. # - Content-Security-Policy: [...] 'unsafe-inline' is both required by Chart.js
  596. # styling some elements directly, and index.html containing some inlined Javascript
  597. # code.
  598. # - X-Frame-Options: DENY: The page can not be displayed in a frame, regardless of the
  599. # site attempting to do so.
  600. # - X-Xss-Protection: 0: Disables XSS filtering in browsers that support it. This
  601. # header is usually enabled by default in browsers, and is not recommended as it can
  602. # hurt the security of the site.
  603. # (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection).
  604. # - X-Content-Type-Options: nosniff: Marker used by the server to indicate that the
  605. # MIME types advertised in the Content-Type headers should not be changed and be
  606. # followed. This allows to opt-out of MIME type sniffing, or, in other words, it is a
  607. # way to say that the webmasters knew what they were doing. Site security testers
  608. # usually expect this header to be set.
  609. # - Referrer-Policy: strict-origin-when-cross-origin: A referrer will be sent for
  610. # same-site origins, but cross-origin requests will send no referrer information.
  611. # The latter four headers are set as expected by https://securityheaders.io
  612. #
  613. # Possible values are:
  614. # array of HTTP headers
  615. headers = [
  616. "Content-Security-Policy: default-src 'self' 'unsafe-inline';",
  617. "X-Frame-Options: DENY",
  618. "X-XSS-Protection: 0",
  619. "X-Content-Type-Options: nosniff",
  620. "Referrer-Policy: strict-origin-when-cross-origin"
  621. ]
  622. [webserver.session]
  623. # Session timeout in seconds. If a session is inactive for more than this time, it will
  624. # be terminated. Sessions are continuously refreshed by the web interface, preventing
  625. # sessions from timing out while the web interface is open.
  626. # This option may also be used to make logins persistent for long times, e.g. 86400
  627. # seconds (24 hours), 604800 seconds (7 days) or 2592000 seconds (30 days). Note that
  628. # the total number of concurrent sessions is limited so setting this value too high
  629. # may result in users being rejected and unable to log in if there are already too
  630. # many sessions active.
  631. timeout = 1800
  632. # Should Pi-hole backup and restore sessions from the database? This is useful if you
  633. # want to keep your sessions after a restart of the web interface.
  634. restore = true
  635. [webserver.tls]
  636. # Path to the TLS (SSL) certificate file. All directories along the path must be
  637. # readable and accessible by the user running FTL (typically 'pihole'). This option is
  638. # only required when at least one of webserver.port is TLS. The file must be in PEM
  639. # format, and it must have both, private key and certificate (the *.pem file created
  640. # must contain a 'CERTIFICATE' section as well as a 'RSA PRIVATE KEY' section).
  641. # The *.pem file can be created using
  642. # cp server.crt server.pem
  643. # cat server.key >> server.pem
  644. # if you have these files instead
  645. #
  646. # Possible values are:
  647. # <valid TLS certificate file (*.pem)>
  648. cert = "/etc/pihole/tls.pem"
  649. [webserver.paths]
  650. # Server root on the host
  651. #
  652. # Possible values are:
  653. # <valid path>
  654. webroot = "__INSTALL_DIR__/web"
  655. # Sub-directory of the root containing the web interface
  656. #
  657. # Possible values are:
  658. # <valid subpath>, both slashes are needed!
  659. webhome = "__PATH__/"
  660. [webserver.interface]
  661. # Should the web interface use the boxed layout?
  662. boxed = true
  663. # Theme used by the Pi-hole web interface
  664. #
  665. # Possible values are:
  666. # - "default-auto"
  667. # Pi-hole auto
  668. # - "default-light"
  669. # Pi-hole day
  670. # - "default-dark"
  671. # Pi-hole midnight
  672. # - "default-darker"
  673. # Pi-hole deep-midnight
  674. # - "high-contrast"
  675. # High-contrast light
  676. # - "high-contrast-dark"
  677. # High-contrast dark
  678. # - "lcars"
  679. # Star Trek LCARS
  680. theme = "default-auto"
  681. [webserver.api]
  682. # Number of concurrent sessions allowed for the API. If the number of sessions exceeds
  683. # this value, no new sessions will be allowed until the number of sessions drops due
  684. # to session expiration or logout. Note that the number of concurrent sessions is
  685. # irrelevant if authentication is disabled as no sessions are used in this case.
  686. max_sessions = 16
  687. # Should FTL prettify the API output (add extra spaces, newlines and indentation)?
  688. prettyJSON = false
  689. # API password hash
  690. #
  691. # Possible values are:
  692. # <valid Pi-hole password hash>
  693. pwhash = ""
  694. # Pi-hole 2FA TOTP secret. When set to something different than "", 2FA authentication
  695. # will be enforced for the API and the web interface. This setting is write-only, you
  696. # can not read the secret back.
  697. #
  698. # Possible values are:
  699. # <valid TOTP secret (20 Bytes in Base32 encoding)>
  700. totp_secret = ""
  701. # Pi-hole application password.
  702. # After you turn on two-factor (2FA) verification and set up an Authenticator app, you
  703. # may run into issues if you use apps or other services that don't support two-step
  704. # verification. In this case, you can create and use an app password to sign in. An
  705. # app password is a long, randomly generated password that can be used instead of your
  706. # regular password + TOTP token when signing in to the API. The app password can be
  707. # generated through the API and will be shown only once. You can revoke the app
  708. # password at any time. If you revoke the app password, be sure to generate a new one
  709. # and update your app with the new password.
  710. #
  711. # Possible values are:
  712. # <valid Pi-hole password hash>
  713. app_pwhash = ""
  714. # Should application password API sessions be allowed to modify config settings?
  715. # Setting this to true allows third-party applications using the application password
  716. # to modify settings, e.g., the upstream DNS servers, DHCP server settings, or
  717. # changing passwords. This setting should only be enabled if really needed and only if
  718. # you trust the applications using the application password.
  719. app_sudo = false
  720. # Should FTL create a temporary CLI password? This password is stored in clear in
  721. # /etc/pihole and can be used by the CLI (pihole ... commands) to authenticate
  722. # against the API. Note that the password is only valid for the current session and
  723. # regenerated on each FTL restart. Sessions initiated with this password cannot modify
  724. # the Pi-hole configuration (change passwords, etc.) for security reasons but can
  725. # still use the API to query data and manage lists.
  726. cli_pw = true
  727. # Array of clients to be excluded from certain API responses (regex):
  728. # - Query Log (/api/queries)
  729. # - Top Clients (/api/stats/top_clients)
  730. # This setting accepts both IP addresses (IPv4 and IPv6) as well as hostnames.
  731. # Note that backslashes "\" need to be escaped, i.e. "\\" in this setting
  732. #
  733. # Example: [ "^192\\.168\\.2\\.56$", "^fe80::341:[0-9a-f]*$", "^localhost$" ]
  734. #
  735. # Possible values are:
  736. # array of regular expressions describing clients
  737. excludeClients = []
  738. # Array of domains to be excluded from certain API responses (regex):
  739. # - Query Log (/api/queries)
  740. # - Top Clients (/api/stats/top_domains)
  741. # Note that backslashes "\" need to be escaped, i.e. "\\" in this setting
  742. #
  743. # Example: [ "(^|\\.)\\.google\\.de$", "\\.pi-hole\\.net$" ]
  744. #
  745. # Possible values are:
  746. # array of regular expressions describing domains
  747. excludeDomains = []
  748. # How much history should be imported from the database and returned by the API
  749. # [seconds]? (max 24*60*60 = 86400)
  750. maxHistory = 86400
  751. # Up to how many clients should be returned in the activity graph endpoint
  752. # (/api/history/clients)?
  753. # This setting can be overwritten at run-time using the parameter N. Setting this to 0
  754. # will always send all clients. Be aware that this may be challenging for the GUI if
  755. # you have many (think > 1.000 clients) in your network
  756. maxClients = 10
  757. # How should the API compute the most active clients? If set to true, the API will
  758. # return the clients with the most queries globally (within 24 hours). If set to
  759. # false, the API will return the clients with the most queries per time slot
  760. # individually.
  761. client_history_global_max = true
  762. # Allow destructive API calls (e.g. deleting all queries, powering off the system, ...)
  763. allow_destructive = true
  764. [webserver.api.temp]
  765. # Which upper temperature limit should be used by Pi-hole? Temperatures above this
  766. # limit will be shown as "hot". The number specified here is in the unit defined below
  767. limit = 60.000000
  768. # Which temperature unit should be used for temperatures processed by FTL?
  769. #
  770. # Possible values are:
  771. # - "C"
  772. # Celsius
  773. # - "F"
  774. # Fahrenheit
  775. # - "K"
  776. # Kelvin
  777. unit = "C"
  778. [files]
  779. # The file which contains the PID of FTL's main process.
  780. #
  781. # Possible values are:
  782. # <any writable file>
  783. pid = "/run/pihole-FTL.pid"
  784. # The location of FTL's long-term database
  785. #
  786. # Possible values are:
  787. # <any FTL database>
  788. database = "/etc/pihole/pihole-FTL.db"
  789. # The location of Pi-hole's gravity database
  790. #
  791. # Possible values are:
  792. # <any Pi-hole gravity database>
  793. gravity = "/etc/pihole/gravity.db"
  794. # A temporary directory where Pi-hole can store files during gravity updates. This
  795. # directory must be writable by the user running gravity (typically pihole).
  796. #
  797. # Possible values are:
  798. # <any existing world-writable writable directory>
  799. gravity_tmp = "/tmp"
  800. # The database containing MAC -> Vendor information for the network table
  801. #
  802. # Possible values are:
  803. # <any Pi-hole macvendor database>
  804. macvendor = "/etc/pihole/macvendor.db"
  805. # The old config file of Pi-hole used before v6.0
  806. #
  807. # Possible values are:
  808. # <any Pi-hole setupVars file>
  809. setupVars = "/etc/pihole/setupVars.conf"
  810. # An optional file containing a pcap capture of the network traffic. This file is used
  811. # for debugging purposes only. If you don't know what this is, you don't need it.
  812. # Setting this to an empty string disables pcap recording. The file must be writable
  813. # by the user running FTL (typically pihole). Failure to write to this file will
  814. # prevent the DNS resolver from starting. The file is appended to if it already
  815. # exists.
  816. #
  817. # Possible values are:
  818. # <any writable pcap file>
  819. pcap = ""
  820. [files.log]
  821. # The location of FTL's log file
  822. #
  823. # Possible values are:
  824. # <any writable file>
  825. ftl = "/var/log/pihole/FTL.log"
  826. # The log file used by the embedded dnsmasq DNS server
  827. #
  828. # Possible values are:
  829. # <any writable file>
  830. dnsmasq = "/var/log/pihole/pihole.log"
  831. # The log file used by the webserver
  832. #
  833. # Possible values are:
  834. # <any writable file>
  835. webserver = "/var/log/pihole/webserver.log"
  836. [misc]
  837. # Using privacy levels you can specify which level of detail you want to see in your
  838. # Pi-hole statistics. Changing this setting will trigger a restart of FTL
  839. #
  840. # Possible values are:
  841. # - 0
  842. # Don't hide anything, all statistics are available.
  843. # - 1
  844. # Hide domains. This setting disables Top Domains and Top Ads
  845. # - 2
  846. # Hide domains and clients. This setting disables Top Domains, Top Ads, Top
  847. # Clients and Clients over time.
  848. # - 3
  849. # Anonymize everything. This setting disabled almost any statistics and query
  850. # analysis. There will be no long-term database logging and no Query Log. You
  851. # will also loose most regex features.
  852. privacylevel = 0
  853. # During startup, in some configurations, network interfaces appear only late during
  854. # system startup and are not ready when FTL tries to bind to them. Therefore, you may
  855. # want FTL to wait a given amount of time before trying to start the DNS revolver.
  856. # This setting takes any integer value between 0 and 300 seconds. To prevent delayed
  857. # startup while the system is already running and FTL is restarted, the delay only
  858. # takes place within the first 180 seconds (hard-coded) after booting.
  859. delay_startup = 0
  860. # Set niceness of pihole-FTL. Defaults to -10 and can be disabled altogether by setting
  861. # a value of -999. The nice value is an attribute that can be used to influence the
  862. # CPU scheduler to favor or disfavor a process in scheduling decisions. The range of
  863. # the nice value varies across UNIX systems. On modern Linux, the range is -20 (high
  864. # priority = not very nice to other processes) to +19 (low priority).
  865. nice = -10
  866. # Should FTL translate its own stack addresses into code lines during the bug
  867. # backtrace? This improves the analysis of crashed significantly. It is recommended to
  868. # leave the option enabled. This option should only be disabled when addr2line is
  869. # known to not be working correctly on the machine because, in this case, the
  870. # malfunctioning addr2line can prevent from generating any backtrace at all.
  871. addr2line = true
  872. # Should FTL load additional dnsmasq configuration files from /etc/dnsmasq.d/?
  873. # Warning: This is an advanced setting and should only be used with care.
  874. # Incorrectly formatted or config files specifying options which can only be defined
  875. # once can result in conflicts with the automatic configuration of Pi-hole (see
  876. # /etc/pihole/dnsmasq.conf) and may stop DNS resolution from working.
  877. etc_dnsmasq_d = false
  878. # Additional lines to inject into the generated dnsmasq configuration.
  879. # Warning: This is an advanced setting and should only be used with care. Incorrectly
  880. # formatted or duplicated lines as well as lines conflicting with the automatic
  881. # configuration of Pi-hole can break the embedded dnsmasq and will stop DNS resolution
  882. # from working.
  883. # Use this option with extra care.
  884. #
  885. # Possible values are:
  886. # array of valid dnsmasq config line options
  887. dnsmasq_lines = []
  888. # Log additional information about queries and replies to pihole.log
  889. # When this setting is enabled, the log has extra information at the start of each
  890. # line. This consists of a serial number which ties together the log lines associated
  891. # with an individual query, and the IP address of the requestor. This setting is only
  892. # effective if dns.queryLogging is enabled, too. This option is only useful for
  893. # debugging and is not recommended for normal use.
  894. extraLogging = false
  895. # Put configuration into read-only mode. This will prevent any changes to the
  896. # configuration file via the API or CLI. This setting useful when a configuration is
  897. # to be forced/modified by some third-party application (like infrastructure-as-code
  898. # providers) and should not be changed by any means.
  899. readOnly = false
  900. [misc.check]
  901. # Pi-hole is very lightweight on resources. Nevertheless, this does not mean that you
  902. # should run Pi-hole on a server that is otherwise extremely busy as queuing on the
  903. # system can lead to unnecessary delays in DNS operation as the system becomes less
  904. # and less usable as the system load increases because all resources are permanently
  905. # in use. To account for this, FTL regularly checks the system load. To bring this to
  906. # your attention, FTL warns about excessive load when the 15 minute system load
  907. # average exceeds the number of cores.
  908. # This check can be disabled with this setting.
  909. load = true
  910. # FTL stores history in shared memory to allow inter-process communication with forked
  911. # dedicated TCP workers. If FTL runs out of memory, it cannot continue to work as
  912. # queries cannot be analyzed any further. Hence, FTL checks if enough shared memory is
  913. # available on your system and warns you if this is not the case.
  914. # By default, FTL warns if the shared-memory usage exceeds 90%. You can set any
  915. # integer limit between 0 to 100 (interpreted as percentages) where 0 means that
  916. # checking of shared-memory usage is disabled.
  917. shmem = 90
  918. # FTL stores its long-term history in a database file on disk. Furthermore, FTL stores
  919. # log files. By default, FTL warns if usage of the disk holding any crucial file
  920. # exceeds 90%. You can set any integer limit between 0 to 100 (interpreted as
  921. # percentages) where 0 means that checking of disk usage is disabled.
  922. disk = 90
  923. [debug]
  924. # Print debugging information about database actions. This prints performed SQL
  925. # statements as well as some general information such as the time it took to store the
  926. # queries and how many have been saved to the database.
  927. database = false
  928. # Prints a list of the detected interfaces on the startup of pihole-FTL. Also, prints
  929. # whether these interfaces are IPv4 or IPv6 interfaces.
  930. networking = false
  931. # Print information about shared memory locks. Messages will be generated when waiting,
  932. # obtaining, and releasing a lock.
  933. locks = false
  934. # Print extensive query information (domains, types, replies, etc.). This has always
  935. # been part of the legacy debug mode of pihole-FTL.
  936. queries = false
  937. # Print flags of queries received by the DNS hooks. Only effective when DEBUG_QUERIES
  938. # is enabled as well.
  939. flags = false
  940. # Print information about shared memory buffers. Messages are either about creating or
  941. # enlarging shmem objects or string injections.
  942. shmem = false
  943. # Print information about garbage collection (GC): What is to be removed, how many have
  944. # been removed and how long did GC take.
  945. gc = false
  946. # Print information about ARP table processing: How long did parsing take, whether read
  947. # MAC addresses are valid, and if the macvendor.db file exists.
  948. arp = false
  949. # Controls if FTLDNS should print extended details about regex matching into FTL.log.
  950. regex = false
  951. # Print extra debugging information concerning API calls. This includes the request,
  952. # the request parameters, and the internal details about how the algorithms decide
  953. # which data to present and in what form. This very verbose output should only be used
  954. # when debugging specific API issues and can be helpful, e.g., when a client cannot
  955. # connect due to an obscure API error. Furthermore, this setting enables logging of
  956. # all API requests (auth log) and details about user authentication attempts.
  957. api = false
  958. # Print extra debugging information about TLS connections. This includes the TLS
  959. # version, the cipher suite, the certificate chain and much more. This very verbose
  960. # output should only be used when debugging specific TLS issues and can be helpful,
  961. # e.g., when a client cannot connect due to an obscure TLS error as modern browsers do
  962. # not provide much information about the underlying TLS connection and most often give
  963. # only very generic error messages without much/any underlying technical information.
  964. tls = false
  965. # Print information about overTime memory operations, such as initializing or moving
  966. # overTime slots.
  967. overtime = false
  968. # Print information about status changes for individual queries. This can be useful to
  969. # identify unexpected unknown queries.
  970. status = false
  971. # Print information about capabilities granted to the pihole-FTL process. The current
  972. # capabilities are printed on receipt of SIGHUP, i.e., the current set of capabilities
  973. # can be queried without restarting pihole-FTL (by setting DEBUG_CAPS=true and
  974. # thereafter sending killall -HUP pihole-FTL).
  975. caps = false
  976. # Print information about DNSSEC activity
  977. dnssec = false
  978. # FTL uses dynamically allocated vectors for various tasks. This config option enables
  979. # extensive debugging information such as information about allocation, referencing,
  980. # deletion, and appending.
  981. vectors = false
  982. # Extensive information about hostname resolution like which DNS servers are used in
  983. # the first and second hostname resolving tries (only affecting internally generated
  984. # PTR queries).
  985. resolver = false
  986. # Print debugging information about received EDNS(0) data.
  987. edns0 = false
  988. # Log various important client events such as change of interface (e.g., client
  989. # switching from WiFi to wired or VPN connection), as well as extensive reporting
  990. # about how clients were assigned to its groups.
  991. clients = false
  992. # Log information related to alias-client processing.
  993. aliasclients = false
  994. # Log information regarding FTL's embedded event handling queue.
  995. events = false
  996. # Log information about script helpers, e.g., due to dhcp-script.
  997. helper = false
  998. # Print config parsing details
  999. config = false
  1000. # Debug monitoring of /etc/pihole filesystem events
  1001. inotify = false
  1002. # Debug monitoring of the webserver (CivetWeb) events
  1003. webserver = false
  1004. # Temporary flag that may print additional information. This debug flag is meant to be
  1005. # used whenever needed for temporary investigations. The logged content may change
  1006. # without further notice at any time.
  1007. extra = false
  1008. # Reserved debug flag
  1009. reserved = false
  1010. # Print information about NTP synchronization
  1011. ntp = false
  1012. # Print information about netlink communication and parsing
  1013. netlink = false
  1014. # Set all debug flags at once. This is a convenience option to enable all debug flags
  1015. # at once. Note that this option is not persistent, setting it to true will enable all
  1016. # *remaining* debug flags but unsetting it will disable *all* debug flags.
  1017. all = false
  1018. # Configuration statistics:
  1019. # 153 total entries out of which 96 entries are default
  1020. # --> 57 entries are modified
  1021. # 3 entries are forced through environment:
  1022. # - misc.nice
  1023. # - misc.check.shmem
  1024. # - debug.api