[BSD] ARP+BRIDGE+IPFW BUG
Krisztián Oroszi
oroszi_krisz at hotmail.com
2005. Feb. 3., Cs, 12:47:17 CET
Sziasztok!
A követkkező lenen a problémám:
Előljáróban:
Hogyan lehet rávenni a kernelt hogy a bridge -lt interfészekrő semmit de
semmit ne dolgozzon fel saját maga mint neki szóló forgalmat. Még az ARP -ot
se. Hanem csak brdigeljen vagy ne bridgeljen attól függöen hoyg milyen
szabályt talál rá.
A következő szeretném:
Egy machine amiben van 3db eth kártya, 1 nek van IP címe (management) 2
nek nincs.
Utóbbi kettő bridge el egymás közt. Promiscous módban IP cím nélkül.
A BSD IPFW je pedig szüri a frogalmat.
Szüri a management -et is de ami lényegesebb szüri a bridge_forwarded
kereteket is.
A cél hogy úgy szürni forgalmaz egy LAN on belül hogy semmi ne látszódjon
belőle.
Vagyis bejön a fővonal egyik bridge interfészre és kijön a másikon miközben
szűrődik.
A dolgo jól megy kivéve egy dolgot.
Ha management interface(eth0) is ugyan arra a szegmensre kapcsolódik mint a
bejövő volnal.
És a következő üzenete dobja:
/kernel arp: <eth0_MAC CÍME> is using my IP address <eth0_IP CÍME>!
/kernel arp: <eth2_MAC CÍME> is using my IP address <eth0_IP CÍME>!
A probléma forrása hogy IP cím állitáskor a kernel küld egy arp kérést hogy
megbizonyosodjon róla nem használja senki azt a címet.
ARP:eth0 IP cím eth0 mac cím TO eth0 IP cím any mac
Ez az arp kérés valamilyen úton közvetlenül vagy sem az mindegy beesik
valamelyik brdigelt interfacen
És itt a probléma mert ahelyett hogy továbbítaná másik interfészen
feldolgozza az ARP kérést a jószándékú. :-!
És visszadobja hogy ez az IP bizony az ővé és visszadja a beső intefész MAC
címét.
Ahhoz képest hogy annak a brdigelt interfésznek még IP címe sincs. !??!?
Végigolvastam minden doksit, leírást és debuggoltam ahoyg csak tudtam a
csomagszürésen keresztül.
Amit leszürtem:
A brdigelés jól megy egésszen addig amik nem ARPkeretek kell továbbitani.
Eddig a pontig a rendszer más interfészei és a bridgelt interfészek között
semmilyen kapcsoilat nincs. Vagyis nem találtam rá utaló nyomot.
Viszont ARP ra az egész összenyílik a kernelen kereszült és az kérések ki be
rohangálnak az interfészek között, anélkül hogy kikerülnének a madzagra is.
A probléma csak akkor van mint látthattuk ha IP címet akarunk adni egy
ugyanabban a rendszerben lévő nem bridgelt interfésznek és azt ugyanarra
szegmensre kell kötnünk.
A hiba csak ekkor jelentkezik és ekkor is csak hibaüzent formályában. Ettől
még működik a dolog.
De valahányszor arp kérés indúl az eth0 ról újra megejelenik az üzenet.
Már azt is tudom hogy hol a hiba pontosan, de úgy tünik ahhoz át kéne irnom
a kernel ide eső részét.
Az ipfw négy helyen tudja elkapni a csomagokat(kereteke). Irányonként
kétszer.
Egyik még ether_demux előtt egyik már utánna. (lásd man ipfw 3. oldal)
A brdigelt forgalomszürést és az ether demux előtti keretek elfogását két
külön kapcsoló végzi de az elfogási pont ugyanaza hely.
Ha nem ugyan az lenne meg lennék mentve, mert egyszerüen letiltanám azt ami
be aka bújni vagy ki akar jönni azokon az interfészeken amik bridgelve
vannak.
Bár az ipfw a drága támogatja második réteg beli szürést de nem tesz
külömbséget a bejövő/kimenő és a brdigelt átmenő forglaom között.
Szóval ha tiltok akkor mindent tiltok.
Három lehetőség lenne:
1.) Megirom a hiányzó részt
2.) Átirom a kernelt hogy bridge módban lévő interfészeken de dolgozzon fel
arp -ot.
3.) Átirom a kernelt bridge módban futó interfészek ről jövő arp
feldolgozása során ellenőrizze, hogy hogy a forrás MAC cím nem egyezik e meg
valamelyik a rendszerben megtalálható ethernet interfész MAC címével sé ha
igen hagyja figyelmen kivűl , illetve csak továbbítsa azt.
Ilyet még nem csináltam, hol kezdjek hozzá? Ez így nagyon dúrva igaz?
Van valakinek esetleg olyan öltete amitől a dolgo egyszerübb lesz, esetleg
egy nyívánvaló megoldás amit nem ismeretm fel?
Már rengeteg szabálykombinációt kiprobáltam, de az említett ponton ahol a
keretek elfosáa történik mindig elbukik a dolog.
Köszi
És bocs a regényért, ennél csak hosszabban menne.
Üdv
VoYa
_________________________________________________________________
Express yourself instantly with MSN Messenger! Download today it's FREE!
http://messenger.msn.click-url.com/go/onm00200471ave/direct/01/
További információk a(z) BSD levelezőlistáról