Síťová rozhraní: Porovnání verzí

Z Milan Kerslager
Přejít na: navigace, hledání
(Založení článku)
 
(Automatické autodetekce přes HAL)
Řádka 3: Řádka 3:
 
== Moduly ==
 
== Moduly ==
  
S nejrůznějšími zařízeními komunikuje jádro pomocí tzv. ovladačů, které jsou obvykle realizovány jako moduly. Pokud je síťová karta připojena přes PCI sběrnici, není potřeba modulu předávat další informace, protože si všechny dokáže zjistit sám (zkuste použít příkaz <CODE>lspci</CODE>, který vypíše seznam zařízení připojených na PCI sběrnici, případně <CODE>lspci&nbsp;-v</CODE> pokud se chcete dozvědět podrobnější informace). V případě ISA karet je obvykle potřeba ovladači (modulu) sdělit alespoň I/O adresu.
+
S nejrůznějšími zařízeními komunikuje jádro pomocí tzv. ovladačů, které jsou obvykle realizovány jako moduly. Pokud je síťová karta připojena přes PCI sběrnici, není potřeba modulu předávat další informace, protože si všechny dokáže zjistit sám (zkuste použít příkaz <CODE>lspci</CODE>, který vypíše seznam zařízení připojených na PCI sběrnici nebo <CODE>lspci&nbsp;-v</CODE>, pokud se chcete dozvědět podrobnější informace). V případě ISA karet je obvykle potřeba ovladači (modulu) sdělit alespoň I/O adresu.
  
Moduly lze do jádra zavést ručně příkazem <CODE>modprobe</CODE> nebo nechat jádro zavést modul automaticky. Automatické zavedení funguje tak, že pokud se pokusíte pracovat se zařízením, které jádro nezná, zavede se podle předem dané asociace určitý modul. Tyto asociace jsou zapsány v souboru <CODE>/etc/modprobe.conf</CODE> (v jádrech 2.4.x a starších v souboru <CODE>/etc/modules.conf</CODE>).
+
V současné době jádro Linuxu spolupracuje s démonem '''hal''', který umožňuje zavádět moduly zcela automaticky bez zásahu uživatele. Výsledkem je, že po zasunutí Flash paměti do USB slotu je automaticky zaveden modul pro práci s USB ''mass storage'' zařízením. Následně je detekován použitý typ systému souborů na Flash paměti (FAT, NTFS, jffs2 a podobně) a zaveden modul nebo více modulů, které z něj dokáží číst soubory a adresáře.
  
=== Výběr modulu ===
+
U starších zařízení nelze automaticky zjistit jejich typ, výrobce a verzi (jako je to možné u sběrnic PCI, USB, PCI Express, PC Card a podobně). V takovém případě je nutné vytvořit vazbu mezi zařízením a obslužným modulem ručně. Tyto vazby (aliasy) zapisujeme do souboru <CODE>/etc/modprobe.conf</CODE> (v jádrech 2.4.x a starších v souboru <CODE>/etc/modules.conf</CODE>). Pokud se pak s tímto zařízením pokusíme pracovat (např. síťová karta na ISA sběrnici), je již modul zaveden automaticky nebo ho můžeme sami před použitím zařízení zavést do jádra ručně příkazem <CODE>modprobe</CODE>.
  
Pokud sami nevíte, jaký modul ke kartě potřebujete, musíte se buď spolehnout na instalační program distribuce vašeho Linuxu (tj. karta musí být přítomna už během instalace) nebo použít nějaký automatický nástroj, který provede autodetekci a zapíše do souboru jména zařízení a k nim příslušné moduly (v distribuci Red Hat Linux nebo Fedora je to program kudzu, který se implicitně spouští při startu systému, ale můžete ho spustit i ručně). Automatické nástroje zjistí identifikaci zařízení (zkuste příkaz <CODE>lspci&nbsp;-n</CODE>, který vypíše pořadě číslo sběrnice, číslo zařízení, typ zařízení (Class), kód výrobce a zařízení) a v tabulce <CODE>/lib/modules/2.6.x-y.z/modules.pcimap<CODE> si najdou ovladač, který takové zařízení dokáže obsluhovat. Číslo 2.6.x-y.z je číslo verze právě používaného jádra (lze zobrazit např. příkazem <CODE>uname&nbsp;-r</CODE>). Zjištěné asociace mezi zařízením a potřebným modulem zapíše automatický nástroj do již zmíněného souboru <CODE>/etc/modprobe.conf</CODE>.
+
=== Ruční výběr modulu ===
  
Poslední možností je zkusit zavést moduly ručně příkazem <CODE>modprobe</CODE>. Seznam modulů najdete v adresáři <CODE>/lib/modules/2.6.x-y.z/kernel/drivers/net</CODE>.
+
Pokud nevíme, jaký modul je ke kartě potřeba, musíte se buď spolehnout na instalační program distribuce vašeho Linuxu (tj. karta musí být přítomna už během instalace) nebo použít nějaký automatický nástroj, který provede autodetekci a zapíše do souboru jména zařízení a k nim příslušné moduly (v distribuci Red Hat Linux nebo Fedora je to program '''kudzu''', který se implicitně spouští při startu systému, ale můžete ho spustit i ručně).
 +
 
 +
Automatické nástroje zjistí identifikaci zařízení (zkuste příkaz <CODE>lspci&nbsp;-n</CODE>, který vypíše popořadě číslo sběrnice, číslo zařízení, typ zařízení (Class), kód výrobce a zařízení) a v tabulce <CODE>/lib/modules/2.6.x-y.z/modules.pcimap</CODE> si najdou ovladač, který takové zařízení dokáže obsluhovat. Číslo 2.6.x-y.z je číslo verze právě používaného jádra (lze zobrazit např. příkazem <CODE>uname&nbsp;-r</CODE>). Zjištěné asociace mezi zařízením a potřebným modulem zapíše automatický nástroj do již zmíněného souboru <CODE>/etc/modprobe.conf</CODE>.
 +
 
 +
Poslední možností je zkusit zavádět moduly ručně příkazem <CODE>modprobe</CODE> a sledovat, jestli se nějaký "nechytí". Seznam modulů najdete v adresáři <CODE>/lib/modules/2.6.x-y.z/kernel/drivers/net</CODE>.
 +
 
 +
<CENTER>
 +
{| border="1"
 +
|+ Seznam modulů pro síťové karty
 +
|-
 +
! '''Jméno modulu''' !! '''Sběrnice''' !! '''Obsluhované síťové karty'''
 +
|-
 +
| align="center" | 3c59x, 3c900 || align="center" | PCI  || 3Com
 +
|-
 +
| align="center" | ne2k-pci    || align="center" | PCI  || NE2000 kompatibilní
 +
|-
 +
| align="center" | 8139too, 8139cp, 8139 || align="center" | PCI || s čipem Realtek
 +
|-
 +
| align="center" | sis900 || align="center" | PCI || s čipem SiS
 +
|-
 +
| align="center" | ne    || align="center" | ISA || různé ISA karty
 +
|}
 +
</CENTER>
  
 
=== Předávání parametrů modulům ===
 
=== Předávání parametrů modulům ===
  
V případě PCI karet 3Com (3C900, 3C905 atp.) je používán modul 3c59x nebo 3c900. PCI karty NE2000 kompatibilní jsou ovládány modulem ne2k-pci. Síťové PCI karty s čipem Realtek obsluhuje ovladač 8139too, 8139cp nebo 8139, na základních deskách SiS bývají integrovány karty, ke kterým přísluší ovladač sis900. Následující příklad demonstruje obsah souboru /etc/modprobe.conf, který zajistí automatické zavedení zmíněných modulů v případě potřeby (předpokládá, že v počítači jsou vloženy 2 síťové karty na PCI sběrnici - jedna 3Com a druhá NE2000 kompatibilní):
+
Následující příklad demonstruje obsah souboru /etc/modprobe.conf, který zajistí automatické zavedení zmíněných modulů v případě potřeby (předpokládá, že v počítači jsou vloženy 2 síťové karty na PCI sběrnici - jedna 3Com a druhá NE2000 kompatibilní):
  
 
  alias eth0 3c59x
 
  alias eth0 3c59x
Řádka 29: Řádka 51:
 
  modprobe ne io=0x300
 
  modprobe ne io=0x300
  
Ovladač ISA karty potřebuje k úspěšné detekci karty jako nápovědu I/O adresu, na kterou je karta nastavena, protože náhodné zápisy na porty kvůli autodetekci mohou vést k zatuhnutí celého počítače. Samotná karta se musí na tento port nastavit ručně jumpery nebo speciálním programem od jejího výrobce. Přerušení není u tohoto ovladače obvykle potřeba zadávat. Pokud byste chtěli zjistit kompletní seznam všech přípustných parametrů modulu <CODE>ne</CODE>, použijte příkaz (výstupem je seznam parametrů, očekávaná hodnota &ndash; např. <CODE>int</CODE> je celé číslo a jejich krátký popis):
+
Pokud se detekce nezdaří, je vhodné modul z jádra odstranit:
 +
 
 +
rmmod ne
 +
 
 +
Ovladač ISA karty potřebuje k úspěšné detekci karty jako nápovědu I/O adresu, na kterou je karta nastavena, protože náhodné zápisy na porty kvůli autodetekci mohou vést k zatuhnutí celého počítače. Samotná karta se musí na tento port nastavit ručně propojkami (jumpery) nebo speciálním programem od jejího výrobce. Přerušení není u tohoto ovladače obvykle potřeba zadávat. Pokud byste chtěli zjistit kompletní seznam všech přípustných parametrů modulu <CODE>ne</CODE>, použijte příkaz (výstupem je seznam parametrů, očekávaná hodnota &ndash; např. <CODE>int</CODE> je celé číslo a jejich krátký popis):
  
 
  modinfo -p ne
 
  modinfo -p ne
Řádka 35: Řádka 61:
 
== Konfigurace TCP/IP ==
 
== Konfigurace TCP/IP ==
  
Ve Fedoře nebo Red Hat Enterprise Linuxu (a jeho klonech) je konfigurace síťových karet záležitostí zápisu potřebných údajů do souborů v adresáři <CODE>/etc/sysconfig/network-scripts<CODE>. Jejich obsah je demonstrován níže (rozhraní <CODE>eth0</CODE> bude dále považováno za vnější, tj. počítač je pomocí něho připojen k Internetu a rozhraní <CODE>eth1</CODE> je vnitřním rozhraním, za kterým je vnitřní síť):
+
Ve Fedoře nebo Red Hat Enterprise Linuxu (a jeho klonech) je konfigurace síťových karet záležitostí zápisu potřebných údajů do souborů v adresáři <CODE>/etc/sysconfig/network-scripts</CODE>. Jejich obsah je demonstrován níže (rozhraní <CODE>eth0</CODE> bude dále považováno za vnější, tj. počítač je pomocí něho připojen k Internetu a rozhraní <CODE>eth1</CODE> je vnitřním rozhraním, za kterým je vnitřní síť):
  
 
  $ cat /etc/sysconfig/network-scripts/ifcfg-eth0
 
  $ cat /etc/sysconfig/network-scripts/ifcfg-eth0
Řádka 54: Řádka 80:
 
=== Jméno počítače ===
 
=== Jméno počítače ===
  
Součástí správné konfigurace síťového subsystému je i nastavení vlastního jména počítače. Jméno se nastavuje i vypisuje pomocí příkazu hostname, můžete ho vidět i ve výstupu příkazu <CODE>uname&nbsp;-a</CODE>. Pokud vypsané jméno nesouhlasí se zamýšleným jménem počítače (tj. jméno včetně domény), doplňte ho do souboru <CODE>/etc/sysconfig/network</CODE> do proměnné <CODE>HOSTNAME</CODE>, což zajistí jeho automatické nastavení při startu počítače (jednoduše se spustí již zmíněný program hostname s parametrem plného jména počítače včetně domény).
+
Součástí správné konfigurace síťového subsystému je i nastavení vlastního jména počítače. Jméno se nastavuje i vypisuje pomocí příkazu <CODE>hostname</CODE>, můžete ho vidět i ve výstupu příkazu <CODE>uname&nbsp;-a</CODE>. Pokud vypsané jméno nesouhlasí se zamýšleným jménem počítače (tj. jméno včetně domény), doplňte ho do souboru <CODE>/etc/sysconfig/network</CODE> do proměnné <CODE>HOSTNAME</CODE>, což zajistí jeho automatické nastavení při startu počítače (jednoduše se spustí již zmíněný program hostname s parametrem plného jména počítače včetně domény).
  
 
  $ cat /etc/sysconfig/network
 
  $ cat /etc/sysconfig/network
Řádka 91: Řádka 117:
 
  route -n                          # kontrola routovací tabulky
 
  route -n                          # kontrola routovací tabulky
 
  cat /proc/sys/net/ipv4/ip_forward  # je zapnutý ip_forward? (musí vypsat číslo 1)
 
  cat /proc/sys/net/ipv4/ip_forward  # je zapnutý ip_forward? (musí vypsat číslo 1)
 +
 +
Jednotlivě lze síťová zařízení nastavovat a rušit pomocí skriptů <CODE>ifup</CODE> a <CODE>ifdown<CODE>:
 +
 +
ifdown eth0
 +
ifup eth0

Verze z 27. 2. 2008, 13:41

Abyste mohli komunikovat pomocí počítačové sítě, musí nejprve jádro operačního systému síťová zařízení (síťové karty) rozpoznat. Pak teprve může poskytnout jednotné rozhraní pro jejich ovládání a snadné využívání dalším (spuštěným) programům.

Moduly

S nejrůznějšími zařízeními komunikuje jádro pomocí tzv. ovladačů, které jsou obvykle realizovány jako moduly. Pokud je síťová karta připojena přes PCI sběrnici, není potřeba modulu předávat další informace, protože si všechny dokáže zjistit sám (zkuste použít příkaz lspci, který vypíše seznam zařízení připojených na PCI sběrnici nebo lspci -v, pokud se chcete dozvědět podrobnější informace). V případě ISA karet je obvykle potřeba ovladači (modulu) sdělit alespoň I/O adresu.

V současné době jádro Linuxu spolupracuje s démonem hal, který umožňuje zavádět moduly zcela automaticky bez zásahu uživatele. Výsledkem je, že po zasunutí Flash paměti do USB slotu je automaticky zaveden modul pro práci s USB mass storage zařízením. Následně je detekován použitý typ systému souborů na Flash paměti (FAT, NTFS, jffs2 a podobně) a zaveden modul nebo více modulů, které z něj dokáží číst soubory a adresáře.

U starších zařízení nelze automaticky zjistit jejich typ, výrobce a verzi (jako je to možné u sběrnic PCI, USB, PCI Express, PC Card a podobně). V takovém případě je nutné vytvořit vazbu mezi zařízením a obslužným modulem ručně. Tyto vazby (aliasy) zapisujeme do souboru /etc/modprobe.conf (v jádrech 2.4.x a starších v souboru /etc/modules.conf). Pokud se pak s tímto zařízením pokusíme pracovat (např. síťová karta na ISA sběrnici), je již modul zaveden automaticky nebo ho můžeme sami před použitím zařízení zavést do jádra ručně příkazem modprobe.

Ruční výběr modulu

Pokud nevíme, jaký modul je ke kartě potřeba, musíte se buď spolehnout na instalační program distribuce vašeho Linuxu (tj. karta musí být přítomna už během instalace) nebo použít nějaký automatický nástroj, který provede autodetekci a zapíše do souboru jména zařízení a k nim příslušné moduly (v distribuci Red Hat Linux nebo Fedora je to program kudzu, který se implicitně spouští při startu systému, ale můžete ho spustit i ručně).

Automatické nástroje zjistí identifikaci zařízení (zkuste příkaz lspci -n, který vypíše popořadě číslo sběrnice, číslo zařízení, typ zařízení (Class), kód výrobce a zařízení) a v tabulce /lib/modules/2.6.x-y.z/modules.pcimap si najdou ovladač, který takové zařízení dokáže obsluhovat. Číslo 2.6.x-y.z je číslo verze právě používaného jádra (lze zobrazit např. příkazem uname -r). Zjištěné asociace mezi zařízením a potřebným modulem zapíše automatický nástroj do již zmíněného souboru /etc/modprobe.conf.

Poslední možností je zkusit zavádět moduly ručně příkazem modprobe a sledovat, jestli se nějaký "nechytí". Seznam modulů najdete v adresáři /lib/modules/2.6.x-y.z/kernel/drivers/net.

Seznam modulů pro síťové karty
Jméno modulu Sběrnice Obsluhované síťové karty
3c59x, 3c900 PCI 3Com
ne2k-pci PCI NE2000 kompatibilní
8139too, 8139cp, 8139 PCI s čipem Realtek
sis900 PCI s čipem SiS
ne ISA různé ISA karty

Předávání parametrů modulům

Následující příklad demonstruje obsah souboru /etc/modprobe.conf, který zajistí automatické zavedení zmíněných modulů v případě potřeby (předpokládá, že v počítači jsou vloženy 2 síťové karty na PCI sběrnici - jedna 3Com a druhá NE2000 kompatibilní):

alias eth0 3c59x
alias eth1 ne2k-pci

Máte-li v počítači ISA kartu (NE2000 kompatibilní), která je nastavena na port 0x300, vypadalo by to asi takhle:

alias eth0 ne
options ne io=0x300

Pokud si údajem o I/O adrese nejste jisti, můžete zkusit modul zavést s příslušným parametrem z příkazového řádku. V případě úspěchu vypíše ovladač podrobné informace na konzoli nebo je uvidíte po zadání příkazu dmesg (příkaz vypíše obsah bufferu zpráv jádra, které jsou zapisovány do logovacích souborů v adresáři /var/log). Seznam rozpoznaných síťových rozhraní jádro zveřejňuje také v souboru /proc/net/dev. Příkaz, který zkusí zavést modul očekávající NE2000 kompatibilní ISA kartu na I/O adrese 300h by pak vypadal takto:

modprobe ne io=0x300

Pokud se detekce nezdaří, je vhodné modul z jádra odstranit:

rmmod ne

Ovladač ISA karty potřebuje k úspěšné detekci karty jako nápovědu I/O adresu, na kterou je karta nastavena, protože náhodné zápisy na porty kvůli autodetekci mohou vést k zatuhnutí celého počítače. Samotná karta se musí na tento port nastavit ručně propojkami (jumpery) nebo speciálním programem od jejího výrobce. Přerušení není u tohoto ovladače obvykle potřeba zadávat. Pokud byste chtěli zjistit kompletní seznam všech přípustných parametrů modulu ne, použijte příkaz (výstupem je seznam parametrů, očekávaná hodnota – např. int je celé číslo a jejich krátký popis):

modinfo -p ne

Konfigurace TCP/IP

Ve Fedoře nebo Red Hat Enterprise Linuxu (a jeho klonech) je konfigurace síťových karet záležitostí zápisu potřebných údajů do souborů v adresáři /etc/sysconfig/network-scripts. Jejich obsah je demonstrován níže (rozhraní eth0 bude dále považováno za vnější, tj. počítač je pomocí něho připojen k Internetu a rozhraní eth1 je vnitřním rozhraním, za kterým je vnitřní síť):

$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=123.123.123.1
NETMASK=255.255.255.252
GATEWAY=123.123.123.2
$ cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.0.0.1
NETMASK=255.255.255.0

Jméno počítače

Součástí správné konfigurace síťového subsystému je i nastavení vlastního jména počítače. Jméno se nastavuje i vypisuje pomocí příkazu hostname, můžete ho vidět i ve výstupu příkazu uname -a. Pokud vypsané jméno nesouhlasí se zamýšleným jménem počítače (tj. jméno včetně domény), doplňte ho do souboru /etc/sysconfig/network do proměnné HOSTNAME, což zajistí jeho automatické nastavení při startu počítače (jednoduše se spustí již zmíněný program hostname s parametrem plného jména počítače včetně domény).

$ cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=monkey.domena.cz

Lokální seznam jmen a IP adres

Neměli bychom zapomenou i na správný obsah souboru /etc/hosts. Kromě adresy 127.0.0.1 by v něm mělo být uvedeno i vlastní jméno počítače a jeho vlastní IP adresa (může to být i adresa vnitřního IP rozhraní). Na správný obsah tohoto souboru se často zapomíná, i když to může znamenat nefunkčnost některých programů (např. sendmail nebo WWW server Apache pak nerozpozná jméno počítače).

$ cat /etc/hosts
127.0.0.1  localhost.localdomain localhost
10.0.0.1   monkey.domena.cz monkey

V souboru je vždy od kraje řádku IP adresa, pak plné jméno včetně domény a pak seznam zkrácených jmen (přezdívek) počítače. Vše je odděleno mezerami. Někdy se z čistě praktických důvodů vyplní soubor takto:

$ cat /etc/hosts
127.0.0.1  monkey.domena.cz monkey localhost.localdomain localhost

Počítač ve funkci routeru

Pokud má váš server pracovat jako router (tj. bude používat více síťových karet), musí být povoleno předávání datagramů z jednoho síťového rozhraní na druhé. Při startu jsou tyto údaje čteny ze souboru /etc/sysctl.conf (příkaz sysctl -p přečte údaje ze souboru a zapíše je do jádra podobně, jak je uvedeno níže   můžete ho spustit i ručně), kde by měl být řádek:

net.ipv4.ip_forward = 1

Chcete-li povolit ip_forward ručně, použijte příkaz:

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

Výpis nastavení sítě

Restart sítě a kontrolu jejího nastavení můžete provést příkazy (ifconfig zobrazuje síťová rozhraní, route vypisuje routovací tabulku a parametr -n<CODE> zajišťuje výpis v podobě IP adres bez převodu na doménová jména):

/etc/init.d/network restart
ifconfig                           # kontrola rozhraní a jejich IP adres, masek
route -n                           # kontrola routovací tabulky
cat /proc/sys/net/ipv4/ip_forward  # je zapnutý ip_forward? (musí vypsat číslo 1)

Jednotlivě lze síťová zařízení nastavovat a rušit pomocí skriptů <CODE>ifup a ifdown<CODE>:

ifdown eth0
ifup eth0