[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