Tunelowanie ruchu serwera przez SSH, gdy przekierowanie portów w sieci jest niedostępne?

0

Ustawiać

W domu mam małą Raspberry Pi 3, która obsługuje usługi z dostępem do Internetu. Na przykład działa serwer HTTP. Zadzwonię na ten serwer raspberry. Mogę zarządzać raspberryzdalnie przez SSH: Otworzyłem port 22w routerze w domu i dlatego ruch do mojego publicznego adresu IP dla tego portu jest przekazywany raspberry. Na razie w porządku.

raspberryarchitektura jest arm64i działa, FreeBSDco uniemożliwia (najwyraźniej próbowałem włamać się, ale nie ma kości), aby uruchomić na nim serwer gry (UrbanTerror 4.3).

Mam też inną maszynę, która jest ThinkPad (później: thinkpad) Bieg OpenBSDi ma amd64architekturę, która ma w rzeczywistości pozwala mi uruchomić żądany serwer. Od thinkpadmogę uzyskać dostęp raspberryza pomocą SSH.

Pytanie

Obecnie nie ma mnie w domu , ale w innej sieci, właściwie za granicą . Mam teraz nieodpartą potrzebę hostowania mojego serwera, ale nie mogłem tego zrobić raspberry, jak powiedziałem.

Czy w jakiś sposób byłoby możliwe uruchomienie serwera thinkpadi tunelowanie całego ruchu raspberry(ponieważ mogę to ujawnić w Internecie, podczas gdy tutaj, za granicą , nie mam uprawnień administratora do routera)?

Zasadniczo chcę uruchomić serwer thinkpadtak, jakbym działał raspberrypod względem sieci. Oznacza to, że serwer pojawiłby się w przeglądarkach serwerów, a gracze mogliby się połączyć: ruch docierałby raspberrynp. Przez port 27900i byłby przesyłany przez Internet za pośrednictwem SSH do thinkpad.

PS Zdaję sobie sprawę, że prawdopodobnie spowodowałoby to słabą wydajność z powodu przekazywania ruchu przez SSH, ale nadal chciałbym spróbować.

Z góry dziękuję i przepraszam za długi post!

EDYCJA 2018-12-14: Oto, co już próbowałem

Potrzebuję do tego tunelu zwrotnego SSH . Stworzyłem tunel ze thinkpadjak tak

ssh -N -R :27960:localhost:27960 <raspberry's public IP>

Tunel został utworzony pomyślnie. Sprawdziłem z netstatwłączonym raspberryi rzeczywiście nasłuchuje *:27960(ale TCP; czy to jest problem? UrbanTerror, podobnie jak inne gry, używa UDP). Teraz uruchomiłem serwer thinkpadraz za razem netstati zobaczyłem, że nasłuchuje *:27960(UDP).

Próbowałem otworzyć klienta UrbanTerror thinkpadi połączyć się z nim <raspberry's IP>, ale to nie zadziałało. Aby debugować, próbowałem tego samego podczas pracy

tcpdump -n -e -ttt -i ue0 | grep 27960

na raspberry. Kiedy próbowałem połączyć się z moim serwerem raspberryz UrbanTerror, na zrzucie pojawiły się następujące informacje:

188.112.111.89.27961 > 192.168.0.33.27960: UDP, length 16
192.168.0.33 > 188.112.111.89: ICMP 192.168.0.33 udp port 27960 unreachable

(Usunąłem dane wyjściowe ze względu na zwięzłość)

188.112.111.89jest obecnym publicznym adresem IP thinkpadi 192.168.0.33jest oczywiście raspberry. Dlaczego port jest 27960nieosiągalny? Oczywiście, według netstat, thinkpadnasłuchuje na tym porcie.

Wystarczy, aby przetestować łączność, próbowałem działa nc -l 27960na thinkpadi nc localhost 27960na raspberry: mogę komunikować się w obu kierunkach, w / o problemach.

Myślę, że warto również wspomnieć, że mam OpenBSD„s pffiltr pakietów uruchomiony na obu komputerach, ale mam wyłączone to do rozwiązywania problemów.

bertalanp99
źródło
Czego spróbowałeś do tej pory? Czy „zdalne przekierowywanie portów” dzwoni? Czytałeś man ssh? W tym pytaniu konfiguracja jest podobna (tłumaczenie: „Plex” -> „thinkpad”; „serwer zdalny” -> „malina”).
Kamil Maciorowski,
1
Tak, możesz to zrobić. Słowa kluczowe to „ssh” i „tunel” (co nie dziwi). Zarówno strona podręcznika, jak i strona internetowa zawierają wiele szczegółów. Jeśli nie możesz go skonfigurować, edytuj swoje pytanie przy pomocy tego, co próbowałeś, a co nie działa.
bezpośrednio
@dirkt Zaktualizowałem moje pytanie, tak jak zadałeś.
bertalanp99

Odpowiedzi:

1

Można to zrobić na kilka sposobów. Najłatwiej jest tymczasowo utworzyć tunel ssh do interfejsu sieciowego routera za pośrednictwem raspberry. Otwórz UDP na routerze na thinkpad(serwer UrbanTerror używa tylko UDP, a domyślny port to 27960). Następnie gracze będą mogli połączyć się z twoim publicznym adresem IP.

Jeśli nie chcesz otwierać innego portu na routerze. Każdy gracz będzie musiał mieć dostęp do SSH do ciebie raspberryi zrobić tunel przekierowania portów SSH przez port TCP 22 i wykonać przekaźnik UDP na TCP na swoim komputerze. Możesz to zrobić za pomocą socat:

Raspberry side: socat tcp4-listen:27900,reuseaddr,fork UDP:`thinkpad`:27960

Players side: socat -T15 udp4-recvfrom:27960,reuseaddr,fork tcp:localhost:27900
badrul
źródło
Przepraszam, albo nie byłem wystarczająco jasny, albo coś przeoczyłeś. Nie mogę otworzyć portu, thinkpadponieważ tego urządzenia nie ma nawet w mojej sieci domowej. Nie jestem pewien co do drugiego rozwiązania, które dostarczyłeś. Chciałbym, aby każdy mógł się połączyć bez konieczności korzystania z SSH.
bertalanp99
0

Jeśli dobrze cię zrozumiałem, ty i ty thinkpadjesteś za granicą , raspberryjest w domu i możesz zdalnie skonfigurować router w domu, aby otwierać nowe porty na raspberry.

TCP vs UDP robi dużą różnicę, ponieważ sshmoże tunelować tylko TCP. Musisz dodatkowo przekonwertować między nimi.

Opóźnienia w pełnej konfiguracji będą bardzo zauważalne.

Musisz

1) Skonfiguruj router w domu, aby przekazywał port UDP 27960 do raspberry.

2) W przypadku raspberrykonwersji z socatUDP i TCP, ten ostatni powiedzieć na porcie 27900.

3) Utwórz tunel ssh od thinkpaddo raspberry; kierunek będzie zależeć od socatpoleceń. Powiedzmy, port 27900 po obu stronach.

4) thinkpadUżyj socatponownie, aby przekonwertować pomiędzy TCP 27900 a UDP 27960.

IIRC musisz być nieco ostrożny, z którym wariantem UDP należy korzystać, socataby działał w obu kierunkach. Musiałbym to przetestować, ale nie mam teraz czasu, więc nie mogę ci teraz podać konkretnych poleceń. Musisz także ustawić go we właściwej kolejności, aby usługi „nasłuchiwania” były uruchamiane najpierw, zanim uzyskają połączenie z innych kroków.

reż
źródło