Jak tunelować port z serwera za zaporą ogniową do zdalnego serwera, który umożliwia połączenia przez ssh?

0

Mam scenariusz, w którym muszę otworzyć port dla serwera za usługodawcą internetowym, który wydaje się blokować ruch. W takim przypadku mam zdalnie dedykowany serwer, do którego mogę sshpodłączyć i używać dowolnych portów. Moim pragnieniem jest, aby połączyć się z serwerem za tą zaporą ogniową na serwerze dedykowanym, a następnie ogólnie otworzyć port, do którego klient innej aplikacji będzie miał dostęp w dowolnym momencie.

Myślałem, że to tak proste, jak z serwera za zaporą ISP:

ssh username@remote_server_ip -R remote_server_ip:12345:localhost:12345

A następnie po prostu połącz się z oprogramowaniem klienta remoteserver:12345jako ustawienie serwera.

Dodatkowo sshd_configustawiłem GatewayPorts clientspecifiedi kiedy sprawdzam netstat -tln | grep 12345na zdalnym serwerze, widzę: Aktywne połączenia internetowe (tylko serwery)

Proto Recv-Q Send-Q Local Address                Foreign Address             State      
tcp        0      0 remote_server_ip:12345       0.0.0.0:*                   LISTEN 

Niestety to na pozór nie działa. Podejrzewam, że coś mi wychodzi z argumentów ssh. Jakieś pomysły?

iluminować
źródło
przypuszczam, że nie chcesz -R, jeśli używasz aplikacji klienckiej ssh zza zapory ogniowej, A twój zwykły klient również znajduje się za zaporą ogniową. więc chcesz, aby słuchanie odbywało się na kliencie ssh. więc to jest -L, co jest domyślne. nie -R. Spróbuj tego. Więc z -L. (też jestem ciekawy, czy to działa bez -L .., ale wygląda na to, że nie chcesz -R). Spróbuj zmienić komendę z powiedzenia -R na powiedzenie -L.
barlop
Jak rozumiem to ze strony podręcznika, użyjemy tego samego argumentu powyżej, aby przekazać ruch z serwera zdalnego_produktu: 12345 z powrotem do inicjującego ssh na serwerze localhost, który znajduje się za firewallem. Ciągle się nad tym zastanawiałem i na stronie podręcznika wydaje się to poprawne i bezbłędne.
pokaż
ok, więc zapora sieciowa blokuje przychodzące i pozwala klientowi ssh na wyjście. A twoje zwykłe serwery są na końcu klienta ssh, widzę w twoim ostatnim komentarzu, że są. Więc tak, chcesz -R. Jak łączysz swojego stałego klienta? Być może twój tunnei działa, ale nie udaje ci się podłączyć do niego klienta. Czy możesz wkleić zarówno polecenie skonfigurowania tunelu (co już zrobiłeś), wynik (niektóre dane wyjściowe? Brak danych wyjściowych?) Polecenie podłączenia zwykłego klienta do niego, jak i dane wyjściowe.
barlop
także jeśli tylko rozwiązujesz problem, możesz pominąć linię GatewayPorts w sshd_config. lub niech będzie to domyślna nie. I podłącz bezpośrednio Co więcej, być może możesz wyświetlić dane wyjściowe pokazujące, czy połączenie ssh zostało w ogóle ustanowione, czy nie. Zgaduję, że zostało ustalone. Może źle to napisałeś Napisałeś nazwę użytkownika ssh @ remote_server_ip -R remote_server_ip: 12345: localhost: 12345 Spróbuj zmienić na ssh nazwa użytkownika @ remote_server_ip -R 127.0.0.1:12345:localhost:12345 lub ssh nazwa użytkownika @remote_server_ip -R 0.0.0.0:12345:localhost:12345 lub
barlop
ssh nazwa użytkownika @ remote_server_ip -R *: 12345: localhost: 12345 Lub spróbuj zastąpić * lokalnym adresem ip. Może kiedy zrobiłeś ssh nazwa użytkownika @ remote_server_ip -R remote_server_ip: 12345: localhost: 12345 Zrobiłeś to samo zdalny_server_ip. I to źle, bo to drugie musi być lokalne (np. 192 ...) lub sprzężenie zwrotne lub * / 0.0.0.0.
barlop

Odpowiedzi:

0

Jeśli dobrze rozumiem, chcesz utworzyć tunel ssh ze swojego komputera za usługodawcą internetowym i udostępnić jego usługę przez port na serwerze SSH.

W takim przypadku linia poleceń wydaje się poprawna. Robię coś podobnego.

Włączyłeś Gatewayports w konfiguracji sshd, więc wszystko jest dobrze, jeśli tego nie zrobiłeś, mógłbyś tylko powiązać port z adresem sprzężenia zwrotnego 127.0.0.1 na serwerze ssh.

Szybka uwaga: musiałem zrestartować mój serwer ssh, aby opcja gatewayport zaczęła działać. Ponowne uruchomienie usługi sshd powinno wystarczyć, ale nie zadziałało.

Widzę, że nie podajesz portu dla serwera ssh, co oznacza, że ​​używasz portu 22, twój dostawca usług internetowych może w jakiś sposób z nim temperować.

Jeszcze jedna rzecz, bez względu na usługę, do której chcesz uzyskać dostęp na serwerze za ISP, upewnij się, że jego port jest powiązany z interfejsem 127.0.0.1, ponieważ to on wskazywał twój tunel. Sprawdź także, czy usługa przyjmuje połączenia z tego interfejsu i sprawdź dwukrotnie port, na którym działa.

@barlop -R 127.0.0.1:12345:localhost:12345 byłoby błędne, usługa byłaby dostępna tylko dla osób łączących się na adapterze pętli zwrotnej.

Ale czytając post Barlopa, zdałem sobie sprawę, pamiętaj o sposobie, w jaki ustawiłeś polecenie. Port otwierany na serwerze ssh będzie powiązany z tym samym adresem IP, na którym działa twój serwer SSH. Co oznacza, że ​​usługa jest narażona na działanie Internetu, być może jest to, czego chcesz, ale jeśli ppl, który potrzebuje usługi, łączy się z sieci LAN, musisz powiązać ten port z ipem LAN serwera ssh. TAKŻE JESTEŚ PEWNY, że serwer ssh, z którym się łączysz, nie znajduje się za zaporą ogniową, która wewnętrznie przekierowuje port 22 na serwer? w takim przypadku oznacza to, że prosisz serwer ssh o otwarcie portu na ip, który należy do zapory ogniowej, co jest oczywiście niemożliwe.

W tym trybie musisz otworzyć port na własnym serwerze LAN ssh, wtedy lokalne komputery mogą się tam podłączyć bezpośrednio, jeśli chcesz udostępnić usługę w Internecie, musisz przekierować port z zapory ogniowej do portu otworzyłeś na serwerze ssh.

Po prostu staram się wszystko objąć, trudno jest uzyskać jasny obraz tego, co się dzieje bez dodatkowych informacji na temat infrastruktury.

Awww przyjemności z pracy w sieci.

TCZ
źródło