نصب Pi-hole روی آرچ لینوکس (و روتر پیشرفته‌مان)

Pi-hole

اشتراک وفاداری (ماهی یک چایی)

می‌توانید از محتویات این باکس بگذرید و یک‌راست به سراغ نوشته اصلی بروید. قبل از خرید اشتراک وفاداری، مزایای آن را از طریق این پیوند مشاهده کنید. لطفا تنها بعد از خواندن «مزایای خرید اشتراک» اقدام به خرید کنید.

با همدیگر روتر پیشرفته را، تحت آرچ‌لینوکس ساختیم. توانایی‌های این سیستم‌عامل تمامی ندارد، و پتانسیل‌های بالقوه‌ای که می‌توانید از آن‌ها استفاده کنید، دست شما را برای پیکربندی هرچه بیشتر آن باز می‌گذارد. همچنین خیل عظیمی از برنامه‌های تحت لینوکس مانند Pi-hole دنیای بزرگی را پیش روی شما می‌گشاید.

حالا که سایت‌هایی مثل یوتیوب بر روی ما باز است و از طرفی اینترنت کل شبکه از طریق سرورمان تغذیه می‌شود، می‌توانید از یک سینک DNS استفاده کنیم و از شر تبلیغات و رهگیریِ سایت‌هایی خلاص شویم که ما را همه جای اینترنت دنبال می‌کنند تا با تبلیغات شخصی‌سازی شده ما را وادار به خرید چیزهایی کنند که پیش‌تر نمی‌خواستیم.

تبلیغات روی بازی‌های موبایل هم که امان همه را بُریده است. با آن‌ها هم بد نیست خداحافظی کنیم. اما چطور؟

پروژه‌ای به نام Pi-hole به همین منظور ساخته شده است. این برنامه از دو جنبه اصلی برای ما حائز اهمیت است:

اول اینکه با استفاده از فیلتر کردن درخواست‌ها در سطح DNS ما را از شر تبلیغات و سایت‌ها و بنرهای ناخواسته خلاص می‌کند. از آنجایی که این اتفاق روی سرور و روتر اصلی ما می‌افتد، تمام دستگاه‌های ما از این نعمت برخوردار خواهند شد؛

و دوم اینکه با فیلتر شدن موارد مذکور، سرعت باز شدن سایت‌ها بالا می‌رود و ترافیک مصرفی کاهش پیدا می‌کند.

همچنین به نظر می‌رسد که Pi-hole درخواست‌های DNS به کلاودفلر را رمز می‌کند. در حقیقت راه‌هایی برای رمز کردن درخواست‌ها به صورت DoH وجود دارد ولی به نظر می‌رسد که درخواست‌ها بدون هیچ دردسر اضافی از طریق Pi-hole رمز می‌شوند. تست زیر گواه این موضوع است. با این وجود برای اطمینان از رمز شدن درخواست‌ها، می‌توانید به انتهای مقاله مراجعه کنید.

Pi-hole و استفاده از Cloudflare

به سراغ اصل مطلب برویم. برای نصب Pi-hole لازم است از مخزن کاربران آرچ کمک بگیریم.

ابتدا بسته pi-hole-ftl را از این مخزن نصب می‌کنیم. برای این کار نیاز به گیت و ابزارهایی داریم که نصب خواهیم کرد.

sudo pacman -S --needed base-devel git

دستورهای زیر به ترتیب ۱) مخزن را کلون می‌کند، ۲) وارد دایرکتوری آن می‌شود و ۳) سپس بسته‌ی قابل نصب را می‌سازد. بعد از ساخته شده بسته، پک‌من به صورت خودکار اقدام به نصب بسته می‌کند:

git clone https://aur.archlinux.org/pi-hole-ftl.git
cd pi-hole-ftl
makepkg -si

بعد از نصب pi-hole-ftl نوبت به نصب اصل کار یعنی pi-hole-server از مخزن کاربران آرچ است.

git clone https://aur.archlinux.org/pi-hole-server.git
cd pi-hole-server
makepkg -si

بعد از نصب بسته، آن را فعال و راه‌اندازی می‌کنیم:

sudo systemctl enable --now pihole-FTL.service

اگر راه‌اندازی با مشکل مواجه شد، احتمالا systemd-resolved.service روی سیستم شما فعال است. آن را غیرفعال کنید و سپس دو مرتبه سرویس pihole-FTL را راه‌اندازی کنید.

sudo systemctl stop systemd-resolved.service
sudo systemctl disable systemd-resolved.service
sudo systemctl restart pihole-FTL.service

رابط وب

بهتر است رابط وب برای دسترسی ساده‌تر راه‌اندازی کنیم. البته نیازی به این کار نیست ولی پیشنهاد می‌کنم این کار را برای مدیریت بهتر Pi-hole انجام دهید. بسته زیر را نصب می‌کنیم:

sudo pacman -S php-sqlite

سپس فایل زیر را باز می‌کنیم:

sudo nano /etc/php/php.ini

و خطوط زیر را به انتهای آن اضافه می‌کنیم:

extension=pdo_sqlite
extension=sockets
extension=sqlite3

حالا بسته زیر را نصب می‌کنیم:

sudo pacman -S lighttpd php-cgi

فایل پیکربندی آماده پای-هُل را کپی کنید. برای این کار نیاز به مجوز روت دارید:

sudo cp /usr/share/pihole/configs/lighttpd.example.conf /etc/lighttpd/lighttpd.conf

بعد از نصب بسته‌های فوق سرویس مربوطه را راه‌اندازی و فعال می‌کنیم:

sudo systemctl enable --now lighttpd.service

نوبت به دستکاری فایل hosts است. فایل زیر را باز می‌کنیم:

sudo nano /etc/hosts

و خط زیر را به آن اضافه می‌کنیم:

ip.address.of.pihole pi.hole myhostname

البته باید تغییراتی در آن بدهید. اگر فرض کنیم که (با توجه به تنظیماتی که در نوشته تبدیل کامپیوتر قدیمی به یک روتر پیشرفته) hostname یا نام کامپیوتر من archie است و آی‌پی سیستم از نوع ثابت و برابر با است، 192.168.1.2 خط بالا به این صورت تغییر می‌کند:

192.168.1.2 pi.hole archie

اکنون آی‌پی آدرس Pi-hole به عنوان مقصد برای درخواست‌های دی‌ان‌اس ماست. لازم است سرور را به نحوی تنظیم کنیم که درخواست‌های DNS به سمت Pi-hole ریدیرکت شوند.

حالا می‌توانیم از طریق دستگاه‌های روی شبکه و با استفاده از آی‌پی Pi-hole به پنل مدیریتی آن دسترسی پیدا کنیم. برای مثالِ ما، آدرس 192.168.1.2 را در مرورگر باز می‌کنیم. همچنین از آی‌پی روتر برای باز کردن این صفحه نیز می‌توانیم استفاده کنیم. از طریق سربرگ Settings > DNS می‌توانیم تنظیمات مربوط به DNS را انجام دهیم. برای نمونه من تنظیمات زیر را اعمال کردم:

Pi-hole - archie

استفاده از Pi-hole به عنوان موتور DHCP

هرچند در روتر پیشرفته‌مان دستمان برای پیکربندی موتور DHCP از طریق بسته dhcp باز است با این حال امکان الحاق آی‌پی از طریق Pi-hole به دستگاه‌های تحت شبکه وجود دارد. ابتدا باید مطمئن شوید که روتر شما در حالت برج یا ریلی قرار دارد. برای اطلاعات بیشتر به مقاله تبدیل کامپیوتر قدیمی به یک روتر پیشرفته مراجعه کنید.

از طریق Settings > DHCP صفحه زیر را باز می‌کنیم.

تنظیمات DHCP در Pi-hole

مطمئن می‌شویم که Gateway آی‌پی روتر ماست، و رنج آی‌پی نیز در محدوده ۲ تا ۲۵۴ تعریف شود. مثلا در تصویر فوق من رنج را از ۱۰۰ تا ۲۰۰ تعیین کردم و دستگاه‌هایی که از طریق Pi-hole آی‌پی می‌گیرند، چیزی در این محدوده را دریافت خواهند کرد. در سمت دیگر می‌توانیم مشخص کنیم که زمان DHCP lease چند ساعت باشد. همچنین متغیر Domain من معادل local است.

Pi-hole و Cloudflare محبوب من

شاید در دنیای اینترنت، هیچ شرکتی را در خصوص رعایت حریم شخصی به اندازه کلاودفلر قبول نداشته باشم. این تعصب من شاید ریشه در واقعیت نداشته باشد اما احترامی که برای آن‌ها قائلم حتی از موزیلای اعظم بیشتر است. به هر حال در این قسمت می‌خواهم به شما نشان دهم که چطور می‌توانید Pi-hole را به نحوی پیکربندی کنید که درخواست‌های DNS ما از طریق DoH رمز و از طریق کلاودفلر پردازش شود.

باز مخزن کاربران آرچ به فریادمان می‌رسد. با دستورهای زیر بسته را کلون و نصب می‌کنیم.

git clone https://aur.archlinux.org/cloudflared.git 
cd cloudflared
makepkg -si

فایل پیکربندی به صورت خودکار برای کلاودفلر روی آرچ ساخته می‌شود. برای تغییر تنظیمات آن می‌توانیم آن را ویرایش کنیم:

sudo nano /etc/cloudflared/config.yml

محتویاتی که من استفاده می‌کنم به شکل زیر است:

---
logfile: /var/log/cloudflared.log
proxy-dns: true
proxy-dns-address: 127.0.0.1
proxy-dns-port: 5300
proxy-dns-upstream:
        - https://1.1.1.1/dns-query
        - https://1.0.0.1/dns-query

  #Uncomment following if you want to also want to use IPv6 for  external DOH lookups
  #- https://[2606:4700:4700::1111]/dns-query
  #- https://[2606:4700:4700::1001]/dns-query

حالا سرویس کلاودفلر را فعال و راه‌اندازی می‌کنیم:

sudo systemctl enable --now cloudflared.service

از dig برای اطمینان از صحت عملکرد سرویس کمک می‌گیریم:

dig @127.0.0.1 -p 5300 google.com

خروجی زیر نشان از مرتب بودن همه چیز است:

; <<>> DiG 9.16.10 <<>> @127.0.0.1 -p 5300 google.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16271
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;google.com.                    IN      A

;; ANSWER SECTION:
google.com.             158     IN      A       172.217.168.46

;; Query time: 783 msec
;; SERVER: 127.0.0.1#5300(127.0.0.1)
;; WHEN: Wed Dec 30 00:31:04 +0330 2020
;; MSG SIZE  rcvd: 65

حالا به پنل Pi-hole می‌رویم و از طریق سربرگ Settings > DNS مقدار Custom 1 (IPv4) را روی 127.0.0.1#5300 قرار می‌دهیم و تمام تیک‌های مربوط به بقیه سرویس‌دهنده‌ها را حذف می‌کنیم. مطابق تصویر زیر:

تنظیمات Pi-hole

سرویس کلاودفلر قادر است که سرویس‌دهنده‌های دیگر از جمله گوگل را نیز پردازش کند. برای این منظور کافی است که خطوط زیر را به دنباله قسمت proxy-dns-upstream در فایل پیکربندی آن اضافه کنید (برای اضافه کردن گوگل):

        - https://8.8.8.8/dns-query

حالا از طریق دستگاه‌های مختلف صفحه زیر را باز کنید و نتیجه را مشاهده کنید:

https://www.cloudflare.com/ssl/encrypted-sni/

خطایابی

تبلیغات همچنان پابرجاست؟ این بخش با توجه به تجربه خودم و دیگران به روز خواهد شد.

dhcpd.conf

شاید دستگاه‌ها از راهی به غیر از Pi-hole در حال پردازش درخواست‌های DNS هستند. برای نمونه اگر فایل مربوط به پیکربندی dhcp را روی روتر بررسی کنیم سرنخ‌هایی به دست خواهیم آورد. برای مثال در روتر من خط اول این فایل به این صورت است:

option domain-name-servers 1.1.1.1, 1.0.0.1, 8.8.8.8;

که آن را به صورت زیر تغییر دادم:

option domain-name-servers 192.168.0.1;

این کار باعث می‌شود که دستگاه‌هایی که از طریق این موتور آی‌پی می‌گیرند، درخواست‌های DNS را به Pi-hole بفرستند.

resolveconf

اگر نیازی به استفاده از DoH روی دستگاه جاری ندارید، بقیه آموزش را نادیده بگیرید. در حقیقت اگر Pi-hole روی روتر شما نصب شده است، اصلا نیازی به بقیه آموزش ندارید.

اگر از بسته resolveconf استفاده می‌کنید فایل زیر را باز کنید:

sudo nano /etc/resolvconf.conf

و تمام خط‌های مربوط به DNS را کامنت کنید و خط زیر را به آن اضافه کنید:

name_servers=127.0.0.1

نمونه فایل resolvconf.conf من به این شکل است:

# Configuration for resolvconf(8)
# See resolvconf.conf(5) for details

resolv_conf=/etc/resolv.conf
# If you run a local name server, you should uncomment the below line and
# configure your subscribers configuration files below.
name_servers=127.0.0.1
#name_servers="1.1.1.1 1.0.0.1 2606:4700:4700::1111 2606:4700:4700::1001"
#name_servers=192.168.1.2

حالا نوبت به ساخت فایل resolv.conf است. دستور زیر را صادر می‌کنیم:

sudo resolvconf -u

تغییر تنظیمات Pi-hole

با توجه به اینکه Pi-hole به طور رسمی از آرچ‌لینوکس پشتیبانی نمی‌کند، تنظیمات آن از طریق دستور زیر در آرچ‌لینوکس در دسترس نیست:

pihole -r

اما چطور آن‌ها را تغییر دهیم؟ برای اینکار لازم است با استفاده از یک ویرایشگر متن، فایل‌های زیر را مورد عنایت قرار دهید:

sudo nano /etc/pihole/setupVars.conf
sudo nano /etc/pihole/dns-servers.conf 
sudo nano /etc/pihole/pihole-FTL.conf

برای تغییر رابطی که Pi-hole به آن گوش می‌دهد، فایل اولی را تغییر دهید. با استفاده از دستور ifconfig می‌توانید نام دقیق رابط را استخراج کنید و در خط پیکربندی‌اش بنویسید.

3 دیدگاه

  1. عالی من داکرش را استفاده میکردم ولی مشکل عجیبی روی دستگاه کارت خوان داشت

پاسخ دهید

ایمیل شما نمایش داده نخواهد شد