Anteriormente, eu tinha meu PC de estação de trabalho doméstico exposto diretamente à Internet simplesmente definindo-o como o PC DMZ nas configurações do meu roteador e podia acessar todos os serviços que estava executando nele: SSH, Servidor Web, Área de Trabalho Remota, etc. Eu tinha DynDNS configurado e também possuo um domínio, com uma entrada DNS de subdomínio apontando para o IP externo do meu roteador, para que eu pudesse acessá-lo remotamente, qualquer porta, de qualquer lugar do mundo usando um nome fixo, seja home.mydomain.com
ou myuser.dyndns.com
. A vida era boa.
Agora mudei e meu novo ISP me colocou atrás de um CGNAT, ou seja, o endereço "externo" do meu roteador está na faixa 100.64.0.0/10, então não pode mais ser acessado de fora (e o DynDNS também está morto, mas isso é irrelevante ). ISP não fornece IPv6, infelizmente, e trocar de ISP não é uma opção na minha área.
Dito isso, minha empresa assinou recentemente um plano VPS para minha equipe, executando o Ubuntu 18.04, e tenho controle total sobre ele. Posso SSH para ele, instalar qualquer software, configurá-lo ao meu gosto. Atualmente, ele executa apenas SSH em uma porta não padrão e um pequeno serviço de API em uma porta personalizada, todas as outras portas (incluindo 80) estão disponíveis. Já configurei home.mydomain.com
como CNAME
entrada de DNS apontando para ele.
Então, qual é a melhor estratégia para usar esse novo recurso para finalmente ter meu PC de estação de trabalho doméstico exposto à Internet como era antes?
Ao pesquisar no Google sobre a evasão do CGNAT, li muito sobre túneis reversos SSH / proxy, SOCKS, servidores VPN, mas ainda não tenho certeza de qual é a melhor ferramenta e configuração para atingir o objetivo neste cenário.
Meus requisitos:
Código aberto, apenas software livre : claro, tenho controle total sobre o VPS, mas gostaria de manter a impressão digital extra do software no mínimo. Estou bem
apt install
com qualquer coisa de repositórios oficiais e talvez um repositório do github. Na minha estação de trabalho, também rodando o Ubuntu, posso instalar coisas mais obscuras.Soluções auto-hospedadas : Qualquer coisa que geralmente requer um serviço externo (pago ou não), como Serveo, LocalTunnel, OpenVPN, etc, gostaria de instalar sua versão de servidor no VPS. Não quero que meu tráfego seja encaminhado para outra empresa em que devo confiar.
Sem instalação de cliente (de preferência) : gostaria de acessar minha estação de trabalho de qualquer lugar, seja meu laptop, PC de um amigo, faculdade, trabalho, usando navegadores comuns, clientes SSH, clientes de Área de Trabalho Remota (RDP ou VNC), etc, software que geralmente já estão instalados ou geralmente disponíveis.
Sem furos de portas individuais (de preferência) : Deve ser como se minha estação de trabalho estivesse
home.mydomain.com
diretamente exposta à Internet. Tudo bem se eu tiver que "remapear" as portas, usando uma regra como porta remota = porta local + 10000 (para que o servidor da Web seja acessível na porta 10080), mas, caso contrário, gostaria que fosse o mais próximo possível de uma DMZ. possível.
O mais próximo que cheguei foi ssh [-R xx:localhost:yy]... home.mydomain.com
na estação de trabalho, usando uma série de portas predefinidas e configurando GatewayPorts yes
no VPS /etc/ssh/sshd_config
. É bom, mas acho que pode haver uma solução melhor. Seria incrível se a solução fosse baseada no domínio usado para acessar o VPS. Por exemplo, apenas encaminhar (todas) as solicitações se forem acessadas via home.mydomain.com
, e agir normalmente se forem acessadas viavps.mycompany.com