mDNS alias w sieci lokalnej przez Avahi
Jak wystawić dowolną domenę *.local w sieci LAN bez DNS-a, routera ani /etc/hosts. Jeden plik systemd i nazwa działa na wszystkich urządzeniach.
Problem
Masz serwer (Raspberry Pi, VPS lokalny, stara maszyna) i chcesz żeby mojaprojekt.local działało na wszystkich urządzeniach w sieci domowej — bez grzebania w routerze, bez stawiania DNS-a, bez dodawania wpisów w /etc/hosts na każdym komputerze osobno.
Rozwiązanie: Avahi + avahi-publish-address + systemd service.
1. Sprawdź czy Avahi jest zainstalowany
$systemctl status avahi-daemon● avahi-daemon.service - Avahi mDNS/DNS-SD StackActive: active (running)
Jeśli nie:
$sudo apt install avahi-daemon
2. Znajdź adres IP serwera
$hostname -I192.168.2.203
Zanotuj adres — będzie potrzebny w serwisie.
3. Stwórz plik systemd
Utwórz /etc/systemd/system/avahi-NAZWA.service — zamień NAZWA i adres IP na swoje:
$sudo nano /etc/systemd/system/avahi-mojaprojekt.service
[Unit]
Description=mDNS alias mojaprojekt.local
After=avahi-daemon.service
Requires=avahi-daemon.service
[Service]
ExecStart=/usr/bin/avahi-publish-address -R mojaprojekt.local 192.168.2.203
Restart=on-failure
RestartSec=3
[Install]
WantedBy=multi-user.target
4. Włącz i uruchom
$sudo systemctl daemon-reload$sudo systemctl enable --now avahi-mojaprojekt.service$sudo systemctl status avahi-mojaprojekt.service● avahi-mojaprojekt.service - mDNS alias mojaprojekt.localActive: active (running)
5. Weryfikacja
Z dowolnego urządzenia w sieci lokalnej:
$ping mojaprojekt.localPING mojaprojekt.local (192.168.2.203): 56 data bytes64 bytes from 192.168.2.203: icmp_seq=0 ttl=64 time=1.2 ms
Na macOS możesz też użyć:
$dns-sd -G v4 mojaprojekt.local
Kilka aliasów naraz
Każda domena = osobny plik serwisu. Skopiuj i podmień nazwę:
$sudo cp /etc/systemd/system/avahi-mojaprojekt.service \/etc/systemd/system/avahi-innyprojekt.service$sudo sed -i 's/mojaprojekt/innyprojekt/g' \/etc/systemd/system/avahi-innyprojekt.service$sudo systemctl daemon-reload$sudo systemctl enable --now avahi-innyprojekt.service
Połączenie z Apache / nginx
Avahi ogłasza tylko nazwę DNS — żeby serwer webowy wiedział który vhost obsłużyć, musisz dodać VirtualHost (Apache) lub server_name (nginx).
Przykład dla Apache:
$sudo nano /etc/apache2/sites-available/mojaprojekt.conf
<VirtualHost *:80>
ServerName mojaprojekt.local
DocumentRoot /var/www/mojaprojekt/public
<Directory /var/www/mojaprojekt/public>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
$sudo a2ensite mojaprojekt.conf$sudo systemctl reload apache2
Co się dzieje pod spodem
avahi-publish-address wysyła do sieci pakiet mDNS ogłaszający że mojaprojekt.local → 192.168.2.203. Każde urządzenie z obsługą mDNS słyszy to rozgłoszenie i zapamiętuje mapowanie bez żadnego centralnego DNS-a. Rekord ma krótki TTL (kilka sekund) — dlatego po restarcie serwisu wszystko wraca do normy samoczynnie.