Homelab od zera, cz. 1: Ubuntu Server w maszynie wirtualnej
Stawiam Ubuntu Server 26.04 LTS w VirtualBoxie pod domowy filtr DNS: sieć mostkowana, stały adres IP (z tłumaczeniem, skąd się bierze /24), dysk na LVM, SSH i pierwsza aktualizacja. Razem z moimi wpadkami.
Read in EnglishMój pierwszy AdGuard stanął jakiś rok temu na starym HP Z400. Niestety w tej maszynie padła płyta główna, więc z mojego osobistego komputera zrobiłem maszynę serwerową. Dziś ten komputer działa na Fedorze 24/7 i jest hostem dla „ubunciaka”, czyli Ubuntu Server w maszynie wirtualnej, na którym siedzi między innymi AdGuard.
W tej serii pokażę, jak postawić to samo u siebie. Cel jest prosty: ochronić bliskich. Rodzice, dziadkowie, młodsze rodzeństwo nie muszą znać się na informatyce, a i tak zasługują na internet bez śmieciowych reklam, śledzenia i stron podszywających się pod banki. Filtr DNS dla całej sieci domowej robi to za nich, bez instalowania czegokolwiek na każdym telefonie.
- Część 1 (ten wpis): maszyna wirtualna i Ubuntu Server ze stałym adresem IP i SSH.
- Część 2: Docker, Portainer i AdGuard Home oraz podpięcie całej sieci w routerze.
VirtualBox czy KVM?
U siebie korzystam głównie z KVM (przez libvirt), ale dla początkujących polecam VirtualBoxa, bo jest mega prosty w obsłudze i na nim zrobiłem zrzuty do tego poradnika. Przejście z VirtualBoxa na KVM to trochę jak przesiadka z Fiata Fiorino do ciężarówki: opcji i możliwości jest dużo więcej. KVM (Kernel-based Virtual Machine) to hipernadzorca wbudowany w jądro Linuxa, więc maszyny działają bardzo blisko sprzętu i wydajność jest niewiele gorsza od natywnej. W VirtualBoxie o takiej wydajności można raczej pomarzyć.
Logika instalacji jest w obu przypadkach taka sama. W innym wpisie pokażę, jak na hoście z Fedorą postawić maszynę z Windowsem i przekazać jej własną kartę graficzną (GPU passthrough), żeby grać praktycznie natywnie. Robi to ogromną różnicę.
Krok 1: nowa maszyna wirtualna
W VirtualBoxie klikamy Nowa, nadajemy nazwę (u mnie „Ubunciak”), jako system wybieramy Linux / Ubuntu (64-bit) i odznaczamy instalację nienadzorowaną (unattended), bo instalator przeklikamy sami.
Sam AdGuard potrzebuje bardzo mało zasobów, ale na tym serwerze z czasem wylądują kolejne usługi, więc daję zapas: 4 GB RAM, 4 procesory i 50 GB dysku.
I tu pierwsza wpadka: przy dysku nie dopisało mi się zero i zamiast 50 GB ustawiłem 5 GB. Na tak małym dysku instalacja by się nie zmieściła, więc poprawiłem to na 50 GB. Zdarza się, dlatego warto rzucić okiem na podsumowanie przed kliknięciem „Zakończ”.
Sieć: karta mostkowana
To ważny krok. Domyślnie VirtualBox ustawia kartę sieciową w tryb NAT, w którym maszyna jest schowana za hostem i reszta sieci domowej jej nie widzi. Serwer DNS dla całego domu musi być widoczny dla wszystkich urządzeń, więc w Ustawienia → Sieć zmieniamy tryb na Mostkowana karta sieciowa (bridged). Wtedy maszyna dostaje własny adres w sieci domowej, tak jak każdy inny komputer.
Można też stworzyć osobną sieć wewnętrzną i pilnować tylko jej, to już zależy od waszej inwencji. W tym poradniku chcę jednak chronić całą sieć domową, więc zostaję przy trybie mostkowanym.
Krok 2: obraz ISO i start instalatora
Pobieramy Ubuntu Server 26.04.1 LTS ze strony ubuntu.com/download/server. Wersja LTS ma 5 lat standardowego wsparcia, czyli dokładnie to, czego chcemy od serwera. Dobrym nawykiem jest też sprawdzenie sumy kontrolnej SHA256 pobranego obrazu z tą opublikowaną przez Canonical. Na Windowsie robi się to poleceniem:
certutil -hashfile ubuntu-26.04.1-live-server-amd64.iso SHA256
Uruchamiamy maszynę. Ponieważ nie ma jeszcze systemu, VirtualBox sam zapyta o płytę: wskazujemy pobrany plik .iso i klikamy Zamontuj i spróbuj uruchomić.
Wyskoczy menu GRUB-a. U mnie jest w nim tylko Try or Install Ubuntu Server, więc klikam Enter.
Krok 3: instalator
Teraz szybkie przeklikiwanie kreatora. Język wybieram angielski, bo nie jest mi obcy i lepiej mi się w nim pracuje, a do tego łatwiej potem szukać komunikatów błędów w internecie. Wy możecie wybrać, jaki chcecie. Układ klawiatury ustawiam na polski, z przyzwyczajenia. Ważne tylko, żeby zgadzał się z waszą klawiaturą. Jako typ instalacji zostawiamy po prostu Ubuntu Server i dajemy Done.
Sieć i stały adres IP
I tu wpadka nr 2: kartę mostkowaną podpiąłem pod port Ethernet w laptopie, a kabla nawet nie podłączyłem. Instalator pokazał więc autoconfiguration failed. Nie przejmujemy się tym, bo i tak ustawimy adres ręcznie. Serwer DNS musi mieć stały adres, inaczej router po jakimś czasie przydzieli mu inny i cały dom straci internet.
Klikamy nasz interfejs enp0s3 i wciskamy Enter. Wysunie się lista nienumerowana (taki żarcik z <ul> dla tych po INF.03), a my wybieramy Edit IPv4.
Tam zmieniamy IPv4 Method na Manual i wpisujemy adresację naszej sieci:
| Pole | U mnie | Co to jest |
|---|---|---|
| Subnet | 192.168.0.0/24 |
adres całej sieci domowej z maską |
| Address | 192.168.0.200 |
adres, który dostanie serwer |
| Gateway | 192.168.0.1 |
adres routera |
| Name servers | 1.1.1.1 |
DNS na czas instalacji (Cloudflare), później to zmienimy |
Adres serwera wybierzcie spoza puli DHCP routera (w ustawieniach DHCP routera zobaczycie zakres, np. .100–.199) albo zarezerwujcie go w routerze. Jeśli router da ten sam adres innemu urządzeniu, zrobi się konflikt.
Skąd wziąć te liczby i co znaczy /24
Jeśli jesteście na Windowsie, wpiszcie w terminalu ipconfig i znajdźcie kartę, przez którą jesteście połączeni. Interesują nas dwie linijki:
Maska podsieci . . . . . . . . . : 255.255.255.0
Brama domyślna . . . . . . . . . : 192.168.0.1
Brama domyślna to zwykle adres routera. Adres IPv4 składa się z czterech oktetów oddzielonych kropkami, a każdy oktet to 8 bitów, czyli liczba od 0 do 255. Maska mówi, która część adresu opisuje sieć, a która konkretne urządzenie:
255w masce oznacza, że cały oktet należy do adresu sieci. U mnie pierwsze trzy oktety,192.168.0, są wspólne dla wszystkich urządzeń w domu;0na końcu oznacza, że czwarty oktet jest do rozdania urządzeniom (hostom).
Zapis /24 to ta sama maska, tylko policzona w bitach: 3 oktety × 8 bitów = 24 bity na sieć. Na hosty zostaje 8 bitów, czyli 2⁸ = 256 adresów. Dwa z nich są zarezerwowane: 192.168.0.0 to adres samej sieci, a 192.168.0.255 to broadcast, czyli adres, na który wysyła się wiadomość do wszystkich urządzeń w sieci naraz. Urządzeniom zostaje więc 254 adresy, od .1 do .254.
Wasza sieć może wyglądać inaczej. Prywatne zakresy adresów są trzy (dawne klasy A, B i C), a zasada działania jest taka sama, różnią się tylko liczby:
10.0.0.0/8, np. router10.0.0.1;172.16.0.0/12, np. router172.16.0.1;192.168.0.0/16, w domach najczęściej192.168.0.xalbo192.168.1.x.
/24 to najprostsza sieć, jaka jest. Kiedyś zrobię osobny wpis o liczeniu podsieci, bo pomyślcie, co się dzieje przy masce /12 ;)
Po zapisaniu instalator przyjął adres. Wtedy w końcu się zorientowałem i podłączyłem kabel, więc mamy też połączenie z internetem.
Dalej wyskoczy Proxy configuration. Tego nie ruszamy, dajemy Done. Czekamy, aż instalator sprawdzi mirror z paczkami, i znowu Done.
Dysk: LVM, szyfrowanie i pułapka z rozmiarem
Zostawiamy Use an entire disk i Set up this disk as an LVM group. W prawdziwym serwerze warto zaznaczyć też Encrypt the LVM group with LUKS: jeśli ktoś ukradnie dysk, bez hasła nic z niego nie odczyta. Ja tego tu nie robię, bo ta maszyna zaraz i tak trafi do kosza, jest tylko na potrzeby poradnika. Na głównym komputerze, na którym stoi Fedora, mam dysk zaszyfrowany, i to nawet VeraCryptem. Kto wie, ten wie, dlaczego. System plików zostawiam domyślny, czyli ext4. W układzie ręcznym (Custom storage layout) możecie wybrać np. btrfs.
Teraz zwróćcie uwagę na podsumowanie. Grupa LVM ma 48 GB, ale główna partycja / dostała tylko 24 GB, a drugie tyle zostało jako free space. Instalator Ubuntu domyślnie nie zajmuje całej grupy, żeby zostawić miejsce na później.
Dla serwera DNS 24 GB w zupełności wystarczy, ale warto o tym wiedzieć. Można od razu edytować ubuntu-lv i dać mu cały rozmiar albo powiększyć go później jedną komendą, bez reinstalacji:
sudo lvextend -r -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
Klikamy Done i potwierdzamy Continue. Instalator ostrzeże, że wszystko z dysku zostanie usunięte, ale to dysk wirtualny, więc niczego nie tracimy.
Profil, Ubuntu Pro i SSH
W profilu podajemy swoje imię, nazwę serwera (u mnie madej), nazwę użytkownika i porządne hasło. Tym hasłem będziemy się logować i używać sudo.
Upgrade to Ubuntu Pro pomijamy (Skip for now, potem Continue). Można to włączyć później.
Potem zaznaczamy Install OpenSSH server. SSH to zdalny terminal i bez niego serwer jest mało wygodny. Siedzę sobie na fotelu i tylko kiedy trzeba, łączę się z serwerem z laptopa. Bez tego musiałbym za każdym razem iść do serwera, coś skonfigurować, wrócić do laptopa sprawdzić, czy działa, i tak w kółko. Niezłe kardio.
Na razie zostawiam logowanie hasłem, bo chodzi o to, żebyście na szybko zabezpieczyli ruch w swoim domu. Klucze SSH są dużo lepsze od haseł i pokażę je w osobnym wpisie. Z dodatkowych usług (Featured server snaps) nic nie instalujemy, dajemy Done i instalacja rusza. Po jej zakończeniu klikamy Reboot Now.
Krok 4: pierwsze logowanie przez SSH
Po restarcie maszyny wchodzę na laptopie w terminal i wpisuję straszną komendę:
ssh sebastian@192.168.0.200
U was będzie to ssh [nazwa_użytkownika]@[adres_serwera]. Przy pierwszym połączeniu SSH zapyta, czy ufamy temu serwerowi, i pokaże jego odcisk klucza (fingerprint). Odpowiadamy yes. Klient zapamięta ten klucz, a jeśli kiedyś się zmieni, SSH ostrzeże, że ktoś może się podszywać pod serwer. W sieci domowej możemy spokojnie zaufać, ale jeśli chcecie być skrupulatni, porównajcie odcisk z tym, co pokazuje sam serwer:
ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
Wpisujemy hasło i tadam, witam w mojej krainie.
Krok 5: aktualizacja
Standardowo musimy tego skurczybyka zaktualizować. Obraz ISO nigdy nie jest najświeższy, a od jego wydania wyszły nowe łatki bezpieczeństwa (system od razu pisze, że czekają 23 aktualizacje):
sudo apt update && sudo apt upgrade -y
apt update pobiera listę dostępnych wersji, a apt upgrade -y instaluje aktualizacje bez dopytywania. Leci zielony pasek, czekamy.
Linijki File descriptor ... leaked on vgs invocation wyglądają groźnie, ale to tylko ostrzeżenia narzędzi LVM przy generowaniu konfiguracji GRUB-a. Można je zignorować.
Co mamy
Działający Ubuntu Server ze stałym adresem w sieci domowej, zaktualizowany i dostępny zdalnie przez SSH. To fundament, na którym w części 2 postawimy Dockera, Portainera i AdGuard Home, a potem przepniemy na niego DNS całego domu.
Moje wpadki z tej części: 5 GB zamiast 50 GB i brak podłączonego kabla. Obie poprawione w minutę. Nie ma się czym przejmować, tylko trzeba czytać, co się klika.