mirror of
https://codeberg.org/postscriptum/gemlog.git
synced 2026-04-01 05:05:27 +00:00
add pi-hole-manual-install-on-fedora-linux.gmi
This commit is contained in:
parent
7b95c34de1
commit
5cce48ced5
2 changed files with 218 additions and 0 deletions
|
|
@ -17,6 +17,7 @@
|
||||||
|
|
||||||
### Нотатки
|
### Нотатки
|
||||||
|
|
||||||
|
=> pi-hole-manual-install-on-fedora-linux.gmi 2026-03-14 Ручне встановлення Pi-hole DNS на прикладі Fedora / Linux
|
||||||
=> install-ergo-irc-server-in-linux.gmi 2026-03-14 Встановлення IRC сервера Ergo в Linux
|
=> install-ergo-irc-server-in-linux.gmi 2026-03-14 Встановлення IRC сервера Ergo в Linux
|
||||||
=> left-oriented-close-tab-button-in-firefox.gmi 2026-03-12 Ліво-стороння орієнтація кнопки "закрити вкладку" в Firefox
|
=> left-oriented-close-tab-button-in-firefox.gmi 2026-03-12 Ліво-стороння орієнтація кнопки "закрити вкладку" в Firefox
|
||||||
=> crxn-gre-fastd-as-the-alternative-to-crypto-hype.gmi 2026-03-07 CRXN, GRE, fastd як альтернатива крипто-садомазохізму
|
=> crxn-gre-fastd-as-the-alternative-to-crypto-hype.gmi 2026-03-07 CRXN, GRE, fastd як альтернатива крипто-садомазохізму
|
||||||
|
|
|
||||||
217
public/uk/pi-hole-manual-install-on-fedora-linux.gmi
Normal file
217
public/uk/pi-hole-manual-install-on-fedora-linux.gmi
Normal file
|
|
@ -0,0 +1,217 @@
|
||||||
|
# Ручне встановлення Pi-hole DNS на прикладі Fedora / Linux
|
||||||
|
|
||||||
|
На сайті DOU є досить інформативний гайд з описом проєкту Pi-hole та причин користуватись ним сьогодні, на відміну від популярних uBlock і AdGuard:
|
||||||
|
|
||||||
|
=> https://dou.ua/forums/topic/54745/ Блокуємо рекламу за допомогою Pi Hole. Детальний гайд
|
||||||
|
* особисто я (через аналізатор Etherape) помічав за uBlock запити на статичне сховище Google, ймовірно за актуалізацією блок-списків, що мене також не влаштовує як мінімум.
|
||||||
|
|
||||||
|
Якщо коротко, то Pi-hole - дозволяє підняти локальний (або локально-мережний) проксі-сервер DNS з Веб-адмінкою, через яку можна наочно керувати правилами блокування та переглядати статистику запитів. При цьому, необхідність у високо-рівневих блокувальниках реклами відпадає, адже паразитний трафік не покидатиме "53 порт" локальної мережі ще на етапі резольву.
|
||||||
|
|
||||||
|
Взагалі, в мене були думки скористатись більш легкими рішеннями DNS, але Pi-hole заманив своєю візуалізацією і орієнтацією конкретно на потрібні мені задачі. Але у всіх гайдах, які мені зустрілись нашвидкоруч, використовується приклад інсталяції скриптом:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
curl -sSL https://install.pi-hole.net | bash
|
||||||
|
```
|
||||||
|
|
||||||
|
Мене це не влаштовує, оскільки сам скрипт доволі великий (через свою універсальність) а також просить root, що тим паче потребує додаткового аналізу виконаних дій на моїй системі. Адже наприклад на Fedora я не користуюсь більше firewalld, а в офіційній документації - зустрічаються ось такі дозвільні приклади, коли як для мене відкриття 80 порту на всі інтерфейси не є прийнятним:
|
||||||
|
|
||||||
|
=> https://docs.pi-hole.net/main/prerequisites/#ufw
|
||||||
|
|
||||||
|
Отже, пробігшись по репозиторіям проєкту на GitHub, я назбирав для себе такий мінімальний набір:
|
||||||
|
|
||||||
|
* FTL (Faster Than Light, `pi-hole/FTL`) - Це ядро комплексу Pi-hole, написане мовою C. Являє собою кастомізований DNS-сервер на базі dnsmasq і відповідає за блокування запитів та збір статистики
|
||||||
|
* Web UI (Admin LTE, `pi-hole/AdminLTE`) - Веб-панель для керування.
|
||||||
|
|
||||||
|
## FTL (Faster Than Light)
|
||||||
|
|
||||||
|
Спочатку, знадобляться як мінімум такі залежності:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
sudo dnf install gmp-static xxd mbedtls-devel
|
||||||
|
```
|
||||||
|
|
||||||
|
Забираємо початковий код і переходимо в його корінь:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
git clone https://github.com/pi-hole/FTL.git
|
||||||
|
cd FTL
|
||||||
|
```
|
||||||
|
|
||||||
|
## Компіляція
|
||||||
|
|
||||||
|
На цьому етапі, можна заглянути в `./build.sh`, але суть там наступна:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
cmake -DCMAKE_C_FLAGS="-fPIC" ..
|
||||||
|
cmake --build .
|
||||||
|
```
|
||||||
|
* для Fedora 43, я додав відсутній в скрипті аргумент `-DCMAKE_C_FLAGS="-fPIC"`
|
||||||
|
|
||||||
|
## Оновлення залежностей mbedtls-devel
|
||||||
|
|
||||||
|
Якщо на етапі збірки буде помилка:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
FTL/src/webserver/x509.c:232:19: error: too few arguments to function ‘mbedtls_x509write_crt_pem’; expected 5, have 3
|
||||||
|
232 | if((ret = mbedtls_x509write_crt_pem(&ca_cert, ca_buffer, sizeof(ca_buffer))) != 0)
|
||||||
|
```
|
||||||
|
|
||||||
|
Це значить, що у вас (як і в мене) в репозиторіях застаріла версія `mbedtls-devel`:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
$ dnf info mbedtls-devel | grep Version
|
||||||
|
Version : 3.6.5
|
||||||
|
Version : 3.6.5
|
||||||
|
```
|
||||||
|
|
||||||
|
=> https://github.com/pi-hole/FTL/issues/2778
|
||||||
|
=> https://docs.pi-hole.net/ftldns/compile/
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
wget https://github.com/Mbed-TLS/mbedtls/releases/download/mbedtls-4.0.0/mbedtls-4.0.0.tar.bz2 -O mbedtls-4.0.0.tar.bz2
|
||||||
|
tar -xjf mbedtls-4.0.0.tar.bz2
|
||||||
|
cd mbedtls-4.0.0
|
||||||
|
sed -i '/#define MBEDTLS_THREADING_C/s*^//**g' include/mbedtls/mbedtls_config.h
|
||||||
|
sed -i '/#define MBEDTLS_THREADING_PTHREAD/s*^//**g' include/mbedtls/mbedtls_config.h
|
||||||
|
cmake -S . -B build -DCMAKE_C_FLAGS="-fomit-frame-pointer"
|
||||||
|
cmake --build build -j $(nproc)
|
||||||
|
sudo cmake --install build
|
||||||
|
```
|
||||||
|
|
||||||
|
Взагалі, коли змінюєте системні залежності в процесі відлову помилок компілятора, або довстановлюєте відсутні пакети `*-devel`, варто скидати поточний сетап з подальшою пере-конфігурацією проєкту:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
rm -rf *
|
||||||
|
cmake ..
|
||||||
|
cmake --build .
|
||||||
|
```
|
||||||
|
|
||||||
|
## Встановлення
|
||||||
|
|
||||||
|
Продовжуємо збірку Pi-hole і перевіряємо результат:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
./pihole-FTL verify
|
||||||
|
```
|
||||||
|
|
||||||
|
В корені FTL ще є корисні скрипти тестів, варто заглянути, але я їх не проходив:
|
||||||
|
|
||||||
|
```
|
||||||
|
FTL/test/run.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
Далі я буду пускати сервер від systemd, тому мене влаштовує глобальна інсталяція від root:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
sudo cmake --install .
|
||||||
|
```
|
||||||
|
|
||||||
|
Вручну потрібно додати стандартні розташування:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
sudo mkdir -p /etc/pihole/config_backups
|
||||||
|
sudo mkdir -p /run/pihole
|
||||||
|
sudo mkdir -p /var/log/pihole
|
||||||
|
|
||||||
|
sudo touch /etc/pihole/dhcp.leases
|
||||||
|
sudo touch /var/log/pihole/FTL.log
|
||||||
|
sudo touch /var/log/pihole/pihole.log
|
||||||
|
sudo touch /var/log/pihole/webserver.log
|
||||||
|
```
|
||||||
|
|
||||||
|
А також видати на неї права користувачеві, від якого планується запуск служби:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
sudo chown -R pihole:pihole /etc/pihole /run/pihole /var/log/pihole
|
||||||
|
```
|
||||||
|
* `pihole` (USER:GROUP) - ваше значення
|
||||||
|
|
||||||
|
### Налаштування
|
||||||
|
|
||||||
|
Якщо запустити сервіс на стандартному конфігі, то можна побачити як мінімум наступне:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
sudo ss -tulpn | grep pihole-FTL
|
||||||
|
udp UNCONN 0 0 0.0.0.0:53 0.0.0.0:* users:(("pihole-FTL",pid=24659,fd=4))
|
||||||
|
udp UNCONN 0 0 0.0.0.0:53 0.0.0.0:* users:(("pihole-FTL",pid=24294,fd=20))
|
||||||
|
tcp LISTEN 0 200 0.0.0.0:443 0.0.0.0:* users:(("pihole-FTL",pid=24659,fd=29))
|
||||||
|
tcp LISTEN 0 200 0.0.0.0:80 0.0.0.0:* users:(("pihole-FTL",pid=24659,fd=28))
|
||||||
|
tcp LISTEN 0 200 [::]:443 [::]:* users:(("pihole-FTL",pid=24659,fd=31))
|
||||||
|
tcp LISTEN 0 200 [::]:80 [::]:* users:(("pihole-FTL",pid=24659,fd=30))
|
||||||
|
```
|
||||||
|
|
||||||
|
Це означає, що якщо у вас є локальна мережа типу Yggdrasil, всі її користувачі зможуть безперешкодно звертатись на цей сервер за виключенням, якщо у вас налаштоване блокування через фаєрвол або в самій програмі це передбачено версією. Також я планую запуск цього серверу локально, тому `0.0.0.0/::` мені потрібно змінити на `127.0.0.1/::1`, звільнити 53, 80 порти (на формальні 5354 і 8053) і прибрати зайвий сокет 443 (HTTPs) - це робиться у файлі `/etc/pihole/pihole.toml`, який буде створено автоматично при першому запуску:
|
||||||
|
|
||||||
|
``` /etc/pihole/pihole.toml
|
||||||
|
[webserver]
|
||||||
|
port = "127.0.0.1:8053,[::1]:8053" ### CHANGED, default = "80o,443os,[::]:80o,[::]:443os"
|
||||||
|
|
||||||
|
[webserver.paths]
|
||||||
|
# цей шлях можна змінити на свій
|
||||||
|
# або встановити до теки `/var/www/html/admin` корінь репозиторію:
|
||||||
|
# `git clone https://github.com/pi-hole/web.git admin`
|
||||||
|
webroot = "/var/www/html"
|
||||||
|
|
||||||
|
[dns]
|
||||||
|
listeningMode = "BIND" ### CHANGED, default = "LOCAL"
|
||||||
|
port = 5354 ### CHANGED, default = 53
|
||||||
|
|
||||||
|
[dns.reply.host]
|
||||||
|
IPv4 = "127.0.0.1" ### CHANGED, default = ""
|
||||||
|
IPv6 = "::1" ### CHANGED, default = ""
|
||||||
|
```
|
||||||
|
|
||||||
|
### Системний сервіс
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
sudo useradd -s /usr/sbin/nologin -Mr pihole
|
||||||
|
```
|
||||||
|
|
||||||
|
``` /etc/systemd/system/pihole.service
|
||||||
|
[Unit]
|
||||||
|
Description=Pi-hole FTL DNS and Web Server
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=exec
|
||||||
|
|
||||||
|
User=pihole
|
||||||
|
Group=pihole
|
||||||
|
|
||||||
|
# дізнатись поточне розташування: `$ which pihole-FTL`
|
||||||
|
# всі опції запуску: `$ pihole-FTL --help`
|
||||||
|
ExecStart=/usr/bin/pihole-FTL -f
|
||||||
|
|
||||||
|
# AmbientCapabilities=CAP_NET_BIND_SERVICE CAP_NET_RAW CAP_NET_ADMIN
|
||||||
|
# CapabilityBoundingSet=CAP_NET_BIND_SERVICE CAP_NET_RAW CAP_NET_ADMIN
|
||||||
|
|
||||||
|
# Restart=on-failure
|
||||||
|
# RestartSec=5s
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
```
|
||||||
|
* у цьому випадку використовується `Type=exec` разом з `-f` (foreground) бо в мене чомусь в бекграунді крашиться процес навіть з forking
|
||||||
|
|
||||||
|
## Налаштування системного резольвера
|
||||||
|
|
||||||
|
В Fedora я змінюю налаштування одним рядком у файлі:
|
||||||
|
|
||||||
|
``` /etc/systemd/resolved.conf
|
||||||
|
[Resolve]
|
||||||
|
DNS=127.0.0.1:5354
|
||||||
|
```
|
||||||
|
|
||||||
|
Тепер потрібно перезавантажити службу:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
sudo systemctl restart systemd-resolved
|
||||||
|
```
|
||||||
|
|
||||||
|
Переглянути статус:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
resolvectl status
|
||||||
|
```
|
||||||
Loading…
Add table
Add a link
Reference in a new issue