31 Ağustos 2009 Pazartesi

Local Port Forwarding Hakkında...

Bugün bir java uygulamasının, bizi azizliğe uğratması sonucu, epeydir aklıma takılan bir konuyu çözme fırsatına sahip oldum. Lokal Port Yönlendirme ;

Nedir bu lokal port yönledirme?

En basit örneğiyle, bilgisayarınızda web sunucusu 80 numaralı porta çalışırken, 80 numaralı porta gelen ve giden tüm trafiği, aynen 8080 numaralı porta yönlendirmek, yani bilgisayarınızın 8080 portundan hizmet vermesini istiyorsanız, lokal port yönlendirmesi yapabilirsiniz. Benzer şekilde 80 portundan gelen ve giden tüm trafiği, başka bir PC nin başka bir portuna da yönlendirmeniz mümkündür.

Peki Port Yönlendirmeyi Nerde Kullanabilirim?

Port yönlendirmeyi aslında ADSL modemlerimizde sıklıkla kullanıyoruz. Örneğin local networkümüzde iki adat Pc miz var. Bu Pc lerin her ikisine de dışardan internet üzerinden Remote Desktop ile bağlanmak istiyoruz. Remoto Desktop default olarak 3389 portunu kullanmaktadır.

Birinci PC için ADSL modemimizde Nat Kuralı yada Virtual Server şeklide de ifade edilebilen port açma seçeneği ile dışarıdaki 3389 portu, içerideki lokal ip nin 3389 portuna yönlendirmemiz yeterli olacaktır.

Peki ya ikinci PC ? İkinci PC için, her uygulama sadece bir port kullanabileceği için, dışardan 3389 portunu kullanabilmemiz mümkün değil. Bu durumda dışardaki 3390 gibi seçtiğimiz farklı bir portu, içeride diğer pc deki 3389 portuna yönlendirmemiz yeterli olacaktır.

Son durumda; Uzaktan Pc lerimize erişmek istersek,
Birinci pc için, uzaktaki networkümüzün WAN IP si yani ADSL Modem tarafından alınan internet IP sini, Remote Desktop programına vermemiz yeterli olacaktır.
İkinci PC için ise Remote Desktop programına WAN ipmizin yanında 3390 portumuzu da belirtmek zorundayız. Bunu 85.95.85.95:3390
şeklinde yazarak belirtebiliyoruz. Bu şekilde Remote Desktop programına uzaktaki bilgisayarın 3390 dan bağlantı kurabileceğini söylemiş oluyoruz. Modemimizde açmış olduğumuz port ile 3390 bağlantı trafiğini içerde 3389 a yönlendirerek ikinci PC ye erişimi sağlamış oluyoruz.

Buraya kadar aslında bir problem yok. Problem şu noktada başlıyor;
Peki ya elimizdeki uygulamada, bağlantının başka bir port üzerinden kurulacağını belirtemiyorsak ne olacak. Yani RDP uygulamasında 85.95.85.95:3390 şeklinde uygulamanın bağlantı için standart portu kullanmayacağını 3390 portunu kullanacağını belirtebiliyoruz. Peki ya belirtemezsek. Yani elimizdeki uygulama sadece ip adresi alıp, hep aynı porttan çalışmayı tercih ediyorsa ne yapacağız?


İşte bu noktada bir atraksiyon yaparak uygulamanın standart port kullandığını zannederken, standart port tarafiğini lokal başka bir porta yönlendirerek dışarı çıkartmamız gerekiyor. Tamam, bu noktayı bir şekil çizerek açıklama zamanı geldi.



Yukarıdaki şekilde, Datasource olarak belirtilen iki adet bağlantı var. Her ikisinde de uygulama içinden sadece ip belirterek 14000 portundan bağlantı yapabiliyoruz.
85.95.85.95 IP sinden bağlantı yapmaya çalıştığımızda modem deki kural 14000 den 14000 portuna yönlendirme yapıyor ve hiç bir sorun yaşamadan direct bağlantı kurabiliyoruz.

Aynı ip ye 140001 portundan bağlanmamıza uygulama müsade etmediği için, Datapipe isimli küçük programı kullanarak, bağlantı kurmasını istediğimiz PC nin 14000 portunu 85.95.85.95 IP li modemin 14001 portuna yönlendiriyoruz. Bu durumda da uygulamamızda Datasource olarak localhost kullanıyoruz. Localhost un 14000 numaralı portunu kullanmak isteyen uygulamamızın tüm trafiğini Datapipe programımız ile uzaktaki PC nin 14001 portuna yönlendiriyoruz.

Bunun için kullandığımız komut :
datapipe localhost 14000 85.95.85.95 14001
şeklinde.

85.95.85.95:14001 portuna yönlenen trafiğimiz modem üzerindeki ikinci port yönlendirme kuralı ile içerideki ikinci PC nin 14000 portuna ulaşmakta ve iletişim sırasında portları değiştirirken, uygulamamızın ruhu bile duymadan çalışmasını sağlamış oluyoruz.

Böyle şık bir atraksiyon yapabilmemizi sağlayan Datapipe Programının Open Source bir program olduğunu ve Linux üzerinde de çalıştırılabildiğini de söyleyelim. Bu programa aşağıdaki link üzerinden erişebilirsiniz.
http://jeff.bovine.net/Datapipe

Aslında bu tarz bir uygulamayı Linux sistemler üzerinde gelen ve kernel seviyesinde çalışan Iptables yada Netcat gibi programlarla rahatlıkla yapabilirken, Windows sistemimiz üzerinde çalışabilen Datapipe yazılımını bulmak için, göbeğimin çatladığını da belirtmek isterim. Ne yazık ki windows üzerinde bu tarz atraksiyonlar yapabilen, sisteme gömülü bir uygulama hala bulunmamakta.

Konuyu sonlandırmadan önce, bizi azizliğe uğratan uygulamanın da,
GE Fanuc firmasının, java ile geliştirdiği iHistorian programı olduğunu belirtmek isterim.

Buraya kadar okuduğunuz için Teşekkürler.

Hiç yorum yok: