Written by m4r3k and tagged by linux.
Spousta lidí na Linuxu stále používá ifconfig přesto, že se jedná o nástroj, jehož koncept ve skutečnosti neodpovídá současnému síťovému modelu v jádře. Na Linuxu je pro user-space manipulaci se síťovým modelem určen nástroj ip. Prosím používejte jej místo nástroje ifconfig. Distributoři jej však stále ze svých distribucí nevyřadili. Protože jej stále mnoho lidí používá rozhodl jsem se vytvořit tuto stránku, kde se budu snažit sbírat reálné argumenty proti ifconfigu a pro ip. Většina uživatelů is totiž neuvědomuje, že používáním obsolete ifconfigu si mohou znesnadnit debbugování v případě nesnází, nebo si přímo na nesnáze zadělávat.
Něco jsou mé výtvory, zbytek je sesbírán z různých diskusí. Seznam citátů se budu snažit aktualizovat a rozšiřovat. Pokud víte o nějakém důvodu proč je používání ifconfigu na Linuxu špatné a tento důvod zde ještě uveden není, tak mi jej napište do komentářů a já jej milerád přidám.
- Emulace virtuálních rozhraní
- Ifconfig nefunguje, jedná se o emulaci
- Ifconfig si vymýšlí
- Ifconfig nezobrazuje všechny IP adresy
Emulace virtuálních rozhraní
Chtěl bych upozornit na jeden problém, který sice na první pohled vypadá jako formalita, ale občas může mít poměrně zásadní důsledky:
ifconfigse chová, jako by skutečně existovalo samostatné virtuální rozhraníeth0:0a při pokusu pracovat s ním (např. nastavit mu příznaky) pracuje ve skutečnosti s rozhranímeth0. Zejména kombinace s tím, žeifconfignedostatečně rozlišuje mezi “rozhraní je UP” a “rozhraní má přiřazenu adresu“, může věci neznalého uživatele “kousnout do zadku”…
Autor: Michal Kubeček
Ifconfig nefunguje, jedná se o emulaci
ifconfigv Linuxu nefunguje, pouze je tam (nepříliš dokonale) emulován. Ten zásadní problém není v nepřehledné a chaotické syntaxi, ale v tom, žeifconfigje založen na jiné koncepci síťových rozhraní, než jaká je interně použita v jádře. A to prostě nemůže dělat dobrotu - a také nedělá.S oblibou to přirovnávám k tomu, kdybyste chtěl pro konfiguraci paketového filtru používat emulaci
ipchains(nebo ještě spíšipfwadm, který také patří k jádru 2.0). Pár jednoduchých příkladů vám bude fungovat, ale jakmile narazíte na mantinely té emulace, máte problém. Je velmi nešťastné, že zatímco uipchainsto většina lidí chápe, spousta (jinak docela informovaných) uživatelů Linuxu se pořád zoufale zuby nehty drží emulovanéhoifconfigua tvrdošíjně odmítá používat nativní nástroje.
Autor: Michal Kubeček
Ifconfig si vymýšlí
Příkazy
ifconfigaipsi nemohou vymýšlet svou koncepci jen tak, jak je napadne. Oba totiž fungují jen jako user space rozhraní pro konfiguraci driverů jádra. Takže je podstatné, jak jsou síťová rozhraní implementována v jádře, na tom chtě nechtě musíte stavět. Příkazifconfigto nerespektuje, protože je postaven na koncepci, která byla ve starších verzích jádra (do řady 2.0). Příkazipvychází z koncepce, která tam je teď.To, že když pomocí
ifconfigzkusíte změnit parametry rozhraníeth0:0, změní ve skutečnosti parametryeth0, je prostě něco víc, než jen nějaká “jmenná koncepce”. Sice není to chyba příkazu samotného, ale je to chyba toho, kdo ho používá v prostředí, pro které nebyl navržen a pro které se nehodí. Až si jednou v domnění, že odstraňujete druhou IP adresu, sestřelíte interface, přes který jste připojen na vzdálený počítač, třeba ten rozdíl uvidíte v jasnějších barvách.
Autor: Michal Kubeček
Ifconfig nezobrazuje všechny IP adresy
Jádro umožňuje jednomu rozhraní přiřadit několik IP adres. Avšak v případě, že přiřadíte rozhraní více IP adres stejného typu (třeba IPv4, nebo IPv6) tak vám nástroj ifconfig zobrazí jen jednu z nich. Podívejme se na příklad:
mantisha:/etc # ifconfig eth0
eth0 Zapouzdření:Ethernet HWadr 00:16:D4:61:AE:81
inet adr:82.209.54.76 Všesměr:255.255.255.255 Maska:255.255.255.248
inet6-adr: fe80::216:d4ff:fe61:ae81/64 Rozsah:Linka
AKTIVOVÁNO VŠESMĚROVÉ_VYSÍLÁNÍ BĚŽÍ MULTICAST MTU:1500 Metrika:1
RX packets:19452562 errors:0 dropped:0 overruns:0 frame:0
TX packets:21042280 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 délka odchozí fronty:1000
RX bytes:2344514951 (2235.9 Mb) TX bytes:3412421561 (3254.3 Mb)
Přerušení:20 Vstupně/Výstupní port:0x4000
mantisha:/etc # ip a show eth0
2: eth0: mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:16:d4:61:ae:81 brd ff:ff:ff:ff:ff:ff
inet 82.209.54.76/29 brd 255.255.255.255 scope global eth0
inet 192.168.1.1/24 scope global eth0
inet6 fe80::216:d4ff:fe61:ae81/64 scope link
valid_lft forever preferred_lft forever
Jak vidíte dle výstupu příkazu ip má zařízení eth0 přiřazeno 2 adresy IPv4. ifconfig však zobrazuje IPv4 adresu jen jednu. ifconfig dokonce ani nezobrazí žádné varování, nebo chybovou zprávu. Jedná se o jednoznačnou chybu v koncepci nástroje ifconfig.
Autor: Marek Stopka
January 19th, 2008 at 7:12 pm
A co teda používat?
January 19th, 2008 at 7:20 pm
No přece
ip:-)January 20th, 2008 at 12:37 am
alebo mozog
January 20th, 2008 at 11:37 am
Je dobře, že děláš takovouhle osvětu :-) Chce to jen překonat počáteční odpor k učení se nových příkazů a hned je to lepší, holt zvyk je železná košile.
January 20th, 2008 at 3:10 pm
Teď vlastně koukám, že je to hlavně soubor Michalových citátů pod článkem http://www.abclinuxu.cz/blog/escaped/2006/2/11/120814 :-)
January 20th, 2008 at 4:27 pm
2xkucf03: Přesně tak.. Ale jeden je můj ;-)
January 21st, 2008 at 2:14 am
A ted zaludna otazka. Proc nepouzivat ifconfig v situaci, kdy si jsem jist, ze nebudu potrebovat vic nez jednu IP adresu na kazdem rozhrani.
January 23rd, 2008 at 1:08 am
2Ondrej Zajicek: Odpovim ti jeste zaludnejsi otazkou. Proc si pamatovat syntaxe dvou prikazu, kdyz ti staci znat jeden?
January 23rd, 2008 at 6:54 pm
> Proc si pamatovat syntaxe dvou prikazu, kdyz ti staci znat jeden?
Syntaxi ifconfigu stejne vsichni znaji. Navic zakladni pouziti je tak jednoduche, ze se nezapomene. Navic zakladni nastaveni sitoveho zarizeni je pri pouziti fconfigu tak 2* jednodussi nez pri pouziti programu ip .
January 24th, 2008 at 12:52 pm
Linux zadny ifconfig nema ! Ten je pouze v GNU/Linux, tak co tady placas? Navic je ifconfig standardni nastroj ve vsech UNIXech a proto jej budu pouzivat dal a to same plati pro ipchains.
–
Don’t touch the working *NIX tool, or I will kill you with the automatic hammer =)
January 25th, 2008 at 3:32 pm
2You suck motherfucker: No ty si se teda předvedl. Slušně to neumíš? Možná je
ifconfigstandardni nastroj ve vsech UNIXech, ale to nic nemění na tom, že v Linuxu nefunguje.February 1st, 2008 at 9:35 am
Nazdar. Zatim pouzivam taky prevazne ifconfig a route, ikdyz prikaz ip znam. Uz nekolikrat jsem se pokusil ip zacit pouzivat, ale docela me odradila jednak slozitost (prece jenom, ifconfig je pouze na konfiguraci sitovek, ip krome sitovek konfiguruje taky routing a to o dost sloziteji nez route) a slabsi dokumentace. Slozitost by se dala prekousnout, dokumentace se uz mozna zlepsila. Rozhodne obcas ip pouziju, abych zjistil, co si mysli on o nastaveni sitovek a obcas tam i najdu reseni. Ale chtel bych se vyjadrit ke tvym duvodum.
Aktulane tady mas 4 duvody. Pricemz prvni tri “Emulace virtuálních rozhraní”, “Ifconfig nefunguje, jedná se o emulaci” a “Ifconfig si vymýšlí” jsou, IMO, porad jedno a to same. Prvni dva zduraznuji, ze jde o emulaci (nevim, proc je to ve dvou zvlastnich duvodech), a nezduvodnuji, co je na tom spatneho (pise se tam pouze, ze “Pár jednoduchých příkladů vám bude fungovat, ale jakmile narazíte na mantinely té emulace, máte problém.” zadny prikladm, a “může věci neznalého uživatele “kousnout do zadku”…”). Muzu si udelat treba vlastni configip, ktery nebude delat nic jineho, nez zapisovat pouze IP adresu a masku na nejakou sitovku a bude to uplne jedno, pokud to bude delat presne to, co chci. ifconfig pouzivam proto, protoze s nim jednoduse dokazu nastavit IP adresu sitovky a on tak funguje. Pokud budu chtit das dve IPcka na jednu sitovku, pouziju prikaz ip.
Dale v prvnim a tretim pises o “nastavovani priznaku” a “zmenach parametru” aliasu. Zase by stacilo to uvest pouze v jednom duvodu (proc ve dvou?) a hlavne, uvest priklad a srovnani s ip. Napr. ja nevim, co si pod tim predstavit a hlavne by bylo zajimavy srovnani prave s tim prikazem ip, aby clovek videl, jake problemy mu to muze prinest, kdyz bude pouzivat ifconfig.
Jedinej duvod, kterej zatim uznavam jako skutecne opravnenej a realnej je ten ctvrtej “Ifconfig nezobrazuje všechny IP adresy”. To muze byt problem, kdyz clovek hleda nejaky IPcko a ono je jako secundarni na nejakym eth bez aliasu, pak si s ifconfigem moc neporadi. Jak jsem psal, ja tohle obcas kontroluju prikazem ip. Akorat bych nerekl, ze to je chyba koncepce ifconfigu, ale pouze backward-compatibility. Spousta dalsich nastroju proste od ifconfigu ocekava presne takovyhle format. A pokud uz nejaky distro pouziva prikaz ip, tak predela i tyhle dalsi skripty. Osobne mam gentoo, kde si jde vybrat, jestli bude system na konfiguraci pouzivat ip nebo ifconfig a uz jsem presel na ip, ikdyz aktivne ale vsude jinde pouzivam ifconfig.
Zkus sjednotit ty duvody 1-3 a pridej k nim priklady (jako je hezky priklad ve 4.duvodu) a budou opravnene - zatim jsou to jen duvody stylu “ifconfig je spatny, ip je lepsi”.
February 3rd, 2008 at 10:02 pm
Mna osobne odradzuju od ip 2 veci:
1; ifconfig ma omnoho prehladnejsi vystup ako ip a show
2; ifco +tab eth0 - 8 klaves po ip adresu
ip a add dev eth0 - 15 stlaceni klaves
to predstavuje v konzole 2x viac pisania + zlozitejsi zapis.
3; ifconfig je vseobecne rozsireny v *nix svete…
4; ip route show
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.8
default via 192.168.1.1 dev eth1
nepride mi to moc prehladne oproti route
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth1
kde je to pekne rozdelene do tabulky
V podstate mi syntax samotna pri ip nevadi, ale tie vystupy su fakticky otrasne
February 5th, 2008 at 4:42 pm
partizan) s bodem 3 souhlasim bez vyhrad - freebsd ma napr taky ifconfig
body (1) a (4) uz jsou trosku sporne, ikdyz ja taky preferuju ifconfig, objektivne bych rekl, ze “prehlednost vystupu” (a) zalezi na zvyku - pokud si zvyknes na ip, tak ti to uz neprijde, a (b) ip musi byt mene prehlednejsi, protoze musi ukazovat vic informaci.
co se tyce budu (2), muzes si klidne napsat jednopismenne skriptiky/aliasy/funkce, takze pak by se tvuj duvod pro ifconfig obratil. Jinak na druhou stranu, “ip” akceptuje zkracene tvary, takze nemusis psat “ip a add”, ale staci “ip a a IP/prefix dev eth”, takze o tolik to zase delsi neni, vlastne je tam navic jenom to “dev”, coz zase takovej problem neni.
February 7th, 2008 at 12:48 am
Par lidi tady zminuje ze je lepsi pouzivat ifconfig protoze je na kazdem unixu. To je sice pravda, ale bohuzel jeho syntaxe se mezi jednotlivymi systemy vyrazne lisi. I kdyz budete vedet jak se nastavi interface pomoci ifconfig na Linxu tak vam to moc nepomuze s nastavenim sitovky na Solarisu. Jelikoz na Linuxu pouzivam “ip” a na Solarisu “ifconfig” tak se mi alespon neplete syntaxe. Tedy bod pro “ip” ;-)
February 7th, 2008 at 10:00 am
No ja nevim. Ja radeji pouzivam ifconfig a route - at je nebo neni rozbity, na 99 procent veci, ktere na svych vlastnich pocitacich bezne nastavuju, bohate staci. Na louskani manpage od ip je dost casu, az kdyz to nefunguje. (A nebo kdyz pisu skript pro nejaky server, na kterem zalezi.)
Uz jsem si jednou zkousela zvyknout na pouzivani ip porad, ale jedine co jsem z toho mela, byla lehce vyjukana freya (OS X), ktera rozumi jen ifconfigu. (A rozbity je taky, jen tam nic lepsiho neni :-))
July 20th, 2008 at 9:55 pm
ifconfig zobrazuje vsechny ip adresy, pokud byly zadany pomoci ifconfigu jako aliasy. pak je videt eth0, eth0:1, eth0:2 atd… prikaz ip je vidi take. pokud adresy zadavam pomoci prikazu ip, pak je ifconfig opravdu nevidi.