Počítačové sítě nabývají stále většího významu. Pojďme se tedy
podívat, jak si můžeme nakonfigurovat vlastní síťové zařízení.
13.8.2004 08:00 | Ondřej Čečák | přečteno 145343×
Little known fact about Middle Earth: The Hobbits had a very sophisticated computer network! It was a Tolkien Ring...
Aby byla komunikace s ostatními zařízeními vůbec možná, je obvykle nutné mít v počítači nějaké síťové zařízení. V našem případě se bude jednat o libovolnou síťovou kartu (NIC – Network Interface Card). Síťové karty jsou linuxovým jádrem obvykle dobře podporované, takže předpokládám, že budeme konfigurovat kartu, kterou systém "vidí" a má pro ni zaveden funkční ovladač.
Ve všech komunikačních protokolem bývá nejdůležitější způsob adresování. V tomto článku se budeme bavit o protokolu TCP/IP a tam jsou v podstatě dvě možnosti:
Statická konfigurace znamená, že IP adresa (a ostatní potřebné údaje) je přiřazena stroji více méně manuálně a daný počítač ji bude mít stále stejnou. Při správě více počítačů je ovšem efektivnější dynamická konfigurace – klient se nakonfiguruje tak, aby získával (půjčoval si) potřebné údaje přes DHCP (Dynamic Host Configuration Protocol)) nebo BOOTP (Bootstrap Protocol), takže v případě potřeby můžete změnit některé údaje jednoduše (a pouze) na serveru. (neberu v úvahu různé dirty tricks ;-))
Pokud tedy počítač nezískává potřebné údaje přes DHCP, nezbývá než vše nastavit manuálně. Různé distribuce tuto činnost různě ulehčují a nabízí všemožné postupy a prostředky, jak této konfigurace dosáhnout. My si představíme pouze ten nejzákladnější postup prakticky bez použití dalších "pomocníků".
Každý počítač obvykle mívá nějaké jméno, inspiraci, jak toho jméno zvolit, můžete najít v RFC 1178, RFC 2100 a nebo v článku na root.cz (především diskuze je dost inspirativní).
Jestliže tedy už máme zvolené jméno, použijeme příkaz
hostname
, kterým název počítače nastavíme.
root@localhost:~# hostname hippo root@localhost:~#
Název se v tomto případě okamžitě nezměnil, protože je nutné, aby si změny
všimly jednotlivé procesy (konkrétně shell), např. resetováním služby. Vhodné také
je uložit název počítače do konfiguračního souboru, protože po restartu
počítače by bylo hostname opět původní. Jak se název počítače při startu
nastavuje, a které (resp. a jestli) používá konfigurační soubory opět závisí na distribuci,
např. Debian používá soubor /etc/hostname
. V případě, že nemůžete
tento soubor ve své distribuci najít, zkuste použít na rekurzivní prohledání
adresáře /etc
příkaz grep -r localhost /etc/*
.
Příkaz vypíše všechny soubory, které obsahují daný výraz, v tomto případě
localhost, který byl nastaven jako implicitní název stroje.
Ať už máme IP adresu z privátního rozsahu
(viz RFC 1918)
nebo veřejnou, je potřeba ji zařízení přiřadit. V minulosti se na to používal
program ifconfig
, protože je ale tento program zastaralý,
použijeme příkaz ip
(z balíku iproute).
root@hippo:~# ip addr add 192.168.0.2/24 brd + dev eth0 root@hippo:~# ip link set eth0 up
Tímto jsme zařízení eth0 (první síťová karta) přiřadili IP adresu 192.168.0.2
a síťovou masku 255.255.255.0 (v příkladu je zapsána úsporně – číslo
znamená počet jedniček v binárním zápisu). Následuje adresa pro broadcasty (pokud ji
nenapíšete přímo, ale pomocí +
, bude automaticky dopočítána podle IP adresy a síťové masky.
Druhý řádek našeho příkazu rozhraní aktivoval.
Pokud chcete jednomu síťovému zařízení přiřadit více adres, můžete jednoduše opakovat první příkaz nahoře. Pokud vás několik adres na jedné NIC přestane bavit, jednoduše adresu zase smažte:
root@hippo:~# ip addr add 192.168.1.2/24 brd + dev eth0 root@hippo:~# ip addr del 192.168.1.2/24 dev eth0
Pokud se vám defaultní název zařízení eth0 z nějakého důvodu nelíbí, není problém přiřadit tomuto zařízení jiný název:
root@hippo:~# ip link set eth0 name JmenoSitovky
Nastavení můžeme zkontrolovat zobrazením stavu zařízení:
root@hippo~# ip addr show eth0 2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000 link/ether 00:04:75:c4:66:6f brd ff:ff:ff:ff:ff:ff inet 192.168.0.2/24 brd 192.168.0.255 scope global eth0
Deaktivace rozhraní se dá provést takto:
root@hippo:~# ip link set eth0 down
V případě, že chcete zařízení nakonfigurovat znovu, měli byste ho vyčistit příkazem:
root@hippo:~# ip addr flush dev eth0
Další krok v naší konfiguraci je nastavení cest, kterými se mají packety
ubírat k cíli. Protože je naše síť jednoduchá, nastavíme pouze implicitní
směrování na gateway. Opět nepoužijeme zastaralý příkaz route
,
nýbrž program ip
.
root@hippo:~# ip route add default via 192.168.0.254
Vlastní routovací tabulku si můžeme nechat zobrazit příkazem:
root@hippo:~# ip route list 192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.2 127.0.0.0/8 dev lo scope link default via 192.168.0.254 dev eth0
V praxi se dá také použít zkráceně ekvivalentní ip r
. Zařízení lo
je lokální smyčka,
která má své specifické využití. Implicitně se provoz směruje přes nastavenou bránu.
Protože by bylo opravdu nepraktické a nepohodlné pamatovat si jednotlivé IP adresy serverů, existuje možnost přiřazení číselným adresám jejich jmenný ekvivalent (a v případě potřeby naopak :o)).
Poměrně jednoduchý způsob je ukládání jmen do souboru /etc/hosts
(ve formátu IP adresa, kanonické jméno, aliasy –
odděleno tabulátory). Samozřejmě
lze např. zajistit distribuci souboru se seznamem na jednotlivé stroje, ale v
případě větších sítí by to bylo značně náročné a velmi nepraktické.
Typický příklad souboru /etc/hosts
by mohl vypadat nějak takto:
127.0.0.1 hippo localhost
192.168.0.254 gw
Kvůli výše zmíněné nepraktičnosti a složitosti existují místo distribuce seznamu
adres servery DNS (Domain Name System), které tato jména
uchovávají a poskytují odpovědi na dotazy. V linuxu adresu DNS nastavíme do
souboru /etc/resolv.conf
.
Uvést si můžeme okomentovaný příklad:
search jmeno-domeny.cz # název domény, kterou chcete prohledávat nameserver 192.168.100.254 # primární DNS nameserver 192.168.100.252 # sekundární DNS nameserver 172.16.20.254 # záložních DNS můžete mít definováno i více
Použití těchto dvou souborů ovšem závisí na nastavení, konkrétně na /etc/hosts.conf
, který
slouží jako konfigurační soubor knihovně resolveru. Právě zde je určeno, jestli se mají tyto dva soubory použít,
případně v jakém pořadí (novější verze mají navíc další možnosti, jako např. ochrana nebo varování před ip spoofem, atd.)
Jak už bylo řešeno výše, dynamická konfigurace klientů může významným způsobem zjednodušit a zefektivnit správu větší sítě. V následujících příkladech se podíváme na konfiguraci klientů přes DHCP (více o DHCP viz RFC 2131).
Samotných klientů existuje více, my se podíváme na nejběžnější programy –
dhclient
od ISC (Internet Software Consortium)
a na pump
. Setkat se ale můžete také dalšími (např. dhcpcd
).
Programy na získání potřebných údajů pro konfiguraci sítě se obvykle používají v distribučních startovacích skriptech – my se ovšem podíváme pouze na základní použití bez pomoci různých skriptů závislých na zvolené distribuci.
Nejprve se tedy podíváme na program dhclient
. Ten se při startu
podívá do konfiguračního souboru /etc/dhclient.conf
a podle
obsahu se patřičně zachová. Soubor může být i prázdný a konfigurace obvykle
projde bez problémů.
Podívejme se ale na okomentovaný příklad konfiguračního souboru:
timeout 60; # timeout :o), klient bude zkoušet navazovat komunikaci 60s retry 60; # pokud neuspěje, po 60 sekundách to zkusí znovu reboot 10; # po 10 sekundách klient vzdá použití staré adresy a # začne nově hledat reject 192.168.0.3; # odmítne danou IP interface "eth0" { # nastavení pro zařízení eth0 send host-name "hippo"; # send znamená, že je serveru poslána # daná položka s danou hodnotou, # více viz man dhcp-options send dhcp-client-identifier 00:0c:29:05:24:51; send dhcp-lease-time 3600; supersede domain-name "moje-domena.cz"; # pouzije domain-name, at # server předá cokoli prepend domain-name-servers 127.0.0.1; # toto se pouzije do doby, # než server dodá # odpovídající hodnotu request subnet-mask, broadcast-address, time-offset, routers, domain-name, domain-name-servers; # požadované údaje (DHCP server # toto posílá implicitně) require subnet-mask, domain-name-servers, host-name; # údaje, které server musí # zaslat, aby byl požadavek # uznán platným script "/sbin/dhclient-script"; # cesta ke konfiguračnímu skriptu }
Další program, který lze použít je pump
, který např. používá(la) ve
svých konfiguračních skriptech distribuce RedHat. Použití programu je poměrně
jednoduché, stačí zadat parametr -i
a název zařízení, které si
přejeme zkonfigurovat.
root@hippo~# pump -i eth0 root@hippo~# pump -i eth0 status Device eth0 IP: 192.168.0.2 Netmask: 255.255.255.0 Broadcast: 192.168.0.255 Network: 192.168.0.0 Boot server 192.168.0.254 Next server 192.168.0.254 Gateway: 192.168.0.254 Domain: localdomain Nameservers: 192.168.100.254 Renewal time: Fri Jul 23 19:32:16 2004 Expiration time: Fri Jul 23 19:47:16 2004
Z výpisu je patrné, jaká je funkce příkazu -i $INTERFACE status
– vypíše
získané a použité parametry. V případě, že není vhodné použít adresy DNS od
serveru, lze použít volbu -no-dns
, podobně, ale pro gateway platí
parametr -no-gateway
. Pokud je třeba zařízení
dekonfigurovat, použijeme pump -r
.
Program pump
může být také nastavován prostřednictvím konfiguračního souboru –
právě k tomu slouží /etc/pump.conf
. Uvést si můžeme přímo příklad:
domainsearch "my.own.org own.org at.work.com" # nastaví vlastní domainsearch,
# ignoruje serverem
# vrácené hodnoty
retries 3 # pokusí se kontaktovat DHCP server celkem 4x
timeout 60 # po 60 sekundách vzdá komunikaci
device eth0 { # konfigurujeme zařízení eth0
nodns # zakáže modifikaci /etc/resolv.conf
nogateway # ignoruje serverem zaslanou adresu brány
}
Když se bavíme o sítích, musím zdůraznit bezpečnost. Nezapomínejte, v jaké síti jste připojeni a co od ní můžete a nemusíte čekat. I když slouží stroj pouze na testování, měl by být adekvátně zabezpečen proti útoku zvenčí.
Za konzultace bych chtěl poděkovat Honzovi Houšťkovi.