{"id":13550706,"url":"https://github.com/Soundium/Pi_hole_configuration_ver_2","last_synced_at":"2025-04-03T00:34:42.734Z","repository":{"id":65584147,"uuid":"251346056","full_name":"Soundium/Pi_hole_configuration_ver_2","owner":"Soundium","description":"How-to: Pi-Hole + DNSCrypt + Anonymized DNS + Cloudflare DoH Setup on Raspberry Pi 4","archived":false,"fork":false,"pushed_at":"2020-04-01T13:52:57.000Z","size":94,"stargazers_count":12,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-11-03T20:36:55.377Z","etag":null,"topics":["adblock","annonymized","cloudflare-dns","dnscrypt-proxy","how-to","howto-tutorial","pi-hole","pi-hole-private-dns","privacy","raspberry-pi-4"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Soundium.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null},"funding":{"patreon":"soundium"}},"created_at":"2020-03-30T15:23:58.000Z","updated_at":"2024-08-11T10:59:34.000Z","dependencies_parsed_at":"2023-01-30T16:25:11.573Z","dependency_job_id":null,"html_url":"https://github.com/Soundium/Pi_hole_configuration_ver_2","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Soundium%2FPi_hole_configuration_ver_2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Soundium%2FPi_hole_configuration_ver_2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Soundium%2FPi_hole_configuration_ver_2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Soundium%2FPi_hole_configuration_ver_2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Soundium","download_url":"https://codeload.github.com/Soundium/Pi_hole_configuration_ver_2/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246916734,"owners_count":20854511,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["adblock","annonymized","cloudflare-dns","dnscrypt-proxy","how-to","howto-tutorial","pi-hole","pi-hole-private-dns","privacy","raspberry-pi-4"],"created_at":"2024-08-01T12:01:36.454Z","updated_at":"2025-04-03T00:34:37.719Z","avatar_url":"https://github.com/Soundium.png","language":null,"funding_links":["https://patreon.com/soundium"],"categories":["Others"],"sub_categories":[],"readme":"               \n## How-to: Pi-Hole + DNSCrypt + Anonymized DNS + Cloudflare DoH Setup on Raspberry Pi 4 \n          \nFollow my instructions and make your setup **trouble-free!**\n\nWant to report any issue? Feel free to file an \u003ca href=\"https://github.com/Soundium/Pi_hole_configuration_ver_2/issues\"\u003eissue\u003c/a\u003e.\n\n***\n**Additional Information**\n\n**dnscrypt-proxy** is a flexible DNS proxy. It runs on your computer or router, and can locally block unwanted content, reveal where your devices are silently sending data to, make applications feel faster by caching DNS responses, and improve security and confidentiality by communicating to upstream DNS servers over secure channels.\n\n**Anonymized DNS** is a lightweight alternative to Tor and SOCKS proxies, dedicated to DNS traffic. They hide the client IP address to DNS resolvers, providing anonymity in addition to confidentiality and integrity.\n\nDNS Anonymization is only compatible with servers supporting the DNSCrypt protocol.\n\n***     \n### Donation\nAll donations are welcome and will help me to maintain this project. Please use \"**Sponsor**\" button on the top of this page.\n***\n### My hardware\n- \u003ca href=\"https://www.raspberrypi.org/products/raspberry-pi-4-model-b/\"\u003eRaspberry Pi 4 Computer Modell B, 4GB RAM\u003c/a\u003e\n- \u003ca href=\"https://www.raspberrypi.org/products/poe-hat/\"\u003ePower over Ethernet (PoE) HAT for Raspberry Pi 4 \u0026 3B+, Rev. 1.01\u003c/a\u003e\n- \u003ca href=\"https://www.amazon.de/SanDisk-SDSQXCG-032G-GN6MA-Extreme-Adapter-Schwarz/dp/B06XYHN68L\"\u003eSanDisk Extreme Pro microSDHC A1 UHS-I U3 Card + Adapter 32GB\u003c/a\u003e\n- \u003ca href=\"https://www.jacob.de/produkte/aluminium-gehaeuse-fuer-rpi4-aluc-si-artnr-6009241.html\"\u003eAluminium Gehäuse für Raspberry Pi 4 Modell B, silber\u003c/a\u003e\n\n### Important informaiton\nThe Raspberry Pi uses an SD card for local storage, and as such, it's essential to be smart about the SD card you use. I suggest at least a 32GB card, and for a few more dollars, you can get a high endurance or extreme pro card. I like the SanDisk Extreme Pro 32GB micro SDHC card for $12. You won't need the full 32GB of storage, but this allows for additional write locations that can further extend the life of the card. \n\n***\n### Raspberry Pi 4 Installation\n\n 1. Download the latest version of \u003ca href=\"https://www.raspberrypi.org/downloads/raspbian/\"\u003eRaspbian Buster with desktop and recommended software\u003c/a\u003e. Do NOT unzip it.\n\n2. Download and install \u003ca href=\"https://www.balena.io/etcher/\"\u003eEtcher.io\u003c/a\u003e, which we will use to write the Raspbian Buster image to the SD card. There are both PC and Mac versions.\n\n3. Connect your card reader and insert the microSD card. Warning: contents will be overwritten!\n\n4. Start Etcher, click \"Select Image\" and find the Raspbian Buster zip file you downloaded.\n\n5. Click \"Flash!\" and wait for the zip to be written to the memory card and the validation to complete. If an error occurs, make sure the card reader/card is not locked. If it's not locked, possibly the download is corrupted or not complete. Try and re-download the Raspbian Buster zip. \n\n**Note:** If you are doing this on a Windows computer, you may get a pop-up about needing to format a drive. This is erroneous, dismiss it and click Cancel.\n\n7. There is a small Fat32 partition in which we need to create a zero byte file called ssh. \n  - **On Windows**, open a command prompt, CD to the Fat32 partition and enter the following command (ignore the output error..that is expected). If you don't see a drive letter associated with the Fat32 partition, open Disk Manager and assign it a letter. Enter:\n\n```\n.\u003essh\n```\n\n- **On a Mac computer** CD to the Fat32 partition (e.g. cd /Volumes/boot) and type: **touch ssh**\n\n9. Cleanly unmount the microSD card. Yes, don't pull it out! Insert the microSD card into the Raspberry Pi. \n\n10. Connect your Raspberry Pi to a suitable power source. Since there's no power switch, it will start to immediately boot. \n\n- If you have a monitor and keyboard attached when booting the first time, a helpful GUI wizard will appear to walk you through the configuration of items such as locale, keyboard, timezone, new password, software updates, etc. \n\n- If you are doing the setup 'headless', wait a couple of minutes for the system to boot. Using a network scanning app find your \"Raspberry Pi\" IP. Or if you get lucky, you can open a terminal and type **ping raspberry.pi** and see if it responds.\n\n11. SSH into the Raspberry Pi as user '**pi**' and open the configuration tool (default password is **raspberry**):\n\n```\nssh pi@RaspberryIP\nsudo raspi-config\n```\n12. At a minimum, consider configuring the following items with the tool. If you ran through the configuration with the desktop GUI using the keyboard and monitor, most of this would have already been done. \n\n- Change password (menu 1): very important\n- Network options (menu 2): Change hostname (optional) \n- Boot options (menu 3): console autologin (optional, bad for security, good for ease of use)\n- Localisation options (menu 4): keyboard layout, timezone (important) \n- Interface options (menu 5): Enable ssh\n\n13. Next, we should configure the Raspberry Pi for a static IP address. You can do this two ways. \n- One, create a reservation in your router (**prefered**)\n\n- or we can configure a static IP directly in the RPi. If you don't want to go the router route, enter the following command:\n```\nsudo nano dhcpcd.conf\n```\nUncomment the line under # Example static IP configuration and fill in the proper IPs. You don't need an IPv6 address so that that line can be left commented. \n\nExample:\n```\ninterface eth0\nstatic ip_address=192.168.1.11/24\nstatic routers=192.168.1.254\nstatic domain_name_servers=192.168.1.2\n```\nSave the configuration file and exit nano.\n```\nCTRL + X then Y and Enter\n```\n14. Now we need to update all of the packages if you haven't done so during the desktop GUI configuration process. Type:\n```\nsudo apt-get update\nsudo apt-get dist-upgrade\n```\nWait for the updates to complete. Reboot after the updates, so type **sudo reboot**.\n\n15. To be more secure and get automated updates, we will install:\n\n- unattended-upgrades\n```\nsudo apt-get install unattended-upgrades\nsudo nano /etc/apt/apt.conf.d/50unattended-upgrades\n```\nAdd the following two lines just after the origin-Debian section, and comment out the Debian lines. \n```\n\"origin=Raspbian,codename=${distro_codename},label=Raspbian\";\n\"origin=Raspberry Pi Foundation,codename=${distro_codename},label=Raspberry Pi Foundation\";\n```\nSave the configuration file and exit nano.\n```\nCTRL + X then Y and Enter\n```\n- auto-upgrades\n```\nsudo nano /etc/apt/apt.conf.d/20auto-upgrades\n```\nDelete the existing lines and paste this in:\n```\nAPT::Periodic::Update-Package-Lists \"1\";\nAPT::Periodic::Download-Upgradeable-Packages \"1\";\nAPT::Periodic::Unattended-Upgrade \"1\";\nAPT::Periodic::Verbose \"1\";\nAPT::Periodic::AutocleanInterval \"7\";\n```\nSave the configuration file and exit nano.\n```\nCTRL + X then Y and Enter\n```\nTo enable unattended updates type:\n```\nsudo dpkg-reconfigure --priority=low unattended-upgrades\n```\n\n16. Update Raspberry Pi 4 EEPROM (Firmware)\n\nFrom time to time new Raspberry pi 4 EEPROM (firmware) may be available. This procedure will install an auto-updater and keep you on the latest firmware version. Run these commands below. If it says update required, then merely reboot your RPI with **sudo reboot** and the update will be installed. \n\n```\nsudo apt update\nsudo apt full-upgrade\nsudo apt install rpi-eeprom\nsudo rpi-eeprom-update\n```\n\n17. Package Removal\n\nLibreoffice is space hog on the Raspberry Pi 4, and likely you won't need it. Plus this makes your backups larger, so let's get rid of it. If you need it, please skip this section.\n\n```\nsudo apt-get remove --purge libreoffice*\nsudo apt-get clean\nsudo apt-get autoremove\n```\n\n18. **Installing and Configuring Pi-Hole**\n\nSSH into your RPi and type:\n```\ncurl -sSL https://install.pi-hole.net | bash\n```\nWalkthrough the text-based wizard and accept all of the default values. When it asks you for which DNS server to use, select one that you feel most comfortable with. Later, we will install and configure Cloudflared DoH, so it doesn't matter what you select now. Make sure at the end you write down the admin console password at the very end of the installer wizard.\n\nBefore connecting to the UI, we’ll run a configuration command to set the password to what we want.\n```\nsudo pihole -a -p\n```\nThis will ask you to set a new password.\n\n19. There are a lot of blocklists out there, but here are a few that should get you around 2M blocked domains. Login to Pi-Hole (http://YourIP/admin), click on Settings, then blocklists. Paste all at once the list below and click on 'Save and Update'. \n\n```\nhttps://blocklist.site/app/dl/malware\nhttps://blocklist.site/app/dl/ransomware\nhttps://blocklist.site/app/dl/tracking\nhttps://blocklist.site/app/dl/fraud\nhttps://blocklist.site/app/dl/phishing\nhttps://v.firebog.net/hosts/AdguardDNS.txt\nhttps://hosts-file.net/grm.txt\nhttps://reddestdream.github.io/Projects/MinimalHosts/etc/MinimalHostsBlocker/minimalhosts\nhttps://raw.githubusercontent.com/StevenBlack/hosts/master/data/KADhosts/hosts\nhttps://raw.githubusercontent.com/StevenBlack/hosts/master/data/add.Spam/hosts\nhttps://v.firebog.net/hosts/static/w3kbl.txt\nhttps://v.firebog.net/hosts/BillStearns.txt\nhttps://adaway.org/hosts.txt\nhttps://raw.githubusercontent.com/anudeepND/blacklist/master/adservers.txt\nhttps://v.firebog.net/hosts/Easyprivacy.txt\nhttps://raw.githubusercontent.com/quidsup/notrack/master/trackers.txt\nhttps://raw.githubusercontent.com/crazy-max/WindowsSpyBlocker/master/data/hosts/spy.txt\nhttps://raw.githubusercontent.com/Perflyst/PiHoleBlocklist/master/SmartTV.txt\nhttps://s3.amazonaws.com/lists.disconnect.me/simple_malvertising.txt\nhttps://www.malwaredomainlist.com/hostslist/hosts.txt\nhttps://dbl.oisd.nl/\nhttps://openphish.com/feed.txt\nhttp://sysctl.org/cameleon/hosts\nhttps://s3.amazonaws.com/lists.disconnect.me/simple_ad.txt\nhttps://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt\nhttps://hosts-file.net/ad_servers.txt\nhttps://www.squidblacklist.org/downloads/dg-ads.acl\nhttps://pgl.yoyo.org/adservers/serverlist.php?hostformat=nohtml\nhttps://ransomwaretracker.abuse.ch/downloads/RW_DOMBL.txt\nhttps://ransomwaretracker.abuse.ch/downloads/RW_URLBL.txt\nhttp://theantisocialengineer.com/AntiSocial_Blacklist_Community_V1.txt\nhttps://osint.bambenekconsulting.com/feeds/c2-dommasterlist-high.txt\nhttps://s3.amazonaws.com/lists.disconnect.me/simple_malware.txt\nhttps://isc.sans.edu/feeds/suspiciousdomains_High.txt\nhttps://mirror1.malwaredomains.com/files/justdomains\nhttps://mirror1.malwaredomains.com/files/immortal_domains.txt\nhttp://winhelp2002.mvps.org/hosts.txt\nhttps://www.stopforumspam.com/downloads/toxic_domains_whole.txt\nhttps://raw.githubusercontent.com/Dawsey21/Lists/master/main-blacklist.txt\nhttps://someonewhocares.org/hosts/hosts\nhttps://heuristicsecurity.com/dohservers.txt\nhttps://phishing.army/download/phishing_army_blocklist_extended.txt\nhttps://raw.githubusercontent.com/oneoffdallas/dohservers/master/list.txt\nhttps://raw.githubusercontent.com/CHEF-KOCH/Audio-fingerprint-pages/master/AudioFp.txt\nhttps://raw.githubusercontent.com/CHEF-KOCH/Canvas-fingerprinting-pages/master/Canvas.txt\nhttps://raw.githubusercontent.com/CHEF-KOCH/WebRTC-tracking/master/WebRTC.txt\nhttps://www.sunshine.it/blacklist.txt\n\n```\n\n19. With all those blocked domains, there are a few we want whitelisted to prevent possible web surfing issues. So let's install whitelist script. Or don't whitelist anything until you run into a problem and then try to resolve it on the spot.\n\n**### Whitelist script Installation**\n- Download\n```\ncd /opt/\nsudo git clone https://github.com/Soundium/Pi_hole_Whitelist.git\nsudo chmod +x /opt/Pi_hole_Whitelist/scripts/whitelist.sh\n```\n- Make the script to run the script at 1 AM every day.\n\n`sudo nano /etc/crontab`\n\n- Add this line at the end of the file:       \n`0 1 * * *   root    /opt/Pi_hole_Whitelist/scripts/whitelist.sh`\n\nCTRL + X then Y and Enter\n\n- First run\n```\nsudo /opt/Pi_hole_Whitelist/scripts/whitelist.sh\n```  \n20. If you want to automate Youtube advertising block, let's install the following script. If you don't need it, please skip this section.\n\n**### Youtube advertising blocker script Installation**\n\n- Register on \u003ca href=\"https://www.wolframalpha.com/\"\u003eWolfram Alpha\u003c/a\u003e and get your APPID. \n- Download scripts.\n```\ncd /opt/\nsudo git clone https://github.com/Soundium/Pi_hole_youtube_blocklist.git\ncd Pi_hole_youtube_blocklist/scripts\n```\n- Add your APPID to temp.sh. \n```\nsudo nano /opt/Pi_hole_youtube_blocklist/scripts/temp.sh\n```\n```\n# Wolfram Alfa APPID\nAPPID=\"Register on https://www.wolframalpha.com/ and put your APPID here\"\n```\nSave the configuration file and exit nano.\n```\nCTRL + X then Y and Enter\n```\n- Give the rights.\n```\nsudo chmod +x /opt/Pi_hole_youtube_blocklist/scripts/temp.sh\nsudo chmod +x /opt/Pi_hole_youtube_blocklist/scripts/youtube-ads.sh\n```\n- Add scripts to crontab to run at 1 AM and 5 AM every day.\n\n`sudo nano /etc/crontab`\n\n- Add those lines at the end of the file:\n\n`0 1 * * *      root    /opt/Pi_hole_youtube_blocklist/scripts/temp.sh`\n\n`0 5 * * *      root    /opt/Pi_hole_youtube_blocklist/scripts/youtube-ads.sh`\n```\nCTRL + X then Y and Enter\n```\n- First run\n```\nsudo Pi_hole_youtube_blocklist/scripts/temp.sh\nsudo Pi_hole_youtube_blocklist/scripts/youtube-ads.sh\n```\n- Add http://localhost/youtube.txt as blacklist from local to Pi-hole setup.\n\n**NOTE** \nIf you used all of the block lists above, be prepared to troubleshoot apps or websites that don't work because of blocked domains. If you run across a non-functional site or app, review the Pi-Hole logs for blocked domains and try whitelisting one at a time and re-testing your site/app to see what fixes the problem.\n\n21. We proceed with DNSCrypt installation. Enter the following commands to do a base DNSCrypt installation. Check the latest release \u003ca href=\"https://github.com/DNSCrypt/dnscrypt-proxy/releases\"\u003ehere\u003c/a\u003e and modify the wget and tar commands as needed to use the latest binary.\n\n```\ncd /opt\n\nsudo wget https://github.com/jedisct1/dnscrypt-proxy/releases/download/2.0.42/dnscrypt-proxy-linux_arm-2.0.42.tar.gz\n\nsudo tar -xf dnscrypt-proxy-linux_arm-2.0.42.tar.gz\nsudo mv linux-arm dnscrypt-proxy \u0026\u0026 cd dnscrypt-proxy\nsudo cp example-dnscrypt-proxy.toml dnscrypt-proxy.toml\nsudo nano dnscrypt-proxy.toml\n```\nUnder Global settings add one or more servers. You can use iOS app DNSCloak to sift through the plethora of servers you can use. For example, you can search for DNS servers that block ads, support doh (DNS over HTTPS), view locations, etc. I like Cloudflare DOH. You can also check out the public DNSCrypt server list here and pick one or more that fits your requirements. \n\n```\nserver_names = ['cloudflare']\n```\nUnder List of Local addresses change the port number to something you like, above 1024. I'm using 5350 in this example. Pi-Hole will be using port 53 (standard for DNS), so that's why we must use a custom port number for DNSCrypt.\n\n```\nlisten_addresses = ['127.0.0.1:5350', '[::1]:5350']\n```\n\nChange the following:\n```\nrequire_dnssec = true   \nrequire_nofilter = false\ncache = false   (we will use the Pi-Hole cache)\n```\nScroll down to the bottom of the TOML file. For **server_name** add the same server name you used above. For the 'via' servers, review the relay list \u003ca href=\"https://github.com/DNSCrypt/dnscrypt-resolvers/blob/master/v2/relays.md\"\u003ehere\u003c/a\u003e, and pick a couple that suite your needs. I used servers near my house. You may want to use servers in a different country or have other unique requirements. \n\n```\nroutes = [\n     { server_name='cloudflare', via=['anon-cs-de2', 'anon-cs-nl'] },\n ]\n```\nSave the configuration file and exit nano.\n```\nCTRL + X then Y and Enter\n```\n\n22. Now we need to start the service and test it to make sure it's working before we configure Pi-Hole to use it.\n```\nsudo ./dnscrypt-proxy -service install\nsudo ./dnscrypt-proxy\nsudo ./dnscrypt-proxy -service start\nsudo systemctl status dnscrypt-proxy\n```\nThe **sudo ./dnscrypt-proxy** command will provide detailed startup information and return any errors it encounters.  **sudo systemctl status dnscrypt-proxy** does the same for DNScrypt when it's started as a service. Both should have the same output, as shown below. If the Anonymized setting is properly configured those relay servers will be shown in the DNSCrypt output.\n\nTo run a quick test that DNSCrypt can perform name resolution type:\n\n```\n./dnscrypt-proxy -resolve www.google.com\n```\n\nNext, we need to configure Pi-Hole to use this new functionality.\n\n22. We need to edit some things to put this all to work. We'll start by modifying the following file. \n\n```\nsudo nano /etc/dnsmasq.d/01-pihole.conf\n```\nIn this file, we need to comment out the two existing server values, **#server=1.1.1.1 and #server=1.0.0.1**, replace them with **server=127.0.0.1#5350** and add additional command.\n\nLike so:\n\n```\n#server=1.1.1.1\n#server=1.0.0.1\nserver=127.0.0.1#5350\nserver=::1#5350\nserver=/use-application-dns.net/\n```\nSave the configuration file and exit nano.\n```\nCTRL + X then Y and Enter\n```\nNext, we need to edit the following file:\n```\nsudo nano /etc/pihole/setupVars.conf\n```\nSimply comment out the two DNS entries:\n```\n#PIHOLE_DNS_1=1.1.1.1\n#PIHOLE_DNS_2=1.0.0.1\n```\nSave the configuration file and exit nano.\n```\nCTRL + X then Y and Enter\n```\n\nLast, restart the DNS service:\n```\nsudo systemctl restart pihole-FTL.service\n```\nOur Pi-Hole will now send all DNS requests to cloudflared which runs as our DoH proxy over an encrypted tunnel directly to Cloudflare.\n\nWe can test this to check our work. Start with https://www.dnsleaktest.com/ --\u003e it will tell us right away. You may see more than one DNS server listed and that’s okay just as long as Cloudflare is listed under ISP. You were successful!\n\nNext, we can test our work against Cloudflare: https://1.1.1.1/help. \n\nWhatever the steps involved, it's worthwhile to use Pi-Hole as the authoritative DNS server on the network and watch the statistics roll in. This fantastic tool helps improve performance and improves our privacy and that of our friends, teams, and families.\n\nHappy Adblocking and stay safe :-)\n   \n\n***\n### License\n```\nMIT License\n\nCopyright (c) 2020 Soundium\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FSoundium%2FPi_hole_configuration_ver_2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FSoundium%2FPi_hole_configuration_ver_2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FSoundium%2FPi_hole_configuration_ver_2/lists"}