tučňák
Vybrat další barevné schéma
VýchozíZelenýModrýČernýZlatý
opona
opona

google


Nastavení routeru

V dnešním díle bychom si měli podrobněji rozebrat nastavení routeru a ukázat si, jak se pracuje s jednou minidistribucí určenou právě k provozování routeru.

Hned na úvod bych chtěl podotknout, že routování je opět docela velké téma, o kterém by se toho dalo napsat hodně. Doufám, že tento článek bude obsahovat alespoň to základní (poznámky, připomínky a případné otázky prosím pište v diskuzi, pokusím se na ně odpovědět).

Takový linuxový router je, co se peněz týče, poměrně levná záležitost. Bude vám na něj stačit nějaký stařičký počítač (klidně i 486 či nějaké staré Pentium) a libovolná distribuce Linuxu. Můžete použít běžnou distribuci (RedHat, Debian atd.), kterou patřičně "ořežete" a necháte v ní jen to, co je potřeba. Nebo můžete použít speciální minidistribuci. Poměrně zajímavý je projekt LRP - Linux Router Project, což je distribuce na jednu disketu (!). Jak se s ní pracuje si řekneme dále.

Nejprve si, ale (opět trošku obecněji) projděme základní nastavení sítě v Linuxu (pozn. vše, co se netýká LRP, jsem testoval v distribuci RedHat 7.3, takže doufám, že vše bude podobně fungovat i jinde).

Základní nastavení sítě

V mnoha UNIXech každé síťové rozhraní má svůj "soubor" v adresáři /dev. V Linuxu tomu tak není; každé síťové zařízení je vytvářeno dynamicky v softwaru, který jej momentálně potřebuje (není tedy reprezentováno patřičným "souborem zařízení").

Prvním předpokladem úspěchu je mít funkční síťovou kartu. Pokud máte nějakou běžnou síťovku a originální jádro z vaší distribuce, tak by to většinou neměl být problém. Jestli vaše jádro s kartou spolupracuje si můžete ověřit při startu systému ve výpisech z jádra nebo pokud to nestihnete zkuste příkaz dmesg | grep eth0 (příp. eth1 ...). Pokud je vše v pořádku, tak se vám může zobrazit třeba něco takového:

eth0: VIA VT6102 Rhine-II at 0xf0000000, 00:c0:9f:18:dc:b1, IRQ 11.
eth0: MII PHY found at address 1, status 0x7809 advertising 01e1 Link 0000.

Ještě podotknu, že pro projevení se změn není třeba restart počítače, vše bude fungovat buď ihned nebo stačí restartovat službu network např. takto:

# service network restart

nebo

# /etc/init.d/network restart

Dále si můžeme (pokud to již nemáme z dřívějška) nastavit jméno počítače a to příkazem hostname:

# hostname router

Pro další nastavení sítě můžete v RedHatu použít program /usr/bin/netconfig, pomocí něhož nastavíte např. IP adresu, masku sítě, DNS server atd. a který vypadá asi tak jako vidíte na obrázku:

rout1

My si ale ukážeme jak se vše nastaví pomocí příkazového řádku a konfiguračních souborů.

Základním nástrojem (příkazem) pro nastavování IP adresování ve většině distribucí Linuxu je ifconfig. Základní tvar tohoto příkazu je:

ifconfig zařízení adresa volby

Samotný příkaz ifconfig nám vypíše aktuální stav. Tento příkaz má spoustu voleb. Pokud vás budou zajímat i jiné než ty, o kterých bude řeč, tak zkuste obvyklé man ifconfig.

Nejdříve si nastavíme tzv. rozhraní "loopback" (česky se překládá jako "místní smyčka") Loopback je speciální rozhraní, které umožňuje síťové připojení ke svému vlastnímu počítači. Je mu vyhrazena IP adresa 127.0.0.1. Konfigurace tohoto rozhraní je jednoduchá, stačí napsat:

# ifconfig lo 127.0.0.1

Nyní již přejdeme k síťové kartě, příklad nastavení může vypadat třeba takto:

# ifconfig eth0 192.168.1.1 netmask 255.255.255.0 up

Tento příkaz nastaví IP adresu a masku podsítě, systém si sám odvodí adresu pro všesměrové vysílání (broadcast), která bude 192.168.1.255. Pokud byste někdy chtěli rozhraní eth0 deaktivovat použijte příkaz:

# ifconfig eth0 down

Podobně bychom nastavili všechna ostatní síťová rozhraní (v případě routeru musíte mít minimálně dvě).

Umístění konfiguračních souborů

RedHat (a Mandrake)

Nastavení síťového rozhraní: /etc/sysconfig/network-scripts/ifcfg-*

Jméno stroje (hostname) a výchozí brána: /etc/sysconfig/network

Debian

Nastavení síťového rozhraní a routování: /etc/network/interfaces

Můj soubor ifcfg-eth0 vypadá třeba takto:

DEVICE=eth0
BOOTPROTO=static
BROADCAST=192.168.1.255
IPADDR=192.168.1.1
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes

Obdobně nastavíme i soubory pro ostatní rozhraní (např. ifcfg-eth1).

Nastavení routeru

Samotný routovací proces je relativně jednoduchý. Příchozí paket je porovnán s údaji v routovací tabulce a podle toho, který údaj je nejpřesnější, tak na to rozhraní je paket následně odeslán. A právě aby toto mohlo fungovat je potřeba mít správně nastavenou routovací tabulku. K tomu je používán speciální příkaz, který zadané argumenty převádí na volání jádra, které potom samotné routování provádí. Tento příkaz se jmenuje route. Obecný tvar tohoto příkazu je:

route prikaz typ cilsit netmask maska gw brana dev dn

Výpis routovací tabulky můžete získat např. pomocí příkazu:

# /sbin/route -n

parametr "-n" zajistí, že se nebudou převádět IP adresy na jména (čili nepotřebujeme funkční DNS), výsledek může vypadat nějak takto:

Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 192.168.1.254 0.0.0.0 UG 0 0 0 eth0
Flags Shrnutí stavu spojení, písmena znamenají:
U     spojení je aktivní (UP)
H     cíl představuje hostitelský počítač
G     cíl představuje bránu (Gateway)
Metric Vyjadřuje délku trasy, má smysl u systémů, kde lze do jednoho cíle dojít několika cestami (viz. náš druhý příklad). Trase s nižší metrikou se obvykle dává přednost. Tyto informace nevyužívá samotné jádro, ale některé routovací protokoly (např. OSPF).
Ref Počet referencí na tuto trasu, informaci opět nepoužívá jádro Linuxu, ale uvádí se protože ji mohou využívat jiné operační systémy.
Use Počet úspěšných hledání ve vyrovnávací paměti tras. Hodnotu lze zobrazit zadáním příkazu route -F.

Malá síť

Nejlépe asi bude vše si demonstrovat na příkladech. Nejdříve si představme malou ethernetovou síť, kde nám router spojuje pouze lokální síť LAN a internet (pochopitelně na takovém routeru by běžela spousta jiných věcí jako např. proxy server, firewall, možná mail server atd., ale o to nám teď nejde). Protože je to síť malá, používáme statické routování a IP adresy třídy C.

rout2

Pro směrování paketů do lokální sítě na routeru nastavíme:

# route add -net 192.168.1.0 netmask 255.255.255.0 eth0

A pro připojení na internet (místo eth1 bychom v malé síti mohli použít třeba ppp0):

# route add default eth1

Na pracovních stanicích v síti LAN je potřeba nastavit:

# route add default gw 192.168.1.1 eth0

Tím určíme, že pakety, které nemají adresu v místní síti, se budou posílat na router (který je pak předá dál na internet).

Větší síť

Ve druhém příkladě již budeme mít síť větší, s několika routery, a proto bude pro nás výhodné použít tzv. dynamické routování, ke kterému používáme démona routed, jež je součástí balíčku NetKit, a který zajišťuje dynamické routování s pomocí protokolu RIP, tzn. v případě výpadku jednoho z routerů jsou aktualizovány všechny ostatní a pakety mohou putovat jinou cestou.

Třídu IP adresy si zvolíme podle potřeby (podle velikosti sítě), pro ilustraci použiji opět třídu C.

rout3

Na každém routeru musíme provést pouze dva příkazy, takže např. na routeru 1 provedeme:

# route add -net 192.168.1.1 netmask 255.255.255.0 eth0
# /usr/sbin/routed

Obdobně nastavíme i router 2, 3 a 4. Poté už by se měl démon routed postarat o všechno ostatní. Při spuštění automaticky nalezne všechny aktivní síťové porty a odesílá a přijímá zprávy na každé síťové zařízení, aby bylo možné určit a aktualizovat routovací tabulku na všech routerech. Tohle je velice důležité, protože v případě selhání jednoho routeru se automaticky aktualizují tabulky a pakety mohou putovat jinou cestou.

Na routeru 1 by bylo ještě potřeba nastavit NAT (stejně tak na routeru v prvním příkladu), ale tomu se budeme věnovat v některém z příštích dílů společně s paketovými filtry.

Protože je defaultně zakázáno předávání (přeposílání) paketů, je nutné toto povolit příkazem:

# echo "1" > /proc/sys/net/ipv4/ip_forward

Tento příkaz musíme zadat do nějakého rc skriptu (např. /etc/rc.d/rc.local), aby se provedl při každém startu, nebo můžeme editovat soubor /etc/sysctl.conf, řádek "Controls IP packet forwarding".

Tolik tedy k nastavení routování pod "normální" distribucí Linuxu, nyní přejdeme k něčemu speciálnímu.

Linux Routing Project (LRP)

Jedna velmi zajímavá minidistribuce, která má své kořeny v distribuci Debian, a kterou můžete použít na váš router. Nejzajímavější na ní je to, že se vejde na jednu disketu (můžete samozřejmě použít i např. ZIPku nebo HDD). Pokud si chcete tuto distribuci vyzkoušet, tak na adrese www.linuxrouter.org najdete odkazy na ftp servery, ze který si můžete stáhnout zabalený "image" diskety, a poté jej např. takto "nakopírovat" na disketu:

# gunzip idiot-image_1440KB_FAT_2.9.8_Linux_2.2.gz
# dd if=idiot-image_1440KB_FAT_2.9.8_Linux_2.2 of=/dev/fd0

Pak již stačí jen restartovat počítač a nechat jej z této diskety nabootovat. Je asi jasné, že tak malá distribuce nebude příliš hardwarově náročná, v dokumentaci můžete najít následující příklady použitého hardwaru:

  • 386dx with 16MB, floppy, ne for LAN and 28k8 leased line
  • 486dx 66 ??MB for 16 users on 128k leased line
  • AMD K5/133 64MB with Sangoma S508 for Frame Relay

Pojďme si říci jak to vlastně funguje. Bootovací médium (v našem případě disketa) obsahuje linuxové jádro (pomocí LRP patches lze vytvořit LRP kernel z normálního kernelu), při bootování je obsah rozbalen do paměti resp. do ramdisku (/dev/ram0) a pak je ramdisk připojen jako kořenový disk (/), systém nadále samozřejmě běží v paměti. Je logické, že všechny změny, které provedete je potřeba zapsat na disketu, protože jinak byste o ně při restartu přišli. Toto lze provést jak pomocí jednoduchého menu, které se vám zobrazí po nabootování, tak i automaticky v určitých nastavených intervalech (ztráta všeho nastavení po restartu může být i výhodou, pokud něco nastavíte špatně, tak pokud jste již neprovedli zálohu, stačí restart a máte "čistý systém").

Po spuštění se přihlaste jako root, heslo je zatím prázdné (doporučuji ihned nastavit pomocí příkazu passwd). Poté by se vám mělo objevit "Linux Router Project - configuration menu", pomocí kterého se dá vše celkem pohodlně nastavit, a také je v něm důležitá položka a to "Back-up ramdisk". Pokud z něj vyskočíte (klávesa "q"), můžete se do něj zpět vrátit příkazem lrcfg.

Nějaké konkrétní podrobnosti zde uvádět nebudu, protože možností je opravdu mnoho, takže doporučuji si pročíst dokumentaci, kterou můžete najít třeba na této adrese. Navíc jsou všechny konfigurační soubory samozřejmě okomentovány.

LRP není jediná minidistribuce určená k provozování routeru, takže pokud vy používáte nebo znáte jinou, tak budu rád, když se podělíte o zkušenosti v diskuzi.

 
Pocet navstev: 110826