OpenWRT
Nikša Marević
Sadržaj |
Uvod
Za prosječnog kućnog korisnika router je samo još jedan uređaj u kući koji im služi da bi se mogli spojiti na internet. Naravno, u ovom slučaju ne govorimo o profesionalnim routerima kao što su npr. Cisco, već o routerima namijenjenim kućnim korisnicima. Za tog istog prosječnog kućnog korisnika postoje samo sljedeće "brige": koliko ima priključaka za računala i ima li bežičnu mrežnu konekciju. Međutim, naprednijim korisnicima ponekad opcije koje nude kućni routeri nisu dovoljne, a da bi došli do naprednih opcija ponekad su primorani kupovati mnogo skuplje uređaje. Međutim, s pojavom custom firmwarea to više neće biti slučaj jer se jednostavnom nadogradnjom operacijskog sustava dolazi do mnoštva naprednih mogućnosti iz običnog, jeftinog kućnog routera. Neki koje ćemo u nastavku spomenuti su OpenWRT i DD-WRT.
OpenWRT
OpenWRT je firmware koji je baziran na linux operativnom sustavu za bežične mrežne uređaje. Umjesto kreiranja jedinstvene verzije firmwarea za svaki uređaj posebno, OpenWRT omogućava potpuno prilagođavanje operacijskog sustava uređaja prema korisnikovim željama i potrebama. Na ovaj način se korisnik oslobađa ograničenja i konfiguracije uređaja kako je to zamislio proizvođač ili kako je to zamislio distributer uređaja s modificiranim, najčešće okljaštrenim operacijskim sustavom (npr. internet service provideri). OpenWRT je također vrlo zanimljiv razvijačima softvera jer mogu napraviti aplikaciju na uređaju bez da rade kompletan firmware oko iste. Međutim, bitno je napomenuti da OenWRT nije moguće instalirati na sve uređaje. Uređaji koji imaju podršku za OpenWRT se nalaze na sljedećem linku.
Interakcija s korisnikom
Glavni način interakcije s korisnikom je putem CLI (eng. command line interface) odnosno komandno-linijskog sučelja. Sam način rada ne razlikuje se puno od bilo kojeg rada s linux/unix operacijskim sustavima. S obzirom na to da je flash memorija routera dosta malena za današnje standarde (8 MB u prosjeku), nisu sve funkcije na koje smo navikli na linux distribucijama dostupne korisniku.
BusyBox v1.15.3 (2011-11-24 18:38:13 CET) built-in shell (ash) Enter 'help' for a list of built-in commands. _______ ________ __ | |.-----.-----.-----.| | | |.----.| |_ | - || _ | -__| || | | || _|| _| |_______|| __|_____|__|__||________||__| |____| |__| W I R E L E S S F R E E D O M Backfire (10.03.1, r29592) ------------------------ * 1/3 shot Kahlua In a shot glass, layer Kahlua * 1/3 shot Bailey's on the bottom, then Bailey's, * 1/3 shot Vodka then Vodka. --------------------------------------------------- root@OpenWrt:~#
Osim komandno-linijskog sučelja, dostupno je i web sučelje. Web sučelje je napravljeno na način da se korisnicima omogući na lagan način manipulirati sa često korištenim opcijama, dok za napredne opcije ipak treba posegnuti za CLI sučeljem. Za OpenWRT postoje tri web sučelja i to:
- LuCI
- X-Wrt
- Gargoyle
LuCI je zadano web sučelje koje dolazi s OpenWRT. Samo sučelje napisano je velikim dijelom u Lua jeziku. Sam Lua jezik je dizajniran kao skriptni jezik, a kako je pisan u ISO C-u isti je višeplatformski jezik. Kao zadani poslužitelj za ovo web sučelje se koristi uhttpd.
X-Wrt je alternativa za LuCI web sučelje. Za razliku od LuCI sučelja pisan je pomoću Haserla. Haserl je "mali" program koji koristi shell ili Lua skripte da bi kreirao cgi web skripte. Namijenjen je za okružja gdje su ruby ili php jednostavno preveliki, kao u našem slučaju routeri. Kao zadani poslužitelj ovo sučelje ne koristi uhttpd kao LuCI, već lighttpd.
Treća opcija je Gargoyle. Za razliku od dva prethodno navedena sučelja, Gargoyle velikim dijelom koristi javascript kako bi se što više izračuna obavilo na klijentskoj strani i na taj način rasteretilo router, dok su procedure koje je neophodno izvršavati na strani poslužitelja napisane pomoću Haserla.
Tehničke informacije
Razvoj
Za daljne razvijanje OpenWRTa se koristi OpenWRT Buildroot. To je set makefile i zakrpa koji omogućava kreiranje alata koji će se koristiti na drugačijem sustavu od onog na kojemu se vrši kompajliranje i korjenski datotečni sustav za tzv. embedded sustave. OpenWRT Buildroot je opsežno modificirana verzija originalnog Buildroota. Set alata za kompajliranje se sastoji od:
- Kompajler (obično gcc)
- Binarni programi popus asemblera i linkera (za OpenWRT binutils)
- Standardna biblioteka jezika C (GNU Libc, uClibc ili dietlibc)
Detaljne upute kako se razvija OpenWRT se nalaze na sljedećem linku.
Datotečni sustav
OpenWRT je dostupan u dva datotečna sustava i to JFFS2 i SquashFS.
JFFS2 (Journalling Flash File System version 2) je log-structured datotečni sustav namijenjen za sustave s flash memorijom. Sam JFFS2 je sadržan u jezgri Linux operacijskog sustava od verzije 2.4.10. JFFS2 je predstavio:
- Podršku na NAND flash uređaje
- Čvrste veze
- Kompresiju - četiri su algoritma dostupna: zlib, rubin, rtime i lzo.
- Bolje performanse jer za razliku od JFFS-a ne generira veliki broj nepotrebnih I/O operacija zbog garbage collection algoritma
SquashFS je kompresirani read-only datotečni sustav za Linux operacijske sustave. SquashFS kompresira datoteke, indeksne čvorove kao i direktorije, a podržava veličine blokova do 1 MB. SquashFS je namijenjen općem read-only sistemskom korištenju ponajviše na embedded sustavima poput routera. Originalna verzija SquashFSa je koristila gzip kompresiju dok se tokom vremena ostvarila podrška i za LZMA, LZO i xz kompresiju. SquashFS je prisutan i kao datotečni sustav za live cd distribucije linux sustava poput Debiana, Fedore, Ubuntua i ostalih.
Kada se koriste JFFS2 verzije OpenWRT-a tada se sve datoteke i direktoriji mogu modificirati uključujući i sistemske. Prilikom korištenja SquashFS datotečnog sustava, jezgra operacijskog sustava i sistemske datoteke i direktoriji će biti u kompresirane u read-only modu rada dok će se kreirati i JFFS2 datotečni sustav za instalaciju dodatnih paketa. Ukoliko nema potrebe za modifikacijom sistemskih datoteka, tada je SquashFS bolji izbor.
Busybox
Busybox omogućuje nekoliko okljaštrenih unix alata u jednoj izvršnoj datoteci. Moguće ga je pokrenuti u velikom broju POSIX okruženja kao što je Linux (uključujući i Android), FreeBSD i mnoge druge. Posebno je kreiran za uređaje koji imaju ograničene resurse. Busybox se može prilagoditi da pruža podskup od više od dvije stotine alata. Osim unix alata specificiranih u SUS specifikaciji podržava i mnoštvo alata koje bi korisnik očekivao u linux sustavu. Busybox koristi Almquist shell.
OPKG
OPKG je upravitelj paketima za OpenWRT. OPKG je upravitelj "lake kategorije" koji se koristi za dohvaćanje i instalaciju OpenWRT paketa bilo iz lokalnog repozitorija ili repozitorija na internetu. OPKG dijeli mnogo sličnosti u korištenju s apt-get komandom iz linuxa.
OPKG se koristi zajedno sa zastavicama update, upgrade, install, configure, remove i flag. Update zastavica se koristi za preuzimanje liste dostupnih paketa iz repozitorija. Upgrade se koristi za ažuriranje paketa na načina da se iza upgrade nadopiše i ime paketa. Install se koristi za dohvaćanje i instalaciju željenog paketa. Configure služi za konfiguraciju neraspakiranih paketa dok remove služi za brisanje paketa.
Instalacija firmwarea
Da bi mogli koristiti OpenWRT firmware, potrebno je napraviti jednu od ponuđenih opcija:
- Instalirati firmware na neizbrisivu memoriju
- Instalirati firmware na RAM memoriju
- Pokrenuti firmware preko mreže
Za naše potrebe firmware je instaliran na neizbrisivu memoriju. To možemo napraviti na sljedeće načine:
- 1. Preko originalnog firmwarea
- Pronađemo preko web sučelja (na originalnom firmwareu) opciju stavljanja nove verzije firmwarea, odaberemo putanju gdje se nalazi OpenWRT te na kraju kliknemo "Update"
- 2. Preko bootloadera i mrežnog priključka
- Prvo valja instalirati odgovarajući softver na računalo npr. ako bootloader sadrži FTP server, treba instalirati FTP klijent. Zatim treba dati računalu statičku IP adresu u istoj mreži kako je postavljeno u bootloaderu. Nakon što se sve podesi, računalo se spaja na odgovarajući priključak, uređaj se ponovno pokreće. U zadanom trenutku treba slijediti procedure da se prebriše stari firmware novim OpenWRT operacijskim sustavom. Pri tome treba paziti da se ne prebriše bootloader dok se to eksplicitno ne zatraži od korisnika.
- 3. Preko bootloadera i serijskog porta
- 4. Preko JTAG-a
Potonja dva načina nećemo detaljnije razmatrati.
DD-WRT
DD-WRT je operacijski sustav za routere napravljen za mnoge bežične routere bazirane na Broadcomovim i Atherosovim mikročipovima. Prve verzije su bazirane na Alchemy firmware operacijskom sustavu za routere od kompanije Sveasoft, međutim, kako je tvrtka Sveasoft prestala davati otvoreni kod za svoj operacijski sustav, DD-WRT se počeo razvijati u svom smjeru. Trenutno je DD-WRT izdan besplatno od GPL licencom. DD-WRT je zbog svoga user-friendly web sučelja popularan kao izbor za ljude koji nisu vješti s komandnom linijom, a trebaju im napredne funkcije. Proizvođač mrežne opreme Buffalo je odlučio koristiti DD-WRT kao službeni softver na svojim uređajima iz serije HighPowerLista podržanih uređaja se nalazi na sljedećem linku.
Samim DD-WRT-om se nećemo detaljno baviti jer ćemo ga koristiti isključivo za usporedbu s OpenWRT-om.
Zanimljivost: DD u nazivu DD-WRT je njemačka registracijska oznaka za Dresden.
Značajke DD-WRT-a
DD-WRT se sastoji od web sučelja i komandno-linijskog sučelja kojem je moguće pristupiti preko telneta ili SSH. Web sučelje je vrlo bogato opcijama i većina opcija se da konfigurirati putem njega. Za potrebe usporedbe je korištena mega distribucija koja na sebi ima najviše dodatnih alata.
Kada se putem telnet klijenta ulogiramo na DD-WRT dobivamo sljedeći ekran:
DD-WRT v24-sp2 mega (c) 2010 NewMedia-NET GmbH Release: 08/07/10 (SVN revision: 14896) Jutsu login: root Password: ========================================================== ____ ___ __ ______ _____ ____ _ _ | _ \| _ \ \ \ / / _ \_ _| __ _|___ \| || | || | || ||____\ \ /\ / /| |_) || | \ \ / / __) | || |_ ||_| ||_||_____\ V V / | _ < | | \ V / / __/|__ _| |___/|___/ \_/\_/ |_| \_\|_| \_/ |_____| |_| DD-WRT v24-sp2 http://www.dd-wrt.com ========================================================== BusyBox v1.13.4 (2010-08-07 02:19:29 CEST) built-in shell (ash) Enter 'help' for a list of built-in commands. root@Jutsu:~#
Možemo vidjeti da se i ovdje koristi Busybox kao i na OpenWRT-u.
DD-WRT dolazi u sedam verzija i to: Micro, Mini, Nokaid, Standard, VOIP, VPN i Mega. Micro verzija je namijenjena za routere koji imaju malu ROM memoriju dok je Mega verzija koja sadrži sve alate za DD-WRT i namijenjena je za routere koji imaju preko 8MB interne ROM memorije.
Instalacija firmwarea
Instalacija DD-WRT-a je izrazito jednostavna. Međutim, vrlo je važno paziti koji model routera imate jer neke verzije DD-WRTa imaju izbačene funkcije da bi mogle stati u flash od uređaja. Nakon što je pronađena ispravna verzija, preko web sučelja originalnog operacijskog sustava se učita datoteka koja sadrži DD-WRT i pusti da router sam obavi nadogradnju sustava. Pri tome je vrlo važno da ne dođe do gubitka napajanja na routeru prilikom nadogradnje jer isti tada prestaje raditi.
Praktični dio
OpenWRT
Konfiguracija OpenWRTa
Za potrebe korištenja OpenWRTa korišten je virtualni image u virtualzacijskom programu VirtualBox.
Unutar operacijskog sustava bilo je potrebno konfigurirati mrežne adaptere. Za potrebe testiranja su korištena dva sučelja. Jedno sučelje "glumi" WAN port i povezano je u NAT modu s host operacijskim sustavom, dok je drugi povezan u bridged mod i ima adresu u subnetu od mreže na kojoj se nalazi računalo na kojem se izvodi virtualizacija. Prvo je bilo potrebno staviti root korisniku lozinku da se omogući SSH pristup:
root@OpenWrt:~# passwd root Changing password for root New password: Retype password: Password for root changed by root
Zatim je bilo potrebno konfigurirati mrežu. Tekstualnim editorom "VI" je uređena konfiguracijska datoteka koja se nalazi na /etc/config/network na sljedeći način:
# Copyright (C) 2006 OpenWrt.org config interface loopback option ifname lo option proto static option ipaddr 127.0.0.1 option netmask 255.0.0.0 config interface wan #wan mreža koja radi u NAT modu option ifname eth0 option proto dhcp config interface lan #mreža koja radi u bridged modu option ifname eth1 option type bridge option proto static option ipaddr 192.168.2.150 option netmask 255.255.255.0
Nakon što je mreža konfigurirana, bilo je moguće skinuti sadržaj repozitorija u sustav. To se radi na sljedeći način:
root@OpenWrt:~#opkg update
Na ovaj način je preuzet sadržaj repozitorija i moguće je skidati sve potrebne pakete za daljnji dio.
Postavljanje firewalla
Firewall je moguće na više načina postaviti na uređaj koji ima na sebi OpenWRT. Mi ćemo sagledati tri načina:
- Firewall preko iptables
- Firewall preko web sučelja
- Konfiguracija datoteke /etc/config/firewall
Ukoliko se koristimo opcijom iptables, tada vrijede ista pravila kao i kada postavljamo pravila za mrežni promet na bilo kojoj linux distribuciji. Ukratko, postoje tri lanca:
- INPUT
- FORWARD
- OUTPUT
Za svaki paket koji pristigne na neko od mrežnih sučelja, serijsko ili neko drugo, najprije se određuje njegovo odredište (eng. Routing decision). Ukoliko je krajnji cilj paketa neki lokalni proces na istom računalu na kojemu je upogonjen firewall, paket se usmjerava prema INPUT lancu. Ako se pokaže da je odredište paketa neko drugo računalo, tada ga se prosljeđuje FORWARD lancu. Konačno, paket kojeg generiraju neke lokalne aplikacije odnosno procesi na lokalnom računalu, usmjerava se OUTPUT lancu u kojem se odlučuje što je potrebno napraviti s tim mrežnim paketom generiranim od strane samog firewalla. Nekoliko je akcija primjenjivo nad svakim paketom u navedenim točkama od kojih su najznačajnije sljedeće: DROP, ACCEPT, QUEUE, RETURN, REJECT i LOG. Akcija DROP označava odbacivanje paketa na način da ga se jednostavno zanemari pri čemu se ne šalje nikakva obavijest o odbačenom paketu. ACCEPT podrazumijeva prosljeđivanje paketa u sljedeći segment koji dolazi. QUEUE označava prosljeđivanje paketa korisničkom procesu iz memorijskog prostora NetFilter mehanizma u memorijski prostor korisničkih aplikacija. RETURN obilježava prestanak usporedbe u tekućem lancu i povratak na sljedeću neobrađenu usporedbu u prethodnom lancu. REJECT slično kao i DROP odbacuje paket, ali na način da pošiljatelja obavijesti o tome. LOG se koristi za zapisivanje potankosti o paketima preuzetih iz zaglavlja paketa i drugih potencijalno važnih informacija. Na sljedeći način možemo pogledati koja pravila postoje u routeru:
root@OpenWrt:~# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
U ovom slučaju se sav mrežni promet se propušta. Daljnje korištenje iptables nećemo razmatrati.
Konfiguracija firewalla preko web sučelja omogućava brzo dodavanje pravila. Osim toga se omogućuje i lakši uvid u već postojeća pravila.
Nova pravila se dodavaju na način da se klikne na "Add" ikonu ovisno da li želimo dodati novo pravilo ili preusmjerenje. Kada dodavamo novo pravilo, dodavamo mu ime, postavljamo na koje se sučelje odnosi (LAN ili WAN u našem slučaju), na koji se protokol odnosi, polazišna i odredišna IP adresa te koju će radnju firewall obaviti (drop, accept, reject, don't track). Napredne funkcije koje se nude su odredišna zona, MAC adresa izvora te da li se pravilo odnosi na IPv4, IPv6 ili na oba protokola.
Konfiguracijska datoteka /etc/config/firewall izgleda na sljedeći način:
config defaults option syn_flood 1 option input ACCEPT option output ACCEPT option forward REJECT # Uncomment this line to disable ipv6 rules # option disable_ipv6 1 config zone option name lan option network 'lan' option input ACCEPT option output ACCEPT option forward REJECT config zone option name wan option network 'wan' option input REJECT option output ACCEPT option forward REJECT option masq 1 option mtu_fix 1 config forwarding option src lan option dest wan # We need to accept udp packets on port 68, # see https://dev.openwrt.org/ticket/4108 config rule option name Allow-DHCP-Renew option src wan option proto udp option dest_port 68 option target ACCEPT option family ipv4 # Allow IPv4 ping config rule option name Allow-Ping option src wan option proto icmp option icmp_type echo-request option family ipv4 option target ACCEPT # Allow DHCPv6 replies # see https://dev.openwrt.org/ticket/10381 config rule option name Allow-DHCPv6 option src wan option proto udp option src_ip fe80::/10 option src_port 547 option dest_ip fe80::/10 option dest_port 546 option family ipv6 option target ACCEPT # Allow essential incoming IPv6 ICMP traffic config rule option name Allow-ICMPv6-Input option src wan option proto icmp list icmp_type echo-request list icmp_type destination-unreachable list icmp_type packet-too-big list icmp_type time-exceeded list icmp_type bad-header list icmp_type unknown-header-type list icmp_type router-solicitation list icmp_type neighbour-solicitation option limit 1000/sec option family ipv6 option target ACCEPT # Allow essential forwarded IPv6 ICMP traffic config rule option name Allow-ICMPv6-Forward option src wan option dest * option proto icmp list icmp_type echo-request list icmp_type destination-unreachable list icmp_type packet-too-big list icmp_type time-exceeded list icmp_type bad-header list icmp_type unknown-header-type option limit 1000/sec option family ipv6 option target ACCEPT # include a file with users custom iptables rules config include option path /etc/firewall.user ### EXAMPLE CONFIG SECTIONS # do not allow a specific ip to access wan #config rule # option src lan # option src_ip 192.168.45.2 # option dest wan # option proto tcp # option target REJECT # block a specific mac on wan #config rule # option dest wan # option src_mac 00:11:22:33:44:66 # option target REJECT # block incoming ICMP traffic on a zone #config rule # option src lan # option proto ICMP # option target DROP # port redirect port coming in on wan to lan #config redirect # option src wan # option src_dport 80 # option dest lan # option dest_ip 192.168.16.235 # option dest_port 80 # option proto tcp ### FULL CONFIG SECTIONS #config rule # option src lan # option src_ip 192.168.45.2 # option src_mac 00:11:22:33:44:55 # option src_port 80 # option dest wan # option dest_ip 194.25.2.129 # option dest_port 120 # option proto tcp # option target REJECT #config redirect # option src lan # option src_ip 192.168.45.2 # option src_mac 00:11:22:33:44:55 # option src_port 1024 # option src_dport 80 # option dest_ip 194.25.2.129 # option dest_port 120 # option proto tcp
Dodavanje pravila u ovu datoteku možemo sagledati sljedećim predloškom:
#config ime_pravila option src lan #naziv izvorišnog sučelja option src_ip 192.168.45.2 #izvorišna IP adresa option src_mac 00:11:22:33:44:55 #izvorišna MAC adresa option src_port 80 #izvorišni port option dest wan #odredišno sučelje option dest_ip 194.25.2.129 #odredišna IP adresa option dest_port 120 #odredišni port option proto tcp #odredišni protokol option target REJECT #koja će se akcija izvršiti
Detaljna konfiguracija firewalla se neće razmatrati.
Instalacija Torrent klijenta
Za potrebe projekta uzet je softver Transmission. Transmission se na OpenWRT instalira na sljedeći način:
Prvo je potrebno instalirati Daemon koji je pokrenut u pozadini
root@OpenWrt:~#opkg install transmission-daemon
Zatim se instalira CLI Transmissiona. CLI se može koristiti kao zaseban program u komandnoj liniji:
root@OpenWrt:~#opkg install transmission-cli
Nakon komandne linije, instalira se web sučelje programa. Web sučelje je opcionalno, ali je program lakše koristiti kada ima GUI. Web sučelje je jednostavno za korištenje i dobiva se na način da se upiše ip_adresa_routera:port. Port se zadaje u konfiguracijskoj datoteci i postupak će biti opisan u nastavku.
root@OpenWrt:~#opkg install transmission-web
Osim web sučelja, program može raditi i uz pomoć opcionalne desktop aplikacije. Da bi remote desktop aplikacija radila, potrebno je instalirati sljedeći modul:
root@OpenWrt:~#opkg install transmission-remote
Nakon uspješne instalacije svih modula, potrebno je konfigurirati program pomoću konfiguracijske datoteke. Konfiguracijska datoteka se nalazi na putanji /etc/config/transmission i može se urediti pomoću tekstualnog editora kao što je VI. Konfiguracijska datoteka izgleda na sljedeći način:
config transmission option enable 1 option config_dir '/etc/transmission' option alt_speed_down 50 option alt_speed_enabled false option alt_speed_time_begin 540 option alt_speed_time_day 127 option alt_speed_time_enabled false option alt_speed_time_end 1020 option alt_speed_up 50 option bind_address_ipv4 '0.0.0.0' option bind_address_ipv6 '::' option blocklist_enabled false option dht_enabled true option download_dir '/mnt/sda4/' option encryption 1 option incomplete_dir '/mnt/sda4/incomplete' option incomplete_dir_enabled false option lazy_bitfield_enabled true option lpd_enabled false option message_level 2 option open_file_limit 32 option peer_limit_global 240 option peer_limit_per_torrent 60 option peer_port 51413 option peer_port_random_high 65535 option peer_port_random_low 49152 option peer_port_random_on_start false option peer_socket_tos 0 option pex_enabled true option port_forwarding_enabled false option preallocation 1 option proxy "" option proxy_auth_enabled false option proxy_auth_password '' option proxy_auth_username '' option proxy_enabled false option proxy_port 80 option proxy_type 0 option ratio_limit 2.0000 option ratio_limit_enabled false option rename_partial_files true option rpc_authentication_required false option rpc_bind_address '0.0.0.0' option rpc_enabled true option rpc_password '' option rpc_port 9091 option rpc_username '' option rpc_whitelist '127.0.0.1,192.168.2.*' option rpc_whitelist_enabled true option script_torrent_done_enabled false option script_torrent_done_filename '' option speed_limit_down 100 option speed_limit_down_enabled false option speed_limit_up 40 option speed_limit_up_enabled true option start_added_torrents false option trash_original_torrent_files false option umask 18 option upload_slots_per_torrent 14 option watch_dir_enabled false option watch_dir ''
Opcije koje nas zanimaju su enable koju je potrebno postaviti na 1 da bi program funkcionirao, rpc_port koja nam kaže na kojem portu aplikacija radi. U našem primjeru radi na adresi 192.168.2.150:9091 gdje je 192.168.2.150 adresa samog uređaja, 9091 port rada aplikacije Transmission. Osim toga, potrebno je postaviti u rpc_whitelist set ip adresa u kojima radi router. Zadnja opcija koju je potrebno prilagoditi je download_dir. Tu se unosi putanja do diska gdje će se pohranjivati dijeljene datoteke. Ta putanja može voditi do fizičkog diska koji je spojen na USB routera (ukoliko ga posjeduje, a može biti eksterni HDD ili USB flash memorija) ili do mrežne lokacije koja se nalazi u mountu. Nakon uspješne konfiguracije, potrebno je pokrenuti daemon. On se pokreće na sljedeći način:
root@OpenWrt:~#/etc/init.d/transmission start
Ukoliko želimo da se daemon pokreće prilikom svakog pokretanja OpenWRTa, onda je potrebno upisati sljedeće:
root@OpenWrt:~#/etc/init.d/transmission enable
Napokon možemo iskušati da li Transmission radi i upisivanjem u web preglednik adrese 192.168.2.150:9091 dobivamo sljedeće:
Nadalje, željeli bi vidjeti da li Transmission radi i u svojem remote obliku. Ovaj oblik je vrlo koristan jer omogućuje da se vrši preuzimanje datoteka na udaljeni poslužitelj. Nakon instalacije Transmission daljinskog klijenta i prvog pokretanja, prvo što dobivamo je sljedeći prozor:
Potrebno je unijeti adresu poslužitelja, port poslužitelja, u našem slučaju 192.168.2.150 za adresu i 9091 za port te korisničko ime i lozinku koji su u našem slučaju prazna polja jer ih nismo definirali u konfiguracijskoj datoteci. Postoje i ostale naprednije funkcije koje za potrebe ove demonstracije nisu korištene. Samo sučelje daljinskog klijenta podsjeća na ostale desktop BitTorrent aplikacije i izgleda ovako:
Detaljni rad i opcije ove aplikacije nećemo razmatrati jer nisu relevantni za rad.
Jednostavni file sharing
Za potrebe jednostavnog file sharinga korišten je modul samba2-server i modul luci-app-samba koji omogućuje konfiguraciju samba poslužitelja unutar web sučelja od routera. Samba je poznata s linux operacijskog sustava kao servis za dijeljenje datoteka i pisača. Da bi instalirali sambu potrebno je izvršiti sljedeću naredbu:
root@OpenWrt:~# opkg install samba2-server
Nakon instalacije, možemo kofigurirati sambinu konfiguracijsku datoteku koja se nalazi na putanji /etc/config/samba putem tekstualnog editora kao što je VI, međutim, ovdje ćemo sambu konfigurirati putem web sučelja. Da bi to napravili, potrebno je instalirati dodatak luci-app-samba koji možemo instalirati na sljedeći način:
root@OpenWrt:~# opkg install luci-app-samba
Nakon instalacije luci-app-samba, možemo urediti da se samba pokreće prilikom svakog pokretanja uređaja kao i pokrenuti je na sljedeći način:
root@OpenWrt:~# o/etc/init.d/samba enable root@OpenWrt:~# o/etc/init.d/samba start
Sada se možemo spojiti na web sučelje uređaja upisujući ip adresu uređaja u web preglednik (u našem slučaju 192.168.2.150), ulogirati se te kliknuti na tab Services.
Za probu je postavljeno dijeljenje direktorija /tmp koji se nalazi na samom uređaju. Ukoliko se želi, moguće je postaviti dijeljenje uređaja poput hard diskova ili USB memorije koji su spojeni na USB sučelje routera. U kombinaciji s prethodno opisanim Transmissionom možemo primjerice napraviti i dijeljenje svih datoteka koje su preuzete putem interneta u lokalnoj mreži. Da se uvjerimo da dijeljenje podataka zaista funkcionira, u Windows exploreru smo upisali putanju \\openwrt\tmp i dobili smo sve datoteke koje se nalaze u tom dijeljenom direktoriju.
Napredne opcije usmjeravanja
Pomoću alata Quagga je korisnicima omogućeno da koriste napredne opcije usmjeravanja kao što ih nalazimo na puno naprednijim uređajima. Tako nam je omogućeno da koristimo napredne protokole poput BGPv4, BGPv4+, BGPv4-, OSPF ili RIP na bilo kojem routeru koji ima na sebi OpenWRT i Quaggu. Da bi instalirali podršku za sve protokole potrebno je instalirati potrebne alate i njihove dodatke na sljedeći način:
opkg install ip quagga quagga-libzebra quagga-bgpd quagga-libospf quagga-ospf6d quagga-ospfd quagga-ripd
Na ovaj način smo omogućili baratanje sa svim prethodno navedenim protokolima. Možemo primjetiti da je potrebno instalirati i paket "ip" koji je kontrolni alat za usmjeravanje te je isti potreban da bi Quagga uspješno radila. Nakon što je sve instalirano, potrebno je napraviti konfiguraciju alata i samog sustava. Kako alat nije htio dobro raditi, nakon intezivnog traženja je pronađeno da se mora urediti konfiguracijska datoteka /etc/hosts i maknuti točka poslije localhost tako da ista izgleda na sljedeći način:
127.0.0.1 localhost
Nakon toga možemo urediti konfiguracijsku datoteku koja se nalazi na /etc/quagga/zebra.conf. U toj datoteci možemo promijeniti lozinku za spajanje na Quaggu kao i dopustiti da se konfiguracija vrši bez posrednog logiranja na router. Da bi to omogućili, potrebno je da datoteka izgleda na sljedeći način:
password lozinka #postaviti željenu lozinku ! access-list vty permit 127.0.0.0/8 access-list vty permit any #promijeniti zadano deny stanje u permit ! line vty access-class vty
Sada možemo pokrenuti servis na sljedeći način:
root@OpenWrt:~# /etc/init.d/quagga start
Samu konfiguraciju vršimo pomoću telnet klijenta gdje se spajamo na adresu routera uz uvjet da je port postavljen na 2601. Ukoliko bi uzeli port 23 koji je zadani port za telnet, spojili bi smo se na sam router, a ne na Quaggu, što nam nije sada cilj. Za spajanje je korišten program putty sa konfiguracijom kako stoji na slici:
Nakon uspješnog spajanja, potrebno je unijeti lozinku koju smo zadali u konfiguraciji. Možemo primijetiti da sučelje podsjeća na ono koje se nalazi na Ciscovim uređajima. Čaj je i većina komandi ista. Na ovaj način možemo zaključiti da ukoliko posjedujemo znanje kako konfigurirati Ciscove uređaje, vrlo lako možemo konfigurirati i sve uređaje koje imaju instaliranu Quaggu. Zbog nedostatka opreme nije napravljena detaljna konfiguracija Quagge. Samo sučelje izgleda na sljedeći način:
Anonimizacija prometa putem TOR mreže
Jedna od zanimljivosti je kako omogućiti anonimnost korisnicima. Moguće je preuzeti Tor browser bundle za omogućavanje anonimnosti http prometa, međutim što ako želimo da svi korisnici koriste Tor mrežu za sve protokole? Za taj slučaj možemo prilagoditi router koji na sebi ima OpenWRT da se spaja na Tor mrežu. Za početak moramo instalirati dodatak za iptables iptables-mod-nat-extra i sam tor na sljedeći način:
root@OpenWrt:~# opkg install tor iptables-mod-nat-extra
Nakon instalacije potrebno je napraviti konfiguraciju. Prvo je potrebno podesiti mrežno sučelje na koje će se korisnici spajati. Konfiguracijska datoteka se nalazi na /etc/conf/network.
config interface tor option ifname "ath0" #bežično mrežno sučelje option proto static option ipaddr 192.168.3.1 option netmask 255.255.255.0
Zatim je potrebno prilagoditi dhcp za novo sučelje "tor" na sljedeći način:
config dhcp tor option interface tor option start 100 option stop 150 option leasetime 12h
Nakon toga valja urediti firewall na način da svi korisnici koji se spoje na bežičnu točku ne mogu vidjeti koja su računala unutar mreže iz sigurnosnih razloga te dodati pravila da se korisnike preusmjerava na tor mrežu. To se može napraviti na sljedeći način u konfiguracijskoj datoteci /etc/config/firewall:
config zone option name tor option input REJECT option output ACCEPT option forward REJECT option syn_flood 1 option conntrack 1 #this setting is mandatory #otvaranje porta na DHCP serveru, da bi klijenti dobiliip konfiguracijsko pravilo option src tor option proto udp option dest_port 67 option target ACCEPT #TOR transparentni proxy port (postavljen u /etc/tor/torrc) config rule option src tor option proto tcp option dest_port 9040 option target ACCEPT #TOR DNS-proxy-port (postavljen u /etc/tor/torrc) config rule option src tor option proto udp option dest_port 9053 option target ACCEPT
Idući korak je postavljanje pravila putem iptables. Ukoliko iste stavimo u datoteku /etc/firewall.user tada će se one izvršiti prilikom svakog pokretanja firewalla:
iptables -t nat -A PREROUTING -i ath0 -p udp --dport 53 -j REDIRECT --to-ports 9053 #redirects all DNS-requests on the interface ath0 to the tor-daemon-dns-proxy-port iptables -t nat -A PREROUTING -i ath0 -p tcp --syn -j REDIRECT --to-ports 9040 #redirects all tcp-requests on the interface ath0 to the tor-daemon-transparent-proxy-port
Nakon što je firewall podešen možemo konfigurirati Tor. Njegova konfiguracijska datoteka se nalazi u /etc/tor/torrc
VirtualAddrNetwork 10.192.0.0/10 AutomapHostsOnResolve 1 TransPort 9040 TransListenAddress 192.168.3.1 DNSPort 9053 DNSListenAddress 192.168.3.1
Na kraju valja podesiti datoteku za wifi sučelje koja se nalazi /etc/conf/wireless:
config wifi-device wifi0 option type atheros option channel auto # REMOVE THIS LINE TO ENABLE WIFI: # option disabled 1 config wifi-iface option device wifi0 option network tor option mode ap option ssid 'TorWlan' option encryption none #ukoliko se želi, može se staviti i sigurnosna zaštita za spajanje
Spajanjem na SSID TorWlan, svim računalima će se promet preusmjeravati preko Tor mreže dok se ta računala međusobno neće moći "vidjeti" niti vidjeti od čega se sve lokalna mreža sastoji.
Usporedba DD-WRT i OpenWRT
U ovom poglavlju ćemo sagledati prednosti i nedostatke OpenWRT-a nad DD-WRT operacijskim sustavom.
Prednosti
- Veća zajednica - veća zajednica znači i veći angažman ljudi oko projekta kao i veća podrška za 3rd party developere
- Modularnost - korisnik može sebi prilagoditi distribuciju ovisno o željama i potrebama
- Veći broj dodataka - repozitorij OpenWRT-a sadrži brojne dodatke za operacijski sustav
- Velika mogućnost prilagodbe - moguće je uređivati sve konfiguracijske datoteke da bi se operacijski sustav što više prilagodio korisniku
- Veliki broj podržanih uređaja - ukoliko dva routera različitih proizvođača imaju osti chipset tada je velika vjerojatnost da će na njima raditi isti image operacijskog sustava
Nedostaci
- Manjak stabilnosti - nakon dvogodišnjeg korištenja DD-WRT-a bez ikakvih problema, pojavili su se određeni problemi vezani za stabilnost (prestanak rada i sl.) kod OpenWRT-a unutar mjesec dana
- Inferiorno web sučelje - dok se kod DD-WRT-a može skoro sve obaviti putem web sučelja, kod OpenWRT-a je ipak potrebno intenzivnije znanje korištenja linux shell naredbi
- Nedostatak kompletne dokumentacije za sve dodatke na OpenWRT-ovom mrežnom mjestu - na DD-WRT-ovoj stranici se nalaze svi mogući tutoriali koji će korisniku trebati dok to primjerice kod OpenWRT-a nije slučaj. Prilikom izrade ovog rada postojao je problem kod instalacije Quagga i Tor programskog paketa jer na osnovnoj stranici nije bilo dokumentacije o njima
Zaključak
OpenWRT pruža odličnu alternativu stock operacijskom sustavu routera. Kao prvu prednost možemo navesti postojanje dosta naprednijih funkcija (koje će, doduše, više značiti naprednim korisnicima). Osim toga, OpenWRT omogućuje slobodu korištenja na način da korisnik može konfigurirati routere na točno onakav način kakav mu odgovara. Primjerice, nekim korisnicima ne treba ništa drugo osim AP (access point) funkcija routera te se isti vrlo lagano može "pretvoriti" u AP, a da se pri tome uopće ne koriste opcije poput DHCP-a i sl. koje su pokrenute "u pozadini" i na taj način oduzimaju dragocjeno procesorsko vrijeme kao i radnu memoriju routera. Kao još jedna zanimljiva opcija koja je obrađena je korištenje routera kao torrent klijenta. Tako korisnik ne mora imati upaljeno računalo cijelo vrijeme dok se preuzimaju podaci putem torrenta već jednostavno može u router prikopčati bilo kakav tip USB memorije i na taj način uštediti na energiji jer rad routera zahtjeva mnogo manje energije te je router u većini slučajeva uređaj koji se nikada ne gasi.
Možemo zaključiti da ovakve "mikro distribucije" linuxa uvelike daje korisniku slobodu da izvuče maksimum iz svog uređaja, a da pri tome može i uštediti novce jer "jeftini" router s ovakvim operacijskim sustavom može parirati i nekim višestruko skupljim uređajima.