Úvod a ifconfig
V knihách, článcích, návodech a dokumentaci se často setkáte s nástrojem ifconfig
(a dále nástroji arp
a route
, které jeho funkčnost doplňují). Možná jste si jej díky tomu osvojili a aktivně jej používáte. Tyto nástroje jsou však již dlouhou dobu považovány za zastaralé, jelikož nerespektují změny v síťovém subsystému linuxového jádra, a to už od řady 2.2. Jejich použití může být kvůli tomu za určitých okolností problematické až potenciálně nebezpečné, pokud si nejste případných úskalí dobře vědomi.
Jistě tušíte, jak nahodit síťové rozhraní a IP adresu. Pomocí nástroje ifconfig
byste to provedli takto:
ifconfig eth0 down # shození rozhraní eth0 ifconfig eth0 up # nahození rozhraní eth0 ifconfig eth0 192.168.12.12 netmask 255.255.255.0 # nastavení IP adresy a masky
Co když ale chcete přiřadit jednomu rozhraní více IP adres? Na serveru je to celkem častý požadavek (např. více IP adres pro SSL virtuální weby). Linux to samozřejmě umí, avšak ifconfig
nikoliv. V jeho případě si musíte pomoci jistou obezličkou:
ifconfig eth0 192.168.12.12 netmask 255.255.255.0 ifconfig eth0:0 192.168.13.13 netmask 255.255.255.0 ifconfig eth0:1 192.168.14.14 netmask 255.255.255.0
V tomto případě je třeba zdůraznit, že rozhraní eth0:0
a eth0:1
jsou sice někde označovaná jako „virtuální“, ale ve skutečnosti se jedná o aliasy daných IP adres, tedy aliasy původního rozhraní.
V případě nástroje ip
je možné přidávat IP adresy bez jakýchkoliv obezliček:
ip addr add 192.168.12.12/24 brd + dev eth0 ip addr add 192.168.13.13/24 brd + dev eth0
Problém nastane tehdy, pokud vy (nebo nějaký skript) použije některé z pokročilejších (nebo se starými nástroji nekompatibilních) funkcí nástroje ip
. ifconfig
vám pak může lhát nebo nasekat neplechu, když přepíše vaše nastavení. Příkladem může být i výše uvedené nastavení více IP adres jednomu rozhraní pomocí nástroje ip
. Jelikož nástroj ip
běžně k IP adresám aliasy nedefinuje, pak, pokud pomocí něj přiřadíte nějakému rozhraní více IP adres, ifconfig
vám je u daného rozhraní nezobrazí:
root@debian ~# ip addr add 192.168.12.12/24 brd + dev eth1 root@debian ~# ip addr add 192.168.13.13/24 brd + dev eth1 root@debian ~# ifconfig eth1 eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 metric 1 inet 192.168.12.12 netmask 255.255.255.0 broadcast 192.168.12.255 inet6 fe80::20a:aff:febc:1c20 prefixlen 64 scopeid 0x20<link> ether 00:0a:0a:bc:1c:20 txqueuelen 1000 (Ethernet) RX packets 629 bytes 42106 (41.1 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 11 bytes 678 (678.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 root@debian ~# ip addr show eth1 3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000 link/ether 00:0a:0a:bc:1c:20 brd ff:ff:ff:ff:ff:ff inet 192.168.12.12/24 brd 192.168.12.255 scope global eth1 inet 192.168.13.13/24 brd 192.168.13.255 scope global eth1 inet6 fe80::20a:aff:febc:1c20/64 scope link valid_lft forever preferred_lft forever
Jak je vidět (IP adresy ve výpisech jsou zvýrazněny tučně), ifconfig
v tomto příkladu zobrazuje pouze první nastavenou IP adresu, druhou úspěšně ignoruje. Nástroj ip
zobrazuje obě.
V zásadě, pokud budete používat výhradně starší nástroje ifconfig
, arp
a route
, a zároveň budete využívat pouze tu funkcionalitu, kterou tyto nástroje umí, neměli byste narazit na problém. Pokud však budete používat nástroj ip
, načež si usmyslíte, že použijete ifconfig
, můžete v určitých situacích narazit na problém.
Nástroj ip
umí nejenom to, co umí nástroje ifconfig
, arp
a route
dohromady, ale také řadu dalších věcí. Kromě toho nástroj ip
respektuje současný návrh síťového subsystému jádra Linuxu a jeho možnosti.
Instalace
Nástroj ip
bývá součástí moderních distribucí. Pokud ho ve své instalaci nenajdete, pak vám stačí nainstalovat balíček iproute2
, což v Debianu provedete takto:
aptitude install iproute2
Dlužno dodat, že ve standardní instalaci Debianu Squeeze je již tento balíček obsažen.
Úvod do nástroje ip
Syntaxe nástroje ip
je poměrně odlišná od nástroje ifconfig
(a jeho dvou bratrů), avšak umí toho hodně a podporuje krátké zápisy, které vám šetří ruce, pokud je zadáváte ručně.
Prvním parametrem příkazu ip
je vždy „modul“, se kterým chcete pracovat. To může být síťové rozhraní, IP adresa, směrovací tabulka, ARP tabulka apod.:
ip link # operace se síťovými rozhraními ip addr # operace s IP adresami ip route # operace se směrovací tabulkou ip neigh # operace s ARP tabulkou ip rule # operace se směrovacími pravidly
Těchto „modulů“ je o několik více, nicméně tyto je možné považovat za nejběžnější. Jednotlivé parametry mají samozřejmě svoje zkrácené varianty:
ip li # operace se síťovými rozhraními ip a # operace s IP adresami ip r # operace se směrovací tabulkou ip n # operace s ARP tabulkou ip ru # operace se směrovacími pravidly
Každý z těchto modulů má svou specifickou syntax. V rychlosti si ji můžete nechat vypsat, pokud budete tápat:
ip help ip addr help
Pokud vám nápověda nestačí, můžete použít manuálové stránky:
man ip
Pro rychlý výpis např. IP adres nemusíte zadávat kromě modulu žádné další parametry:
root@debian ~# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 64:31:50:74:1e:c6 brd ff:ff:ff:ff:ff:ff inet6 fe80::6631:50ff:fe74:1ec6/64 scope link valid_lft forever preferred_lft forever
Práce se síťovými rozhraními
Základní operace se síťovými rozhraními jsou určitě jejich nahození a shození:
ip link set dev eth0 up # nahození rozhraní ip link set dev eth0 down # shození rozhraní
To je trošku nešťastný začátek, jelikož zrovna v tomto případě je syntaxe nástroje ifconfig
úspornější:
ifconfig eth0 up ifconfig eth0 down
Při této práci s rozhraními si dejte pozor, abyste nebyli na server připojeni přes SSH, protože pokud shodíte rozhraní, přes které jste připojeni, pak ho už nenahodíte.
Ale zpět k nástroji ip
. Ten umí měnit nejenom stav rozhraní, ale také řadu jejich parametrů. Mnoho z nich se dočtete v manuálu, já zmíním dva nejběžnější. Prvním je MAC adresa, kterou můžete změnit i bez nástroje ethtool
, takto:
ip link set dev eth0 address 11:22:33:44:55:66
Dalším parametrem, který můžete chtít někdy změnit, je MTU, tedy maximální velikost IP datagramu, kterou dané rozhraní zpracuje. V případě ethernetu je to nejčastěji 1500 bytů:
ip link set dev eth0 mtu 1500
Jednotlivá rozhraní si samozřejmě můžete nechat vypsat:
root@debian ~# ip link show 1: lo: mtu 16436 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 2: eth0: mtu 1400 qdisc pfifo_fast state UP qlen 1000 link/ether 64:31:50:74:1f:c7 brd ff:ff:ff:ff:ff:ff 3: eth1: mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000 link/ether 00:0a:0a:bc:1c:20 brd ff:ff:ff:ff:ff:ff 4: wlan0: mtu 1500 qdisc mq state UP qlen 1000 link/ether e0:2a:82:45:f4:56 brd ff:ff:ff:ff:ff:ff
Můžete si nechat vypsat konkrétní rozhraní:
root@debian ~# ip link show dev eth0 2: eth0: mtu 1400 qdisc pfifo_fast state UP qlen 1000 link/ether 64:31:50:74:1f:c7 brd ff:ff:ff:ff:ff:ff
Nebo si můžete nechat vypsat pouze aktivní rozhraní:
ip link show up
Práce s IP adresami
Jak víte, na síti je každý počítač identifikován IP adresou. Abyste tedy mohli komunikovat po síti, musíte nastavit nějakému dostupnému síťovému rozhraní IP adresu. Přidání IP adresy konkrétnímu rozhraní se tu již objevilo:
ip addr add 10.0.4.16/24 dev eth1
Tato syntaxe přidá danou IP adresu s maskou v CIDR notaci (tzn. /24
je ekvivalentem masky 255.255.255.0
). Není potřeba nějaký zvláštní parametr pro přidání další IP adresy. Jednomu rozhraní můžete přiřadit tolik IP adres, kolik chcete. Na serverech bývá obvyklé mít více IP adres, ať již IPv4, nebo IPv6.
Připomínám, že můžete použít kratší zápis:
ip a a 10.0.4.16/24 dev eth1
Chcete-li specifikovat konkrétní broadcast adresu, můžete použít tuto syntaxi:
ip addr add 10.0.4.16/24 brd 10.0.4.255 dev eth1
Adresu pro broadcast můžete specifikovat v kratší podobě, nejspíše pomocí +
, kde se jako broadcast nastaví adresa s jedničkami v těch bitech, které odpovídají síťovému rozhraní v dané síťové masce:
ip addr add 10.0.4.16/24 brd + dev eth1
IP adresu samozřejmě můžete i zrušit:
ip addr del 10.0.4.16/24 dev eth1
Máte-li přiřazeno více IP adres jednomu rozhraní a chcete-li je smazat všechny, můžete použít parametr flush
:
ip a flush dev eth1
Příklad: vytvoření jednoduché místní sítě mezi dvěma počítači
Pro ilustraci, pokud byste měli dva počítače, propojili je kříženým síťovým kabelem a chtěli si vytvořit jednoduchou síť, postupovali byste tak, že byste nejprve nahodili příslušná rozhraní (obvykle eth0
), a poté byste jednotlivým rozhraním na každém počítači přiřadili IP adresu, samozřejmě u každého počítače jinou, ale se stejnou síťovou maskou. Tudíž byste na jednom počítači zadali tyto dva příkazy:
ip link set dev eth0 up ip addr add 10.0.1.1/24 dev eth0
A na druhém pak tyto:
ip link set dev eth0 up ip addr add 10.0.1.2/24 dev eth0
Poté byste měli být schopni komunikovat:
ping 10.0.1.1
Tím bych tento díl ukončil. Příště se dozvíte více o práci s ARP tabulkami a o směrování.