0

Jak postawić domowy serwer

Niedługo wybieram się na dłuższy czas za granicę i nie jestem w stanie zabrać ze sobą dobrego komputera, mimo że bardzo go będę potrzebował. Jak więc rozwiązać tę sprawę? Zdecydowałem się postawić domowy serwer, z którym będę się łączył za pomocą Internetu.

#1 – odpowiedni komputer

Nie ma wyjścia – jeśli chcemy mieć serwer domowy to musimy go fizycznie posiadać. Im lepszy – to tym lepiej dla nas. W rzeczywistości jednak prawdopodobnie mało kto będzie potrzebował naprawdę wydajnej maszyny. W zasadzie wystarczy dowolny komputer (nawet Intel Compute Stick czy Raspberry PI) z dostępem do Internetu. To właśnie na połączenie sieciowe proponuję zwrócić uwagę – jego szybkość będzie przede wszystkim determinowała całkowitą efektywność serwera. Reszta podzespołów (np. procesor czy dysk) jakoś sobie poradzą zakładając, że naszym celem jest serwer przeznaczony maksymalnie dla kilku osób. W drastycznym przypadku serwer można postawić nawet na komputerze z lat 90, ale wtedy ten poradnik niezbyt się sprawdzi 🙂

Warto tutaj pomyśleć o podejściu ekonomicznym, a więc wypiąć z naszego przyszłego serwera kartę graficzną, karty rozszerzeń oraz wyłączyć niepotrzebne wentylatory. Oczywiście w efekcie końcowym nie będzie nam też potrzebny monitor ani urządzenia peryferyjne. Na końcu artykułu podałem również pomysł jak znacznie zredukować zużycie prądu.

#HACK

Jeśli nie masz zamiaru bawić się w konfigurowanie systemu od podstaw to zainstaluj dowolny system operacyjny na serwerze  (jeśli już jest zainstalowany to można to ominąć), a następnie pobierz program TeamViewer.  Umożliwia on połączenie się z naszym serwerem na podstawie numeru ID oraz hasła, a wszystkie potrzebne ustawienia można w prosty sposób wyklikać w menu. Jeśli ktoś chce mieć dostęp w jak najszybszy i jak najprostszy sposób do swojego serwera/komputera z całego świata to to będzie dla niego idealne rozwiązanie. Jest to moim zdaniem nawet lepsze rozwiązanie niż pulpit zdalny, gdyż nie trzeba przejmować się adresami IP.

Czasem jednak dobrze byłoby nie polegać na pracy firmy, której przecież zdarzały się już poślizgi w przeszłości (np. dzisiaj z jakiegoś powodu po kilku sekundach połączenia obraz jest zamrażany) i zrobić własne połączenie, które jest w zasadzie całkowicie niezależne od osób trzecich. Opisuję to w kolejnych krokach.

#2 – instalacja podstawowych składników

Mimo, że ogólnie zdecydowanie preferuję Windowsa, to jednak na serwerze domowym linux raczej poradzi sobie lepiej. Zdecydowanie polecam instalować najnowsze wersje dystrybucji, gdyż starsze tylko będą przysparzały problemów (niespełnione zależności itp.). Do swojego serwera wybrałem Ubuntu 16.04, gdyż wydaje się być najprostszym linuksem, a dodatkowo ma chyba największą społeczność użytkowników.

W moim przypadku instalacja systemu przebiegła bezproblemowo. Warto zaszyfrować swój katalog domowy oraz pomyśleć o jakimś RAIDzie, na wypadek uszkodzenia dysku.

Kolejnym krokiem jest zdalny dostęp do naszego serwera. Najpierw utwórzmy połączenie z sieci lokalnej. Okazuje się, że jest to bardzo proste zadanie, gdyż wystarczy zainstalować OpenSSH korzystając ze wskazówek na stronie Ubuntu. W tym momencie polecam już skonfigurować SSH w ten sposób, by łączenie odbywało się za pomocą wymiany kluczy (z ustawionym passphrase), a nie haseł – bezpieczeństwo serwera jest wbrew pozorom dosyć ważne. Autorzy niestety nie zwrócili uwagi na fakt, że podczas wykonywania polecenia ssh-copy-id konieczne jest włączenie na serwerze OpenSSH opcji PasswordAuthentication yes.  Poza tym klucze (zarówno na kliencie jak i serwerze) oraz plik authorized_keys muszą mieć ustawione chmody na 0600. W zasadzie od razu powinno działać też połączenie SFTP do wymiany plików pomiędzy serwerem a klientem. Stanowczo odradzam stosowanie protokołów FTP lub FTPS – nie są to bezpieczne rozwiązania.

#3 – ustawianie adresów

Jeśli do tej pory działaliśmy w lokalnej sieci, to nie powinny się pojawić większe problemy z połączeniem pomiędzy serwerem a klientem. Pora jednak przejść do docelowego połączenia z naszym serwerem, tzn. z dowolnego punktu w globalnej sieci Internet. Wiele osób bardzo przeżywa to, że posiadają zmienne IP na serwerze – nie jest to moim zdaniem tak wielki problem w amatorskim zastosowaniu. Wystarczy skorzystać z jakiegoś DDNSa, np. darmowego noip.com Działa on w ten sposób, że nasz serwer będzie co kilka minut wysyłał do noip.com informację o swoim numerze IP, a my będziemy go pobierać korzystając z nazwy przydzielonej nam przez tenże serwis. Jest to całkiem wygodne rozwiązanie. Oprócz tego koniecznie musimy skonfigurować nasz router, tzn. ustawić stały adres IP serwera (w wewnętrznej sieci) oraz wykonać przekierowanie portów. Jeśli mamy w miarę nowy router to możemy w nim ustawić sobie rezerwację adresów prywatnych w DHCP – jeśli nie to czeka nas batalia z konfiguracją połączenia sieciowego w linuksie. U mnie na całe szczęście wszystko udało się ustawić w routerze. Do SSH i SFTP przydadzą się nam porty 21 i 22 (wewnętrzne) ustawione na nasz prywatny adres IP, natomiast zewnętrzne porty są w zasadzie dowolne (do nich się będziemy odwoływać, więc żeby ich nie zapomnieć to można je zostawić takie same, tj. 21 i 22). Ogólnie najlepiej otwierać tylko naprawdę potrzebne porty, w moim przypadku wystarczyły 9, 21, 22, i 80.

Jeśli wszystko poszło w porządku to można połączyć się w tym momencie z dowolnego miejsca na ziemi z naszym serwerem korzystając np. z polecenia: sftp nazwa-uzytkownika@nazwa-domeny.ddns.net
W moim przypadku dość sporo problemów miałem z poprawnym ustawieniem autoryzacji za pomocą kluczy publicznych. Cóż poradzić, najlepszym rozwiązaniem jest dokładne korzystanie z tutoriali krok-po-kroku oraz wyszukiwanie błędów w Google lub StackOverflow.

#4 – różne dodatki

Po wykonaniu punktu trzeciego niniejszego artykułu dostajemy w zasadzie serwer, o który nam chodziło. Jednak warto doinstalować sobie programy, które nam się mogą przydać w przyszłości. W moim przypadku niezbędny okazał się PHP (od Ubuntu 16.04 domyślnie instaluje się wersja 7), MySQL, Apache2, VirtualBox, Git oraz galeria zdjęć (być może niektórym by do tego celu wystarczył Facebook… ale dla mnie jednak takie rozwiązanie będzie lepsze). Instalacja ww. programów w zasadzie nie wiąże się z żadnymi problemami (oprócz renderowania PHP), więc nie warto o tym pisać.
Mój dostawca Internetu zablokował używanie portu 80 (zewnętrznego), więc musiałem go zmienić na inny. Ponadto galeria zdjęć piwigo potrzebuje wyłączenia w MySQLu STRICT_MODE lub starszej wersji tej bazy danych.

#5 – zdalne uruchamianie komputera

Jeśli będziemy korzystać z naszego serwera raz na kilka dni to bez sensu jest, by pracował on cały czas. Na szczęście da się to obejść pod warunkiem, że zastosowaliśmy w nim w miarę nową płytę główną oraz kartę sieciową. Rozwiązanie to nazywa się Wake on LAN i polega na tym, że karta sieciowa serwera ciągle pracuje, a kiedy dostanie pewien „magiczny” ciąg danych to uruchamia komputer. Niestety moja obecna karta sieciowa sobie z tym nie radzi, więc coś więcej będę mógł o tym napisać dopiero w przyszłym tygodniu.

Podsumowanie

Mój cel został w zasadzie osiągnięty – postawiłem serwer, na którym będę mógł zdalnie wykonywać różne operacje praktycznie niemożliwe do przeprowadzenia na moim laptopie (przede wszystkim mam tutaj na myśli wirtualizację obrazów 64-bitowych). Można powiedzieć, że w ten sposób będę mógł korzystać z laptopa jak z tzw. cienkiego klienta zakładając, że opóźnienia wynikające ze znacznej odległości nie będą większe niż kilka sekund. Potrzebuję jedynie dorobić RAID oraz Wake On Lan, których nie mogłem do tej pory skonfigurować z powodu braku odpowiedniego hardware’u.

Serwer wydaje się dość nieźle zabezpieczony i ewentualny atak pewnie mógłby nastąpić poprzez protokół HTTP. Nie jest to jednak specjalnie wysokie ryzyko, a w razie potrzeby nic nie stoi na przeszkodzie by wszystkie zasoby HTTP ograniczyć za pomocą hasła (przynajmniej w moim przypadku). Czy konfigurowaliście kiedyś własne serwery domowe? Jakie macie z nimi doświadczenia? Jeśli tylko macie jakiś nieużywany sprzęt w domu to polecam go wykorzystać – okazuje się to dość prostym zadaniem, a może przynieść wymierne korzyści.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *