Broadcast gépen belül, miért nem megy? (iptables help need)

Van egy kis problémám.
2.0.0.0/8-as címtartományu hálózat, amin vannak PC-k (hogy egyszerü legyen).
Van egy program ami broadcast csomagokat küld, ebben érdemi adat (tehát nem WOL, DHCP, ARP és egyebek ami a hálózathoz kell) van. Legyen ez a program "X".
Van egy másik program ami ezt az adatot fogadja, feldolgozza. Legyen ez a program "Y".
Ha az X és Y program két külön gépen fut akkor megkapja az Y a csomagokat, és működik rendesen. Természetesen két IP cím, azonos alhálózat, stb...
Ha egy gépen belül fut a két program akkor nem működik ez a dolog. Próbáltam már alias-al létrehozni másik IP-t azonos tartományba de ez sem segített. Ilyenkor egyik program egyik IP-n, a másik program a másik IP-n figyelt.
Próbálkoztam azzal is hogy két hálókártya és azok azonos switchben, azonos címtartomány, de igy sem működött.

Hogy tudnám megoldani hogy működjön egy gépen belül mindkét program?
Hogy lehet megoldani hogy a broadcast kérések gépen belül is megjelenjenek?

A rendszer egy debian.

Biztos kiváncsi lesz rá 1-2 ember mi az X és Y program, nem titkos, de szerintem nem releváns.
X = Chamsys-MagicQ
Y = Artnetusb, vagy llad

Valami nagyon egyértelmü dolgot néztem el?
Esetleg nem is működhet igy a program? Van rá valami lehetőség hogy működjön?

Eddig erre jutottam:
Iptables-el kellene eltéríteni, másolni az adatforgalmat.
Igy utánnanézve a dolognak, valami ilyen kellene nekem.
Kimenő adatforgalmat ami a 192.168.1.255-re megy a 6454-es portról a 6454-es portra, aminek a forrása az eth2 interfész, vagy a 192.168.1.106-os cím. Legyen másolva/átirányítva (lehetőleg az eredeti adatforgalom maradjon meg), a 6455-s portra.

Hozzászólások

"Próbálkoztam azzal is hogy két hálókártya és azok azonos switchben, azonos címtartomány, de igy sem működött."
Ezt lehet, hogy két iptables szabállyal meg lehetne
oldani.

Van valami port is, amin nézelődik a két ip?
Broadcast címet is állítottál?
Localhost?

Localhost nem járható út, az egyik program nem is szereti. Amugy pedig kifelé is ki kell mennie a csomagoknak.
Elvileg a 6454-es porton megy a forgalom.
Természetesen broadcast cím is állítva volt.
A hálzatot az /etc/init.d/networking állítja be. Kézileg szerkesztett configból. (Azt értelmetlen idemásolnom, mert percenként változik, ahogy próbálkozok.)

Valami IPtables-es szabályra gondoltam én is, ami visszafordítaná saját magára vagy másik gépen lévő kártyára (esetleg alias-ra) a kimenő broadcast dolgokat.

Összeállítom a tesztkörnyezetet mindjárt és megmondom.
A művelet végén 1 hálókártyára lenne jó redukálni a dolgokat, esetleg 1 IP címre.

Milyen paraméterezéssel szeretnéd látni a traceroute kimenetet?
Mert ha csak az ip-ket irom ugy megtalálja, de ha -i eth0 kapcsolót is használok akkor már nem.

Azt láttam, hogy frissült, de nem vettem észre, hogy
módosítottál:
traceroute -s source_addr (még ez is lehet -p port)

"-i eth0 kapcsolót is használok akkor már nem."
Aha, akkor az lesz a gond, hogy nem tudja hol várja és
honnan küldje.
1 ötletem van még, aztán utána iptables:
tedd két külön szegmensbe, /8 mask,
2.0.0.1
2.0.2.2, (ip route add ha nem megy)

netstat és nézd meg a portokat.

traceroute s és p kapcsolóval is megtalálja azonnal a másik címet, 0.040 ms.
Ezt a 2.0.0.1/8 és 2.0.2.2/8-es megoldást is néztem (már régebben is) de ez sem oldotta meg.
ip route-ban látszik a két interfész, eth0 és eth2, ugyanarra a címtartományra szól mindkettő, természetesen a forráscím más.

Valahogy iptables-el kellene visszafordítani a kimenő broadcast forgalmat, ha az a 6454-es portnak szol. Csak ehhez nagyon hülye vagyok.

A magicQ-ban csak címet.
A llad-nek lényegében megvan a forráskódja, csak az a verzió épp nem igen fordul le. Ami pedig bináris azon ugyancsak címet.
A második kártyán látom az aktivitást is a broadcast csomag fogadása miatt (villog a led).
De az llad mind az első, mind a 2. hálókártya címére állítva azt irja hogy: "Failed to bind to socket Address already in use"

Én valami hálózatkezeléses mintapéldára emlékszek ami valami egyszer chat volt. Ott ha jólemlékszek futhatott egy gépen mindenféle varázslás nélkül több program, és kommunikáltak egymással. Ezért nem értem én sem.
Végső esetben átbujom a forráskódot hogy mégis hogy akar kommunikálni.

Megkerdezhetem, hogy milyen a switched és routered?
Amikor a két halokartyaval próbálkoztal akkor hálózati szempontboll működnie kellett volna... Legalábbis mivel a switch minden azonos vlan-beli portokra továbbítja a broadcast packetet kivéve amelyiken beérkezett. Ezért ha két portot használsz akkor mindig a másikon ott kellene hogy legyen...

Elképzelhető,hogy tényleg tuzfal problémád van... Nincs véletlenül egy hubod hogy a switchbol visszatérő forgalmat ki lehessen elemezni egy plusz gépen tcpdumppal?
Ha Cisco switched es routered lenne akkor tudnék egy-két trükköt amit ki lehetne próbálni.
Portspan ha nincs hubod, netflow a forgalom ellenőrzésére valamint "ip helper" a routeren a broadcast visszatukrozesere.

Router nem maradhat a hálózatban később.
Most egy MikroTik van. A switch pedig egy Allied Telesyn AT-FS716 100Mbit (nem managelhető).
Tehát egyik dolog sem épp a szappantartó kategória.
Van egy VLAN-os 3com switchem is meg még egy raklap mindenféle pl. D-Link Gbit. De a netstat mutatja hogy beérkezik az adat a második hálókártyára, ezzel a switchel is. De mindengy melyik ip-címet jelölöm meg hogy azon figyeljen a llad, mindig azt adja vissza hogy foglalt.

Ha az llad-t indítom hamarabb a gépen, akkor pedig a MagicQ nem akar kommunikálni, pl. addig működő más gépen futó llad-k nem kapnak adatot, és nincs is bradcast forgalom a hálózaton.

Wireshark-al is néztem már a forgalmat, az megfogja azon a gépen belül is amin az adás történik. Az llad program viszont nem.

Legalábbis mivel a switch minden azonos vlan-beli portokra továbbítja a broadcast packetet kivéve amelyiken beérkezett. Ezért ha két portot használsz akkor mindig a másikon ott kellene hogy legyen...

Nem fog menni ez a setup.
A gépet úgy szocializálták, hogy kintről ne fogadjon be olyan csomagokat, ami úgy néz ki, mintha ő maga küldte volna. Ez tisztán security dolog.

Sajnos eddig sem iptables, sem címátállítás, tehát pl 2.255.255.255 helyett egy alias vagy másik belső hardverként is jelenlévő hálókártya nem nyalja be.
Boradcastolni pedi muszáj az adatot kifelé.
Lentebb irták hogy valami biztonsági akármi miatt van ez igy. (Még nem próbáltam de elvileg XP-n megy a dolog... :D )
Iptables-t már állítottam az itt felsoroltakkal, és azok kicsit szerkesztettjeivel, sőtt még magam is próbáltam kitalálni szabályokat. De egyik esetben sem látszott hogy az a szabály/szűrő elkapott volna akárcsak 1 csomagot is.

"Failed to bind to socket Address already in use"
folytassuk innen:
a. ha ezt indítod el először, akkor is van hibaüzenet?
a/1. ha nincs hiba, akkor tedd át azt ethx-t abba a tartományba
amiben mondjuk megy az internet, ezt beállítva
jelentkezik-e hiba?
b. logokban van valami utalás a lock-ra?

Ha ezt indítom először akkor nincs hibaüzenet, akkor megy is ez a program, de akkor nem megy a másik. A másik nem ir ki semmi ilyet, csak egyszerüen nem müködik ugy ahogy kellene, nem generál broadcast csomagot.
Elvileg mindkét program akarna figyleni az adott porton.
Ha két hálókártya van akkor sem tudom azt megoldani hogy 1-1 kártyán dolgozzanak.
A forráskód elvileg módosítható, és abban a port-ot kicserélhetném másra, pl n+1. Ilyenkor kellene egy iptables szabály ami az n porton folyó broadcast adatokat átmásolná az n+1 portra.
Kb, most ezt álmodtam. :)

(A többi dolgot megpróbálom megnézni mihamarabb, nem szerkesztve irom be hogy lásd hogy változott.)

Nem akar működni a dolog.
Igy utánnanézve a dolognak, valami ilyen kellene nekem.
Kimenő adatforgalmat ami a 192.168.1.255-re megy a 6454-es portról a 6454-es portra, aminek a forrása az eth2 interfész, vagy a 192.168.1.106-os cím. Legyen másolva/átirányítva (lehetőleg az eredeti adatforgalom maradjon meg), a 6455-s portra.

iptables -t nat -A PREROUTING -d 192.168.1.106/24 -p tcp --dport 6454 -j DNAT --to-destination 192.168.1.106:6455
esetleg még így
---
aztán ha vde-t próbálsz:
install vde2
mknod /dev/net/tun c 10 200(ez lehet, hogy nem kell)
szerk(20110302)>modprobe tun
chmod 660 /dev/net/tun
vde_switch -tap tap0 -tap tap1 -daemon
chmod -R a+rwx /var/run/vde.ctl

ifconfig tap0 12.0.0.1 broadcast 12.0.0.255 netmask 255.255.255.0
ifconfig tap1 12.0.0.2 broadcast 12.0.0.255 netmask 255.255.255.0

echo "1" > /proc/sys/net/ipv4/ip_forward
>lehet, hogy kell egy iptables rule; a fentit átírod, ha kell

a címeket át is írhatod, de ne ütközzön valami létezővel,
és a tap0, tap1 próbáld beírni a két programnak.

--
ezzel pedig le tudod állítani
pgrep -f vde_switch | xargs kill -TERM
rm -f /tmp/vde.*

VDE-vel már van valami haladás.
A két interfész ami switch-ben van azt mutatja hogy átmegy közötte a broadcast. De ha csatlakozni akarok akkor a socket foglalt...
tcpdump-al meg tudom fogni a dolgokat, látom hogy a tap0 címéről megy a broadcast címre az adat.
Ami kimenő forgalom értéke a tap0-n az a bejövő a tap1-en. Más interfészen nem látszik a forgalom.

Most szerintem azt a programot fogom szemügyrevenni aminek megvan a forráskódja. Hátha abban tudok valamit módosítani.

Miért nem megy, mert nem arra találták ki. Használj gépen belül virtuális gépet, így a host és vm között valószínű, hogy menni fog.
--
üdv: virtualm

- aki saját magának üzenget az bolond - de valamilyen módon beszélgethetünk magunkkal -