Következő problémám van:
Adott két kliens gép és egy szerver az alábbi konstellációban:
Kliens1 <--> SSH Server <--> Kliens2
Azt kéne megoldani, hogy Kliens2 be tudjon VNC-zni Kliens1-re:
Kliens1 <------------------> Kliens2
A probléma:
SSH Server felől Kliens1 irányába semmilyen kérés nem megy, csak a Kliens1 tudja hívni SSH Servert.
Az ötlet:
Kliens1 és Kliens2 be SSH-zik a szerverre, majd valahogy a szerveren kéne megoldani a két kliens kapcsolat "összelinkelését".
A TCP forwardingban láttam meg a fantáziát:
Kliens1: 60000-es porton figyel a VNC szerver, be is állítom a putty-ban, hogy a helyi 60000-es portot forwardolja be az SSH alagútba, távoli címnek az SSH szerver címét adtam meg 5800-as távoli porttal.
Kliens2: az 50000-es portot beforwardolqam az SSH alagútba, távoli címként az SSH szerver címét adtam meg 5700-as porttal.
Mindkét kliensen be van állítva a puttyban a "Local ports accepts connection from other hosts" és a "Remote ports do the same".
A probléma ott van, hogy az SSH szerveren az 5800-as és 5700-as portok hogyan kerülnek kapcsolásra. (gyk: ha mindkét kliensen az SSH szerver IP-jét, és ugyanazt a portot állítom be, úgy nem működik).
Tehát a lényeg még egyszer: a két kliens beSSH-zik a szerverre és valahogy meg kéne oldani, hogy az egyik kliens be tudjon VNC-zni a másik kliensre (az adat végig SSH csatornán halad).
Hogy miért ilyen bonyolultan akarom megoldani? Muszáj. Tűzfalazás miatt csak így működik (nem az én hatásköröm).
Kérem, hogy segítsetek.
Előre is köszi!
Dchard
MOD: a megoldás yndy és VaZso hozzászólásaiban található!
- 1893 megtekintés
Hozzászólások
http://sleepyhead.de/howto/?href=ssh
Connect to VNC behind NAT
Suppose a Windows client with VNC listening on port 5900 has to be accessed from behind NAT. On client cliwin to gate:
# ssh -R 15900:localhost:5900 user@gate
On client cliadmin (from host to gate):
# ssh -L 5900:localhost:15900 admin@gate
Now the admin can connect directly to the client VNC with:
# vncconnect -display :0 localhost
- A hozzászóláshoz be kell jelentkezni
Szia!
Kicsit tudnád részletezni?
A probléma az, hogy Kliens1 és Kliens2 is CSAK a szerverig lát, és a szerverig is csak az SSH alagúton keresztül. A szerver is, CSAK az SSH alagúton látja Kliens1-et és Kliens2-t.
Na most:
Kliens1 beSSH-zott a szerverre Putty-tyal, amiben be van állítva, hogy a helyi 60000-es portot (amin a VNC szerver is figyel) forwardolja az SSH szerver IP címén az 5800-as portra.
Kliens2 is beSSH-zott a szerverre Putty-tyal, amiben be van állítva, hogy a helyi 50000-es portot (amin a VNC kliens a kapcsolatot nyitná) forwardolja az SSH szerver IP címén az 5700-as portra.
A probléma ugye az, hogy a szerveren az 5700-as és az 5800-as port is csak listening socket.
Azt kéne megoldani a szerveren, hogy a Kliens1 felől a szerver 5800-as portjára érkező adatok továbbítódjanak a szerverhez az 5700-as porton kapcsolódó Kliens2-nek, és fordítva, hogy egy end-to-end TCP alagút kialakuljon a két kliens között.
Igyekeztem olyan egyértelműen megfogalmazni, amennyire tudtam :-)
Csináltam egy képet is, ami szemlélteti, amit szeretnék:
Tehát amit szeretnék: Kliens1 60000-es helyi portja és Kliens2 50000-es helyi portja között legyen egy TCP alagút, és ezen lehessen VNC-zni.
Köszi minden segítséget előre is!
Dchard
- A hozzászóláshoz be kell jelentkezni
Hát ez így nehéz ügy....
Ha az SSH szerver látná a Kliens2 -t, esetleg egy hálózatban lenne vele, akkor sima ügy.
Azt javaslom, hogy ne SSH-val próbálkozz.
Az SSH szerverre tegyél fel egy OpenVPN-t, és a Kliens1 és Kliens2 is kapcsolódjon be OpenVPN-en keresztül.
Talán nem is kell majd állítgatni semmit, és a kliens1-ről látni fogod a kliens2 -t.
(Legrosszabb esetben egy iptables szabályt kell megadnod.)
- A hozzászóláshoz be kell jelentkezni
Van valami módszer, amivel a két kliens tud egymással közvetlenül kommunikálni... Nem tudom hirtelen mi a szolgáltatás neve, de asszem a p2p protokoll is használja ezt, meg pl. kommunikációs programok fájlküldésre (skype, talán msn). A lényeg, hogy mivel a kliens csak kifele tud menni, a server a két klienssel leboxolja a handshake-ket, majd átadja őket "egymásnak", és kiszáll a képből. Tehát a kliensek a kapcsolatot a szerverrel építik fel, de utána egymással közvetlenül tudnak kommunikálni....
Utánaolvashatsz, hogy is működik ez, hátha használható... :)
--
Discover It - Have a lot of fun!
- A hozzászóláshoz be kell jelentkezni
Ennyi az egész, én is így használom.
Kliens1 gépről:
ssh -luser SSH-Server -L 5900:Kliens2:5900
(puttyba is beállítható)
Ezután a Kliens1 gép localhost:5900 portjára csatlakozz vncviewer-rel.
--
\\-- blog --//
- A hozzászóláshoz be kell jelentkezni
De a baja az, hogy az SSH-szerverről nem tud kapcsolatot teremteni a Kliens2 felé, hanem csak a Kliens2 tud be-ssh -zni az SSH-szerverre.
Amit te írsz, az jó, de ahhoz az SSH-szervernek kellene tudni TCP kapcsolatot nyitni a Kliens2 5900 portjára.
És ez nem lehetséges.
Legalábbis a leírásból ezt vettem ki.
Szvsz továbbra is OpenVPN lesz a megoldás.
- A hozzászóláshoz be kell jelentkezni
Nem teljesen tiszta számomra a kérdés.
- Tehát van egy szervered, amire be tudsz ssh-zni.
- Van egy kliens1-ed, amit kívülről nem tudsz elérni, de be tud ssh-zni a másik gépre.
- Van egy kliens2-őd, amit kívülről el tudsz érni? ...mindenesetre be tud ssh-zni szintén a gépre.
Ennek alapján már fent írták, hogy csinálni kell egy reverse ssh tunnel kapcsolatot arról a gépről, amit el szeretnél érni. (Ez a -R kapcsoló, -L helyett.)
pl.
Kliens1:
ssh szervergép -R 60000:localhost:5800
Tehát a kliensgéped 60000-es portját átirányítja az ssh-s géped 5800-as portjára.
Kliens2:
ssh szervergép -L 50000:localhost:5800
Tehát a kliensgéped 50000-es portjára átirányítja az ssh-s géped 5800-as portját.
Ha localhost helyére itt mást írsz, akkor az oda írt cím 5800-as portját irányítod át a géped 50000-es portjára (ahogy Balage_82 is írja).
Ezután vncviewer localhost:50000-rel éred el a kliens1 gépet.
Vagyis a fenti példában a localhost:50000-re érkezett kérések elmennek az ssh-s géped 5800-as portjára, amin a kliens1 gép várakozik és az érkezett adatokat továbbítja az ő helyi 60000-es portjára, ahol a vnc szerver van.
Ezt szeretnéd?
Ha kliens1-et is szeretnéd ugyanígy beállítani, szintén megteheted egy újabb tunnel hozzáadásával.
Nem írtad, milyen op.rendszert akarsz használni. A putty miatt gyanús, hogy nem Linuxot.
Ha mégis, nyugodtan felejtsd el a putty-t és használd az ssh parancsot, ahogy a fentiekben írva van.
Ha Windows fut a rendszeren, akkor muszáj lesz a putty-t használnod, de nekem reverse tunnel nem jött össze vele, amikor megpróbáltam.
Próbálkozni viszont érdemes lehet, mert elvileg tudja. Meg kell keresni az ssh rész alatt a tunnels szekciót és a fenti adatokat ott meg lehet adni. -R-nél alul ki kell választani, hogy remote, -L-nél pedig, hogy local (ez az alap).
Felülre írod az ssh parancsban megadott első portot, destination-hoz pedig a maradék részt (pl. localhost:5800)
Végén add gomb, majd érdemes menteni is.
Tehát a lényeg, hogy egyik géppel nyitsz egy portot a szerveredre, másik géppel pedig ugyanezt a portot fogod meg és "rángatod át" a helyi gépre.
Igyekeztem részletes lenni, remélem, érthetően sikerült megfogalmazni. :)
- A hozzászóláshoz be kell jelentkezni
Nem tudom, hogy sikerult-e megoldani mar a problemat, de azert leirom, nalam hogy mukodik:
1. Kliens1 - VNC szerver hallgat a 60000 porton
2. Kliens1 putty elindit, Connection->SSH->Tunnels->Source port: 4800 -> Destination: 127.0.0.1:60000 -> Remote beklatty -> Add gomb megnyom
3. Kliens1 putty-al csatlakozol, es bejelentkezel
4. Kliens2 putty elindit, Connection->SSH->Tunnels->Source port: 50000 -> Destination: 127.0.0.1:4800 -> Add gomb megnyom
5. Kliens2 putty-al csatlakozol, es bejelentkezel
6. Kliens2 VNC kliens elindit -> 127.0.0.1:50000 -> csatlakozas
7. Orul, es iszik egy kavet :)
Ui: az egeszet meg lehet oldani szerintem plink-el is, de azzal meg nem csinaltam :)
- A hozzászóláshoz be kell jelentkezni
VaZso: igen eltaláltad a vasalláss thémáját :-)
Nekem csak annyi kell, hogy Kliens1-re be tudjak VNC-zni Kliens2-ről. Mindkét kliensen windows fut és Putty a kliens szoftver. Kliens1 pedig folyamatosan csatlakozva van az SSH szerverhez (tcp kepalive tartja nyitva az inaktív SSH session-t).
Egyébként csak hogy ne nézzetek tök hülyének + mazohistának: erre az egész makkolásra egy szigorú tűzfal házirend miatt van szükség, amire én nem vagyok hatással. Az SSH szerveren úgyan root vagyok, de ez a PIX-et nem nagyon érdekli ugye :-) Na ezért kell a két kliensnek beSSH-znia, és ezért kell tunnelezni is.
Szerintem az utolsó két hozzászólásban ott lesz a megoldás. Kedden kipróbálom, és jelzek, hogy használt-e.
Köszönöm a segítséget!
Dchard
- A hozzászóláshoz be kell jelentkezni
Ezekszerint yndy pontosan azt foglalta össze, amire szükséged lesz.
Én akkor használtam ilyet, amikor haverom gépére kellett vnc-zni és tűzfal mögött volt.
Linux alól gond nélkül elértem a gépet remote tunnellel, de Windowst indítva (az ő gépén) valami nem stimmelt, pedig elvileg minden jól be volt állítva.
Sokat nem szórakoztunk vele.
Szóval elvileg ez a megoldás a problémára, remélhetőleg menni is fog.
- A hozzászóláshoz be kell jelentkezni
yndy megoldása tökéletes, működik faszán.
Köszönöm a segítséget mindkettőtöknek!
Dchard
- A hozzászóláshoz be kell jelentkezni