نحوه نصب سرویس Pi-hole – DNS Sinkhole #
Pi-hole یک برنامه مسدودکننده تبلیغات و ردیاب اینترنتی در سطح شبکه لینوکس است که به عنوان یک گودال DNS عمل میکند. با مسدود کردن تبلیغات در سطح DNS، از رسیدن محتوای ناخواسته به دستگاههای کلاینت جلوگیری میکند، پهنای باند را ذخیره میکند و حریم خصوصی را در کل شبکه بهبود میبخشد – از جمله دستگاههایی که از افزونههای مرورگر پشتیبانی نمیکنند، مانند تلویزیونهای هوشمند و برنامههای تلفن همراه.
این مقاله نحوه استقرار Pi-hole را در اوبونتو ۲۴.۰۴ با استفاده از Docker Compose نشان میدهد. این پشته از Traefik برای ارائه یک رابط HTTPS امن برای داشبورد مدیریت استفاده میکند، در حالی که سرویس DNS برای ارائه درخواستهای کلاینت به پورتهای استاندارد گوش میدهد.
پیش نیازها #
قبل از شروع:
- به عنوان یک کاربر غیر ریشه با امتیازات sudo به یک سرور اوبونتو ۲۴.۰۴ دسترسی داشته باشید.
- داکر و داکر کامپوز را نصب کنید.
- یک نام دامنه، مانند
pihole.example.com, را طوری پیکربندی کنید که به آدرس IP عمومی سرور شما اشاره کند.
آزادسازی پورت ۵۳ #
سرورهای DNS با استفاده از پورت ۵۳ ارتباط برقرار میکنند. به طور پیشفرض، اوبونتو ۲۴.۰۴ سرویس DNS داخلی خود به نام systemd-resolved را روی این پورت اجرا میکند. شما باید این سرویس داخلی را غیرفعال کنید تا Pi-hole بتواند کنترل پورت ۵۳ را در دست بگیرد.
- سرویس
systemd-resolvedرا متوقف کنید.console$ sudo systemctl stop systemd-resolved - سرویس را غیرفعال کنید تا هنگام راهاندازی مجدد، دوباره شروع نشود.console
$ sudo systemctl disable systemd-resolved - فایل پیکربندی DNS موجود را حذف کنید.console
$ sudo rm /etc/resolv.conf - برای اطمینان از اینکه خود سرور همچنان میتواند برای دانلود بهروزرسانیها به اینترنت متصل شود، باید سرور را طوری پیکربندی کنید که از یک ارائهدهنده DNS عمومی استفاده کند. یک فایل پیکربندی DNS جدید ایجاد کنید.console
$ echo "nameserver 1.1.1.1" | sudo tee /etc/resolv.conf
این پیکربندی به سرور شما میگوید که درخواستهای DNS خود را به
۱.۱.۱.۱,یک سرور DNS عمومی ارائه شده توسط Cloudflare، ارسال کند.
تنظیم ساختار دایرکتوری و متغیرهای محیطی #
Pi-hole برای پیکربندی و دادهها به پوشههای دائمی، همراه با متغیرهای محیطی که دامنه و سایر تنظیمات شما را مشخص میکنند، نیاز دارد. این بخش هم ساختار دایرکتوری و هم فایل .env را آماده میکند.
- دایرکتوریهای مورد نیاز برای Pi-hole را ایجاد کنید.console
$ mkdir -p ~/pihole/{etc-pihole,etc-dnsmasq.d,letsencrypt}
etc-pihole– پیکربندی اصلی Pi-hole، شامل پایگاههای داده، گزارشهای پرسوجو و لیستهای مسدود شده را ذخیره میکند.etc-dnsmasq.d–قوانین DNS و شبکه سفارشی را ذخیره میکند.letsencrypt–گواهیهای TLS تولید شده توسط Traefik را ذخیره میکند.
- به دایرکتوری پروژه بروید.console
$ cd ~/pihole
- یک فایل با نام
.env. ایجاد کنید..console$ nano .env - متن زیر را اضافه کنید. به جای
pihole.example.comدامنه واقعی خود، به جایadmin@example.comآدرس ایمیل خود و به جایUTCمنطقه زمانی خود را قرار دهید.iniDOMAIN=pihole.example.com LETSENCRYPT_EMAIL=admin@example.com TZ=UTC
فایل را ذخیره کنید و ببندید.
نصب با Docker Compose #
یک فایل Docker Compose طرحی است که به Docker میگوید چگونه سرویسهای شما را اجرا کند. این فایل تعریف میکند که از کدام نرمافزار (Pi-hole و Traefik) استفاده کند و چگونه باید با یکدیگر ارتباط برقرار کنند. Traefik مسیریابی HTTPS را برای داشبورد وب مدیریت میکند، در حالی که Pi-hole ترافیک DNS را مدیریت میکند.
- کاربر خود را به گروه docker اضافه کنید.console
$ sudo usermod -aG docker $USER
- عضویت گروه خود را بهروزرسانی کنید.console
$ newgrp docker - فایل
docker-compose.ymlرا ایجاد کنید.console$ nano docker-compose.yml - محتوای زیر را در فایل قرار دهید:yaml
services: traefik: image: traefik:latest container_name: traefik restart: unless-stopped environment: DOCKER_API_VERSION: "۱.۴۴" command: - "--providers.docker=true" - "--providers.docker.exposedbydefault=false" - "--providers.docker.network=traefik-public" - "--entrypoints.web.address=:80" - "--entrypoints.websecure.address=:443" - "--entrypoints.web.http.redirections.entrypoint.to=websecure" - "--entrypoints.web.http.redirections.entrypoint.scheme=https" - "--certificatesresolvers.le.acme.httpchallenge=true" - "--certificatesresolvers.le.acme.httpchallenge.entrypoint=web" - "--certificatesresolvers.le.acme.email=${LETSENCRYPT_EMAIL}" - "--certificatesresolvers.le.acme.storage=/letsencrypt/acme.json" ports: - "۸۰:۸۰" - "۴۴۳:۴۴۳" volumes: - /var/run/docker.sock:/var/run/docker.sock:ro - ./letsencrypt:/letsencrypt pihole: image: pihole/pihole:latest container_name: pihole restart: unless-stopped environment: TZ: ${TZ} volumes: - ./etc-pihole:/etc/pihole - ./etc-dnsmasq.d:/etc/dnsmasq.d ports: - "۵۳:۵۳/tcp" - "۵۳:۵۳/udp" labels: - "traefik.enable=true" - "traefik.http.routers.pihole.rule=Host(`${DOMAIN}`)" - "traefik.http.routers.pihole.entrypoints=websecure" - "traefik.http.routers.pihole.tls=true" - "traefik.http.routers.pihole.tls.certresolver=le" - "traefik.http.services.pihole.loadbalancer.server.port=80"
فایل را ذخیره کنید و ببندید.
این پیکربندی Docker Compose، Pi-hole را در پشت Traefik مستقر میکند و دسترسی امن HTTPS به داشبورد وب را امکانپذیر میسازد و در عین حال پورتهای DNS را مستقیماً برای مسدود کردن تبلیغات در سراسر شبکه در معرض نمایش قرار میدهد. هر سرویس در این استقرار عملکرد خاصی دارد:
pihole service
- کانتینر را با استفاده از ایمیج رسمی
pihole/piholeاجرا میکند. - پورتهای
۵۳/tcpو۵۳/udpرا در معرض دید قرار میدهد تا دستگاههای موجود در شبکه شما بتوانند از Pi-hole به عنوان سرور DNS خود استفاده کنند. - پیکربندی پایدار را در دایرکتوریهای
./etc-piholeو./etc-dnsmasq.dذخیره میکند تا تنظیمات را در هنگام راهاندازی مجدد کانتینر حفظ کند. - تنظیمات منطقه زمانی را از فایل
.envبه ارث میبرد. - شامل برچسبهای Traefik است که ترافیک HTTPS را برای دامنه Pi-hole شما (
${DOMAIN}) به رابط کاربری وب کانتینر روی پورت ۸۰ هدایت میکند. - عملکرد DNS را از مسیریابی HTTPS جدا نگه میدارد—DNS از Traefik عبور میکند در حالی که داشبورد از Traefik برای دسترسی ایمن استفاده میکند.
traefik service
- تمام ترافیک وب را مدیریت میکند و پورتهای ۸۰ و ۴۴۳ را روی میزبان در معرض دید قرار میدهد.
- به طور خودکار گواهیهای TLS را با استفاده از Let’s Encrypt از طریق چالش ACME HTTP-01 تهیه و تمدید میکند.
- از برچسبهای داکر برای مسیریابی درخواستهای HTTPS به کانتینر Pi-hole استفاده میکند.
- گواهیها را بهطور مداوم در دایرکتوری
./letsencryptذخیره میکند. - با کانتینرهای backend از طریق شبکه مشترک
traefik-publicارتباط برقرار میکند. - نمایش خودکار کانتینرها را غیرفعال میکند (
exposedbydefault=false),و تضمین میکند که فقط کانتینرهای دارای برچسب عمومی هستند.
- کانتینر را با استفاده از ایمیج رسمی
- سرویسها را شروع کنید.console
$ docker compose up -d - بررسی کنید که آیا کانتینرها در حال کار هستند یا خیر.console
$ docker compose psنکتهبرای اطلاعات بیشتر در مورد مدیریت پشته Docker Compose، به مقاله نحوه استفاده از Docker Compose مراجعه کنید.
پیکربندی اولیه #
پی-هول معمولاً در شبکههای خانگی نصب میشود که فقط به رابطهای محلی گوش میدهد. برای استفاده از آن در فضای ابری، باید تنظیمات آن را تغییر دهید تا ترافیک شما را بپذیرد. باید تنظیمات امنیتی را طوری پیکربندی کنید که اتصالات خودتان را مجاز کند.
- با اجرای دستور زیر، رمز عبور ادمین را تنظیم کنید.console
$ docker compose exec pihole pihole setpassword
وقتی از شما خواسته شد، یک رمز عبور قوی وارد کنید.
- مرورگر وب خود را باز کنید و دامنه Pi-hole خود، مانند https://pihole.example.com/admin. را باز کنید. از رمز عبوری که تنظیم کردهاید استفاده کنید.

آموزش نصب Pi-hole - پیکربندی Pi-hole برای پذیرش ترافیک از شبکههای غیر محلی (اینترنت):
- در منوی سمت چپ روی Settings کلیک کنید.
- روی تب DNS در بالا کلیک کنید.
- برای رفتن به تنظیمات پیشرفته، دکمهی Basic را تغییر وضعیت دهید.
- در بخش Interface Settings، گزینه Permit all origins را انتخاب کنید.
- روی دکمه ذSave & Apply کلیک کنید..
اخطارفایروال خود را طوری پیکربندی کنید که اجازه دهد ترافیک از طریق پورت ۵۳ از IP کلاینت شما عبور کند. از آنجا که گزینه “اجازه به همه مبداها” را انتخاب کردهاید، سرور شما از نظر فنی در کل اینترنت قابل دسترسی است.
آزمایش #
قبل از پیکربندی دستگاههای خود برای استفاده از Pi-hole، تأیید کنید که سرور به درستی کار میکند و از موقعیت مکانی شما قابل دسترسی است.
- این دستور را از رایانه محلی خود اجرا کنید تا رکوردهای DNS یک دامنه تبلیغاتی شناخته شده
flurry.comرا جستجو کنید.SERVER_IPرا با آدرس IP عمومی سرور خود جایگزین کنید.console$ dig @SERVER_IP flurry.comاگر بخش پاسخ عدد
۰.۰.۰.۰را برگرداند، Pi-hole با موفقیت دامنههای تبلیغاتی را در شبکه شما مسدود میکند. - این دستور را اجرا کنید تا تأیید کنید که وبسایتهای عادی هنوز به درستی نمایش داده میشوند.console
$ dig @SERVER_IP negarnovin.comشما باید رکوردهای دامنه A مربوط به
negarnovin.comرا در خروجی ببینید.
نتیجه گیری #
شما با موفقیت Pi-hole را روی اوبونتو ۲۴.۰۴ با یک داشبورد امن HTTPS مستقر کردهاید. اکنون میتوانید لیستهای مسدودسازی اضافی را در بخش Adlists داشبورد پیکربندی کنید تا سطح حفاظت خود را سفارشی کنید. برای اطلاعات بیشتر، به مستندات Pi-hole مراجعه کنید.
