Internet do cliente em uma máquina virtual isolada QEMU usando encapsulamento de porta em um canal SPICE

A abordagem usual para conectar uma máquina virtual à Internet é semelhante à conexão de qualquer outro dispositivo à rede e consiste em conectar uma interface de rede real virtual ou probros, além de configurar e verificar conexões de rede, serviços, regras de roteamento e filtragem de tráfego, etc.


Se a máquina virtual for um servidor ou uma área de trabalho virtual e atribuída a um usuário específico, essa abordagem será totalmente justificada, mas e se a máquina virtual for uma área de trabalho virtual pública e alguém puder se conectar a ela gratuitamente?


É necessário garantir que a Internet na máquina virtual inicie não no lado do host, mas no lado do cliente.


A conexão de uma máquina virtual ao canal da Internet do cliente permitirá:


  • Reduza a carga computacional da emulação e da interface de rede.
  • Exclua a possibilidade de um ataque de hackers em uma máquina virtual da Internet e da rede virtual.
  • Liberte a responsabilidade do administrador do host pelas ações do usuário da máquina virtual nos seguintes casos:
    • Spamming
    • Faça o download / publique conteúdo ilegal / proibido,
    • Hacking ou ataque de hackers nos recursos da Internet do administrador de hospedagem, de terceiros,
    • Mineração
    • e assim por diante ...
  • Reduza o tempo para verificar e configurar o acesso à máquina virtual da Internet

A maneira mais fácil de obter a Internet do cliente é encaminhar o adaptador ou modem de rede USB. Mas esse método é muito exigente na qualidade da rede. Se a máquina virtual estiver localizada no exterior, é provável que haja atrasos e congelamentos.


Uma alternativa ao encaminhamento de dispositivos USB pode ser o tunelamento de portas entre o cliente e a máquina virtual através do canal SPICE, semelhante ao tunelamento de portas no SSH.


Nas máquinas virtuais QEMU, há um canal para transmitir dados do cliente para a máquina virtual, o chamado canal SPICE. Este canal transfere dados do dispositivo de entrada, conteúdo da área de transferência e muito mais.


Teoricamente, você pode encaminhar as portas locais do cliente (endereço IP 127.0.0.1) para a máquina virtual e organizá-las como locais.


Um exemplo de algoritmo para conectar-se ao canal da Internet de um cliente através do túnel de porta:


  • No lado do cliente, você pode criar um servidor proxy ou um servidor VPN que fornecerá acesso à rede.
  • No cliente SPICE, o encapsulamento de porta é configurado para que as portas do servidor Proxy ou VPN na máquina virtual pareçam portas locais.
  • No sistema operacional e no navegador, um subsistema Proxy local é configurado para conectar-se ao servidor Proxy por meio da porta local ou um cliente VPN é configurado para conectar-se ao servidor VPN no host local e emular um dispositivo de rede virtual (ajuste ou toque no caso do OpenVPN).

Implementação


Tudo o que precisa ser feito para tornar o encapsulamento de portas uma realidade é ajustar o código-fonte do cliente SPICE e dos complementos convidados do SPICE, formar patches e enviá-lo aos desenvolvedores. Tudo isso é possível porque o código fonte do SPICE está aberto.


Além disso, durante as negociações com os desenvolvedores do SPICE, verificou-se que essa funcionalidade foi implementada na bifurcação FlexVDI do SPICE. O código-fonte do fork é parcialmente publicado no repositório [ https://github.com/flexvdi ], e, segundo eles, existe um fragmento responsável pelo encapsulamento.


A gravação de conversas está disponível na lista de discussão Spice-devel , o tópico é " Sugestão de recurso: encapsulamento de porta entre VM e cliente pelo canal de especulação ".


Campo de aplicação


Essa tecnologia pode ser amplamente usada em máquinas virtuais públicas e de demonstração e em hospedagem VDI comum.


Se alguém desejar ajudar a implementar essa funcionalidade, você poderá implementá-la e criar patches.Se você tiver algum comentário ou sugestão, deixe-o.

Source: https://habr.com/ru/post/pt430592/


All Articles