Strona domowa GDR!a Tor Hidden Service

V 3.8


OpenWRT na x86 w kontenerze

Kupiłem sobie router / "mini pc" na x86_64, jest na tyle mocny, że aż się prosi wykorzystać go do czegoś jeszcze oprócz pchania pakietów. Sytuacja z oprogramowaniem wygląda niestety tak, że są pfsense/opnsense oparte o FreeBSD oraz OpenWRT oparty o Linuxa.

Zdecydowanie wolę nie musieć uczyć się nowych technologii kiedy akurat przestał działać internet, dlatego wolałem coś opartego o Linuxa. OpenWRT jednak ma dośc ograniczony wybór pakietów, na dodatek nie wspiera obsługi klawiatury i interaktywnego logowania - na x86 można najwyżej podłączyć monitor i oglądać log, albo użyć portu szeregowego. Jeśli już jest możliwość lokalnej pracy z maszynką, wolałbym móc jej użyć. Własny build OpenWRT raczej odpada bo z budowaniem kernela jest jak z przysługami: zrobisz raz, musisz robić zawsze.

Nie znalazłem żadnego pakietu który zamienia normalnego pełnowymiarowego linuxa w bramę/firewall ze zdalnym zarządzaniem, który wyglądałby przynajmniej tak dobrze jak OpenWRT. Zacząłem więc kombinować.

Zainstalowałem na maszynce Ubuntu Server i LXD. Plan był taki, żeby odpalić OpenWRT w kontenerze, a Ubuntu mieć do ewentualnych dodatkowych zastosowań. Używałem tej procedury z małymi modyfikacjami.

Następnie ze strony OpenWRT pobrałem plik "generic-rootfs.tar.gz" i wykorzystałem do stworzenia obrazu LXD:

lxc image import openwrt-x86-64-generic-rootfs.tar.gz --alias openwrt_x86_64

I stworzyłem kontener o nazwie "openwrt":

lxc init openwrt_x86_64 openwrt

Jest to wersja rozwojowa ponieważ w najnowszym obecnie dostępnym stabilnym wydaniu, czyli 18.06.1, nie działa poprawnie start systemu w kontenerze. Następne stabilne wydanie najprawdopodobniej będzie już zawierało poprawkę.

Następnie dodałem kontenerowi pełne przywileje oraz dodałem do niego bezpośrednio karty sieciowe. Po dodaniu kart sieciowych do kontenera, znikają one z komputera-hosta podczas startu kontenera.

CT=openwrt
lxc config device add $CT eth1 nic nictype=physical parent=enp1s0
lxc config device add $CT eth2 nic nictype=physical parent=enp2s0
lxc config device add $CT eth3 nic nictype=physical parent=enp3s0
lxc config device add $CT eth4 nic nictype=physical parent=enp4s0
lxc config device add $CT eth5 nic nictype=physical parent=enp5s0
lxc config set $CT security.privileged true
lxc config edit $CT 

Ta ostatnia komenda otwiera edytor tekstu, co pozwala wkleić następujący kod do konfiguracji kontenera pod kluczem "config":

image.description: OpenWRT 18.06.1 image.os: openwrt image.release: 18.06.1 raw.lxc: lxc.apparmor.profile=unconfined

W skrócie, całkowicie wyłączamy zabezpieczenia dla tego kontenera. Prawdopodobnie da się używać OpenWRT bez wyłączania zabezpieczeń, ale moim celem nie było tutaj zwiększenie bezpieczeństwa tylko zrobienie izolacji przestrzeni nazw. Głównym przeznaczeniem tego pudełka jest routing, nie ma sensu oszukiwać się że na urządzeniu wystawionym bezpośrednio do internetu można uruchamiać jakieś usługi wymagające zaufania.

Teraz kontener jest gotowy do startu:

lxc start $CT
lxc config set $CT boot.autostart true 
lxc exec $CT sh

OpenWRT powinno być dostępne na porcie który został przypisany jako eth2 - domyślnie pierwszy port jest używany jako WAN, i nie ma tam dostępu po SSH, a kolejny - jako LAN z działającym serwerem DHCP. W wydaniach rozwojowych nie jest zainstalowane webowe GUI o nazwie Luci, można je zainstalować następującą komendą:

opkg update
opkg install luci

Można teraz wykorzystać wolne zasoby systemu tworząc inne kontenery bądź uruchamiając dodatkowe oprogramowanie bezpośrednio na Ubuntu. Trzeba tutaj rozważyć kwestię bezpieczeństwa, router będzie pierwszym urządzeniem na które ktoś się może włamać, więc niekoniecznie dobrym pomysłem będzie hostowanie tam prywatnych plików czy uruchamianie OpenHAB (chyba, że ktoś lubi blinkenlights). Przykładem programu którego nie bałbym się tam odpalić jest serwer WWW w osobnym kontenerze, tym razem z włączonymi wszystkimi zabezpieczeniami. Najrozsądniej jest oczywiście nie uruchamiać tam nic więcej.

Teraz dwa słowa o wydajności. Przy przypisanych fizycznych interface'ach, nie powinno być żadnego zauważalnego jej spadku. Kontener używa tego samego kernela co Ubuntu, nie potrzeba więc kopiować pakietów, emulować kart sieciowych i tak dalej. Nie robiłem benchmarków, bo działa.

URL encoded in QR Code Statystyki:

Email
Comments