Rozważ następującą sytuację:
W moim domu mam router (podłączony do Internetu), serwer (S) i moją główną maszynę (M). S jest osiągalny z Internetu (ma statyczny adres IP) i jest dostępny 24/7, podczas gdy M nie.
Czasami chcę udostępnić aplikację (która nasłuchuje na porcie M, na przykład 8888) z zewnętrznego Internetu.
W tym celu chciałem skonfigurować port na S (2222), aby przekazywał do portu M 8888, aby każdy, kto ma dostęp do S: 2222, miałby wrażenie, jakby miał dostęp do M: 8888.
Próbowałem użyć przekierowania portów ssh, moja najlepsza próba była następująca:
ssh -L 2222:M:8888 -N M
Ale to pozwala mi tylko uzyskać dostęp do portu 2222 z samego serwera, a nie z innych maszyn.
Czy jest jakiś sposób, aby zrobić to poprawnie? Wolałbym, aby było to proste polecenie, które mógłbym uruchamiać i zamykać za pomocą ^ C, gdy nie potrzebuję już tego przekazywania.
źródło
Odpowiedzi:
Tak, nazywa się to
GatewayPorts
w SSH. Fragmentssh_config(5)
:I możesz użyć
localhost
zamiastM
w przesyłaniu dalej, ponieważ przekierowujesz na tę samą maszynę, na której korzystasz z SSH - jeśli dobrze rozumiem twoje pytanie.Tak więc polecenie stanie się następujące:
i będzie wyglądać tak w
netstat -nltp
:Teraz każdy, kto uzyskuje dostęp do tego komputera przez port 2222 TCP, faktycznie będzie rozmawiał z hostem lokalnym: 8888, jak widać na komputerze M. Zauważ, że to nie jest to samo, co zwykłe przekazywanie do portu 8888 w M.
źródło
netstat
polecenia, aby dowiedzieć się, co dokładnie. Prawdopodobnie kolejny podobny SSH wciąż działa w tle i zabija go za pomocą komendy PID netstat.Jest inny sposób. Możesz skonfigurować przekierowanie portów od S: 2222 do W: 8888 za pomocą iptables. Jedno polecenie:
gdzie 1.2.3.4 to adres IP M. Nazywa się to NAT (Network Address Translation).
źródło
Więcej alternatyw:
netcat
(tradycyjny) lubsocat
Na serwerze (S):
lub
Szczegóły patrz w: Prosty sposób na utworzenie tunelu z jednego portu lokalnego do drugiego?
źródło