Linux E X P R E S

Facebook

Správa linuxového serveru: Nastavení sítě pomocí nástroje ip

debain_notext.png

V tomto dílu vám představím nástroj ip, který již dlouho nabízí alternativu k zastaralému, avšak stále rozšířenému a používanému nástroji ifconfig.


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

Diskuze (8) Nahoru