EN
← wszystkie wpisy

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.

  • homelab
  • Linux
  • Ubuntu Server
  • sieci
Read in English

Mó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.

Kreator nowej maszyny w VirtualBoxie: nazwa Ubunciak, system Linux, Ubuntu 64-bit
Nazwa i system. Instalację nienadzorowaną zostawiamy wyłączoną.

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.

Ustawienia sprzętu: 4096 MB pamięci i 4 procesory
4 GB RAM i 4 vCPU to spory zapas jak na serwer DNS.

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”.

Ustawienia dysku wirtualnego z omyłkowo wpisanym rozmiarem 5 GB
Wpadka nr 1: 5 GB zamiast 50 GB.

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.

Ustawienia sieci maszyny: karta podłączona jako mostkowana karta sieciowa
Tryb mostkowany: maszyna staje się pełnoprawnym urządzeniem w sieci domowej.

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ć.

Okno VirtualBoxa z wybranym obrazem ubuntu-26.04.1-live-server-amd64.iso
Brak systemu? Podpinamy ISO i startujemy jeszcze raz.

Wyskoczy menu GRUB-a. U mnie jest w nim tylko Try or Install Ubuntu Server, więc klikam Enter.

Menu GRUB z jedną pozycją: Try or Install Ubuntu Server
GRUB: Enter i lecimy dalej.

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.

Ekran wyboru języka instalatora Ubuntu z zaznaczonym English
Język instalatora. Po angielsku łatwiej potem googlować błędy.

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.

Menu interfejsu enp0s3 w instalatorze z podświetloną opcją Edit IPv4
Interfejs enp0s3 → 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
Formularz Edit enp0s3 IPv4 configuration z metodą Manual i wpisaną adresacją 192.168.0.x
Ręczna adresacja: sieć, adres serwera, brama i tymczasowy DNS.

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:

  • 255 w 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;
  • 0 na 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. router 10.0.0.1;
  • 172.16.0.0/12, np. router 172.16.0.1;
  • 192.168.0.0/16, w domach najczęściej 192.168.0.x albo 192.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.

Ekran Network configuration: enp0s3 ze statycznym adresem 192.168.0.200/24
Mimo wpadki adres jest przydzielony.

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.

Guided storage configuration: cały dysk 50 GB, LVM, nieznaczone szyfrowanie LUKS
Cały dysk na LVM. Na prawdziwym serwerze zaznaczcie LUKS.

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.

Podsumowanie dysku: / ma 23.996G, a w grupie ubuntu-vg zostaje 24.000G wolnego miejsca
Partycja / ma 24 GB, drugie 24 GB czeka nieużyte.

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.

Profile configuration: imię Sebastian, nazwa serwera madej, użytkownik sebastian
Profil: nazwa serwera i konto użytkownika.

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.

SSH configuration: zaznaczone Install OpenSSH server oraz logowanie hasłem
Instalujemy OpenSSH server.

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.

Terminal po zalogowaniu przez SSH: Welcome to Ubuntu 26.04.1 LTS, adres enp0s3 192.168.0.200
Pierwsze logowanie. Ubuntu 26.04.1 LTS na jądrze 7.0.

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.

Terminal w trakcie apt upgrade, pasek postępu 81 procent
Aktualizacja w toku. Komunikaty o leaked file descriptor przy grub-probe są niegroźne.

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.

← wszystkie wpisy