[HowTo] Terminal (thin client) Dell Wyse D10D jako bramka VLAN

Terminale (thin client, cienki klient) to takie fajne, niewielkie urządzenia, z założenia służące do pracy ze zdalnym systemem. Przykładowym zastosowaniem są maszyny do przeglądania katalogu elektronicznego w bibliotece, kioski miejskie itp. W dzisiejszym wpisie zajmiemy się modelem Dell Wyse D10D (z serii Dx0D) i przerobimy go na bramkę VLAN wykorzystującą oprogramowanie ZeroTier One.

UWAGA

Wszelkie prace wykonujesz na własną odpowiedzialność. Nie odpowiadam za utratę danych, uszkodzenia sprzętu i zdrowia.

Założenia i geneza tego, nazwijmy to, "projektu"

Sieć, do której czasem się potrzebuję dostać, jest niestety za prywatnym adresem IP. Stąd potrzebna jest bramka VLAN, która będzie działała przez jakiegoś pośrednika. W tejże sieci są routery, które mają funkcję hosta VPN - co pozwoliłoby uzyskać zamierzony efekt - niestety bez publicznego IP to nie zadziała. Obecnie w roli bramki jest Raspberry Pi 4 B / 2GB. Uznałem, że się tam nieco marnuje - bramka VPN/VLAN nie potrzebuje GPIO, malinek na rynku obecnie brakuje (stan na maj 2022). 
Wniosek: wymienić na coś tańszego, co tak samo spełni swoją rolę. Stąd zainteresowanie thin clientami. 
Wymagania:
  • musi mieć port Ethernet
  • musi działać 24/7
  • musi się automatycznie włączyć ponownie po przerwie w dostawie prądu
  • musi mieć możliwość uruchomienia systemu Linux
  • kosztować mniej niż RPi4 2GB w sugerowanej cenie detalicznej (na maj 2022: poniżej 250 zł)

Jak to jest zbudowane

A oto nasi pacjenci

Często okazuje się, że thin client to pełnoprawny komputer z okrojonym oprogramowaniem, procesorem mobilnym biorącym mniej energii niż desktopowy odpowiednik (a także wolniejszym) i niewielką ilością pojemności dyskowej. Nabyte przeze mnie z drugiej ręki dwa terminale Wyse D10D posiadają następujące parametry:
  • Procesor AMD G-T48E o taktowaniu 1.40GHz i dwóch rdzeniach
  • 2GB pamięci RAM DDR3
  • Disk On Module SATA o zawrotnej pojemności 2 GB w technologii SLC
    (znajdźcie teraz SSD SLC 😀)
  • Kartę graficzną AMD Radeon HD 6250
  • 4 porty USB 2.0
  • Gigabitowy Ethernet
  • Dwa wyjścia wideo, DisplayPort oraz DVI-I
  • Zasilanie 19V, na jedną ze standardowych wtyczek DC 2,5/5,5mm
  • Kompaktowe wymiary 170 x 40 x 185 mm
Koszt jednej sztuki: 44 PLN.

W środku

Po wykręceniu trzech śrubek z tyłu, wysunięciu plastikowej obudowy, zdjęciu metalowej części ukazuje się nam widok następujący:
Mamy tutaj jeden port SODIMM dla DDR3, zintegrowane gniazdo SATA z zasilaniem z podłączonym wyżej wymienionym modułem dyskowym. Aby się do nich dobrać należy zdemontować płytkę znajdującą się tuż przy RAM. Ponieważ 2GB to trochę mało na serwerowy system, miejsca jest mało by upchnąć zwykły dysk, to wymieniłem go na SSD M.2 o pojemności 16GB z przejściówką. Używany SSD o takiej pojemności można dostać w cenie 10-20 PLN, przejściówka 18 PLN. Łączna kwota wraz z terminalem: nie więcej niż 82 PLN. 



Przejściówka jest nieco większa od oryginalnego DOM, zatem jest włożona nieco pod kątem 

Więcej ciekawych informacji w języku angielskim można przeczytać na ParkyTowers (polecam, kopalnia wiedzy o terminalach - czerpałem stąd sporą część wiedzy). W porównaniu do modelu D10DP opisanego na w/w stronie, mój terminal nie ma gniazda miniPCIe ani wyprowadzonych pinów USB dla karty WiFi, jak i też samej karty WiFi. Nie są potrzebne w tym zastosowaniu.

Uruchomienie nr 1

Terminal poskładany, odpalamy i wchodzimy do BIOS via klawisz [DEL].
SSD poprawnie się zgłasza

Sekcja Advanced

Domyślnie terminal miał ustawiony tryb SATA na IDE - zmiana na AHCI. Mamy także interesującą nas opcję Power Loss Recovery Options - możemy tu ustawić automatyczne uruchomienie ponowne po utracie zasilania - zmieniamy na Always On. Dzięki temu po utracie, a następnie powrocie zasilania uruchomi się automatycznie od nowa. Zostaje ustawić poprawnie zegar, upewnić się, że jest włączona opcja Boot From USB i można instalować system.

No dobra, ale co z oprogramowaniem?

Nie sprawdziłem fabrycznego systemu (nie zwróciłem nawet uwagi, czy jest zainstalowany). Od razu jedziemy z Ubuntu Server 22.04 LTS. Pobieramy go z oficjalnej strony Ubuntu i wybieramy opcję 2 Manual Server Installation aby pobrać obraz. Uwaga: Ubuntu Server nie wspiera architektury i386. Na szczęście procesor w tym terminalu jest oparty o wspierane amd64. Aby pominąć obowiązkową próbę bootowania z sieci (nie da się tego wyłączyć), wcisnąć [Esc].
Instalacja Ubuntu Server odbywa się w trybie tekstowym. Wybieram wersję standardową i instaluję system na całym dostępnym dysku bez użycia LVM:


Po wprowadzeniu danych użytkownika, nazwy hosta, hasła, wybieram także instalację serwera SSH. Nie wybieram żadnej dodatkowej paczki snap - dla tego zastosowania zainstalujemy ZeroTier One później. Po przejściu wszystkich kroków pozostaje jedynie poczekać na koniec instalacji.
Po restarcie system bez problemu wstaje i można zalogować się w konsoli.
Cześć, tty1

Usługa VLAN dla każdego, czyli ZeroTier One

Jak wspomniałem wyżej sieć zdalna jest za NATem, ma prywatne IP. ISP nie udostępnia w żadnym wypadku adresu publicznego. Jedyną drogą dostania się do takiej sieci jest VPN lub VLAN. Do tego przydatny jest jakiś serwer, ale co po serwerze jak nie można przekierować portów u usługodawcy?
Tu właśnie pojawia się ZeroTier One. Czy ktoś pamięta Hamachi, używane do wirtualnego LANu, aby pograć z kolegami? ZTO działa podobnie. W podstawowym, darmowym planie możemy utworzyć nielimitowaną liczbę sieci VLAN, łącznie do 50 hostów. Myślę, że wystarczy do większości zastosowań. W tym wypadku mamy 1 sieć i dwa hosty.
Najpierw zakładamy konto na https://www.zerotier.com/
Po zalogowaniu się będziemy mieli mniej więcej taki widok:
kokpit ZeroTier

Wystarczy stworzyć sieć klikając Create Network. Automatycznie pojawi się nam nowa sieć z wygenerowaną nazwą. Po kliknięciu na nazwę otworzą się nam opcje.
Możemy zmienić nazwę, wybrać czy sieć ma być publiczna czy prywatna (domyślnie to drugie). W trybie prywatnym musimy ręcznie akceptować dołączające węzły. Wybieramy prywatne. Poniżej możemy wybrać zakres prywatnych adresów. Sieci domowe, których używam mają zwykle adresy typu 192.168.x.0/24. Najczęściej x to 0 lub 1 w routerach domowych. Dla uniknięcia konfliktów możemy wybrać np. 192.168.196.0/24, ewentualnie zakładka advanced i ustawiamy początek i koniec adresacji. Na potrzeby tego poradnika zaznaczam opcję auto-assign. Nazwę sieci pozostawiam domyślną. Na razie to wszystko co chcemy ustawić.
ustawianie adresacji IPv4


Dołączające węzły otrzymają adres automatycznie i pozostanie on dla nich na stałe.

OSTRZEŻENIE

Po wykonaniu czynności w następnym rozdziale: dowolny węzeł podłączony do utworzonej sieci VLAN ZeroTier, w której jest ta bramka, po dodaniu powyższych reguł będzie miał dostęp do Twojej wewnętrznej sieci. Upewnij się, że dodajesz jedynie zaufane urządzenia, lub ogranicz przekazywanie pakietów do konkretnych węzłów odpowiednio dostosowując reguły iptables!

Teraz połączmy to w całość

Sieć bez węzłów jest bezużyteczna. Na naszym terminalu instalujemy aplikację stąd i wybieramy opcję Linux.
Dla Ubuntu korzystamy z podanego polecenia 
curl -s https://install.zerotier.com | sudo bash

co zainstaluje nam aplikację. Teraz potrzebne jest nam nasze id sieci. Daemon zerotier-one powinien być już uruchomiony, jeśli tak nie jest (sprawdź przez ps aux | grep zerotier-on[e]), uruchom go sudo zerotier-one -d.
Teraz trzeba podłączyć naszą bramkę do sieci. Do zarządzania zerotier-one potrzebne jest polecenie zerotier-cli. Aby dołączyć do sieci wpisujemy
sudo zerotier-cli join <id_sieci>
Powinniśmy otrzymać komunikat 200 join OK. Następnie musimy zaakceptować podłączenie węzła do sieci z poziomu aplikacji web:
Tutaj należy zaznaczyć 'auth' przy urządzeniu, które chcemy autoryzować.
Możemy zmienić adres IP na taki, który chcemy (usunąć poprzedni i dodać inny), ustawić przyjazną nazwę itd. Przypuśćmy, że nastawimy adres 192.168.196.1 dla naszej bramy, a sieć domowa, do której chcemy mieć dostęp, ma adres 192.168.0.1/24. Musimy w tym celu dodać trasę do sieci poprzez naszą bramkę:
dodawanie trasy - podajemy sieć docelową i adres węzła bramki w naszym VLAN
Teraz można zainstalować ZTO na urządzeniu nie połączonym z siecią terminala. Dla przykładu skorzystam z telefonu i sieci komórkowej. Dodajemy sieć do urządzenia i akceptujemy kolejny węzeł.
Niestety, to nie wystarczy - na naszym terminalu musimy jeszcze włączyć przekazywanie pakietów z sieci zerotier do sieci lokalnej.
Na terminalu edytujemy plik /etc/sysctl.conf i usuwamy komentarz z linii net.ipv4.ip_forward=1. Zapisujemy. Następnie musimy dodać reguły przekazywania pakietów za pomocą iptables. Interfejs sieciowy ethernet u mnie to enp4s0, a interfejsy wirtualne usługi ZTO zaczynają się od zt. Potrzebny będzie także pakiet iptables-persistent (sudo apt install iptables-persistent)
Dodajemy następujące reguły, pozwalające na transfer pakietów pomiędzy interfejsami:

sudo iptables -t nat -A POSTROUTING -o enp4s0 -j MASQUERADE
sudo iptables -A FORWARD -i enp4s0 -o zt+ -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i zt+ -o enp4s0 -j ACCEPT
# i zapisujemy poleceniem
sudo sh -c "iptables-save > /etc/iptables/rules.v4"

Oczywiście enp4s0 zastępujemy swoim interfejsem ethernet. Wyrażenie zt+ szuka wszystkich interfejsów zaczynających się od zt. 
Ponieważ jestem bardzo leniwy, zamiast restartować usługi restartuję serwer.

Po ponownym uruchomieniu, włączeniu zerotier na telefonie i podłączeniu się do VLANa, mogę zalogować się na komputer w sieci lokalnej korzystając z danych komórkowych.


Gotowe!

Przemyślenia dzień później

Wydaje mi się, że da się to zrobić lepiej. 

System operacyjny i dysk

Na przykład zamiast wymieniać fabryczny dwugigabajtowy SSD na coś większego i pchać całe duże Ubuntu Server, można zainstalować jakąś lżejszą dystrybucję (np TinyCore Linux) i skompilować ZeroTier ze źródeł (no bo czemu nie?).
Tym sposobem ok 40 PLN mamy w kieszeni.
Jeśli krzywo włożony dysk kogoś gryzie, zawsze jest opcja kupna terminala w wersji 2GB RAM / 8GB SSD za 20 PLN więcej. Te 8GB powinno wystarczyć.
Wybrałem Ubuntu Server ze względu na chęć łatwego instalowania oprogramowania z paczek deb.
Zabawę z jakimś mniejszym Linuksem opiszę może w innym poście. Na celowniku jest wspomniany TinyCore i Slax.

Dostęp do sieci wewnętrznej czy dostęp tylko do naszego hosta?

Jeśli potrzebujemy wyłącznie dostęp do naszej bramki (np przez SSH) i stamtąd dalej chcemy przeglądać zasoby sieci lokalnej, to można pominąć konfigurację iptables.
Jeśli potrzebujemy dostęp do jakiegoś komputera, który chodzi i tak 24/7, to cała brama nie jest raczej potrzebna. Wtedy wystarczy jedynie nam taki VLAN, do którego się podłączamy z innego komputera.

Co jeszcze można tutaj zrobić?

Nic nie stoi na przeszkodzie, aby np. włożyć większy dysk (nawet 2,5 cala, jeśli dacie radę go upchnąć bezpiecznie w obudowie) i zrobić sobie jakiś serwer plików, czy dołożyć funkcjonalność NAS. Drugi egzemplarz tego terminala ma już złącze PCIe, a także dodatkowe gniazdo SATA. W BIOS widać, że jest dostępny drugi port :)
Dwa posiadane przeze mnie D10D. Znajdź 3 różnice.
Jak widać na zdjęciu powyżej, jest PCIe, jest dodatkowe SATA, a także tajemniczy CN1700 ;) Właśnie z niego można pobrać zasilanie, tylko potrzebny jest adapter JST XH 1.25mm -> SATA (źródło, tutaj także podane jak przylotować dodatkowy port SATA). Jak to sprawdzę, to na pewno opiszę dodatkowo.

Dajcie znać w komentarzach, jeśli są jakieś pytania.


Komentarze

Popularne posty z tego bloga

Xeon E3-1240v5 na chipsecie B150?

Monitoring z terminala Dell D10D - część I: dokładanie dysku, instalacja Debiana i niemiła niespodzianka