IP forrás megadása

Lenne egy ubuntu 10.04 server, aminek lenne 2 ethernet interface-e.
mind a két interface-en 2-2 ip cím lenne. A cél, hogy minden esetben a virtuális ip-vel menjenek ki a csomagok. Ezt szépen meg is oldottam "ip route change" paranccsal. Viszont, ha leteszem az interface-t down állapotba, mintmár a virtuálisat, akkor azt szeretném, ha magától visszaállna a másik ip-címre. Arra, ami a fizikai porthoz van rendelve.
Tehát
eth0 IP-1-1
eth0:0 IP-1-2 forráscím

eth1 IP-2-1
eth1:0 IP-2-2 forráscím

Ha a virtuálisakat down-ba teszem, akkor:
eth0 IP-1-1 forráscím
eth1 IP-2-1 forráscím

Hiába adom meg az ifconfig-ba, vagy teszek scriptet a if-up.d/if-down.d könytárakba. Nem teszi vissza a forráscímet a fizikai interface-re, ha leteszem ifconfig-gel down-ba.

Milyen megoldást tudnátok erre javasolni, vagy hogy oldjam, meg, hogy automatikusan tudja ezt váltogatni?

Hozzászólások

Emlékszel rá, nemrég ezt a témát már az előző kérdésed nyomán körüljártuk. Azok, úgymint (ssh) bind address, az adott program konfigja, NAT, PBR stb. hogy váltak be?

Légy szíves, egy kicsit bővebben vázolni a helyzetet, mert nem teljesen világos, hogy az előzőeken túl most milyen problémát szeretnél ezzel a (kissé gányolásnak tűnő) dologgal áthidalni, kitérve arra is, hogy az egy interfészen lévő címek azonos hálózatba tartoznak-e vagy különbözőbe.

"minden esetben a virtuális ip-vel menjenek ki a csomagok"
Pontosan milyen csomagok? Például egy kiépült TCP session alatt nem nagyon fogsz tudni IP-t váltani. Amúgy pedig az előző topikban kaptál erre ötleteket.

"Hiába adom meg az ifconfig-ba, vagy teszek scriptet a if-up.d/if-down.d könytárakba. Nem teszi vissza a forráscímet a fizikai interface-re, ha leteszem ifconfig-gel down-ba."
Mit csinálsz mivel? Az if-up.d és if-down.d alatt hiába módosítasz bármit is, ha az ifup, ifdown helyett az ifconfiggal machinálsz, megkerülve az ifupdownt. Az ifup és ifdown viszont biztosan meghívja az if-up.d és if-down.d alatti scripteket. Számos szerver használja arra, hogy az új címeken (is) hallgasson. Mi az, amit te ettől eltérően tapasztaltál?

"Arra, ami a fizikai porthoz van rendelve."
És a végére megjegyzésként: az IP alias nem teljes értékű interfész. Ahogy a Documentation/networking/alias.txt is mondja: "Aliases are not real devices...". És így kezdi: "IP-aliases are an obsolete way...".

Milyen megoldást tudnátok erre javasolni, vagy hogy oldjam, meg, hogy automatikusan tudja ezt váltogatni?

Írd bele a kernelbe, vagy csinálj LD_PRELOAD-os user-oldali bind-olást, ha feltétlenül ez a mániád...

Az, amit szeretnél, az egy orbitális hack. Aminek ára van, csak még nem látod át.

A korrekt megoldás az, ha a gépen a programok a géphez/adott programhoz rendelt IP címet használják alapból, és csak akinek feltétlenül szükséges, az bind-olja a kimenő forráscímet a logikai IP címre (ami a példád szerint nem mindig áll rendelkezésre), és ez ezeknél a programoknál egyéb módon oldod meg, hogy amikor az extra IP eltűnik, akkor ezek a programok erről értesüljenek/újrainduljanak.
Az lehetetlen, hogy a programok alól kirántod az IP címet, amiről ők a kapcsolatokat nyitották, a programok meg menjenek tovább, mintha mi sem történt volna, és a nyitott kapcsolataikban meg cserélődjön ki az IP cím... És mivel a gépen futó programok között akadnak mezei programok, akik erre nincsenek felkészülve, ezért rossz ötlet ezt default működéssé tenni.

nem tudom, hogy az ip route list nalad, hogy nez ki de nem lenne egyszerubb uj routeokat felvenni es megvaltoztatni a metricet mondjuk valami ilyesmit kepzelek el:

100.64.0.0/10 dev eth0 proto kernel scope link src 100.64.0.1 metric 100
100.64.0.0/10 dev eth0:1 proto kernel scope link src 100.64.0.2 metric 10