bind()

Sziasztok,

Linuxon lehet bindolni interface-re, vagy csak valami interfészhez tartozó _IP címen_ lehet hallgatózni? Ha utóbbi, akkor kinek/minek feladata, hogy esetleg megnézze, hogy a csomag valóban olyan interfészen jött-e be aminek a hálózatához az illető IP tartozik?

Hozzászólások

Alapvetően IP-re megy a bind, de a routing nem ip-hez hanem subnethez kapcsolódik, ami azt jelenti, hogy ha ugyanabba a subnetbe lóg két fizikai lábad az ennek megfelelő IP-vel, az egyiken indított kapcsolat csomagjai simán visszajöhetnek a másikon és fordítva. Ha közvetlen tűzfallal kommunikálsz, az rögtön beanyáz emiatt.
A kimenő forgalmadat kis trükkel tudod lábhoz kötni, de a bejövőt nem.

Azért a bejövőnél is megadható, hogy melyik interfészen szeretnéd megkapni az adott IP címre szóló, csak (IPv4 esetén) a megfelelő interfészen kell az ARP kérésekre válaszolni. Ezt pedig a sysctl net.ipv4.conf.{default,all,interface} szekciókon belül az arp_filter, arp_announce, arp_ignore beállításokkal tudod szabályozni.

Én az arp_filter=1, arp_announce=2 és arp_ignore=2 beállításokkal próbálkoznék a kérdéses interfészeken.

Az eredeti kérdésre visszatérve, rávehető a linux, hogy ellenőrizze, hogy a kapott csomagok azon az interfészen érkeznek-e be, ami kiküldené őket az adott IP címre. Ezt szintén a sysctl net.ipv4.conf.{default,all,interface} szekciókon belül az rp_filter beállítás szabályozza. Az rp_filter=1 vagy az rp_filter=2 beállítás a kérdéses interfészeken bekapcsolja az ellenőrzést.

A kérdéses sysctl paraméterek részletes leírása elérhető a https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt oldalon.

Ill esetleg ez is erdekes lehet: http://stackoverflow.com/questions/2283494/get-ip-address-of-an-interfa… (iface ip-cime lekerdez ne'v alapjan -> bind() -> minden oke)

1x ma'r csinaltam ilyet (mmint az eredeti kerdest sikerult abszolvalni) de az olyan reg volt hogy mar egyszerubb rakeresni neten hogy hogy kell mint elo"keresni a megf. kodot ;]