Pokud pomocí WISPu rozdělujete připojení k Internetu, budete dříve či později potřebovat, aby se připojení dělilo spravedlivě. Tedy aby pokud stahují 4 lidé zároveň, dostal každý svojí čtvrtinu pásma. Vše potřebné již ve WISPu je, ale nastavit to není tak jednoduché, jak to vypadá.
A teď k věci:
Nastavení se provádí v /etc/network/ifup.local
. Tam již je funkce set_shaper
. Volá se
set_shaper
ip_adresa rychlost id
To omezí adresu ip_adresa na rychlost (zadává se např. 128kbit). id je jakékoli číslo (radši nenulové), ale pokud se voláním funkce přidává více pravidel, musí být u každého pravidla jiné. Pozor! Funkce set_shaper
funguje jen pokud se pomocí konfiguračního menu nastaví nějaké omezení rychlosti na rozhraní (rate)!
Funkce set_shaper
bohužel umí omezit jen jednu adresu, neumí udělat spravedlivé rozdělení pásma. K tomu jsem napsal funkci div_bandwidth
:
#Rozdeli pasmo na rozhrani $1 s rychlosti $2 mezi $3 uzivatelu, jejichz IP adresy #jdou poporade od $4. Volitelne lze zadat maximalni rychlost pro uzivatele $5. div_bandwidth() { IPRULE=`echo $4 | sed 's/[^.]*$//'` HOST=`echo $4 | sed 's/.*\.//'` if [ "$5" = "" ]; then CEIL=$2 else CEIL=$5 fi tc qdisc add dev $1 root handle 1: htb default 0 tc class add dev $1 parent 1: classid 1:1 htb \ rate $2kbit ceil $2kbit burst 2k quantum 1500 i=0 while [ $i -lt $3 ] do tc class add dev $1 parent 1:1 classid 1:1$i htb \ rate $(expr $2 / $3)kbit ceil $CEIL\kbit burst 2k quantum 1500 tc filter add dev $1 protocol ip prio 2 parent 1: u32 \ match ip dst $IPRULE$(expr $HOST + $i) classid 1:1$i tc qdisc add dev $1 parent 1:1$i handle 11$i: sfq perturb 10 i=$(expr $i + 1) done }
Abyste ji mohli použít, přidejte tento kód do ifup.local
(nejlépe pod funkci set_shaper
, tj pod "}
"). Funkce se volá
div_bandwidth
rozhraní rychlost počet_lidí počáteční_ip maximum
rozhraní je síťová karta do lokální sítě (např. eth0
). rychlost je šířka pásma do Internetu (v kbit), které se rozdělí mezi počet_lidí. Jejich adresy musí být v jednom bloku za sebou, počínaje počáteční_ip. Potom bude každý klient moci využít celé pásmo, když bude připojen sám, a pokud bude stahovat více lidí zároveň, rychlost se spravedlivě rozdělí. Volitelně lze zadat maximum: maximální rychlost pro 1 klienta (tj. i když bude stahovat jako jediný, dosáhne maximálně této rychlosti). Příklad:
div_bandwidth eth0 256 4 192.168.1.1 128
Upozornění: Funkce div_bandwidth
(tj. vše mezi "{
" a "}
") se nijak měnit nemusí, mění se jen její volání (které se napíše někam pod funkci div_bandwidth
, tj pod "}
"). Dosazení hodnot do funkce se provede samo.
Vytvořená pravidla pro shaping se vymažou příkazem: tc qdisc del dev
rozhraní root
. Stará pravidla se musí vymazat, než se zadají nová!
Poznámka: Rychlost, kterou zadáváte, se nemůže rovnat skutečné rychlosti připojení. Zadejte přibližně 90% skutečné rychlosti (ideální je to vyzkoušet).
Poznámka 2: Rozdělení pásma na 2 rozhraní (typicky eth0
a netcs0
) bohužel nejde udělat nějak jednoduše. Musí se rozdělit pásmo na 2 části a na každou z těchto částí aplikovat popsané dělení, např. :
div_bandwidth eth0 128 4 192.168.1.1 64 div_bandwidth netcs0 128 4 192.168.2.1 64
Rozdělení uploadu:
Pokud používáte překlad adres, nelze dělit upload stejným způsobem jako download. V okamžiku, kdy se toto dělení provádí, je již zdrojová adresa přeložená na adresu vnějšího rozhraní a neví se, od koho pocházejí. Pakety se tedy musí napřed označit a pak dělit podle těchto značek. To provádí funkce div_upload
, která je jinak totožná s div_bandwidth
:
#Rozdeli upload na rozhrani $1 s rychlosti $2 mezi $3 uzivatelu, jejichz IP adresy #jdou poporade od $4. Volitelne lze zadat maximalni rychlost pro uzivatele $5. div_upload() { IPRULE=`echo $4 | sed 's/[^.]*$//'` HOST=`echo $4 | sed 's/.*\.//'` if [ "$5" = "" ]; then CEIL=$2 else CEIL=$5 fi tc qdisc add dev $1 root handle 1: htb default 0 tc class add dev $1 parent 1: classid 1:1 htb \ rate $2kbit ceil $2kbit quantum 1514 i=0 while [ $i -lt $3 ] do tc class add dev $1 parent 1:1 classid 1:1$i htb \ rate $(expr $2 / $3)kbit ceil $CEIL\kbit burst 2k quantum 1500 iptables -t mangle -A PREROUTING -s $IPRULE$(expr $HOST + $i) -j MARK --set-mark 1$i tc filter add dev $1 prio 2 parent 1: protocol ip handle 1$i fw classid 1:1$i tc qdisc add dev $1 parent 1:1$i handle 11$i: sfq perturb 10 i=$(expr $i + 1) done }
Na dělení podle značek je potřeba přidat modul cls_fw
. Přidáte jej příkazem "modprobe cls_fw
", natrvalo připsáním do /etc/modules
.
Doplněk:
Funkce omezí veškerý provoz na zadaném rozhraní na rychlost připojení Internetu. Což není zrovna vhodné, pokud vám na routeru běží třeba FTP server. Vytvořil jsem tedy další funkci bypass_shaper
, která vyřadí lokální přenos z omezení:
bypass_shaper() { tc class add dev $1 parent 1: classid 1:2 htb rate $2 ceil $2 tc filter add dev $1 protocol ip prio 1 parent 1: u32 match ip src $3 classid 1:2 }
Volá se
bypass_shaper
rozhraní rychlost rozsah
Pokud chcete používat zároveň funkci set_shaper
a bypass_shaper
, musíte ve funkci set_shaper
změnit oba výskyty "prio 1
" na "prio 2
".
Tím se lokální provoz procházející síťovou kartou rozhraní vyřadí z omezení na rychlost připojení do Internetu. Místo toho se omezí na rychlost, která se zde zadává i s jednotkami (např. 2Mbit
). rozsah je rozsah adres, který používáte v lokální síti (např. 192.168.0.0/16
). Původně jsem chtěl do funkce zadat napevno všechny privátní rozsahy, ale dnes i sítě některých ISP fungují v privátním rozsahu.
Další informace:
HTB - jemný úvod - článek na root.cz
Linux Advanced Routing and Traffic Control - nevyčerpatelný zdroj informací o Traffic Shapingu
HTB Homepage - Stránka autora HTB (použitého nástroje pro traffic shaping) s manuálem a příklady nastavení
Děkuji člověku s nickem "Pomerančovej Džžus", který mě konečně dokopal napsat uvedenou funkci. Článek vznikl přepsáním ICQ komunikace s ním.
S DNS souvisí dva programy: Dnscache a Tinydns.
Dnscache zajistí, že router se bude chovat jako DNS server (tj. počítače v síti můžou mít jako DNS nastavenou adresu routeru a ne adresu serveru od poskytovatele připojení). Zároveň výsledky DNS dotazů ukládá, čímž se další dotazy urychlí.
Tinydns vám umožní zavést si v lokální síti DNS jména.
Balík dnscache.lrp
najdete na stránce distribuce Bering, jejíž je standardní součástí.
Konfigurační soubory se skrývají v adresáři /etc/dnscache/env
. Můžete je editovat přímo, nebo pomocí menu (příkaz lrcfg
). Pozor! Každý konfigurační soubor musí končit prázdným řádkem!
Poznámka pro CZFree:
CZFree používá vlastní doménu .czf s nezívislou hyearchií DNS serverů. Je tedy nutno zajistit, aby se DNS dotazy do domény .czf neposílaly na server ISP, ale na některý z kořenových DNS serverů CZFree. Proto jsem vytvořil upravenou Dnscache (stačilo upravit spouštěcí skript). Ta přidává nový konfigurační soubor DOMAINS. V něm je na každém řádku doména a její DNS server (oddělené mezerou). Pokud má doména více DNS serverů, bude na několika řádcích tatáž doména pokaždé s jinou adresou serveru. Příklad:
czf 10.24.1.2 czf 10.15.0.1 10.in-addr.arpa 10.24.1.2 10.in-addr.arpa 10.15.0.1
Další informace:
Dokumentace k dnscache
Balík tinydns.lrp
lze stáhnout z téhož místa, kde byla Dnscache. Konfigurační soubory jsou ve dvou adresářích (/etc/tinydns-private/env
a /etc/tinydns-public/env
), takže je asi lepší použít menu (příkaz lrcfg
).
/etc/tinydns-private/env/DNSTYPE
- Nastavení typu serveru: privátní (PRIVATE) je pro lokální síť za překladem adres, veřejný (PUBLIC) je pro standardní DNS server, na který budou přicházet dotazy i zvenčí./etc/tinydns-private/env/IP
- IP adresa, na které poběží privátní DNS server/etc/tinydns-public/env/IP
- IP adresa, na které poběží veřejný DNS server/etc/tinydns-private/env/DOMAINS
- domény pro privátní server (např. "moje.sit")Důležité: Adresa, na které běží Tinydns server musí být odlišná od adresy, kde běží Dnscache! Jinak se totiž dotazy odlišit nedají - všechny jsou na standardním portu 53. Vhodné je nastavit adresu Tinydns na 127.0.0.1 (dotazy zvenku půjdou na Dnscache a ta je pošle na 127.0.0.1 (localhost), tahle spolupráce se zajistí automaticky).
Poznámka: Jaký je vlastně (technicky) rozdíl mezi privátním a veřejným serverem? Veřejný server je začleněný do hyearchického doménového systému. Dnscache tedy ani nemusí vědět, že na routeru DNS server běží: prostě se zeptá nadřízeného DNS serveru a od něj získá adresu, kde běží Tinydns. U privátního serveru je to nutné obejít, a Tinydns musí přímo vnutit Dnscache sebou spravovanou doménu (to udělá tak, že nacpe záznam do /etc/dnscache/root/servers
).
Vlastní nastavení domén je v souborech /etc/tinydns-public/root/data
(veřejný server) a /etc/tinydns-private/root/data
(privátní server). Každá řádka je uvozena jedním znakem, který určuje její typ:
Použití se nejlépe vysvětlí na příkladě (síť 192.168.1.0/24
s doménou moje.sit
):
#Domenu moje.sit spravuje DNS server ns1.moje.sit .moje.sit::ns1.moje.sit #Reverzni zaznamy 192.168.1.0/24 spravuje tentyz server #Povsimnete si opacneho poradi IP adresy! .1.168.192.in-addr.arpa::ns1.moje.sit #Mailserver domeny je mail.moje.sit @moje.sit::mail.moje.sit #Router 192.168.1.1 ma hlavni DNS jmeno router.moje.sit (na toto jmeno #se nastavi i reverzni zaznam) a dalsi jmena ns1.moje.sit a mail.moje.sit =router.moje.sit:192.168.1.1 +ns1.moje.sit:192.168.1.1 +mail.moje.sit:192.168.1.1 #Obdobne se priradi jmena pocitacum v siti (s reverznim zaznamem) =adam.moje.sit:192.168.1.2 =bara.moje.sit:192.168.1.3
V případě u privátního serveru se ještě do DOMAINS
přidá záznam:
1.168.192.in-addr.arpa moje.sit
Další informace:
Dokumentace k tinydns
Ať už si o nich myslíme cokoli, P2P sítě na sdílení souborů jsou jednou z nejvyužívanějších služeb Internetu. Pro malou síť je ideální Direct Connect. Existuje pro něj open-source server (hub) Open DC Hub, který lze zprovoznit i na WISPu pomocí balíku opendc.lrp
.
Instalace:
Před spuštěním Open DC Hubu je nutné vytvořit uživatele a skupinu opendchub
:
/etc/passwd
přidejte: opendchub:x:700:700:Open DC Hub:/home/opendchub:/bin/false
/etc/shadow
přidejte: opendchub:*:10091:0:99999:7:::
/etc/group
přidejte: opendchub:x:700:
Dále je nutno nastavit heslo pro přístup na konfigurační konzoli (z bezpečnostních důvodů jsem nechtěl nastavovat nějaké výchozí heslo, nechal jsme ho prázdné, takže se připojit nelze). V souboru /home/opendchub/.opendchub/config
najděte admin_pass=""
a do těch uvozovek napište zvolené heslo.
Nyní můžete hub spustit příkazem "/etc/init.d/opendchub start
". Měl by se též spouštět automaticky po restartu.
Konfigurace:
Konfigurační soubory se nacházejí v adresáři /home/opendchub/.opendchub
. Hlavní konfigurace je v souboru config
, zpráva zobrazovaná po připojení v souboru motd
. Změna těchto souboru se ale projeví až po restartu hubu. A není dobré restartovat hub, když jsou na něm připojeni uživatelé. Proto má hub konfigurační konzoli, kde se dá všechno nastavit pomocí příkazů a změny se ihned projeví. Připojíte se na ni příkazem
telnet localhost 53696
Tip: Pokud si to číslo 53696 také pořád nemůžete zapamatovat, přidejte na konec /etc/services
řádek
opendchub 53696/tcp # Open DC Hub Console
Pak se budete moci připojovat na konzoli příkazem
telnet localhost opendchub
Příkazy
Všechny příkazy začínají znakem "$
" a končí znakem "|
" (ve Windows je na jakékoli klávesnici napíšete pomocí Alt+36 a Alt+124), např. $exit|
. Popisuji jen nejdůležitější příkazy, zbytek najdete v dokumentaci k Open DC Hubu.
$adminpass
heslo|
- Zadání hesla. Musí se zadat jako první, dokud není heslo přijato, ostatní příkazy se ignorují (včetně exit
, což je zajímavá past).$exit|
- ukončení konfigurační konzole$commands|
- vypíše dostupné příkazy i s nápovědou$ban
rozsah_adres|
, $allow
rozsah_adres|
- Zakáže/povolí připojení z daného rozsahu adres. Povolení má přednost před zákazem.
$ban 0.0.0.0/0| $allow 10.0.0.0/8|
umožní připojení jen z rozsahu adres 10.0.0.0/8.$unban
rozsah_adres|
, $unallow
rozsah_adres|
- Zruší zákaz/povolení připojení z daného rozsahu adres.$nickban
nick|
, $unnickban
nick|
- Zakáže/povolí připojení uživatele se jménem nick.$addreguser
nick heslo typ|
- Registrace uživatele: na jméno nick se bude možné připojit jen po zadání hesla heslo. Hesla jsou ukládána v zašifrovaná. typ je 0 pro normálního uživatele, 1 pro operátora, 2 dává operátorovi navíc právo konfigurovat hub pomocí chatu z jeho DC klienta (příkazy pak začínají "!
" místo "$
" a nemají na konci "|
").$removereguser
nick|
- zruší registraci.$set
parametr hodnota|
- nastavení hodnoty parametru ze souboru config
s okamžitou platnostíParametry
Parametry nastavení hubu jsou v souboru config
. Příkazem $set
parametr hodnota|
v konzoli hubu je lze měnit bez nutnoti restartu hubu. Pozor, v hodnotě parametru nesmí být "|
", to by se považovalo za konec příkazu!
hub_name
- jméno hubu, které se zobrazí po připojení (nejvýš 25 znaků)min_share
- minimální množství dat, které musí uživatel sdílet (v bajtech, 1GB = 1073741824 byte)max_users
- maximální počet připojených uživatelů. Nároky na výkon a připojení rostou přibližně kvadraticky s počtem uživatelů, ale do 100 uživatelů není problém.admin_pass
- heslo, které se musí zadat po připojení na konfigurační konzolimin_version
- minimální verze klienta (pravděpodobně dle původního Neomodus), nedoporučuji nastavovat, dělá jen problémyregistered_only
- povolí připojení jen registrovaným uživatelůmlistening_port
- port, na kterém hub poběží (tj. na který se budou připojovat uživatelé). Musí být vyšší než 1024, nastavil jsem 4411.motd
- Zpráva, která se zobrazí po připojení (Message Of The Day). Může mít klidně několik řádek, končí prostě tam, kde zadáte "|
". Narozdíl od předchozích je uložena ve zvláštním souboru motd
.Další informace:
Stránka Open DC Hubu - odtud můžete stáhnout opendchub-0.7.14.tar.gz, kde najdete kompletní dokumentaci
Fórum o Open DC Hubu
DC++ - Direct Connect klient pro Windows
DCGui - Direct Connect klient pro Linux, Windows i Mac
Poznámka: Podařilo se mi dostat Open DC Hub na 1 disketu :-) (pomocí distribuce Bering, včetně přístupu přes Telnet a FTP). Pokud by se to snad někomu hodilo, ozvěte se a já to dostanu do distribuovatelné podoby.
Jednoduchý přístup přes FTP pro nahrávání balíků apod. se dá udělat pomocí ftpd.lrp
, ale lepší je použít přístup přes SCP (např. pomocí WinSCP) - není třeba ve WISPu nic nastavovat a je to i bezpečnější.
Dále se tedy budu zabývat pouze vytvořením anonymního FTP (tj. takového, na které se dá přihlásit zadáním jména "anonymous" a e-mailové adresy jako hesla). Zvolil jsem server ProFTPD, který umí ledascos, ale pro jednoduché účely má i docela jednoduché nastavení. Nesehnal jsem balík s aktuální verzí, takže jsem zkompiloval momentálně nejnovější verzi 1.2.9, ze staženého balíku jsem použil jen spouštěcí skript. Výsledek můžete stáhnout tady: proftpd.lrp
.
Před spuštěním
Než ProFTPD spustíte, je nutno vytvořit uživatele a skupinu ftp
:
/etc/passwd
přidejte: ftp:x:400:400:Anonymous FTP:/home/ftp:/bin/false
/etc/shadow
přidejte: ftp:*:10091:0:99999:7:::
/etc/group
přidejte: ftp:x:400:
Důležité: ProFTPD vyžaduje, aby měl router korektní jméno, které lze převést na IP adresu. Nejsnažší je nastavit jméno přikazem hostname
(hostname
jméno) a pak toto jméno přidat do /etc/hosts
spolu s IP adresou routeru - na řádku bude IP adresa, mezera a zadané jméno.
Spuštění
Nyní můžete server ProFTPD spustit příkazem /etc/init.d/proftpd start
. Měl by se též automaticky spouštět po restartu. Pokud řešíte problém, můžete jej donutit vypisovat všechny informace na konzoli příkazem "proftpd -d9 -n
" (ukončíte jej pak Ctrl+C). Nyní se můžete připojit vaším oblíbeným FTP klientem anonymně na standarní port 21. Zobrazí se obsah adresáře /home/ftp
(takže prozatím nic). Zatím je povolen pouze download souborů, ne upload.
Konfigurace
Konfigurace ProFTPD je v souboru /etc/proftpd.conf
. V ProFTPD se dá nastavit snad cokoli, včetně virtuálního hostingu, já se soustředím jen na vysvětlení některých parametrů z konfiguračního souboru.
ServerName "
jméno"
MaxClients
počet
#
') řádky: <Limit WRITE>
DenyAll
</Limit>
#
') řádky: #<Limit STOR>
# AllowAll
#</Limit>
Jak udělat FTP na disku?
Popsaný postup má drobný háček - je k ničemu. FTP prostor je totiž v ramdisku, ze kterého WISP běží. Je tedy omezen na pár MB a po restartu se ztrácí (i když zálohujete konfiguraci!). Budu předpokládat, že na disku je další partition naformátovaná jako FAT32. Zde se ukáže síla Linuxu: bez problémů lze /home/ftp
"přesměrovat" na tuto partition příkazem:
mount -t vfat -o uid=400,gid=400 /dev/hda2 /home/ftp
Pokud chcete, aby se toto provedlo po restartu, přidejte do /etc/fstab
řádek:
/dev/hda2 /home/ftp vfat uid=400,gid=400 0 0
Pokud je partition na disku až třetí, má označení hda3
, je-li první na druhém disku, je hdb1
atd.
Další informace:
Homepage ProFTPD - kompletní dokumentace
Balík s nejrozšířenějším www serverem Apache je tady: httpd.lrp
. Před spuštěním je pouze nutné zajistit, aby měl server korektní DNS jméno. Pokud máte v síti již funkční DNS, stačí nastavit DNS jméno routeru jako jeho hostname: hostname
DNS_jméno. Pokud ne, nastavte routeru nějaké jméno příkazem "hostname
jméno" a pak toto jméno přidejte do /etc/hosts
spolu s IP adresou routeru - na řádku bude IP adresa, mezera a jméno routeru.
Nyní můžete spustit server příkazem /etc/init.d/httpd start
. Je nastaven i na automatické spouštění po restartu. Pokud zadáte do prohlížeče adresu routeru, měl by se zobrazit prázdný seznam souborů (žádné stránky jste zatím nenahráli). Pokud stránky nahrajete do adresáře /var/httpd/htdocs
, měly by se zobrazit. Pokud ne, podívejte se, v čem je problém, do /var/httpd/logs/error_log
. V témže adresáři je i access_log
- přehled přístupů na váš server.
CGI Skripty
Server má v sobě podporu CGI skriptů (PHP bohužel ne). Skripty se nahrávají do adresáře /var/httpd/cgi-bin
a z prohlížeče je vyvoláte zadáním adresy http://
adresa_serveru/cgi-bin/
jméno_skriptu. Při vytváření skriptu je nutno dodržet tyto podmínky:
ae
a samozřejmě klasický vi
)chmod 755
skript"#!/bin/sh
): echo -e "Content-type: text/html\n"
Ten, kdo by si psal vlastní CGI skript, tyto řádky jistě číst nemusí. Píšu je proto, pokud byste chtěli použít nějaký hotový skript, například Wewimo zobrazující signál klientů na Wi-Fi AP. Skript je již na CGI připraven, takže bod 3) odpadá, jen je nutno na začátku změnit CGI_SCRIPT=0
na CGI_SCRIPT=1
. Při tom můžete nastavit i HOSTNAME
o 2 řádky níže.
Konfigurace
Hlavní konfigurace je v /var/httpd/httpd.conf
. Popíšu jenom pár nejzákladnějších parametrů, ale žádný z nich pravděpodobně nebude potřeba měnit. Nezapomeňte, že znak '#
' na začátku řádky znamená komentář, a řádek se tedy ignoruje!
/etc/hosts
se stejně nevyhnete.off
)Další informace
Dokumentace Apache HTTP Serveru
Malý průvodce konfigurací Apache - článek na root.cz, doufám, že ještě umíte slovensky :-)
Na základě několika dotazů jsem se rozhodl napsal něco o tom, jak lze sbírat a zobrazovat informace o přenesených datech jednotlivých klientů. Možností je několik:
Pokud vám stačí sbírání informací do logů, můžete použít IPFM. Existuje i hotový balík pro WISP: ipfm.lrp
. Chcete-li statistiky spřístupnit přes www (ve formě tabulek), můžete nainstalovat scr_ipfm (napsáno v PHP).
Ovšem statistiky vždycky vypadají lépe a radostněji, pokud se jim dá vizuální podoba ve formě grafů. Ve velkých sítích se používají nástroje jako MRTG nebo Cricket, ale to je v našem případě kanón na vrabce. Jednodušší je sbírat data pomocí zmiňovaného IPFM a zobrazovat je do grafů pomocí RRDTool (postup je popsán zde). Já jsem se pokusil najít něco ještě jednoduššího. A objevil jsem BandwidthD.
BandwidthD je pro náš účel ideální: sám sbírá informace o přenesených datech a sám generuje grafy (celkem a pro každou IP adresu), není potřeba PHP ani CGI. Kromě grafů zobrazuje i tabulku množství přenesených dat podle jednotlivých adres. Přenosy navíc dělí do několika kategorií: HTTP, TCP, UDP, ICMP, VPN, P2P (podle portů, takže to moc nefunguje, P2P programy používají náhodné porty (DC) nebo lze port měnit (eMule)). I nastavení je docela jednoduché, BandwidthD nenabízí žádné komplikované funkce, jen to, co je potřeba. Vytvořil jsem balík bwidthd.lrp
. Přidal jsem do něj i knihovny, které BandwidthD potřebuje (libgd, libpng a libpcap), proto je balík trochu větší (244 kB).
Instalace
Předpokládám, že již máte funkční www server (viz "Jak na www server" výše). Konfigurace BandwidthD je v souboru /etc/bandwidthd.conf
. Před spuštěním je zde nutno nastavit subnet, ve kterém se nacházejí IP adresy, které chceme měřit. Parametr je "subnet
síť maska", např. "subnet 10.0.0.0 255.0.0.0
".
Dále je nutno nastavit síťové rozhraní, ze kterého bude BandwidthD sbírat data (pravděpodobně rozhraní do Internetu). Parametr je "dev "
rozhraní"
", např. "dev "eth0"
".
Pak je nutno nastavit "propojení" s www serverem. BandwidthD ukládá vytvořené grafy do /var/bandwidthd/htdocs
. V adresáři s www stránkami se tedy musí vytvořit link ("zástupce") na tento adresář:
ln -s /var/bandwidthd/htdocs
adresář_s_www_stránkami/bandwidthd
Pokud jste instalovali www server podle mého návodu, jsou www stránky v adresáři /var/httpd/htdocs
. Příkaz tedy bude:
ln -s /var/bandwidthd/htdocs /var/httpd/htdocs/bandwidthd
Nyní již můžete spustit BandwidthD příkazem "/etc/init.d/bandwidthd start
". Pokud otevřete v prohlížeči http://
váš_server/bandwidthd
, měla by se zobrazit stránka vytvořená BandwidthD. A za pár minut by
se zde měly objevit první grafy.
Zachování hodnot při restartu
BandwidthD si udržuje informace, ze kterých grafy vytváří, pouze v paměti. Z grafů je nelze nijak získat zpět, takže restartem BandwidthD se tyto informace ztrácí. Naštěstí BandwidthD umí data ukládat i do logu: /var/bandwidthd/log.cdf
. A to hlavní: po spuštění je z tohoto logu načte.
Pokud dáte uložit konfiguraci WISPu, uloží se i logy BandwidthD. Bohužel se ale nacházejí v paměti, ne na disku, takže například výpadek proudu nevydrží (resp. načtou se logy z okamžiku posledního uložení konfigurace). Nevýhoda je, že logy mohou po čase zabrat docela dost místa. Proto je vhodné je čas od času "orotovat" příkazem /etc/init.d/bandwidthd rotate
. To znamená, že se 1. log přesune na 2., 2. na 3., 3. na 4., 4. na 5. a 5. se vymaže.
Logování je možné vypnout (output_cdf
v /etc/bandwidthd.conf
se nastaví na false
), stejně tak je možno vypnout načítání dat z logů (recover_cdf
se nastaví na false
). Ale nezapomeňte, že pak po ukončení BandwdthD nebude možné žádným způsobem získat nasbíraná data zpět (grafy sice zůstanou, ale jen do nového spuštění BandwidthD nebo restartu).
Poznámka: BandwidthD standardně kreslí graf jen u adres, které přenesly alespoň 1MB dat. Pokud toto chcete změnit, odkomentujte (odstraňte '#
') z řádky #graph_cutoff 1024
a zadejte jinou hodnotu (v kilobytech), klidně i 0.
Dodatek: Pravděpodobně vás zajímají přenosy z a do Internetu, ne přenosy uvnitř sítě. Pokud máte přímo v routeru rozhraní do Internetu, stačí spustit BandwidthD na tomto rozhraní. Komplikovanější situace nastává, když je váš router součástí větší sítě (např. CZFree) a po spoji k Internetové bráně prochází i lokální přenos. BandwidthD neumí kreslit odděleně grafy pro lokální přenosy a přenosy z Internetu, ale naštěstí je možné určit, jaké přenosy se mají započítávat. Filtr se nastavuje parametrem filter
v /etc/bandwidthd.conf
(nezapomeňte odstranit '#
' na začátku řádku). Syntaxe je shodná se syntaxí filtru v programu tcpdump, viz manuálová stránka. Odfiltrování lokálních přenosů vypadá takto:
filter "ip and not src and dst net
lokální_síť"
lokální_síť je například 10.0.0.0/8
.
Zatímco .cfs balíky zůstávají na disku (jen se připojí do systému souborů), .lrp balíky se rozbalují do ramdisku. Standardní velikost ramdisku je 8MB, takže pokud přidáváte více balíků, může vám snadno dojít místo. Bohužel nelze ramdisk zvětšit jednoduše editací nějakého konfiguračního souboru, nastavení je skryto uvnitř initrd.lrp
.
Co je initrd?
Většina .lrp balíků jsou normální .tar.gz archivy (pokud je přejmenujete na .tar.gz, můžete se do nich podívat i ve Windows, třeba Total Commanderem). Initrd.lrp je jediná vyjímka. Je také zabalen Gzipem, ale není v něm TAR archiv, ale image filesystému (minix). V něm jsou moduly pro přístup k disku (aby bylo možné disk připojit a natáhnout z něj zbývající balíky) a také skript linuxrc
, který vytváří ramdisk a rozbaluje do něj balíky. Ten právě potřebujeme upravit.
Jak editovat soubory v initrd?
Napíšu jen posloupnost příkazů, vysvětlování by bylo dost zdlouhavé. Příkazy neopisujte, v tom byste určitě udělali chybu, spíše se připojte např. pomocí PuTTY, zkopírujte je a pak je vložte (v PuTTY pravým tlačítkem myši).
cp /mnt1/initrd.lrp /root/initrd.gz cd /root gunzip initrd.gz dd if=/dev/zero of=/dev/ram bs=1k count=1000 dd if=/root/initrd of=/dev/ram mount -t minix /dev/ram /initrd
Nyní by se v /initrd
mělo objevit několik adresářů. Pokud ne, pravděpodobně bylo v ramdisku málo místa na rozbalení initrd.lrp
. Budete muset v syslinux.cfg
zrušit některé balíky (nejlépe vše kromě root
a sshd
) a restartovat.
Nyní lze již normálně editovat soubory, které byly v initrd.lrp
. My se podíváme na /initrd/linuxrc
(příkaz ae /initrd/linuxrc
). Najděte řádek SYSTSIZE=8M
a těch 8M
změňte na nějakou větší hodnotu (16M
nebo rovnou 32M
, ale nenastavujte víc než cca polovinu velikosti paměti).
Když už máme initrd připravený k editaci, můžeme též zrušit nepotřebné moduly, které se zavádějí při startu. Pokud WISP spouštíte z klasického harddisku (případně z Compact Flash karty v IDE redukci), můžete v /initrd/boot/etc/modules
zakomentovat (znakem '#
' na začátku řádku) řádky mtdcore
, doc2000
, docecc
, docprobe
a nftl
.
Nyní initrd.lrp
uložíme:
cd /root umount /initrd dd if=/dev/ram bs=1k count=1000 | gzip > /mnt1/initrd.lrp freeramdisk /dev/ram rm /root/initrd
Po rebootu bude mít ramdisk nastavenou velikost a bude v něm dost místa pro přidávané balíky.
Pokud provozujete Wi-Fi síť, dříve nebo později budete potřebovat síť zabezpečit, aby se do ní nemohl připojit nikdo cizí. To lze vyřešit filtrací podle MAC adresy (adresy, kterou má každá síťová karta a měla by být jednoznačná). Řešení bohužel není 100%, pokud někdo odchytí pár IP-MAC adresa, do sítě se dostane, ale "lepší než bezdrátem do oka". Způsobů filtrace MAC adres je několik:
Statické ARP záznamy jsou uloženy v souboru /etc/ethers
. Na každé řádce je dvojice IP adresa - MAC adresa (odělené mezerou). V souboru budou všechny IP adresy z rozsahu Wi-Fi sítě (kromě první (pravděpodobně x.x.x.0), poslední (pravděpodobně x.x.x.255) a adresy routeru). K těm, které mají přiřazeni klienti se zapíše MAC adresa klienta. K těm, které nejsou nikomu přiřazeny a nemají tedy přístup povolen se zapíše 00:00:00:00:00:00
.
Pomocí příkazu "arp -f
" se záznamy z tohoto souboru načtou do ARP tabulky a uvedou v platnost. Aby se tento příkaz provedl automaticky po startu routeru, přidejte jej do /etc/network/ifup.local.
Příklad:
192.168.1.1 11:22:33:44:55:66 192.168.1.2 00:00:00:00:00:00 192.168.1.3 00:00:00:00:00:00
Do sítě bude mít povolen přístup počítač s IP adresou 192.168.1.1 a MAC adresou 11:22:33:44:55:66, IP adresy 192.168.1.2 a 192.168.1.3 jsou zakázané.
"OK, mám subnet /24, takže teď mám teda napsat 253 řádek? Představoval jsem si líp strávený večer...". Naštěstí ne, soubor můžete vygenerovat jedním (i když trochu delším) příkazem (adresu "192.168.1
" nahraďte tou, kterou používáte v síti):
i=2; while [ $i -le 254 ]; do echo "192.168.1.$i 00:00:00:00:00:00"; i=`expr $i + 1`; done > /etc/ethers
Ke všem IP adresám se vygeneruje MAC adresa 00:00:00:00:00:00, takže zbývá jen změnit záznamy u IP adres, které jsou přiřazeny klientům.
Poznámka: Pokud byste chtěli ponechat několik adres pro volné připojení (pro Street Access nebo na vyzkoušení), stačí jen tyto adresy v /etc/ethers
vynechat.
Další informace:
Zabezpečení WiFi sítí - první odkaz co mi dal Google, ale je zde docela dobrý přehled možností zabezpečení a další odkazy na podrobnější informace.
Pokud vás už bolí prsty z psaní si po ICQ/IRC/Jabberu, je na čase zkusit hlasovou komunikaci přes síť. Wi-Fi je na to rychlé dost. Programů je nepřeberné množství, ale mě zdá nejvhodnější TeamSpeak: je freeware bez reklam i jakýchkoli horších věcí, existuje klient pro Windows i Linux a hlavně lze server spustit i na WISPu.
Klienta si můžete stáhnout z domovské stránky a .lrp balík se serverem ode mě: tss.lrp
.
Instalace:
Před spuštěním TeamSpeak serveru je nutné vytvořit uživatele a skupinu tss
:
/etc/passwd
přidejte: tss:x:900:900:TeamSpeak Server:/home/tss:/bin/sh
/etc/shadow
přidejte: tss:*:10091:0:99999:7:::
/etc/group
přidejte: tss:x:900:
Nyní můžete server spustit příkazem /etc/init.d/tss start
.
Po spuštení (trvá trochu déle) by se mělo dát na server připojit klientem (na portu 8767). Konfigurace se provádí přes www rozhraní na portu 14534. K připojení na www rozhraní je nutno znát heslo. To se po prvním spuštění vygeneruje náhodně a zapíše do logu /home/tss/server.log
. Konkrétní nastavení popisovat nebudu, je docela intuitivní a pro základní použití v něm není potřeba nic měnit. Podrobnější informace viz manuál k serveru.
Již jsem distribuci WISP přestal používat na svém routeru, nároky už přerostly její možnosti a nadešel čas na instalaci klasické distribuce. Návod se tedy již pravděpodobně rozšiřovat nebude. Ale budu v něm určitě opravovat chyby a nepřesnosti, pokud nějakou naleznete, napište mi na mail: 8an@centrum.cz
Poslední aktualizace 16.6.2004.
Dokument může být používán, kopírován i upravován bez omezení.