Jak mogę pomóc komuś (np. Babci) przez SSH, który stoi za routerem NAT?

14

Aby szybko pomagać innym, SSH jest bardzo przydatny, szczególnie w połączeniu z ekranem GNU. Często zdarza się, że użytkownicy stoją za routerem NAT. Nawet jeśli użytkownik może skonfigurować router, zapamiętanie hasła, znalezienie właściwych opcji itp. Zajmuje trochę czasu.

Więc jaki jest najłatwiejszy sposób, aby pomóc innym przez SSH, jeśli są za routerem NAT?

Obecnie mówię ludziom, aby otworzyli terminal, uruchom poniższe polecenie i przekaż mi swój adres IP z witryny takiej jak http://ip.appspot.com/ :

sudo apt-get install openssh-server ssh-import-id && ssh-import-id lekensteyn

Oczywiście nie zadziała to, jeśli są za routerem NAT lub mają skonfigurowaną osobistą zaporę ogniową. Czy jest coś takiego:

sshd --accept-help-from lekensteyn

Nie szukam alternatyw takich jak Teamviewer, tylko powłokę jak SSH. To powinno być również oprogramowanie typu open source.

Lekensteyn
źródło

Odpowiedzi:

13

Jeśli twój komputer akceptuje połączenia SSH, istnieje sposób na zastosowanie techniki, z którą Pavlos G. nawiązał połączenie bez dodatkowego komputera.

Najpierw potrzebujesz upośledzonego * użytkownika, do którego znajomy się połączy, jako:

sudo adduser reverse --shell /bin/false

Powiedz znajomemu, aby rozpoczął tunel:

ssh -N -R 62222:localhost:22 reverse@lekensteyns-server

Następnie na własnym komputerze ( lekensteyns-server) uruchom połączenie zwrotne:

ssh -p 62222 localhost

* Nie wiem wystarczająco dużo o bezpieczeństwie, aby móc doradzić w tworzeniu odpowiednio upośledzonego użytkownika. Prawdopodobnie jest to coś, co powinno zostać ujęte w osobnym pytaniu.

ændrük
źródło
3
Wygląda obiecująco, zadałem nowe pytanie na temat tej ograniczonej części użytkownika
Lekensteyn,
2

W oparciu o twoje specyficzne potrzeby prawdopodobnie:

  1. Poproś, aby powiedzieli mi hasło routera
  2. Zaloguj się i skonfiguruj przekierowanie portów tylko dla portu 22
  3. Połącz przez SSH (lub tunelowanie SSH, jeśli potrzebujesz dodatkowych portów) i wykonaj zadanie.

Zapomniałem również, że możesz wypróbować tunel zwrotny ssh , chociaż technicznie to rozwiązanie wymaga jeszcze jednego - środkowego - komputera do pracy.

Więcej informacji można znaleźć tutaj

Pavlos G.
źródło
1) prawdopodobnie nie zadziała, ponieważ dostęp do routera jest często publicznie zabroniony.
Lekensteyn,
2

Zwykle konfiguruję tunel IPv6 (z sixxs.net lub he.net), jeśli nie mają jeszcze IPv6, a wtedy komputer ma adres statyczny i nie muszę zadzierać z NAT. Lubię też konfigurować uwierzytelnianie oparte na kluczach (wtedy nie muszą podawać swojego hasła).

Sixxs ma własnego klienta, którego używasz. Działa za niemal każdym NATem i automatycznie aktualizuje się po zmianie adresu IPv4. Mają instrukcje, jak to skonfigurować i jest on spakowany dla Ubuntu.

Hurricane Electric wykorzystuje tunel, w którym pakiety IPv6 są wysyłane jako ładunek pakietu IPv4. W przeciwieństwie do Sixxs nie jest używany protokół TCP / UDP. Oznacza to, że NAT, za którym się znajdujesz, musi obsługiwać przekazywanie PROTOCOL 41 (nie port) i tylko jeden komputer za NAT może go używać. Oprogramowanie do korzystania z takiego tunelu jest wbudowane w Ubuntu.

Dla HE używam czegoś takiego w /etc/network/interfaces:

auto he-ipv6
iface he-ipv6 inet6 v4tunnel
     endpoint 216.218.226.238
     address  2001:470:a29f::2
     netmask  64
     ttl 64
     up ip -6 route add default dev he-ipv6
     down ip -6 route del default dev he-ipv6

Inną rzeczą, którą musisz zrobić, to zaktualizować punkt końcowy tunelu. Ponieważ nie wiesz, kiedy zmienia się zewnętrzny adres IP, będziesz musiał po prostu próbować aktualizować punkt końcowy co kilka minut. Możesz użyć czegoś takiego i uruchomić z crona:

#!/bin/sh
echo -n "Hurricane Electric Proto-41 tunnel endpoint update: "
#(C) 2010 Erik B. Andersen This script is licensed under the latest version of the
# AGPL published by the Free Software Foundation at http://www.gnu.org/licenses/ .
####Set these for each different site#########
pass="passwordhere"
user_id="a765b8e2f474667dcb56e08c5f1aa05b"
tunnel_id="97817"
####Past here doesn't need to be changed######
wget -4 "https://ipv4.tunnelbroker.net/ipv4_end.php?ipv4b=AUTO&pass=$(echo -n "${pass}" | md5sum | grep -o -E "[0-9a-fA-F]{32}")&user_id=${user_id}&tunnel_id=${tunnel_id}" -O /dev/null -o /dev/null --no-check-certificate
echo " Done"
Azendale
źródło
1
Jakie wysiłki należy podjąć, aby prawidłowo założyć taki tunel? To połączenie jest oczywiście oparte na kluczach, dlatego używam ssh-import-id
Lekensteyn
Rzeczywiście, chciałbym dowiedzieć się więcej o tej sztuczce.
Rafał Cieślak,
0

Z biegiem lat opracowałem GUI, aby robić dokładnie to, o co prosi OP ... poza tym, że wymaga dostępu ssh do trzeciego serwera z publicznym adresem IP, jak sugeruje Pavlos. Znajdziesz tutaj pakiety debian i instrukcje:

http://pietrobattiston.it/reachme

Zauważ, że (wciąż) nie jest w stanie zająć się początkową konfiguracją - mianowicie musisz sam skonfigurować klucze rsa dla połączenia bez hasła. Po skonfigurowaniu „reachthem” pozwala sprawdzić, czy „reachme” jest podłączony, i otworzyć powłokę ssh / przeglądać system plików / przeglądać ekran (eksperymentalny).

Oczywiście nie potrzebujesz trzeciego komputera, jeśli sam komputer ma publiczny adres IP, jak w odpowiedzi ændrük. Oczywiste jest, że zaletą GUI jest to, że użytkownik zdalny nie musi wprowadzać żadnych poleceń w terminalu ... ale część tej korzyści zostaje utracona, jeśli użytkownik zdalny musi zainstalować reachme. Po prostu zawsze instaluję i konfiguruję reachme dla wszystkich, dla których instaluję Ubuntu.

Pietro Battiston
źródło