Jaka jest różnica między SSHing do komputera lokalnego przez Internet a siecią lokalną?

0

Mogę SSH do komputera w sieci lokalnej na dwa sposoby:

  1. Przez lokalny adres IP: ssh 192.168.1.xxx

  2. Przez Internet za pomocą przekierowania portów: ssh -p xxx mydomain.com

Jakie są różnice?

W szczególności, czy jeden sposób jest szybszy od drugiego?

( ssh ... echo hellobyło około 10 ms szybciej przy metodzie „1.” Nie mogłem wykryć żadnej różnicy prędkości dla transferu SCP 100 MB.)

Anders Lundstedt
źródło

Odpowiedzi:

0

Lokalne podejście jest najszybsze i najbardziej wydajne dla twojego pytania, więc (1).

Wszystko to wiąże się z routingiem pakietu przez sieć.

Różnica, którą mogę natychmiast zidentyfikować na podstawie prostego opisu tutaj, polega na korzystaniu z bramki w porównaniu do bezpośredniego przejścia na komputer. Przechodząc do adresu zewnętrznego, użyjesz routera (brama domyślna) i jego zasobów w celu nawiązania połączenia. Jeśli ten router jest intensywnie wykorzystywany, zauważysz znaczne zmniejszenie przepustowości ruchu.

Najpierw sugeruję sprawdzenie twojej tabeli routingu w systemie lokalnym

    user@server:~$ route -n
    Kernel IP routing table
    Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
    0.0.0.0         10.11.0.1       0.0.0.0         UG    0      0        0 eth0
    10.11.0.0       0.0.0.0         255.255.252.0   U     0      0        0 eth0

Z moją konfiguracją widać, że jeśli odwołam się do systemu w sieci lokalnej (tj. 10.11.2.200), przejdzie on bezpośrednio do tego systemu. Jeśli mam dla niego adres NAT (tj. 10.11.2.200 NAT www.somedomain.net), najpierw przejdzie do routera, a następnie NAT z powrotem do sieci.

Możesz to sprawdzić, uruchamiając traceroute na wewnętrzny adres IP, a następnie porównując go z adresem NAT NAT. (Zalecane jest wyłączenie rozpoznawania nazw na traceroute).

    user@server:~$ traceroute -n www.xxx.yyy.zzz
    traceroute to www.xxx.yyy.zzz (www.xxx.yyy.zzz), 30 hops max, 60 byte packets
     1  10.11.0.1  0.598 ms  0.717 ms  0.792 ms
     2  10.10.1.3  0.710 ms  0.788 ms  0.896 ms
     3  www.xxx.yyy.zzz  0.609 ms  0.496 ms  0.439 ms

Powinieneś zauważyć, że idziesz do domyślnej bramy (routera) przed powrotem do sieci.

Porównaj to z bezpośrednim traceroute

    user@server:~$ traceroute -n 10.11.0.64
    traceroute to 10.11.0.64 (10.11.0.64), 30 hops max, 60 byte packets
     1  10.11.0.64  0.349 ms  0.343 ms  0.336 ms

Powodem, dla którego zauważono małą prędkość przesyłania plików, jest jego wyjątkowo mały rozmiar, który zabrał czas na przydzielenie zasobów na routerze. W przypadku większego transferu plików czas będzie nieistotny statystycznie, ponieważ otwierasz połączenie i pozostawiasz je otwarte. Testem, który dałby różne wyniki, byłoby wysłanie pliku o małym rozmiarze, ale uruchomienie go X razy, aby równać się rozmiarowi pliku 100 MB. Spróbuj tego ze skryptem wykonującym polecenie 20 000 000 razy, a otrzymasz 100 MB.

    cmd="ssh ... echo hello"; for ((i=0;i<10000000;i++)); do $cmd;done

(10 000 000 wykonań, ponieważ „echo_hello” zawiera 10 bajtów, chociaż wynik jest większy niż wynik otrzymany z prostego pakietu ACK dla SCP). Ten skrypt to tylko szybki dowód koncepcji.

Mam nadzieję, że to poprawnie rozwiązuje twoje pytanie. Chciałbym dodać, że staje się to bardziej skomplikowane, jeśli system źródłowy i / lub docelowy ma wiele interfejsów w różnych sieciach.

Dave Bukowski
źródło