Kapıyı çalıyorsunuz: 8080. İçeriden cevap geliyor — ama ses aslında koridordaki 80 numaralı odadan. Windows’ta buna portproxy deniyor. Ekstra program yok; netsh ile “bu porta gelenleri şuraya götür” diyorsunuz. Bu yazıda komutları ezberletmek yerine ofiste, demoda ve “şu an tek çözüm bu” anlarında işinize yarayacak senaryolarla anlatıyoruz. Bitince aklınızda şu kalsın: hangi kapıyı çalıyorum, aslında kim açıyor?
Önce resmi tanıyın: kapı, zil, koridor
Üç oyuncu var:
| Senaryo | Çaldığınız kapı | Açılan oda |
|---|---|---|
| SQL’i “farklı numaradan” göstermek | 51433 | Sunucunun 1433’ü |
| Sadece localhost’ta çalışan panel | 80 (ağdan) | 127.0.0.1:8080 |
| Geçici RDP köprüsü | Bu makinenin 3389’u | İçerdeki PC’nin 3389’u |
| Eski istemci, yeni port | Eski alışılmış port | Yeni servisin gerçek portu |
Üç komut yeter (sonra hayal gücü)
Yönetici olarak CMD açın. İskelet şu:
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=8080 connectaddress=127.0.0.1 connectport=80Ne dedik? “Bu makinenin tüm ağ kartlarında 8080’i dinle; gelen her TCP’yi bu makinedeki 80’e ilet.”
netsh interface portproxy show allnetsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=8080sc query iphlpsvc
netsh advfirewall firewall add rule name="Portproxy 8080" dir=in action=allow protocol=TCP localport=8080Senaryo 1: “SQL’i herkese 1433 diye bağlatmayayım”
İçeride SQL Server 1433’te. Dışarıya veya başka VLAN’a doğrudan 1433 açmak istemiyorsunuz. Köprü makinede (veya SQL’in kendi üzerinde) şöyle düşünün: dışarı 51433 çalınsın, içeride 1433 açılsın.
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=51433 connectaddress=192.168.1.20 connectport=1433İstemci bağlantı dizesinde sunucu adresi + ,51433 (veya ilgili alan) kullanır. Asıl SQL hâlâ 1433’te; siz sadece “görünen kapıyı” değiştirdiniz. Logo ve rapor araçlarında “portu değiştirdik ama uygulama hâlâ 1433 arıyor” krizlerinde bu köprü geçici nefes aldırmıştır.
Senaryo 2: Uygulama inatla localhost’ta
Bir yönetim paneli, lisans servisi veya eski araç yalnızca 127.0.0.1:8080 dinliyor. Siz aynı ofisteki başka PC’den veya telefondan denemek istiyorsunuz. Servisi yeniden yazmadan:
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=8080 connectaddress=127.0.0.1 connectport=8080İlk bakışta “aynı port?” dersiniz. Mantık şu: ağdan gelen 8080’i alıp, bu makinenin kendi içindeki 8080’ine bırakıyorsunuz. Dışarıdan bakınca servis “açık”; içeride uygulama hâlâ “ben sadece kendime konuşurum” sanıyor.
Daha okunaklı bir varyasyon — dışarı 80, içeride 8080:
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=80 connectaddress=127.0.0.1 connectport=8080Demo günü, müşteri ziyareti, “bir dakika şunu telefondan da görelim” anları için biçilmiş kaftan. Kalıcı internete açmak için değil; bilinçli, kısa süreli köprü için.
Senaryo 3: “Bu PC üzerinden şu PC’nin masaüstüne”
Elinizde bir Windows makine var (sıçrama taşı). İçerideki sunucunun RDP’sine (3389) doğrudan rota yok; ama sıçrama taşına ulaşıyorsunuz. Portproxy ile:
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=3389 connectaddress=192.168.10.50 connectport=3389Sıçrama taşının IP’sine RDP yaptığınızda aslında 192.168.10.50’nin masaüstü açılır. Zihin oyunu gibi; sahada “geçici erişim” için kullanılır.
Senaryo 4: Eski istemci, yeni port — arayı köprüyle kapatın
Servisi 8443’e taşıdınız. Yüzlerce istemci, makro, kısayol hâlâ 443’ü arıyor. Toplu güncelleme yarın; bugün iş aksamasın:
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=443 connectaddress=127.0.0.1 connectport=8443Eski dünya 443’ü çalıyor; yeni dünya 8443’te cevap veriyor. Bu bir migrasyon bandı — kalıcı mimari değil. Bandı unutursanız bir yıl sonra “neden iki port birden?” bulmacası doğar. Yanına takvim notu koyun: köprüyü kaldır.
Senaryo 5: “Sadece şu IP’den gelsin” hayali
Portproxy kuralında “yalnızca 10.0.0.5 bağlansın” diye bir alan yoktur. Dinleme adresi ya makinenin bir IP’sidir ya da 0.0.0.0. Kaynak kısıtını güvenlik duvarı ile yaparsınız:
netsh advfirewall firewall add rule name="Portproxy 51433 sadece ofis" dir=in action=allow protocol=TCP localport=51433 remoteip=192.168.1.0/24Köprüyü kurmak ile köprüyü kime açmak ayrı işler. İkisini birlikte düşünün; aksi halde “yaptım ama herkes girebiliyor” sürprizi yaşarsınız.
Çalışıyor mu? Üç hızlı kontrol
- Kural listede mi?
netsh interface portproxy show all - Kapı dinleniyor mu?
netstat -ano | findstr :51433(kendi listen portunuz) - Karşı taraftan kapı açılıyor mu?
Test-NetConnection 192.168.1.10 -Port 51433TcpTestSucceeded : True görüyorsanız köprü en azından TCP katmanında ayakta. Uygulama hâlâ bağlanmıyorsa mesele çoğu zaman kimlik doğrulama, SQL protokolü veya hedef servisin kapalı olmasıdır — köprü suçlu olmayabilir.
Temizlik: iz bırakmayın
netsh interface portproxy show all
netsh interface portproxy delete v4tov4 listenaddress=0.0.0.0 listenport=51433
netsh advfirewall firewall delete rule name="Portproxy 51433 sadece ofis"Demo bitti, migrasyon bitti, geçici RDP bitti → kuralı silin. “İleride lazım olur” diye unutulan portproxy, bir yıl sonra güvenlik taramasında “bu port da ne?” diye geri döner.
Portproxy ne değildir?
Ne zaman seçersiniz? “TCP’yi A kapısından B odasına götür, az bileşenle, Windows içinde kalsın.” Ne zaman seçmezsiniz? “İnternete kalıcı yayın, yük dağıtım, uygulama katmanı güvenlik.”
Kısa özet — aklınızda kalsın
Bir sonraki sefer “şu portu şuraya alsak?” dendiğinde aklınıza router menüsü yerine Windows’un kendi köprüsü de gelsin. Bazen en şık çözüm, en az bileşenli olandır — yeter ki iş bitince kapıyı kilitleyin.