Introdução
O aumento da demanda pelas letras mágicas da VPN e seus motivos, longe das tecnologias de rede, não é de todo interessante.
Oi, você é bom em computadores? me ajude sobre vpn?
De fato, fico feliz que as pessoas comecem a aprender o básico sobre redes de computadores (o que é vpn, o que acontece e por que sites diferentes começam a se abrir com ele?) E, se possível, ajude. Eu tento insistir nos processos de autoconfiguração dos meus próprios servidores VPN, mas entendo que nem todo mundo é um administrador de sistemas , então alguns amigos apenas sugerem a compra de um servidor e a entrega para configuração.
Mas qualquer programador deve ser preguiçoso para não repetir a mesma coisa repetidamente. A execução repetida das mesmas ações aprimora as habilidades, mas mata todo o interesse do desenvolvimento e da criatividade (e do tempo).
E assim, ao configurar o terceiro servidor VPN, percebi que era necessário automatizar tudo isso e tornar o usuário mais amigável , para que, após uma breve instrução, até o usuário mais comum pudesse compartilhar a chave ovpn com um amigo ou parente. E ainda melhor - para instalar o sistema, o usuário poderia independentemente com o mínimo de habilidades e conhecimentos.
Assim, o projeto VPNFace nasceu - um conjunto de scripts de servidor para gerenciar chaves de usuário de servidores OpenVPN e um painel de controle da web para eles. E depois de alguns dias de desenvolvimento, me peguei pensando que algo em torno de 25% da funcionalidade a ser estabelecida nunca será reivindicada por esse mesmo "usuário comum", e o prefixo Lite foi adicionado ao nome, e o conceito principal do projeto mudou de um designer de uso geral para um intolerante. ferramenta , que ao mesmo tempo também reduziu significativamente o tempo de desenvolvimento antes do lançamento.
Claro - bem, nunca aconteceu assim - por que outro gerente do OpenVPN? Para ser honesto - o pensamento de outros projetos de gerentes de VPN veio à minha mente quando o núcleo principal já estava funcionando, e eu vi todo tipo de pequenas coisas. No começo, fiquei chateado por ser tão estúpido e nem sequer realizar um estudo mínimo (já que não gosto de produzir bicicletas), mas depois de estudar os projetos acima, percebi que o meu também tem seu próprio nicho.
Principais recursos:
- Minimalismo funcional: um usuário comum, ao interagir com a VPN como administrador, requer apenas algumas funções - crie uma chave, bloqueie e desbloqueie. É improvável que ele pense em criar outro servidor VPN, se ele tiver um servidor em funcionamento, ou em escalar para alterar os dados do centro de certificação. Poucas pessoas precisarão de belos gráficos de tráfego e da funcionalidade do servidor corporativo, com o objetivo de usar calmamente um telegrama .
- Minimalismo de software: o único programa que o usuário precisa é o cliente oficial do OpenVPN, disponível em todos os sistemas e dispositivos. O painel de controle principal é um aplicativo da web em execução em um navegador. A autorização administrativa é realizada pela chave vpn.
- Configuração semi-fixa: 80% dos usuários precisam da mesma coisa e não se importam com os endereços IP nas redes (nem sabem que estão lá), outros 15% exigem um pouco mais, mas, da mesma forma, um e o mesmo Além disso, os 5% restantes escrevem coisas semelhantes, implementando tudo o que precisam, para que você não se preocupe. No entanto, o painel pode ser conectado manualmente aos servidores já abertos, ou corrigir os dados do certificado antes da instalação padrão.
- Desapego absoluto a empresas de hospedagem ou outros serviços de terceiros - existem muitas cópias quebradas em disputas sobre a hospedagem mais mágica, isso permanece inteiramente à escolha do usuário. O sistema operacional do servidor é mais importante para o script - ele é escrito nos sistemas Ubuntu / Debian, mas todos os hosts possuem. O sistema permanecerá calmo tanto na rede doméstica interna quanto na corporativa.
- o processo de instalação mais simplificado em um servidor limpo e recém adquirido: se algo pode ser feito sem a participação do usuário, isso é feito usando o código rígido. Porque Lite. Sim, não foi possível obter o instalador como o Google Outline, ele requer uma conexão do usuário via ssh para iniciar a instalação e uma compra independente do servidor, mas foi possível obter conhecimento de "como conectar via ssh" foi um dos mais difíceis dos necessários. Com a "configuração padrão", o usuário é configurado com uma configuração "padrão" sem nenhuma pergunta.
Painel de controle chave
Durante uma instalação padrão, três servidores VPN são criados: administrador, Internet e escuro - não é difícil adivinhar pelos nomes, o primeiro serve para acesso de administrador ao servidor e o painel de controle principal (e ssh, se necessário), o segundo - libera os usuários imediatamente para a Internet, e o terceiro, transparente, leva todo o tráfego possível para a rede tor (o tráfego udp, exceto o DNS não vai a lugar nenhum, e o DNS vai ao tor)

Decidiu-se que o painel de controle fosse feito em um sexto AngularJS novo ( durante a instalação, uma versão compilada do painel é baixada, para que as bibliotecas angulares não sejam necessárias para o trabalho ). Gosto do conceito de aplicativos da web e tento me desenvolver nessa direção, se possível. Eu também queria estudar materiais angulares por um longo tempo para criar painéis de administração do Google em vários projetos.
O gerenciamento de chaves, como já indicado, é simplificado ao mínimo:
Nova chave:

Bloqueio de chave:

Desbloqueio da chave:

O botão de download fornece o arquivo ovpn finalizado para conexão.
A ajuda mínima do usuário está embutida no painel:

E a documentação compilada está incluída no projeto, que por padrão aumenta para a sub-rede administrativa na porta 81:

O significado da versão Lite também limitava o suporte ao idioma - no momento, todo o projeto existe apenas em russo, e o multilinguismo nem é definido no kernel.
Lado do servidor
O lado do servidor é executado nos scripts nodejs e bash. Por que um nó? Eu gosto dela e tenho muitos projetos nela. Ter uma coleção de vpn-manager parecia uma boa ideia para mim. O script de instalação puxa o gerenciador de versão do nó , instala o nó v10 por meio dele e cria um link para a pasta de todo o sistema para que os serviços gravados em nodejs funcionem.
Os pacotes instalados no nó também são mínimos - para sempre, para sempre - para lançar o projeto como um serviço do sistema, express - para web api, shelljs - para executar comandos do console, ip - endereço e calculadora de sub-rede, giz - saída de cores para o console. Obviamente, essa lista pode ser reduzida com o perfeccionismo do minimalismo, mas a segunda lei de Akin nasceu claramente do nada (a mesma lei pode ser aplicada à pergunta "por que nodejs?") E algumas outras) e apesar do desejo de minimalismo em outras questões, aqui Eu decidi não ir fundo.
O script do servidor gerencia os servidores openvpn por meio de um conjunto de scripts bash e requer uma estrutura de arquivo de diretório raiz específica e uma configuração de arquivo openvpn. Dois arquivos json são usados como um banco de dados, o que permite:
- Livre-se da interação com bancos de dados como mongo / sql e dependências e complicações relacionadas
- sem problemas, prepare as "bases" (e a estrutura de diretórios e arquivos) manualmente ou por script, ao instalar em um servidor ativo configurado, quando o instalador incluído no kit pode até ser prejudicial e o processo de instalação padrão deve ser evitado (a necessidade de instalação é verificada com precisão quanto à presença e ao conteúdo de json arquivos de banco de dados)
Um bônus separado do painel de controle como um aplicativo da web independente foi a separação da funcionalidade do servidor em um conjunto separado de terminais http api, o que abre a possibilidade de gerenciar chaves do usuário por meio de solicitações http de terceiros para programas de terceiros.
Instalação fácil (padrão)
Supõe-se que essa instalação seja executada em servidores novos e limpos. Se o servidor já estiver configurado para algumas tarefas - é melhor consultar a instalação manual (para não danificar a funcionalidade existente).
Gosto da instalação do nvm (gerenciador de versão do nó), no qual o usuário precisa executar apenas um comando no terminal, que ele copia do site do projeto, para que o instalador padrão funcione da mesma maneira. Enquanto o script bash da instalação de inicialização estiver em execução, o pacote iptables-persistent solicitará que o usuário salve as regras atuais do iptables.

A escolha do usuário não faz nenhuma diferença, pois após a conclusão da instalação, a última ação reconfigurará o firewall e o novo conjunto de regras substituirá a seleção atual. No final do trabalho, o script solicitará que você conclua a instalação pela interface da web.

A instalação na Web começa com a confirmação do endereço IP público do servidor. Por padrão, o script da web obtém dados do URL da string do navegador. Focalizando neste IP, o código do servidor procura a interface de endereço de rede para a futura configuração dos servidores firewall e openvpn.

Após receber os dados da rede, o instalador cria um servidor vpn administrador. A geração de chaves criptográficas durante a configuração do diretório raiz leva algum tempo e, durante o desenvolvimento, na mesma máquina, esse tempo varia de 1 a 15 minutos.
Quando o servidor é criado e iniciado, o instalador prossegue para a segunda etapa, onde solicita ao usuário que crie uma chave de administrador.

Em seguida, entra no modo de espera para conectar o administrador VPN. Espera-se que o vpn seja conectado no mesmo dispositivo a partir do qual a instalação é realizada.

Quando um usuário se conecta ao servidor VPN do administrador, ele fica disponível no endereço 10.1.0.1, e uma solicitação jsonp da página do instalador passa com êxito para lá, o que se torna um sinal para redirecionar a página para o endereço interno e concluir a instalação.

No estágio final da instalação, os dois servidores vpn restantes são criados e configurados (hora de gerar criptografia * 2), tor, nginx e iptalbles. Após o recebimento de um sinal para concluir a instalação do lado do servidor, o script redirecionará a página para o painel de controle principal.
Instalação manual
A instalação manual do painel de controle em uma estrutura de servidor OpenVPN funcional exige várias etapas e é tecnicamente viável por um administrador Linux (e não acho que alguém que não seja o usuário precise de uma instalação manual):
- preparação do ambiente nodejs de acordo com os requisitos da segurança atual do servidor e organização do script no formulário necessário (serviço, manual, etc.)
- preparando a estrutura de arquivos dos diretórios de dados e servidor, criando "bancos de dados" json
- configurando o proxy nginx no painel de controle e na documentação, se necessário
Detalhes e detalhes técnicos podem ser encontrados na documentação online .
Em conclusão
Espero que o projeto seja útil para alguém.
Repositório do projeto
Repositório de código-fonte angular do painel da web
O projeto é distribuído sob a licença do MIT e publicado em apoio ao movimento DIGITAL RESITANCE.
PS Idéias de desenvolvimento acima do teto - e aperte o multilinguismo, se livre de momentos codificados no código e adicione funcionalidade para criar servidores, gerenciar roteamento e firewall, transformar o sistema em um designer universal etc. etc., mas como e quando tudo isso será implementado? Sem uma pista, o futuro será mostrado.