Dobrá, pokusím se ty polopravdy trochu uvést na pravou míru.
Má to několik pozitivních dopadů. Maska na druhotných IP stejného subnetu víceméně nedává smysl. První definice nastaví interface routu, která už při dalších IP adresách není potřeba nastavovat. (Např. na broadcasty bude vždy odpovídat ta prvotní IP adresa, takže i z tohoto důvodu je maska zbytečná). Linux si s tímto sice umí poradit, ale proč spoléhat na automagii, když se to dá nastavit správně?
Především proto, že to není žádná
automagie a proto, že když to nastavíte správně, funguje to zcela deterministicky a v souladu s dokumentací. O
primární a
sekundárních adresách má smysl mluvit pouze v případě, že se jedná o adresy se stejným přiřazeným rozsahem - a to pro každý z těch rozsahů zvlášť. Takže ve vašem příkladu
192.168.0.1/24
192.168.0.2/24
10.0.0.1/24
10.0.0.2/24
jsou (pokud je přidáte v tomto pořadí) adresy 192.168.0.1 a 10.0.0.1 primární a ty zbylé dvě sekundární, což si můžete snadno ověřit podle příznaku
secondary ve výstupu "
ip addr show". Proto skončíte se dvěma automatickými routami, které se přidají spolu s primárními adresami, zatímco při přidání sekundární adresy se žádná routa nepřidává. Žádná magie...
Pokud ovšem adresy nemají stejný rozsah, pak mezi sebou žádný vztah primární/sekundární nemají a routa se přidává pro každou z nich. (Dokonce můžu přidat dvakrát stejnou adresu se dvěma různými délkami prefixu.) Viz např.
lion:~ # ip link add dummy1 type dummy
lion:~ # ip link set dummy1 up
lion:~ # ip addr add 172.17.1.1/24 brd + dev dummy1
lion:~ # ip addr add 172.17.1.2/24 brd + dev dummy1
lion:~ # ip -4 addr show dev dummy1
23: dummy1: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
inet 172.17.1.1/24 brd 172.17.1.255 scope global dummy1
valid_lft forever preferred_lft forever
inet 172.17.1.2/24 brd 172.17.1.255 scope global secondary dummy1
valid_lft forever preferred_lft forever
lion:~ # ip route show dev dummy1
172.17.1.0/24 proto kernel scope link src 172.17.1.1
lion:~ # ip addr flush dev dummy1
lion:~ # ip addr add 172.17.1.1/24 brd + dev dummy1
lion:~ # ip addr add 172.17.1.2/26 brd + dev dummy1
lion:~ # ip -4 addr show dev dummy1
23: dummy1: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 1000
inet 172.17.1.1/24 brd 172.17.1.255 scope global dummy1
valid_lft forever preferred_lft forever
inet 172.17.1.2/26 brd 172.17.1.63 scope global dummy1
valid_lft forever preferred_lft forever
lion:~ # ip route show dev dummy1
172.17.1.0/26 proto kernel scope link src 172.17.1.2
172.17.1.0/24 proto kernel scope link src 172.17.1.1
Dalším důvodem je prevence chyb administrátora. Kdyby v důsledku nějaké chyby vyrušil primární IP adresu, tak s maskou /32 nenaskočí na její místo; většinou je vhodnější, aby systém přestal odpovídat, než aby z ničeho nic fungoval nepředpokladatelně.
Právě proto existuje
/proc/sys/net/ipv4/conf/*/promote_secondaries, abyste si mohl (globálně nebo per interface) zvolit, jaké chování chcete, a nemusel vymýšlet podivné triky, které zamlží, kam která adresa vlastně patří. Buď se s primární adresou odstraní i všechny k ní patřící sekundární nebo (default) se primární stane další v pořadí. Ani v jednom případě nic "nepředpokladatelného", všechno je krásně deterministické a jasně zdokumentované. A obě varianty jsou lepší, než když vám tam zůstane viset druhá adresa s prefixem /32, takže něco bude fungovat dál a něco ne.
Ale co v případě subnetu 10.0.0.0/24? Tam jsou obě adresy v rovnocenné pozici a nelze spoléhat na to, že každá distribuce (a ostatně i každá verze jádra) upřednostní 10.0.0.1.
Proč si před tím, než něco takového napíšete, neověříte, jak se ten systém opravdu chová?
spíš se předpokládá, že admin rozumí obecné síťařině.
Jedna z mála věcí, se kterými ve vašem příspěvku souhlasím.