Ile kosztuje router z 5 portowym zarządzlanym przełącznikiem z obsługą VLAN-ów, Wi-Fi (802.11b/g) z WPA-2 PSK, PPPoA (np. Noestrada), PPPoE (np. Multimo), dwoma portami USB (dyskiem twardym lub flash na USB?), możliwością logowania przez SSH, Firewallem (netfilter/iptables), NAT, QoS (z rozpoznawaniem aplikacji na poziomie warstwy 7), (c|r)torrent, wget, DHCP, DNS z pamięcią podręczną, serwerem WWW i FTP, oidentd z wsparciem dla NAT i na deser obsługą IPv6?
Sprzęt: około 300 złotych. Oprogramowanie: wyłącznie darmowe. Czas instalacji: kilka godzin (najdłuższa część to kompilacja całego systemu operacyjnego i wszystkich pakietów, ale jest ona zautomatyzowana i nie wymaga interwencji użytkownika, a sama instalacja zajmuje kilka minut).
Od czego zacząć?
Zaczynamy od kupna wspieranego przez OpenWRT routera. Chodzi nam wyłącznie o najlepszy sprzęt. Oprogramowanie wymienimy zaraz po zakupie. Według moich priorytetów najlepszym wyborem jest ASUS WL-500g Premium. Na drugim miejscu uplasował się Linksys WRTSL54GS.
Gdy mamy już router
Możemy zacząć od instalacji OpenWRT w wersji WhiteRussian. Opisywać instalacji i konfiguracji WhiteRussian nie będę, każdy najdzie na ten temat wiele informacji. Jeśli się uda i router spełnia nasze oczekiwania możemy skończyć w tym miejscu. Ale jeśli chcemy skonfigurować router w zupełnie dowolny sposób najlepszym rozwiązaniem jest zbudowanie OpenWRT ze źródeł.
Oprogramowanie niezbędne do zbudowania OpenWRT
Do zbudowania OpenWRT w Debianie lub Ubuntu niezbędne jest posiadanie następujących pakietów:
# aptitude install build-essential binutils flex bison autoconf gettext texinfo sharutils subversion libncurses5-dev ncurses-term zlib1g-dev
Źródła z repozytorium Subversion
Pobieramy źródła OpenWRT z repozytorium Subversion:
$ svn co https://svn.openwrt.org/openwrt/trunk/ openwrt-svn $ svn co https://svn.openwrt.org/openwrt/packages/ openwrt-svn/feeds/packages
Następnie tworzymy dowiązania dla pakietów z katalogu feeds:
$ make package/symlinks
Konfiguracja obrazu OpenWRT
Kolejnym krokiem jest konfiguracja obrazu OpenWRT, wybieramy rodzaj obrazu (np. SquashFS), opcje Busybox, Linuksa i pakietów:
$ make menuconfig
Opcje Target System, Profile, Image
Dla Asusa WL-500gP Target System należy ustawić na Broadcom BCM947xx/953xx [2.6] lub Broadcom BCM947xx/953xx [2.4]. Opcja ta wybiera linię jądra, odpowiednio 2.6 lub 2.4. Generalnie należy wybrać 2.6. Jeśli 2.6 nie będzie działało kolejnym krokiem będzie wypróbowanie jądra 2.4.
Jako Target Profile wybieramy Broadcom BCM43xx WiFi (default). Jeśli mamy inny rodzaj kontrolera sieci bezprzewodowej wybieramy właściwą opcję. Przydatne jeśli wymieniliśmy kartę MiniPCI w routerze np. na opartą na kontrolerze Atheros.
Target Images definiuje rodzaj systemu plików używanego jako /. Najlepszym wyborem jest squashfs zapewniający wyższy stopień kompresji niż jffs2. Drugą ważną różnicą jest to, iż jffs2 umożliwia zapis, a squashfs jest tylko do odczytu. Jeśli wybierzemy squashfs na główny system plików, na routerze zostanie stworzony obszar przeznaczony do zapisywania danych w formacie jffs2.
Advanced configuration options (for developers)
W menu Build Options wybrałem opcje Clean all ipkg files before building the rootfs oraz Use ccache. Pierwsza powoduje przebudowanie wszystkich pakietów za każdym razem, a druga włącza użycie pamięci podręcznej dla plików obiektów. program ccache przyspiesza kompilację w przypadku budowania OpenWRT po raz kolejny, z niewielkimi zmianami w stosunku do poprzedniej konfiguracji.
Natomiast w menu Toolchain Options zaznaczyłem Enable Smash Stacking Protection support, która (przynajmniej teoretycznie) powinna utrudniać wykonywanie kodu przez przepełnienie bufora. Podnosi to (nieco) poziom bezpieczeństwa w przypadku próby wykorzystania przez atakującego tego typu błędów.
Wybór pakietów
Wybór pakietów jest najdłuższą czynnością. Na szczęście dla większości pakietów dostępny jest krótki opis. Mój plik konfiguracyjny dla ASUS WL-500g Premium umieściłem tutaj jako referencję. Może on być użyty jako baza do dalszych eksperymentów albo bezpośrednio do zbudowania OpenWRT w wersji r13858.
Zmiana limitu wielkości dla rootfs
Domyślny limit wielkości obszaru rootfs jest zdefiniowany w tools/firmware-utils/src/trx.c i wynosi 0x5A0000 (większość routerów ma mniej pamięci flash niż WL500GP). W moim przypadku było to zbyt mało aby pomieścić wszystkie aplikacje, a ponieważ router bezproblemowo obsługuje większe rozmiary rootfs powiększyłem rootfs o 1MB. Poniżej patch:
===================================================================
--- tools/firmware-utils/src/trx.c (wersja 13876)
+++ tools/firmware-utils/src/trx.c (kopia robocza)
@@ -60,7 +60,7 @@
#define TRX_MAGIC 0x30524448 /* "HDR0" */
#define TRX_VERSION 1
-#define TRX_MAX_LEN 0x5A0000
+#define TRX_MAX_LEN 0x6A0000
#define TRX_NO_HEADER 1 /* Do not write TRX header */
struct trx_header {
Sprzętowo wspomagana biblioteka OpenSSL
Jeśli router posiada Sonics Silicon Backplane (ssb) i rdzeń IPSEC (Core 7 found: IPSEC (cc 0x80B, rev 0x00, vendor 0x4243)) warto w pliku .config włączyć:
CONFIG_PACKAGE_kmod-ocf-ubsec-ssb=y
CONFIG_PACKAGE_ocf-crypto-headers=y
Oraz dodać do biblioteki OpenSSL opcję włączającą wsparcie dla OCF:
===================================================================
--- package/openssl/Makefile (wersja 13876)
+++ package/openssl/Makefile (kopia robocza)
@@ -81,6 +81,8 @@
define Build/Configure
(cd $(PKG_BUILD_DIR);
./Configure linux-openwrt
+ --with-cryptodev
+ --with-cryptodev-digests
--prefix=/usr
--openssldir=/etc/ssl
$(TARGET_CPPFLAGS)
Aplikacje używające libssl powinny teraz korzystać ze sprzętowej akceleracji operacji szyfrowania i haszowania. Aplikacje takie to m.in.: OpenVPN, rTorrent i wget. Dropbear (domyślny serwer SSH w OpenWRT) nie korzysta z OpenSSL i dlatego nie jest wspomagany sprzętowo.
Budowanie OpenWRT
Aby pobrać wszystkie niezbędne do zbudowania OpenWRT pliki wydajemy polecenie (jeśli tego nie zrobimy pliki będą pobierane przed budowaniem każdego pakietu):
$ make download
Gdy wszystko jest już skonfigurowane wydajemy polecenie:
$ make world
W zależności od ilości wybranych pakietów, mocy obliczeniowej procesora i ilości pamięci RAM zbudowanie wszystkiego zajmie od kilku do kilkudziesięciu minut. Włączenie ccache przyspiesza budowanie w momencie gdy wprowadzimy niewielkie zmiany w konfiguracji i budujemy OpenWRT po raz kolejny.
Instalacja OpenWRT na routerze
Ta czynność jest bardzo prosta w przypadku WL-500gP. Po odłączeniu routera od zasilania wciskamy i trzymamy przycisk reset. Trzymając reset podłączamy zasilanie. Gdy dioda informująca o stanie zasilania zacznie migać zwalniamy przycisk reset. Podłączamy kabel Ethernet do portu LAN routera i do komputera.
Ustawiamy adres IP na interfejsie eth0:0 za pomocą komendy:
# ifconfig eth0:0 192.168.1.5 up
A następnie przechodzimy do katalogu bin i wydajemy polecenie:
$ atftp --trace --option "timeout 1" --option "mode octet" --put --local-file openwrt-brcm47xx-squashfs.trx 192.168.1.1
Czekamy do zakończenia kopiowania pliku. Po zakończeniu sesji tftp czekamy około 5 minut na zapisanie obrazu OpenWRT w pamięci flash i odłączamy zasilanie. Po ponownym podłączeniu zasilania router będzie bardzo długo startował ze względu na konieczność utworzenia obszaru jffs2 i wygenerowania kluczy SSH routera.
Konfiguracja OpenWRT
Łączymy się z routerem za pomocą telnetu:
$ telnet 192.168.1.1
Następnie ustawiamy hasło:
# passwd
Ustawienie hasła uniemożliwia dalsze logowanie przez telnet. Od tej chwili należy używać wyłącznie SSH. Wylogowujemy się z routera i logujemy za pomocą SSH:
$ ssh [email protected]
Wyłączanie niepotrzebnych usług
Jeśli nie zamierzamy korzystać z serwera telnet i http możemy je wyłączyć:
# /etc/init.d/telnet disable # /etc/init.d/httpd disable
Nazwa hosta i strefa czasowa
W /etc/config/system ustawiamy:
option hostname myrouter
option timezone "CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00"
Dropbear
Aby włączyć logowanie wyłącznie za pomocą kluczy SSH zapisujemy w /etc/dropbear/authorized_keys nasz klucz publiczny, a następnie w /etc/config/dropbear ustawiamy:
QoS
Ustawiamy w /etc/config/qos przepływność interfejsu WAN:
option download 1024
Na początek pozostałe opcje warto pozostawić bez zmian.
Thomson SpeedTouch 330, PPPoA i Neostrada
Thomson SpeedTouch 330 otrzymany od TP za 1 zł jest obsługiwany przez Linuksa. Pakiet z firmware również jest obecny w OpenWRT.
W przypadku SAGEM F@st 800 OpenWRT posiada jedynie sterownik. Firmware należy skopiować ręcznie do katalogu /lib/firmware/ueagle-atm po zainstalowaniu OpenWRT.
Aby sprawdzić, czy po podłączeniu do portu USB routera modem został wykryty, oprogramowanie firmware załadowane, a synchronizacja ukończona pomyślnie wydajemy polecenie dmesg | tail. Powinniśmy zobaczyć taki komunikat:
speedtch 2-1:1.0: found stage 1 firmware speedtch-1.bin.4 speedtch 2-1:1.0: found stage 2 firmware speedtch-2.bin.4 ATM dev 0: ADSL line is synchronising ATM dev 0: ADSL line is up (1312 kb/s down | 320 kb/s up)
Modem jest gotowy i możemy skonfigurować połączenie PPP. W tym celu ustawiamy w pliku /etc/config/network w sekcji WAN configuration:
option ifname "ppp0"
option proto pppoa
option encaps llc
option vpi 0
option vci 35
option username "[email protected]"
option password "XXXXXXXX"
Aby nawiązać połączenie używamy:
# ifup wan
IPv6
Opcje połączenia IPv6 przez tunel w SixXS definiujemy w /etc/config/aiccu. Konfiguracja radvd znajduje się w /etc/config/radvd.
OpenDNS
Konfigurację OpenDNS na OpenWRT opisałem już wcześniej.
Gdy 8MB pamięci flash to zbyt mało…
Można do portu USB podłączyć dysk twardy USB lub bezgłośny Pendrive na którym można przechowywać pliki pobierane z Internetu. Można na nim również stworzyć partycję wymiany (co przyda się gdy będziemy chcieli uruchamiać więcej programów).
Konfiguracja dodatkowych nośników danych jest przechowywana w /etc/config/fstab. Przykładowa konfiguracja z pratycją /home na pliki uzytkownika, /opt na dodatkowe, niemieszczące się w pamięci flash routera aplikacje oraz partycją swap:
option target /home
option device /dev/sda1
option fstype ext3
option options rw
config mount opt
option target /opt
option device /dev/sda2
option fstype ext3
option options rw
config swap
option device /dev/sda3
opkg-link
Aby móc instalować pakiety na zewnętrznej pamięci dodajemy do /etc/opkg.conf linię:
Pakiety instalujemy na dysku USB poleceniem:
# opkg -d usb install nazwa_pakietu
Aby dodać link do pakietu w /opt w / możemy użyć skryptu opkg-link. Możemy go skopiować z UsbStorageHowto i zapisać jako /bin/opkg-link.
Podsumowanie
Nieźle jak na sprzęt za niecałe 400 zł (~300 zł router, 80 zł pendrive, 1zł modem DSL), co?
Jak dla kogos OpenWRT to za malo, to na tych routerkach z powodzeniem mozna uruchomic pelnego Debiana:
http://wpkg.org/Running_Debian_on_ASUS_WL-500G_deluxe
czy w wersji OpenWRT 2.6 z svn nie ma juz problemow z WiFi na domyslnej karcie w asusie 500gP?
Wokół wsparcia dla BCM4704 narosło w ostatnim czasie wiele mitów. Jeśli masz na myśli błąd #2035 to został on naprawiony jeszcze w 2007 roku przez zmianę o numerze r9285. W moim odczuciu otwarty sterownik działa nieco wolniej niż binarny sterownik producenta, ale jest równie stabilny. Mój router ma już uptime 4 dni, a z sieci bezprzewodowej korzystają na okrągło dwa komputery.
Heh, coś chyba pomieszałeś ;). BCM4704 to procesor, natomiast WiFi jest na chipsecie BCM4318. Ja miałem 1,5 roku temu problem właśnie z tym drugim – OpenWRT na jądrze 2.6 po prostu nie wykrywał mi wifi. Zainstalowałem więc 2.4 i od tego czasu chodzi dobrze. Myślę teraz o zainstalowaniu świeżego OpenWRT i migracji na 2.6, jednak mam te same wątpliwości – czy aby na pewno pójdzie, bo może lepiej wydać 100zł i wymienić kartę miniPCI.
Skrót myślowy. Były problemy z jądrem 2.6 na procesorze BCM4704. Natomiast Wi-Fi (BCM4318) obsługiwane w 2.6 jest przez otwarty sterownik b43. W 2.4 był jest natomiast binarny sterownik producenta i on właśnie jest nieco szybszy. Trochę niefortunnie połączyłem dwie myśli. Przepraszam.
Iść idzie. Przez 1,5 roku się zmieniło i na 2.6 w trybie AP chodzi.
(czasami dziwne problemy wyczynia, ale idzie)
A czemu polecasz White Russian zamiast Kamikaze 7.09? Z tego co zauwazylem ten drugi jest nowszy, a wersja stabilna – jakie sa roznice?
Krzysztof, spoko :)
obsy, dzięki – tymi dziwnymi problemami przekonałeś mnie, żeby jednak poszukać innej karty ;)
Nie :), im więcej osób to wytestuje i zgłosi ew problemy to będzie lepiej.
Problem w tym, że OpenWRT, sprawia wrażenie baaardzo powolnego rozwoju, ile to już czasu minęło od 8.09RC1? A na stronie, brak jakichkolwiek informacji o dalszych postępach prac…
(Szczerze zaznaczam, że nie monitoruje wersji z svn, wyznaję zasadę, że jeśli projekt, zyje, to developerzy nie zapominają o jakichkolwiek informacjach o postępie, na stronie głównej projektu)
Mi na jądrze 2.6 w moim 500gP WiFi działało, lecz zdarzało się, że się wieszało i trzeba było restartować router… Co więcej dziwnego… Na jądrze 2.6 nie działała mi dioda “AIR” nie świeciła w ogóle, mimo że WiFi działo…
Co nie zmienia faktu, że próbowałem tylko builda z oficialnej strony, który jest przestarzały, spróbuję dziś 2.6 z svn, bez eksperymentów nie ma postępu :D
pzdr
W listopadzie 2008, lekko ponad 2 miesiące temu
obsy, ale ja już wyrosłem z bycia królikiem doświadczalnym w środowisku dajmy na to “produkcyjnym” (jedyny router w domu) ;). OpenWRT działa mi stabilnie i jest ok, ale skoro sterownik b43 może stwarzać czasem problemy, to wolę poszukać czegoś innego co działa stabilnie i mieć święty spokój.
Dzięki ale w tej cenie mam już konkretnego Routerboarda z Mikrotikiem.
Hmm, tam zdaje się dodatkowo trzeba będzie kartę miniPCI, obudowę, zasilacz no i licencję nabyć…to ile to wyjdzie?
Witam – w jaki sposób weryfikowałeś, że openssl korzysta z chipa crypto? Mi niestety pomimo skompilowane z –with-cryptodev i –with-cryptodev-digests jedzie z libcrypto. moduł ubsec_ssb działa w porządku, cryptotest korzysta z niego (jest ogromna różnica w prędkości). Cofnąłem się nawet do wersji 13876, jak w przykładzie powyżej – i nic :(
Nie weryfikowałem tego. Pewnie polecenie “openssl” byłoby tu przydatne. Dosyć dziwne, że nie ma różnicy pomiędzy włączonym (“openssl speed −engine cryptodev”) i wyłączonym cryptodev (“openssl speed”)? Może użyłeś algorytmu, który jest niewspierany przez sprzęt. Np. “openssl speed −evp aes128(/des/3des)” powinno działać sprzętowo, pozostałe raczej nie. Możesz też spróbować wyświetlić dostępne możliwości za pomocą “openssl engine -vvv -c -t”.
Co do tego wspomagania sprzętowego rtorrenta mam wątpliwości. Haszowanie danych w torrencie odbywa sie za pomocą SHA1 a ubsec_ssb udostępnia jedynie metodę HMAC_SHA1, openssl raportuje ją jako hmacWithSHA1. Udało Ci się odpalić wspomaganego rtorrenta?
Interesowałaby mnie instalacja speedtouch’a 330 na openwrt lecz z wersją jądra 2.4 gdzyż wykorzystuję tryb WDS, którego do tej pory b43 + hostap nie wspiera. Szukalem już trochę na ten tamat lecz same stare posty i wygaśnięte linki. Jakieś wspazowki, namiary mile widziane…
Hej. Opcja CONFIG_PACKAGE_kmod-ocf-ubsec-ssb=y jest przeznaczona dla jądra z serii 2.6.x . 2.4.x nie posiadają modułu ssb. Chyba, że się mylę?