Komunikace pomoci SOCKETU pres PROXY

Martin Douda mad na students.zcu.cz
Sobota Červen 3 21:44:38 CEST 2000


On Sat, 3 Jun 2000, Stanislav Sipek wrote:

> Preji dobry den
> Prosim, mohl by mi nekdo poradit jak na nasledujici problem?
> Mam vytvorenou aplikaci ve ktere se klientska cas prihlasuje na serverovou
> cast pomoci socketu a to na urcitou IP adresu a urcity PORT. Pokud mi v
> ceste nic nestoji, tak mi komunikace v pohode funguje. Ale co kdyz budu mit
> v ceste proxy server? Klient bude za proxy a na internet muze pres proxy.
> Poradimi nekdo jak v takovem pripade probiha komunikace mezi dvema pocitaci
> pomoci socektu a jak se navazuje spojeni? V tomhle moc jasno nemam.
> 

Je to jednoduche.
Pokud je v ceste proxy server, veskera komunikace probiha tak, ze se
napojite na tu proxy a pozadate ji o vyrizeni a ta vam vrati odpoved.
V kazdem pripade je nutna podpora _konkretniho_protokolu_ na strane toho
proxy serveru a podpora komunikace s proxy na strane klienta(*) (klient si
musi umet rict o vyrizeni pozadavku misto toho, aby se pripojoval sam na
cilovy server, coz muze byt problem hlavne u starsich klientu a starych
protokolu.

(*) dalsi moznosti je tzv. transparentni proxy, kde se klient pokusi
pripojit primo na server, proxy ten pozadavek zachyti (predpoklada se, ze
vsechno musi pres tu proxy, nic nemuze jit jinudy), vyridi, vrati odpoved
(hrube zjednoduseno). Vyhoda je, ze neni treba podpora na strane klienta,
ale zase je treba klientovi zprovoznit DNS.

Dalsi moznosti takoveto komunikace je preklad adres, na Linuxu
predstavovany IP maskaradou (oficialne IP Masquerading). 

Na zaver priklad:
HTTP pozadavek primo:

Klient                                  Server

Klient posle serveru :
GET / HTTP/1.0
...atd
				        Server odpovi klientovi:
					HTTP/1.0 200 OK
					atd.....


Pres proxy:


Klient                      Proxy                  Server
Klient posle proxy:
GET http://server/ HTTP/1.0
                            Proxy posle serveru:
                            GET / HTTP/1,0
						   Server odpovi proxy:
						   HTTP/1.0 200 OK
						   .... atd.
			    Proxy odpovi klientovi:
			    HTTP/1.0 200 OK
			    ... atd.


Pres transparentni proxy:

Klient                      Proxy                 Server
Klient posle serveru
GET / HTTP/1.0
			    Pozadavek jde skrz
			    proxy, tam je zastaven
			    Proxy posle serveru:
			    GET / HTTP/1.0
			    atd...
						  Server odpovi proxy:
						  HTTP/1,0 200 OK
						  ...atd.
			    Proxy prijme odpoved,
			    posle ji klientovi,
			    ale odchozi adresa
			    odpovida SERVERU.
			    HTTP/1.0 200 OK


IP Maskarada se pri tehle urovni pohledu jevi podobne jako transparentni
proxy, principialne se ale jedna o neco naprosto odlisneho. Jeji zasadni
vyhodou je to, ze pracuje s vetsinou (*) protokolu a nepotrebuje upravu
klienta ani specialni upravu proxy pro jednotlive protokoly.

(*) prekazkou uspesnemu maskaradovani je zejmena zpetne navazovani
komunikace ze strany serveru (typicke pro FTP) a paranoidni kontrola na
serveru (server muze zjistit IP adresu s kterou komunikuje - zjisti adresu
proxy - a pokud ma zpusob, jak od klienta zjistit jeho IP, muze zjistit
odlisnost a odmitnout spolupraci). Tyto problemy se daji resit pouzitim
dodatecnych modulu do maskaradovaciho kodu.

			

No, to jsem se zase jednou pekne rozepsal.

						Martin

P.S. Odbornici, nekamenujte me za nepresnosti, vetsina (doufam, ze
vsechny :-)) jsou tam umyslne z duvodu zjednoduseni, jiste sami vite, ze
podrobny popis by vadal na knizku a ne na zpravu do konference).


--------------------------------------------------------------------------------
                        Martin "MaD" Douda
WEB:http://www.volny.cz/mad3/                EMAIL:mad na students.zcu.cz
SMS:mad na gate.mobil.cz (up to 160 characters) PHONE:+420603752779
PGP:ID=0x6FE43023 Fingerprint:E495 11DA EF6E 0DD6 965A 54F3 888E CC9E 6FE4 3023
--------------------------------------------------------------------------------
Neznalost zakonu neomlouva. Murhy.



Další informace o konferenci Linux