it-swarm-tr.com

Bir yerel porttan diğerine tünel oluşturmanın basit bir yolu var mı?

192.168.1.x: 8000 değil, yalnızca 127.0.0.1:8000'den erişilebilen bir geliştirme sunucum var. Hızlı bir saldırı olarak, yerel ağdan 192.168.1.x: 8001'i bağlayabilmem için başka bir bağlantı noktasında (örneğin 8001) dinleyecek bir şey kurmanın bir yolu var mı ve istemci ile 127.0 arasındaki trafiği tünelleyecek • 0.1: 8000?

83
waitinforatrain

Ssh kullanmak en kolay çözümdür.

ssh -g -L 8001: localhost: 8000 -f -N kullanıcı@remote-server.com

Bu, iş istasyonunuzdaki yerel bağlantı noktası 8001'i remote-server.com bağlantı noktası 8000'deki yerel ana bilgisayar adresine iletir.
-g, ağımdaki diğer istemcilerin iş istasyonumdaki 8001 numaralı bağlantı noktasına bağlanmasına izin vermek anlamına gelir. Aksi takdirde, yönlendirilen bağlantı noktasına yalnızca iş istasyonunuzdaki yerel istemciler bağlanabilir.
-N yaptığım tek şey portları yönlendirmek, bir Shell başlatma.
-f, başarılı bir SSH bağlantısı ve oturum açtıktan sonra arka plana çatal anlamına gelir.
8001 numaralı liman, ssh ölene veya ölene kadar birçok bağlantı için açık kalacak. Windows'da olursanız, mükemmel SSH istemcisi PuTTY de bunu yapabilir. Yerel bağlantı noktası ve localhost: 8000 ve hedef olarak 8001 kullanın ve ayarlara yerel bağlantı noktası iletme ekleyin. PuTTY ile başarılı bir bağlantıdan sonra ekleyebilirsiniz.

48
penguin359

Sunucuda socat ile:

socat tcp-listen:8001,reuseaddr,fork tcp:localhost:8000

Varsayılan olarak, socat makinedeki herhangi bir IPv4 veya IPv6 adresinde (destekleniyorsa) TCP bağlantı noktası 8001) dinleyecektir. tcp-listen ile tcp4-listen veya tcp6-listen veya ,bind=that-address ekleyerek belirli bir yerel adrese.

Proxy yaptığınız bağlantı soketi için aynı şekilde, localhost yerine herhangi bir adresi kullanabilir ve tcp ile tcp4 veya tcp6 ile değiştirebilirsiniz. adres çözümlemesini IPv4 veya IPv6 adresleriyle sınırlamak istiyorsanız.

8000 numaralı bağlantı noktasını dinleyen sunucu için bağlantının yetkili istemciden değil, proxy'den (localhost olması durumunda, localhost olacaktır) görüneceğini unutmayın. Sunucunun istemcinin kim olduğunu söyleyebilmesi için DNAT yaklaşımları (ancak süper kullanıcı ayrıcalıkları gerektirir) kullanmanız gerekir.

105
Stéphane Chazelas

Geleneksel nc kullanmak en kolay çözümdür:

nc -l -p 8001 -c "nc 127.0.0.1 8000"

nc dosyasının bu sürümü netcat-traditional paketi Ubuntu üzerinde. (Yapmalısın update-alternatives veya ara nc.traditional.)

Ssh'ın aksine bunun şifreli olmadığını unutmayın. Bir Ana Makinenin dışında kullanıyorsanız bunu unutmayın.

50
not-a-user

OpenBSD netcat varsayılan olarak Linux'ta ve ayrıca OS X'te kullanılabilir.

OSX:

mkfifo a
mkfifo b
nc 127.0.0.1 8000 < b > a &
nc -l 8001 < a > b &

Linux:

mkfifo backpipe
nc -l 12345 0<backpipe | nc www.google.com 80 1>backpipe

OS X bash üzerinde çalışan bir alternatif bir çift yönlü bor kullanmaktır. Diğer Unix'lerde de çalışabilir:

nc 127.0.0.1 8000 <&1 | nc -l 8001 >&0
27
Mark A.

ServerFault'ta David Spillett 's answer

rinetd işi yapmalı ve bunun için bir Windows ikili dosyası http://www.boutell.com/rinetd/ (Linux altında aynı şeyi arayan herkes için, rinetd hemen hemen her dağıtımın standart depoları "apt-get install rinetd" veya "yum install rinetd" veya benzeri ile kurulabilir)

Biçimdeki bir yapılandırma dosyasını alan basit bir ikili dosyadır

bindaddress bindport connectaddress connectport

Örneğin:

192.168.1.1 8001 127.0.0.1 8000

veya

0.0.0.0 8001 127.0.0.1 8000

gelen bağlantı noktasını tüm arabirimlere bağlamak istiyorsanız.

4
psychowood
iptables -t nat -A PREROUTING -p tcp --dport <Origin-port> -j REDIRECT --to-port <destination-port>

service iptables save
service iptables restart
3
Santanu Dey

Bu, sunucudaki iki udp bağlantı noktasını tünellemenin yeni bir yoludur: https://github.com/9crk/udpeer

udpeer 8001 8002

Test etmek için:

nc -u xxxx.com 8001
nc -u xxxx.com 8002
0
9crk

Mark A. 'ın cevabına dayanarak, Mac'im için çalışmak için küçük bir Tweak yapmak zorunda kaldım (en azından macOS Mojave Sürüm 10.14.4'te)

mkfifo a
mkfifo b
nc 127.0.0.1 8000 < b > a &
nc -l 8001 < a > b &
printf "" > a

Bu printf bildirimi çok önemli gibi görünüyor. Aksi takdirde, 8000 numaralı bağlantı noktasına bağlanmak için netcat komutu hiçbir zaman gerçekten bağlanmaya çalışmaz ve 8001 numaralı bağlantı noktasını dinlemek için netcat komutu hiçbir zaman 8001 numaralı bağlantı noktasını dinlemez. Printf olmadan, 8001 numaralı bağlantı noktasına bağlanmaya çalıştığımda Bağlantı reddedildi.

Benim varsayımım netcat herhangi bir Soket işlemi yapmadan önce bir şekilde stdin'i (belki bir sebepten dolayı okumaya çalışıyor) engellemelidir. Bu nedenle, fiff a'ya yazılan printf deyimi olmadan, netcat komutu hiçbir zaman 8001 numaralı bağlantı noktasını dinlemeye başlamaz.

Not: Mark'ın gönderisine bir cevap bırakmış olacaktım, ancak henüz itibarım yok.

0
Daniel K