Linux network namespace

A mai este ezzel telt. Nem mondhatnám, hogy teljesen tisztában vagyok vele, kezd homályosodni a dolog (gy. k. már nem teljesen sötét a dolog). Pl. a következőt egyelőre emésztenem kell:

sudo ip link add dev veth0 type veth peer name veth1
sudo ip link list
sudo ip netns add red
sudo ip netns list
sudo ip link set dev veth1 netns red
sudo ip link list
sudo ip netns exec red ip link list

Fenti parancsokkal létrehoztam a veth0+veth1 interfészeket, a red nevű namespace-t és a veth1-t betette ebbe a namespacebe (*) (ezt ugye az utolsó két parancs mutatja is, hogy immár ott a veth1 interfész a red-ben, és eltűnt a "default" NS-ből). No azt kitaláltam magamtól, hogy ha csinálok egy másik NS-t (ugye példákban ez meg blue), akkor áttehetem red-ből blue-ba az interfészt:

sudo ip netns add blue
sudo ip netns exec red ip link set dev veth1 netns blue

Ez szuper. Meg azt is mondja a net, hogy visszarakni a "default" NS-be úgy kell, hogy beteszem az 1-es NS-be (ez valahogy az init PID-jével mutat szoros kapcsolatot(???), ez majd még később lesz remélem világos) - azaz (most már ugye blue-ban van az a nyavalyás veth1):

sudo ip netns exec blue ip link set dev veth1 netns 1
sudo ip netns exec red ip link list
sudo ip netns exec blue ip link list
sudo ip link list

Ez eddig OK. Ellenben bennem megindult a vezérhangya, és úgy döntöttem, akkor most keresztbe teszek a józan észnek. Miután megállapítottam, hogy a 0-s "NS" nem jó ehhez a visszapakoláshoz, ellenben pl. a 2 vagy az 5 látszólag ugyanolyan jól visszatette az interfészt a "default" NS-be, csináltam egy "1" nevű NS-t; ez szépen látszott az NS-ek listájában a többi mellett, és természetesen alapból benne is csak a lo interfész jelent meg - ugyanúgy, mint bármelyik - ennél épelméjűbb névvel ellátott NS-ben.

sudo ip netns add 1
sudo ip netns list
sudo ip netns exec 1 ip link list

Eddig OK, és akkor elértünk a lényeghez. Ha egy interfészt beteszek valami normális nevű NS-be (pl red), majd átpakolom az 1-be, akkor az interfész hova kerül. Hova is?

sudo ip link set dev veth1 netns red
sudo ip link list
sudo ip netns exec red ip link list
sudo ip netns exec red ip link set dev veth1 netns 1
sudo ip link list
sudo ip netns exec red ip link list
sudo ip netns exec 1 ip link list

Normális esetben vissza az eredeti NS-be. De ha van ilyen hülye nevű NS, akkor természetesen ebbe az "1" nevűbe (azaz nem vissza a "default" vagy "global" néven emlegetettbe). Szóval el azért nem veszik. Eddig jó. Akkor most tekerjünk rajta még egyet:

sudo ip netns delete 1
sudo ip netns list
sudo ip netns exec 1 ip link list
sudo ip link list

Megszűnt az "1" nevű NS, és ha már arra járt, megszüntette a hozzá tartozó interfészt is (sőt, mivel a veth interfészek párban járnak, a párját is). Juhé. Persze az lehet, hogy ez mind le van írva, meg nyilván még sok más okosság is, de ugye egy újszülöttnek minden vicc új. (Közben ha jól láttam, virtuális interfészeknél ez a természetes viselkedés. Állítólag valós interfészeknél visszamászik a "global"-ba. No majd ezt még tesztelni kell.)

Hát egyelőre ennyi, aztán majd további doksiolvasások után lehet, hogy lesz valami más agymenésem is. (És ami külön szép, mindehhez a 6.6-os CentOS, meg a 6.4-es Scientific Linux nem volt jó, mert azon az ip parancs nem ismeri a netns paramétert. Persze korábban már az is kiderült, hogy a tuntap-ot se, szóval ezeket már megint az uborka-VM-ben kellett végigjátszanom. Állítólag R6-6-oshoz is lehet valahogy netns-t barkácsolni, ahhoz most nem volt kedvem. Holnap meg nagy eséllyel a SLED-ről fog ugyanez - mármint, hogy nem megy - kiderülni.)

Jav 1: holnap van, a SLED napja. Öröm és boldogság. Illetve mégse. "ip netns" (úgyismint ~ list) parancs szabályosan lefut. Sőt az "ip netns add red" is. Kár, hogy ezzel szemben már nem tudom beletenni azt a rohadt veth1-et, mert az "ip link set dev veth1 netns red" már egy szép kis "RTNETLINK answer: Invalid argument" hibaüzenettel örvendeztet meg. Nem szereti "dev veth1" és sima "veth1" formában, valamint a teljesen illogikus (de hátha) "name veth1" formát se - ez utóbbinál már nyafog, hogy kéne a dev argument. Ami jogos, hisz - ha jól tudom - a name az interfész átnvezéséhez jó. Tovvábbi érdekesség, hogy a "sudo ip netns exec red ip link list" parancs is hibát - de másmilyen hibát ad:

seting the network namespace "red" failed: Invalid argument

Így persze a többivel se nagyon lehet mit kezdeni. Szóval nemértem. Lehet, hogy hibajegy lesz belőle?
Nekem kernel - iproute csomag inkompatibilitásnak tűnik, de a jó isten aki tudja. (Amúgy azóta lett hibajegy.)

Hozzászólások

IMHO redhatban 6.4 vagy 6.5 ota van namespace support, szoval gondolom a suses sracok se siettek el.