Mam serwer programistyczny, który jest dostępny tylko od 127.0.0.1:8000, a nie 192.168.1.x: 8000. Jako szybki hack istnieje sposób, aby skonfigurować coś do nasłuchiwania na innym porcie (powiedzmy 8001), aby z sieci lokalnej mógł połączyć 192.168.1.x: 8001 i tunelowałby ruch między klientem a 127.0 .0.1: 8000?
networking
tcp
tunneling
port-forwarding
waitinforatrain
źródło
źródło
Odpowiedzi:
Korzystanie z ssh jest najłatwiejszym rozwiązaniem.
To przekierowuje port lokalny 8001 na stacji roboczej na adres hosta lokalnego na porcie remote-server.com 8000.
-g
oznacza, że pozwala innym klientom w mojej sieci na połączenie się z portem 8001 na mojej stacji roboczej. W przeciwnym razie tylko lokalni klienci na stacji roboczej mogą połączyć się z przekierowanym portem.-N
oznacza, że wszystko, co robię, to przekierowywanie portów, nie uruchamiaj powłoki.-f
oznacza rozwidlenie w tle po udanym połączeniu SSH i zalogowaniu.Port 8001 pozostanie otwarty dla wielu połączeń, dopóki ssh nie umrze lub nie zostanie zabity. Jeśli zdarzyło Ci się być w systemie Windows, doskonały klient SSH PuTTY może to zrobić. Użyj 8001 jako portu lokalnego i hosta lokalnego: 8000 oraz miejsca docelowego i dodaj przekierowanie portu lokalnego w ustawieniach. Możesz go dodać po udanym połączeniu z PuTTY.
źródło
[email protected]
zrobić? Jest to zdecydowanie niepotrzebne do przekierowania portów, jednak ssh wymaga tego argumentu, a ponadto próbuje się tam połączyć. A po ustawieniu tej irytującej opcji na nazwę hosta wypisuje…port 22: Connection refused
(nie, nie użyłem portu 22) . Jeśli coś mi nie brakuje, polecenie po prostu nie działa.[email protected]
to tylko przykład i nie powinieneś brać tego dosłownie. Musisz zastąpić to nazwą komputera, z którym chcesz się połączyć, i swoją nazwą użytkownika na tym komputerze. Informacje te są potrzebne do nawiązania połączenia ssh. Tylko po ustanowieniu połączenia ssh porty mogą być przekazywane przez to połączenie.-N
nie oznacza, że nie ma połączenia SSH. To po prostu oznaczado not execute a remote command
(patrz strona podręcznika ).<user>@<host>
Argument jest to konieczne, ponieważ nie otworzyć połączenie SSH<host>
(które dla przypadku OP będzielocalhost
) i przekazuje odpowiedni port przez tunelu SSH. Jest to jedno rozwiązanie problemu OP, ale nie najprostsze. Do przekazania localhost bez ssh, można użyćsocat
lubnetcat
jak w StephaneChazelas i not-a-user „s odpowiedziZ
socat
na serwerze:Domyślnie
socat
nasłuchuje na porcie TCP 8001 na dowolnym adresie IPv4 lub IPv6 (jeśli jest obsługiwany) na komputerze. Możesz ograniczyć go do IPv4 / 6, zastępująctcp-listen
gotcp4-listen
lubtcp6-listen
, lub do określonego adresu lokalnego, dodając,bind=that-address
.To samo dotyczy gniazda podłączanego do serwera proxy, możesz użyć dowolnego adresu zamiast
localhost
i zastąpićtcp
gotcp4
lubtcp6
jeśli chcesz ograniczyć rozdzielczość adresów do adresów IPv4 lub IPv6.Należy zauważyć, że w przypadku serwera nasłuchującego na porcie 8000 połączenie będzie wyglądało tak, jakby pochodziło od serwera proxy (w takim przypadku
localhost
będzielocalhost
), a nie od oryginalnego klienta. Aby serwer mógł stwierdzić, kto jest klientem , musisz użyć podejść DNAT (ale wymaga to uprawnień administratora).źródło
range
oraztcpwrap
opcji i nasocat
stronie man).Korzystanie z tradycyjnego
nc
jest najłatwiejszym rozwiązaniem:Ta wersja
nc
jest wnetcat-traditional
pakiecie na Ubuntu. (Musisz toupdate-alternatives
lub zadzwonićnc.traditional
.)Zauważ, że w przeciwieństwie do ssh nie jest to szyfrowane. Pamiętaj o tym, jeśli używasz go poza jednym hostem.
źródło
netcat-openbsd
?netcat
wersji, która jest zawarta wbusybox
:nc -v -lk -p 8001 -e /usr/bin/nc 127.0.0.1 8000
. ( Opis parametrów )nc
polecenie kończy się po pierwszym zdalnym połączeniu. Dodaj,-k
jeśli chcesz, aby był nadal uruchomiony.nc: cannot use -p and -l
w CentOS 6.4. Czy jest w pobliżu praca?Netcat OpenBSD jest domyślnie dostępny w systemie Linux, a także w systemie OS X.
OSX:
Linux:
Alternatywą działającą w bash OS X jest użycie potoku dwukierunkowego . Może działać na innych Uniksach:
źródło
ss -tan
lubnetstat -tan
.Cytując Davida Spillett „s odpowiedź na ServerFault
Jest to prosty plik binarny, który pobiera plik konfiguracyjny w formacie
bindaddress bindport connectaddress connectport
Na przykład:
192.168.1.1 8001 127.0.0.1 8000
lub
0.0.0.0 8001 127.0.0.1 8000
jeśli chcesz powiązać port przychodzący ze wszystkimi interfejsami.
źródło
źródło
dport
, jak wnc -v localhost 2345
, dostajęConnection refused
. Nie jestem zbyt dobry w iptables, ale myślę, że dport musi mieć aplikację do słuchania.W oparciu o odpowiedź Marka A. musiałem dokonać drobnej modyfikacji, aby działała na moim komputerze Mac (przynajmniej w systemie macOS Mojave w wersji 10.14.4)
To oświadczenie printf wydaje się kluczowe. W przeciwnym razie polecenie netcat do połączenia z portem 8000 nigdy nie spróbuje się połączyć, a polecenie netcat do nasłuchiwania na porcie 8001 nigdy nie będzie nasłuchiwać na porcie 8001. Bez printf za każdym razem, gdy będę próbował połączyć się z portem 8001, dostanę połączenie odrzucone.
Zakładam, że netcat musi jakoś zablokować standardowe wejście (być może z jakiegoś powodu próbuje to odczytać) przed wykonaniem jakichkolwiek operacji Socket. Jako taki, bez wypisania instrukcji printf do fifo a, polecenie netcat nigdy nie zacznie nasłuchiwać na porcie 8001.
Uwaga: zostawiłbym odpowiedź na postu Marka, ale nie mam jeszcze reputacji.
źródło
Jest to nowy sposób na tunelowanie dwóch portów udp na serwerze: https://github.com/9crk/udpeer
udpeer 8001 8002
Testować:
źródło