A ideia básica aqui é conectar-se a um computador remoto em uma rede e fazer com que todo o tráfego da rede pareça local para essa rede. A primeira razão pela qual alguém pode precisar é para melhorar a segurança e eliminar ameaças potenciais antecipadamente. Por exemplo, você pode precisar imprimir em uma impressora de rede sem "expor" esta impressora à Internet normal. Como resultado, por exemplo, alguém pode se sentar em um café e, depois de se conectar à rede via VPN, imprimir documentos na impressora, sentindo-se como se estivesse em sua mesa e a impressora a alguns metros dele. Usar uma VPN também significa que os dados transmitidos pela rede WiFi do café serão criptografados.

A segunda razão é ocultar a localização real do usuário de olhos curiosos. Digamos que alguém goste de assistir a vídeos da BBC, mas more no Equador. Isso significa que, para que os vídeos não sejam bloqueados para ele, ele precisará se conectar via VPN a uma rede localizada no Reino Unido. Se as autoridades de um determinado país monitoram e censuram a Internet, os residentes desse país também podem se beneficiar da oportunidade de disfarçar seu tráfego.
Usar SSH para estabelecer uma conexão VPN é adequado para ambas as tarefas acima. No entanto, se você estiver interessado principalmente no primeiro deles, talvez seja melhor usar um roteador dedicado ou um pequeno computador, como o Raspberry Pi, destinado a resolver seu problema. Devo dizer que se você alugar um servidor em algum lugar, então "VPN sobre SSH" não é para você.
Preparação preliminar

VPN
Você só precisa de acesso root a ambas as máquinas. Um servidor SSH deve ser instalado no computador remoto. É claro que você também precisará de um cliente SSH. Ambas as máquinas locais e remotas precisarão fazer algumas configurações. Eu uso o KDE, então uso o NetworkManager para fazer as configurações necessárias, mas há outra maneira de fazer. Usar o NetworkManager apenas torna as coisas mais fáceis.
Algumas configurações especiais precisam ser feitas no servidor, mas é bem possível que já tenham sido feitas nele. Portanto, o arquivo
/etc/ssh/sshd_config
deve conter uma linha
PermitTunnel=yes
. Além disso, você pode precisar definir o valor para o
yes
parâmetro
AllowTCPForwarding
... O firewall também pode precisar de algumas configurações. No entanto, as instruções para configurar o plug-in NetworkManager podem ser úteis mesmo para aqueles que não usam o programa.
Configurações do lado do cliente
Se estiver usando o NetworkManager, você precisará do plug-in apropriado. Para Neon e outras distribuições baseadas em Debian, o pacote é bom
network-manager-ssh
. Isso é tudo que você precisa. Se você não quiser usar o NetworkManager, poderá usar os seguintes comandos do material do autor do plugin:
ssh -f -v -o Tunnel=point-to-point -o ServerAliveInterval=10 -o TCPKeepAlive=yes -w 100:100 root@YOUR_SSH_SERVER \ '/sbin/ifconfig tun100 172.16.40.1 netmask 255.255.255.252 pointopoint 172.16.40.2' && \ /sbin/ifconfig tun100 172.16.40.2 netmask 255.255.255.252 pointopoint 172.16.40.1
Isso requer acesso root a ambos os sistemas, já que estamos criando um túnel. Isso, mesmo ao usar o plugin, leva a vários problemas. Obviamente, não gostaríamos de ser constantemente solicitados a fornecer uma senha para a conexão SSH e para verificar a chave. Mas se você configurar manualmente a VPN, poderá corrigir esses problemas.
Problemas
A maioria dos sistemas modernos não permite que você efetue login com direitos de root usando uma senha e, às vezes, não permite que você se conecte ao sistema neste modo. Portanto, precisamos, antes de mais nada, resolver esse problema. Além disso, quando o NetworkManager inicia o SSH, ele procura as chaves do usuário root, não do usuário regular. Se ele não consegue encontrar algo, ele simplesmente para. Portanto, precisamos fornecer um login root perfeito.
A fim de fornecer a capacidade de fazer login como root no servidor, você precisa editar o arquivo
/etc/ssh/sshd_config
e definir o parâmetro
PermitRootLogin
para
yes
... Eu recomendo que você trabalhe neste modo pelo tempo que for necessário para concluir as próximas etapas de configuração do servidor. Em seguida, você precisará reiniciar o servidor sshd, por exemplo, com o seguinte comando:
systemctl restart sshd
Você também pode usar este comando:
/etc/init.d/ssh restart
Em seguida, logando na máquina local usando uma conta normal, você precisa usar
ssh-copy-id
para instalar o certificado na máquina host. Depois de fazer isso, você precisa retornar ao servidor e alterar o
/etc/ssh/sshd_config
valor
PermitRootLogin
para
prohibit-password
. Isso permitirá que você entre no servidor como root usando um certificado, mas não usando uma senha.
Se você já se logou como root, pode já ter sido perguntado se deseja aceitar a chave do servidor. Se não for assim, então temos um problema. Se você puder, faça o login e responda sim à pergunta correspondente, após o que o sistema irá parar de perguntar. Mas, se isso não puder ser feito, podemos corrigir o problema desativando
StrictHostKeyChecking
.
Em teoria, você pode passar opções adicionais de ssh para o plug-in NetworkManager, mas por algum motivo essa abordagem não funciona com a versão do plug-in dos repositórios. Se você não usa o plugin, fazendo tudo manualmente, então você mesmo pode fazer as configurações necessárias. As configurações SSH para o usuário root podem ser definidas em
/root/.ssh/config
. Você também pode definir configurações globais em
/etc/ssh/ssh_config
.
Se você alterar as configurações globais, se o sistema oferecer suporte, considere o uso
/etc/ssh/ssh_config.d
. Graças a isso, você poderá definir parâmetros para um host específico, que não serão sobrescritos quando o sistema for atualizado. Por exemplo, você pode criar um arquivo no diretório apropriado com o nome
hackaday.conf
:
Host *.hackaday.com hackaday.com StrictHostKeyChecking no Tunnel yes
Novamente, se você não gosta da ideia de verificar a chave do host, apenas efetue login uma vez como root e aceite manualmente a chave remota. Ou, se você for corajoso, edite manualmente
/root/.ssh/known_hosts
.
Conexão
Tudo deve estar pronto para ir agora. Se você estiver usando o plugin do NetworkManager, você só precisa estabelecer uma nova conexão. Ou seja, você precisa ir para a seção de conexões VPN e selecionar SSH.

Selecionando o tipo de conexão
Agora você precisa configurar vários parâmetros da nova conexão. Incluindo - você precisa especificar o certificado que planeja usar para fazer login no sistema remoto.

Configurando a conexão
Depois de salvar as configurações de conexão, esta conexão pode ser ativada - como qualquer outra interface de rede. Se você quiser testar sua nova VPN - primeiro, normalmente, peça seu endereço IP no site dedicado . Em seguida, ligue a VPN e descubra seu endereço novamente. Se você não conseguir estabelecer uma conexão VPN, consulte o log do sistema para obter informações sobre erros de SSH.
Resultado
Existem outras soluções VPN, é claro. Mas é quase garantido que o computador remoto com o qual você está trabalhando tenha um servidor SSH. Portanto, o método proposto para estabelecer uma conexão VPN via SSH é uma solução simples e conveniente que pode ser utilizada sem qualquer preparação prévia.
A propósito, você pode fazer muitas coisas interessantes com o SSH . Por exemplo - para organizar o trabalho conveniente com arquivos .
Você usa VPN?

