OpenWRT

Izvor: SIS Wiki
Skoči na: orijentacija, traži

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:

  1. LuCI
  2. X-Wrt
  3. 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.

Početna stranica LuCI sučelja

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:

  1. Kompajler (obično gcc)
  2. Binarni programi popus asemblera i linkera (za OpenWRT binutils)
  3. 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:

  1. Podršku na NAND flash uređaje
  2. Čvrste veze
  3. Kompresiju - četiri su algoritma dostupna: zlib, rubin, rtime i lzo.
  4. 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:

  1. Instalirati firmware na neizbrisivu memoriju
  2. Instalirati firmware na RAM memoriju
  3. 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.

Prikaz web sučelja za DD-WRT operacijski sustav

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:

  1. Firewall preko iptables
  2. Firewall preko web sučelja
  3. 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:

  1. INPUT
  2. FORWARD
  3. 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.

Web sučelje OpenWRT firewalla

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.

Web sučelje OpenWRT firewalla - dodavanje novog pravila

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:

Transmission web sučelje

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:

Konfiguracija Transmision daljinskog sučelja

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:

Transmission remote GUI

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.

Web sučelje za upravljanje sambom

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.

Sadržaj dijeljene datoteke koja se nalazi na routeru

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:

Putty konfiguracija za spajanje na Quaggu

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:

Sučelje Quagge

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

  1. 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
  2. Modularnost - korisnik može sebi prilagoditi distribuciju ovisno o željama i potrebama
  3. Veći broj dodataka - repozitorij OpenWRT-a sadrži brojne dodatke za operacijski sustav
  4. Velika mogućnost prilagodbe - moguće je uređivati sve konfiguracijske datoteke da bi se operacijski sustav što više prilagodio korisniku
  5. 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

  1. 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
  2. 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
  3. 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.

Literatura

  1. http://www.openwrt.org
  2. http://www.lua.org/about.html
  3. http://luci.subsignal.org/trac
  4. http://www.x-wrt.org/
  5. http://www.gargoyle-router.com
  6. http://www.squashfs-lzma.org/
  7. http://www.busybox.net/
Osobni alati
Imenski prostori
Inačice
Radnje
Orijentacija
Traka s alatima