Sikertelen IP cím csere & sok IP cím ugyanannak a gépnek

 ( TCH | 2019. március 28., csütörtök - 13:12 )

Adott egy gép 192.168.1.201-es címen. Elérhető, pingelhető. Átírom az /etc/network/interfaces-ben 202-re:

auto eth0
allow-hotplug eth0
iface eth0 inet static
address 192.168.1.202
netmask 255.255.255.0
gateway 192.168.1.1

aztán ip link set eth0 down && ip link set eth0 up vagy /etc/init.d/networking restart és a következők történnek:
- Az IP cím nem változik meg, az ip a ugyanúgy 192.168.1.201-et mutat és ha rákapcsolódok vele egy másik helyi gépre, az is ezt az IP címet látja.
- A 192.168.1.202-es cím elkezd válaszolni a pingekre, párhuzamosan a 192.168.1.201-gyel. Egyszerre pingelődik a két cím és válasz is érkezik rá. Hovatovább, ha kinyitom böngészőben az IP címeket, bejön az Apache default oldala mind a kettőn.
- ip link set eth0 down esetén megáll a pingelés mind a két cím felé (ez persze nem lepett meg), majd ip link set eth0 up után ugyanúgy megindul mind a kettőn.

Ahányszor egy másik IP-re próbáltam váltani, onnantól kezdve azon is válaszolt. A végén már 10 IP címen volt elérhető ugyanaz a gép.

Kugliztam egy sort, de csak az IP alias és IP bouncing jött szembe a keresésekre, ez pedig egyik sem. A manualokban sem találtam ilyesmit. A kollégák sem hallottak ilyenről; az egyetlen kivétel a programozó kollégám volt, de ő is csak találkozott a jelenséggel, rájönni nem jött rá, mitől van. (Ill. egy másik kolléga lease bajra tippelt, de ez nem DHCP...)

A problémát reprodukáltam egy másik - teljesen eltérő - gépen is, tehát nem hardware issue. Vagy a hálózatomban van a hiba (pl. router settings, néztem, de ilyet nem láttam), vagy mind a két gépen ugyanaz a beállítás van elkeffentve. (Az interfaces fájlon kívül máshoz nem nyúltam, tehát akkor a default is rossz; egyébként Devuan 2 a rajtuk futó rendszer.)

Van bármi ötlet, hogy mit kúrok el?

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Ötletem nincs, de megnéznék ifconfig vagy ip parancs kimeneteket.

Aztán ha egy interfészhez esetleg 2 IP cím tartozik, akkor kézzel az egyiket ki lehet szedni (persze ez nem megoldás, csak ez lenne a kutatási irányom első pár lépése)

http://oscomp.hu/depot/ifconfig.log
http://oscomp.hu/depot/ip.log

Tudtommal nem tartozik hozzá két IP, én legalábbis nem állítottam be aliast.

A /etc/network/interfaces az "ifupdown" nevű konfigurációs eszköz konfigfájlja, tehát, ha erre építesz, akkor használd az ifupdown megfelelő parancsait:

ifdown eth0; sleep 2; ifup eth0

Az ip link set... paranccsal "alávágsz" a fölötte lévő konfigurációs rétegnek, így onnantól kezdve, bármilyen le nem kezelt szituáció előállhat.

Ha egynél több IPv4 címet szeretnél egy interfészre fölvenni, akkor kompatibilitási okokból használd inkább az alias interfészeket. (eth0:0, eth0:1, eth0:2, stb.)

DE az ifdown azt az IP-t fogja leszedni az if-ről, ami akkor épp a /etc/network/interfaces-ben be van állítva, és az ifup azzal húzza fel, ami akkor. Szóval, először az eredeti szituáció down, aztán config átír és up!

De egyébként az előállt helyzet ip paranccsal manuálisan javítható, az mutatni fogja neked az adott if-re aktuálisan felhúzott összes címet és egyenként tudod is törölni, amelyik felesleges.

----------------------------------^v--------------------------------------
"Probléma esetén nyomják meg a piros gombot és nyugodjanak békében!"

> A /etc/network/interfaces az "ifupdown" nevű konfigurációs eszköz konfigfájlja, tehát, ha erre építesz, akkor használd az ifupdown megfelelő parancsait:
>
> ifdown eth0; sleep 2; ifup eth0
>
> Az ip link set... paranccsal "alávágsz" a fölötte lévő konfigurációs rétegnek, így onnantól kezdve, bármilyen le nem kezelt szituáció előállhat.

ifup/ifdown-t is próbáltam direktbe, de azzal is ugyanez van, csak azért nem írtam külön, mert az init.d networking is azokat hívogatja.

> Ha egynél több IPv4 címet szeretnél egy interfészre fölvenni, akkor kompatibilitási okokból használd inkább az alias interfészeket. (eth0:0, eth0:1, eth0:2, stb.)

Nem. Éppenhogy nem szeretnék több IP címet rendelni egy interface-hez, azt szeretném, ha a network reload után átállna az IP cím.

A _pingelő_ gépen ARP cache-t próbáltál törölni IP váltáskor?

Eddig nem, de most megpróbáltam (kétféleképpen is):

root@Csabi:~# ip -s -s neigh flush all
192.168.10.202 dev eth0 lladdr 00:60:6e:af:0b:a2 ref 1 used 16/16/16 probes 5 REACHABLE
192.168.10.10 dev eth0 lladdr e8:de:27:ca:98:76 ref 1 used 931/19/931 probes 4 REACHABLE
192.168.10.201 dev eth0 lladdr 00:60:6e:af:0b:a2 ref 1 used 16/16/16 probes 5 REACHABLE

*** Round 1, deleting 3 entries ***
*** Flush is complete after 1 round ***
root@Csabi:~# arp -d 192.168.10.201
root@Csabi:~# arp -d 192.168.10.202

De nem segített, ugyanúgy pingelődik mind a két IP cím. (Egyébként itt az ip parancs kimenetén még látszik is, hogy ugyanaz a MAC address.)

A routered proxy arp, csinálj rajta egy interface flapet.

Hát lehet, hogy félreértettem valamit (új volt, amit mondtál), de itt csak egy subnet van, nem lehet proxy ARP. Ha arra gondolsz, hogy a topicnyitó példában .10-es subnet volt, a logokban meg már .1-es, az azért van, mert itt nekem 10-es a subnet, de a cégnél (ahol a cucc menni fog), ott .1-es. Lehet a példában is .10-essel kellett volna írni, de már nem bírom szerkeszteni. Bocs, ha félrevezető volt.

Akkor lehet, hogy az arp timeout-on belül voltál, és mind a régi, mind az új IP cím benne volt még az arp cache-ben?
De tulajdonképpen miért nem mindegy?

Nem ez volt a baja, hanem az, hogy először írtam át az interfaces fájlt és utána adtam ki a parancsokat, mint az lentebb kiderült.
Mi nem mindegy?

Ebből az 'auto eth0' mit jelent?

Csak annyit, hogy húzza fel a networking service indulásakor az interface-t.

Szerintem azt próbáld ki, hogy egy percre kihúzod az Ethernetet a gépből, és megnézed, hogy úgy is működik-e a ping a másik készülékről.

Közben már megoldódott.

Mar irtak masok is elotte, de ugy fest nemigazan ment at a lenyeg szamodra vagy figyelmen kivul hagytad, szoval megprobaljuk reszletesebben.

Az alap felvetes, hacsak nem ertem felre de akkor pontosits kerlek, hogy van 1 ip beallitva interface-en az interfaces file alapjan es ezt az ip-t akarod megvaltoztatni egy masikra (tovabbra is csak 1db ip legyen az interface-en csak ne az ami korabban).

ifdown/ifup parancsokkal lehet pl a konfigban levo beallitasokat betolteni vagy torolni az interface-rol, hangsulyozom a konfigban levo beallitasokat. Tehat ha te kiszeded a konfigbol a regi ip-t ami meg rajta van az interface-en akkor nem fogja tudni hogy neki le kell konfiguralni azt az ip-t onnan.
Ha azt akarod hasznalni akkor ifdown -> interfaces file modositas uj ip-re -> ifup

A network restart is sokszor ezt a metodust eszkozoli (distro-tol is fugg meg hogy network manager vagy egyeb kezeli-e a hatterben), ezert sokszor biztosabb ha ip-t szeretnel valtoztatni akkor konfigban modositas es reboot vagy ilo-n keresztul vagy berakni scriptbe hogy konfiguralja le interface-t irja at konfigban ip-t es inditsa vissza interface-t, vagy valami failsafe megoldasnak berakni 10 perc utan allitsa vissza eredeti ip-t/inditsa ujra a gepet stb es ha megsem ered akkor a 10 perc utan majd elered, meg meg par egyeb nyakatekert megoldas ha nem megoldas a reboot es nem ered el network nelkul a gepet.

Egyebkent ha csak az a problemad hogy network restart utan ottmarad a regi ip akkor belepsz az uj ip-n keresztul (hogy ne lepodj meg mikor lekonfiguraltad az ip-t, hogy megszakad az ssh) es kezzel lekonfiguralod a regi ip-t, pl ip addr paranccsal:
ip addr del 192.168.1.201/24 dev eth0

Amugy ip link set down/up - nem fogja neked lekonfiguralni az ip-t, az csak interface admin status-t allitja (be legyen-e kapcsolva az interface vagy se), vagy nem ertem mit akartal azzal.

> Tehat ha te kiszeded a konfigbol a regi ip-t ami meg rajta van az interface-en akkor nem fogja tudni hogy neki le kell konfiguralni azt az ip-t onnan.
> Ha azt akarod hasznalni akkor ifdown -> interfaces file modositas uj ip-re -> ifup

Köszönöm, ez volt a helyes megfejtés. Ez volt, amit nem tudtam, ez ugyanis nem volt benne az ifup/ifdown manualban, nekem meg az volt a logikus, hogy a felhúzott interface adatait leállításkor nem a fájlból veszi ki ismét, hiszen ez a felállás gyakorlatilag azt jelenti, hogy ha beállítom pl. 192.168.10.205-re, adok neki egy ifup eth0-át, majd átírom .206-ra, akkor az ifdown eth0 a .206-os címet próbálja meg lekonfigurálni az eth0 jelenlegi .205-ös címe helyett. Lehet, hogy hülye vagyok, de esküszöm nem értem, mi ebben a logika...
De még egyszer köszönöm a rávilágítást.

TIL