Qual é a diferença entre o SSHing para uma máquina local pela Internet versus a rede local?

0

Eu posso usar o SSH em uma máquina na rede local de duas maneiras:

  1. Por meio do ip local: ssh 192.168.1.xxx

  2. Na Internet usando o encaminhamento de porta: ssh -p xxx mydomain.com

Quais são as diferenças?

Em particular, é uma maneira mais rápida que a outra?

( ssh ... echo hello foi cerca de 10 ms mais rápido com o método “1”. Não consegui detectar nenhuma diferença de velocidade para uma transferência SCP de 100 MB.)

    
por Anders Lundstedt 29.03.2015 / 19:59

1 resposta

0

Ir local é mais rápido e mais eficiente para sua pergunta, então (1).

Isso tudo envolve como o seu pacote é encaminhado pela sua rede.

A diferença que eu posso identificar imediatamente a partir de sua descrição simples aqui é usar um gateway em vez de ir diretamente para o PC. Indo para o endereço externo, você usará o roteador (gateway padrão) e seus recursos para fazer a conexão. Se esse roteador estiver sendo muito utilizado, você notará uma redução significativa na taxa de transferência do tráfego.

Primeiramente, sugiro verificar sua tabela de roteamento no sistema local

    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

Você pode ver com minha configuração que, se eu fizer referência a um sistema na rede local (ou seja, 10.11.2.200), ele será direcionado diretamente para esse sistema. Se eu tiver um endereço NAT para ele (isto é, 10.11.2.200 NAT www.somedomain.net), ele irá primeiro viajar para o roteador e depois NAT de volta para a rede.

Você pode testar isso executando um traceroute no endereço IP interno e comparando-o ao endereço IP NAT. (É preferível desabilitar a resolução de nomes no seu 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

Você deve perceber que acessa seu gateway padrão (roteador) antes de retornar à rede.

Compare isso com o seu traceroute direto

    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

A razão pela qual a pequena velocidade de transferência de arquivos era perceptível é por causa de seu tamanho extremamente pequeno, que levou tempo para alocar os recursos no roteador. Em uma transferência de arquivos maior, o tempo será estatisticamente insignificante, pois você está abrindo uma conexão e deixando-a aberta. Um teste que lhe daria resultados diferentes seria enviar o arquivo de tamanho pequeno, mas executando-o número de vezes X para igualar seu tamanho de arquivo de 100MB. Tente isso com um script executando o comando 20.000.000 vezes, você deve obter 100MB.

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

(10.000.000 execuções porque 'echo_hello' tem 10 bytes, embora a saída seja maior do que seria recebida de um pacote ACK simples para o SCP). Este script é apenas uma prova rápida de conceito.

Espero que isso resolva sua pergunta corretamente. Eu gostaria de adicionar isso fica mais complicado se o sistema de origem e / ou destino tiver várias interfaces em redes diferentes.

    
por 02.04.2015 / 23:00

Tags