Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

194 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Adhole โ€” ่ฝป้‡็บงๅฎถๅบญ DNS ๅนฟๅ‘Šๆ‹ฆๆˆช็ณป็ปŸ

A lightweight home network DNS ad-block system built on Unbound and NSD.


๐Ÿ” ็ฎ€ไป‹ / Introduction

Adhole ไปŽๅคšไธชไบ’่”็ฝ‘ๅผ€ๆบ้ป‘ๅๅ•ๆบ่šๅˆๅŸŸๅๆ•ฐๆฎ๏ผŒ่‡ชๅŠจๆธ…ๆด—ๅŽป้‡๏ผŒ่พ“ๅ‡บ้€‚้… Unbound always_null ่ฏญๆณ•็š„ Zone ้…็ฝฎๆ–‡ไปถใ€‚ๅฐ†ๅ…ถ้ƒจ็ฝฒๅˆฐๅฎถไธญ DNS ๆœๅŠกๅ™จๅณๅฏๅฎž็Žฐๅ…จ็ฝ‘่ฎพๅค‡็š„ไธ€็ซ™ๅผๅนฟๅ‘Šๅ’Œๆถๆ„็ฝ‘็ซ™ๆ‹ฆๆˆชใ€‚

Adhole aggregates domain blocklists from multiple open-source internet sources, performs automatic cleanup and deduplication, then outputs an Unbound always_null Zone config file. Deploy it as your home DNS resolver to block ads and malicious sites for every device on your network.

็‰นๆ€ง Feature
๐Ÿ  ๆ— ็ฎก็†้ขๆฟ โ€” ็บฏๅ‘ฝไปค่กŒ๏ผŒ้…็ฝฎๅณๆ‰€ๅพ— No Web UI โ€” CLI-only, config-as-code
๐Ÿ”— ๅŸบไบŽ Unbound + NSD โ€” ้ซ˜ๆ€ง่ƒฝๆœฌๅœฐ้€’ๅฝ’่งฃๆžๅ™จ Based on Unbound + NSD โ€” high-performance local recursive resolver
๐ŸŒ ๅคšๆบ่šๅˆ โ€” OISDใ€StevenBlackใ€ๅจ่ƒๆƒ…ๆŠฅ็ญ‰ๆ•ฐๅไธชๆบ Multi-source aggregation โ€” OISD, StevenBlack, threat intel, and dozens more
๐Ÿ“ฆ ๆž่‡ดๅŽ‹็ผฉ โ€” zst ๆ ผๅผไป… 11 MB Ultra-compressed โ€” only ~11 MB in zst format
โšก ้›ถ่ฟ็ปด โ€” cron ่‡ชๅŠจๆ‹‰ๅ–ๆ›ดๆ–ฐ Zero-maintenance โ€” cron auto-pulls updates

๐Ÿš€ ๅฟซ้€Ÿๅผ€ๅง‹ / Quick Start

ๆ–นๅผไธ€๏ผšDebian ๅŽŸ็”Ÿๅฎ‰่ฃ…๏ผˆๆŽจ่ SBC / Raspberry Pi๏ผ‰

ๆ–นๆณ•ไธ€ / Method A โ€” ไปŽ้›ถๆญๅปบ

# 1. ๅฎ‰่ฃ…ไพ่ต–ๅŒ…
sudo ./install_pkg.sh

# 2. ็”Ÿๆˆ Zone ๆ–‡ไปถๅนถๆž„ๅปบ
./scripts/main.sh sync

# 3. ๅฏๅŠจ DNS ๆœๅŠก
sudo ./setup_dns.sh

ๆ–นๆณ•ไบŒ / Method B โ€” ไธ€้”ฎ่„šๆœฌ๏ผˆๆž็ฎ€๏ผ‰

ๅฆ‚ๆžœไฝ ๅชๆƒณ็”จๆœ€ๅฐ‘็š„ๆญฅ้ชค่ท‘่ตทๆฅ๏ผŒๅฏไปฅ็”จๆˆ‘ไปฌๅ‡†ๅค‡ๅฅฝ็š„ ไธ€้”ฎๅฎ‰่ฃ…่„šๆœฌใ€‚


ๆ–นๅผไบŒ๏ผš่™šๆ‹Ÿๆœบ้•œๅƒๅฟซ้€Ÿไฝ“้ชŒ

VirtualBox (Windows / macOS)

  1. ไธ‹่ฝฝ VDI ้•œๅƒ
  2. ่งฃๅŽ‹ๅŽๅœจ VirtualBox ไธญๆณจๅ†Œ .vdi ๆ–‡ไปถ๏ผŒๆ–ฐๅปบ่™šๆ‹Ÿๆœบ๏ผˆๆกฅๆŽฅ็ฝ‘็ปœใ€1024MB ๅ†…ๅญ˜ใ€1 ๆ ธ CPU๏ผ‰
  3. ้ป˜่ฎค็™ปๅฝ•๏ผš็”จๆˆท adhole๏ผŒๅฏ†็ ไธบ็Ÿญไธปๆœบๅ adhole-18
  4. ๅฐ†่ทฏ็”ฑๅ™จ DNS ๆŒ‡ๅ‘ๆญค่™šๆœบ IP ๅณๅฏ็”Ÿๆ•ˆ

libvirt / KVM (Linux)

# 1. ไธ‹่ฝฝ qcow2 ้•œๅƒ
wget https://github.com/LeisureLinux/adhole/releases/download/adhole/adhole-1.1.5_amd64.qcow2.zst

# 2. ่งฃๅŽ‹
zstd -d adhole-1.1.5_amd64.qcow2.zst

# 3. ๅฏผๅ…ฅ VM๏ผˆๆ›ฟๆขไฝ ็š„็ฝ‘็ปœๅ็งฐๅ’Œ SSH ๅ…ฌ้’ฅ่ทฏๅพ„๏ผ‰
virt-install --vcpu 1 --memory 2048 --name adhole \
  --osinfo detect=on,name=debian11 --network=default \
  --noautoconsole --import \
  --disk adhole-1.1.5_amd64.qcow2

้ป˜่ฎค่ดฆๆˆท๏ผšdebian / LeisureLinux
SSH ่ฟžๆŽฅ๏ผšssh debian@adhole.local๏ผˆ้œ€ avahi-daemon๏ผ‰ๆˆ– virsh net-dhcp-leases default ๆŸฅ IP


้ชŒ่ฏๆ•ˆๆžœ / Verify

ๅฐ†็›ฎๆ ‡ๆœบๅ™จๆˆ–่ทฏ็”ฑๅ™จ็š„ DNS ๆŒ‡ๅ‘ Adhole ๆœๅŠกๅ™จๅŽๆต‹่ฏ•๏ผš

# Linux/Mac
dig +short www.baidu.com @<adhole-ip>      # โ†’ ๆญฃๅธธ IP
dig +short a.baidu.com @<adhole-ip>        # โ†’ 0.0.0.0๏ผˆๅทฒๆ‹ฆๆˆช๏ผ‰

# Windows CMD
nslookup
server <adhole-ip>
www.baidu.com       # โ†’ ๆญฃๅธธ IP
a.baidu.com         # โ†’ 0.0.0.0๏ผˆๅทฒๆ‹ฆๆˆช๏ผ‰

โš™๏ธ ๆžถๆž„ๆฆ‚่งˆ / Architecture

          Internet
             โ”‚
     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
     โ”‚    NSD        โ”‚ โ† Root zone slave, runs on 127.0.0.1:1053
     โ”‚ (anti-hijack) โ”‚   Prevents ISP DNS hijacking
     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
             โ”‚
     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
     โ”‚    Unbound     โ”‚ โ† Local resolver on 0.0.0.0:53
     โ”‚  + adhole.conf โ”‚   Forwards to NSD; intercepts ad domains
     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
             โ”‚
     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
     โ”‚   Your Devices โ”‚ โ† Phones, PCs, IoT...
     โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
  • NSD ไฝœไธบ root zone ไปŽๆœๅŠกๅ™จ่ฟ่กŒๅœจ 127.0.0.1:1053๏ผŒ้˜ฒๆญข่ฟ่ฅๅ•†ๅŠซๆŒ
  • Unbound ็›‘ๅฌ 0.0.0.0:53๏ผŒ้™ค local-zone ้…็ฝฎ็š„ๅŸŸๅๅค–ๅ…จ้ƒจ่ฝฌๅ‘็ป™ NSD
  • ๆœฌๆœบไฝฟ็”จ 127.0.0.1:53๏ผˆUnbound๏ผ‰ไฝœไธบๆœฌๅœฐ DNS ่งฃๆžๅ™จ

๐Ÿ”ง ไฝฟ็”จไธŽ้…็ฝฎ / Usage & Configuration

ๆ›ดๆ–ฐ Zone ๆ–‡ไปถ

# ไธ€้”ฎๆ‰ง่กŒ๏ผšbuild โ†’ upload โ†’ pull
./scripts/main.sh sync

# ไนŸๅฏๅˆ†ๆญฅๆ‰ง่กŒ
./scripts/main.sh build      # ๆŠ“ๅ–ใ€ๆธ…ๆด—ใ€็”Ÿๆˆ adhole.conf.zst
./scripts/main.sh upload     # ไธŠไผ ๅˆฐ GitHub Release
./scripts/main.sh pull       # ๆ‹‰ๅ–ๆœ€ๆ–ฐ zone ๆ–‡ไปถๅนถ้‡่ฝฝ
./scripts/main.sh pull ./custom.zst   # ไปŽๆœฌๅœฐๆ–‡ไปถ็›ดๆŽฅ้ƒจ็ฝฒ

่ฏฆ็ป†่ฏดๆ˜Ž่ฏท่ง scripts/README.mdใ€‚

ๅฎšๆ—ถๆ›ดๆ–ฐ / Auto Update

็ผ–่พ‘ crontab ๅฎž็Žฐๆฏๆ—ฅ่‡ชๅŠจๆ›ดๆ–ฐ๏ผš

# ๆฏๅคฉๅ‡Œๆ™จ 2:10 ๆ‰ง่กŒ
10 2 * * * cd /path/to/adhole && ./scripts/main.sh pull >/dev/null 2>&1

้ฆ–ๆฌกไฝฟ็”จๅ‰ๅปบ่ฎฎๅœจ็ปˆ็ซฏๆ‰‹ๅŠจๆ‰ง่กŒไธ€ๆฌก๏ผŒ็กฎ่ฎคๆ— ่ฏฏๅŽๅ†ๅŠ ๅ…ฅๅฎšๆ—ถไปปๅŠกใ€‚

WPAD โ€” ไปฃ็†่‡ชๅŠจๅ‘็Žฐ

ๅฎถไธญๅคš่ฎพๅค‡ไธ”้ข‘็นๅˆ‡ๆข VPN๏ผŸ็”จ WPAD ่ฎฉ่ฎพๅค‡่‡ชๅŠจ้€‰ๆ‹ฉๆ˜ฏๅฆ่ตฐไปฃ็†๏ผš

sudo ./wpad/wpad.sh setup   # ๆทปๅŠ  wpad.service + wpad.timer

ๅฎขๆˆท็ซฏๆต่งˆๅ™จ่ฎพ็ฝฎไธบใ€Œ่‡ชๅŠจๆฃ€ๆต‹ไปฃ็†ใ€๏ผŒ่‡ชๅŠจ่Žทๅ– http://wpad.local/wpad.datใ€‚iOS ๆ— ้œ€้ขๅค–้…็ฝฎใ€‚


๐Ÿ“‚ ้กน็›ฎ็ป“ๆž„ / Project Structure

adhole/
โ”œโ”€โ”€ conf/                     # DNS ๆœๅŠกๅ™จ้…็ฝฎ
โ”‚   โ”œโ”€โ”€ nsd.conf              # NSD root zone slave ้…็ฝฎ
โ”‚   โ””โ”€โ”€ unbound.conf          # Unbound ไธป้…็ฝฎ
โ”œโ”€โ”€ data/                     # ๆ•ฐๆฎๆบไธŽไบงๅ‡บ
โ”‚   โ”œโ”€โ”€ block_urls.txt        # HOSTS ๆ ผๅผ้ป‘ๅๅ•ๆบ URL
โ”‚   โ”œโ”€โ”€ threat_urls.txt       # ๅจ่ƒๆƒ…ๆŠฅๆบ URL๏ผˆๆœจ้ฉฌ/้’“้ฑผ/้—ด่ฐ่ฝฏไปถ๏ผ‰
โ”‚   โ”œโ”€โ”€ text_urls.txt         # ๆ–‡ๆœฌๆ ผๅผ้ป‘ๅๅ•ๆบ URL
โ”‚   โ”œโ”€โ”€ adblock_urls.txt      # Adblock/uBlock ่ฟ‡ๆปคๅˆ—่กจๆบ URL๏ผˆBrave๏ผ‰
โ”‚   โ”œโ”€โ”€ block_domains.txt     # ่‡ชๅฎšไน‰ๅฐ้”ๅŸŸๅ๏ผˆๆฏ่กŒไธ€ไธช๏ผ‰
โ”‚   โ”œโ”€โ”€ unblock_domains.txt   # ็™ฝๅๅ•ๆŽ’้™ค้กน
โ”‚   โ””โ”€โ”€ result/               # ไบงๅ‡บ็›ฎๅฝ•
โ”‚       โ”œโ”€โ”€ adhole.conf.zst   # ๆœ€็ปˆ Zone ้…็ฝฎ๏ผˆๅŽ‹็ผฉ็‰ˆ๏ผ‰
โ”‚       โ”œโ”€โ”€ adhole_status.txt # ๅ„ๆบ็Šถๆ€ๆ‘˜่ฆ
โ”‚       โ””โ”€โ”€ grab_*.log        # ๆฏๆฌก่ฟ่กŒๆ—ฅๅฟ—๏ผˆไฟ็•™ 10 ๅคฉ๏ผ‰
โ”œโ”€โ”€ scripts/                  # ๆž„ๅปบ็ฎก็บฟไธŽๅทฅๅ…ท
โ”‚   โ”œโ”€โ”€ main.sh               # ๅ…ฅๅฃ๏ผšbuild โ†’ upload โ†’ pull ็ฎก็บฟ
โ”‚   โ”œโ”€โ”€ build_adhole.sh       # ๆ ธๅฟƒๅผ•ๆ“Ž๏ผšๆŠ“ๅ–ใ€ๆธ…ๆด—ใ€ๅŽป้‡ใ€็”Ÿๆˆ
โ”‚   โ”œโ”€โ”€ dns-op.sh             # DNS ๆ“ไฝœ่พ…ๅŠฉ
โ”‚   โ”œโ”€โ”€ wpad-mgmt.sh          # WPAD ็ฎก็†
โ”‚   โ”œโ”€โ”€ setup_dns.sh          # DNS ๆœๅŠกๅˆๅง‹ๅŒ–
โ”‚   โ””โ”€โ”€ install_pkg.sh        # ไพ่ต–ๅŒ…ๅฎ‰่ฃ…
โ”œโ”€โ”€ wpad/                     # WPAD ๆœๅŠกๆ–‡ไปถ
โ”‚   โ”œโ”€โ”€ wpad.sh
โ”‚   โ”œโ”€โ”€ wpad.service
โ”‚   โ””โ”€โ”€ wpad.timer
โ”œโ”€โ”€ utils/                    # ๆ‚้กนๅทฅๅ…ท
โ”œโ”€โ”€ .proxy                    # HTTP/SOCKS ไปฃ็†ๅœฐๅ€๏ผˆๅฏ้€‰๏ผ‰
โ”œโ”€โ”€ LICENSE
โ””โ”€โ”€ README.md

โœ๏ธ ่‡ชๅฎšไน‰ๆ•ฐๆฎๆบ / Customize Sources

ๆ‰€ๆœ‰ๆ•ฐๆฎๆบ้€š่ฟ‡็บฏๆ–‡ๆœฌๆ–‡ไปถ็ฎก็†๏ผŒๆ— ้œ€ไฟฎๆ”น่„šๆœฌไปฃ็ ใ€‚

ๆทปๅŠ ้ป‘ๅๅ•ๆบ

็ผ–่พ‘ data/block_urls.txt๏ผˆHOSTS ๆ ผๅผ๏ผ‰ๆˆ– data/threat_urls.txt๏ผˆๅจ่ƒๆƒ…ๆŠฅ/TXT๏ผ‰๏ผš

https://raw.githubusercontent.com/example/custom-list/master/hosts

๐Ÿ’ก Adblock / uBlock ่ฟ‡ๆปคๅˆ—่กจ๏ผšdata/adblock_urls.txt ๆ”ฏๆŒ Adblock Plus / uBlock ่ฟ‡ๆปคๅˆ—่กจ๏ผˆไพ‹ๅฆ‚ Brave ็š„ brave-lists๏ผ‰ใ€‚่„šๆœฌๅชๆๅ–ๅ…ถไธญ็š„ๆ•ดๅŸŸๅ่ง„ๅˆ™ ||domain.tld^ ๅนถ่ฝฌๆขไธบ Unbound local-zone always_null๏ผ›URL ่ทฏๅพ„ใ€$domain=ใ€ ๅ…ƒ็ด ้š่— ##ใ€่„šๆœฌ ##+js ไธŽ็™ฝๅๅ• @@ ่ง„ๅˆ™ๆ— ๆณ•ๅœจ DNS ๅฑ‚่กจ่พพ๏ผŒไผš่ขซ่ทณ่ฟ‡ใ€‚

ๆทปๅŠ ๆœฌๅœฐๅฐ้”ๅŸŸๅ

็ผ–่พ‘ data/block_domains.txt๏ผŒๆฏ่กŒไธ€ไธชๅŸŸๅ๏ผš

ads.myapp.com
tracking.evil.net

ๆทปๅŠ ็™ฝๅๅ•๏ผˆๆŽ’้™ค้กน๏ผ‰

็ผ–่พ‘ data/unblock_domains.txt๏ผŒ้˜ฒๆญข่ฏฏๆ€ๆญฃๅธธไธšๅŠก๏ผš

as.weixin.qq.com
pandora.xiaomi.com
cm.bilibili.com

๐Ÿ’ก ๆฌข่ฟŽๆไบค PR ๅˆ†ไบซไฝ ็š„่‡ชๅฎšไน‰ๅˆ—่กจ๏ผContribute your block_domains.txt or unblock_domains.txt via PR.


๐Ÿ›ก๏ธ ๅทฅไฝœๅŽŸ็† / How It Works

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Step 1: Initialize                                     โ”‚
โ”‚ โ€ข Read proxy from ~/.proxy                             โ”‚
โ”‚ โ€ข Create cache dir $HOME/.cache/adhole                 โ”‚
โ”‚ โ€ข Clean logs older than 10 days                        โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                       โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Step 2: Fetch Remote Sources                           โ”‚
โ”‚ โ€ข grab_oisd() โ†’ OISD UNBOUND list (cached 24h)        โ”‚
โ”‚ โ€ข block()     โ†’ HOSTS-format lists (retry ร—3)          โ”‚
โ”‚ โ€ข block_text()โ†’ Threat intel TXT files                 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                       โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Step 3: Parse & Clean                                  โ”‚
โ”‚ โ€ข Auto-detect hosts / local-zone / Adblock formats    โ”‚
โ”‚ โ€ข Remove IPs, blanks, comments                        โ”‚
โ”‚ โ€ข Normalize to: local-zone "domain" always_null       โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                       โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Step 4: Merge & Filter                                 โ”‚
โ”‚ โ€ข Merge all sources + local block_domains.txt         โ”‚
โ”‚ โ€ข Exclude whitelist from unblock_domains.txt          โ”‚
โ”‚ โ€ข Lowercase + deduplicate + sort                      โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                       โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Step 5: Validate & Output                              โ”‚
โ”‚ โ€ข Syntax check via unbound-checkconf                  โ”‚
โ”‚ โ€ข Compress to .zst (~11 MB)                           โ”‚
โ”‚ โ€ข Generate status summary                             โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

้”™่ฏฏๅค„็† / Error Handling๏ผšไปปไฝ•ๆŠ“ๅ–ๅคฑ่ดฅๆ—ถ็ซ‹ๅณ้€€ๅ‡บ๏ผˆexit 1๏ผ‰๏ผŒไธๆฑกๆŸ“ๅทฒๆœ‰็ป“ๆžœโ€”โ€”ๆฒกๆœ‰ๅนฒๅ‡€็š„ๆ•ฐๆฎๅฐฑไธ่ฏฅๅ†™ๅ…ฅ่พ“ๅ‡บ็š„ๆธ…ๅ•ใ€‚


โš ๏ธ ๆณจๆ„ไบ‹้กน / Important Notes

้กน็›ฎ ่ฏดๆ˜Ž Note
โŒ DNSSEC ไธบๅ‡ๅฐ‘้—ฎ้ข˜ๅทฒๅ…ณ้—ญ Disabled to avoid resolution failures
๐Ÿ”’ ้˜ฒๅŠซๆŒ NSD ไฝœไธบ root server ้ฟๅ…่ฟ่ฅๅ•† DNS ๅŠซๆŒ NSD acts as root to prevent ISP hijacking
๐ŸŒ ไปฃ็† ๅฆ‚้œ€่ฆ็ฟปๅข™ไธ‹่ฝฝ้ป‘ๅๅ•๏ผŒๅœจ ~/.proxy ไธญๅ†™ๆ˜Žไปฃ็†ๅœฐๅ€ Put proxy info in ~/.proxy: socks5://IP:port
๐Ÿ’พ ็ฃ็›˜ ๆŽจ่ โ‰ฅ16GB SD ๅกๆˆ–ๅญ˜ๅ‚จ็ฉบ้—ด โ‰ฅ16GB recommended for SD card
๐ŸŒ ่ฏญ่จ€ DNS ๆœฌ่บซๆ˜ฏ็Ž„ๅญฆ๏ผ่ฐƒ่ฏ•ๅ›ฐ้šพๆ—ถๆœ‰่€ๅฟƒ DNS is tricky โ€” be patient when debugging

๐Ÿ“‹ ็ซฏๅฃไธŽๆœๅŠก / Services & Ports

ๆœๅŠก ็ซฏๅฃ ็ป‘ๅฎšๅœฐๅ€ ่ฏดๆ˜Ž
NSD 1053 127.0.0.1 root zone slave๏ผŒๅฏนๅค–ไธๅฏ่ง
Unbound 53 0.0.0.0 ไธป DNS ่งฃๆžๅ™จ๏ผŒๆŽฅๅ—ๅฑ€ๅŸŸ็ฝ‘ๆŸฅ่ฏข

ๆฃ€ๆŸฅ็ซฏๅฃ็Šถๆ€๏ผš

ss -tln | grep -E ':(53|1053)\b'

โš ๏ธ ไพ่ต– / Dependencies

ๅŒ…ๅ Package ็”จ้€” ๅฎ‰่ฃ…ๆ–นๆณ•
curl โ€” HTTP ่ฏทๆฑ‚ ็ณป็ปŸ่‡ชๅธฆ / Built-in
zstd zst ๅŽ‹็ผฉ/่งฃๅŽ‹ apt install zstd
parallel parsort ้ซ˜ๆ€ง่ƒฝๆŽ’ๅบ apt install parallel
dos2unix โ€” ๆข่กŒ็ฌฆ่ฝฌๆข apt install dos2unix
unbound unbound-checkconf ้…็ฝฎๆ ก้ชŒ apt install unbound
gh GitHub CLI Release ไธŠไผ  apt install gh
sudo โ€” ๆƒ้™ๆๅ‡ ็ณป็ปŸ่‡ชๅธฆ / Built-in

๐Ÿ“„ License

MIT License โ€” Use at your own will, no warranty.
See LICENSE for details.


๐Ÿ‘ค Author

LeisureLinux (Albert Xu)
Bilibili ID: LeisureLinux
Email: albertxu@freelamp.com

GitHub Release

About

Adhole, a better pi-hole, based on unbound DNS

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages