Linux v příkazech - konfigurace sítě

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 144495×

Little known fact about Middle Earth: The Hobbits had a very sophisticated computer network! It was a Tolkien Ring...

NIC

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č.

Adresování

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 ;-))

Statická konfigurace

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ů".

Nastavení hostname

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.

Nastavení IP adresy

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

Nastavení směrování

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.

Nastavení DNS

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.)

Dynamická konfigurace

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
       }

Nezapomínejte na bezpečnost

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čí.

Zdroje

Za konzultace bych chtěl poděkovat Honzovi Houšťkovi.

Online verze článku: http://www.linuxsoft.cz/article.php?id_article=302