Como acessar, via SSH, uma VM guest em execução no Hyper-V a partir do WSL2

Publicado por Rafael Zonzini em 11/02/2021

[ Hits: 4.099 ]

 


Como acessar, via SSH, uma VM guest em execução no Hyper-V a partir do WSL2



Um SO rodando no WSL2, por padrão, não consegue comunicar com uma VM rodando no Hyper-V. Por exemplo, a partir de um Linux no WSL2 não é possível disparar ping contra um outro Linux hospedado no Hyper-V ou mesmo acessá-lo por SSH.

Uma causa pode ser o encaminhamento de pacotes (forwarding) desabilitado na interface e no switch virtual que atende ao WSL2.

Para verificação, se usarmos o netsh dump para consultarmos as configurações de rede aplicadas no Windows, é possível observar que todas as interfaces estão com o forwarding habilitado - forwarding=enabled (no exemplo estou usando o PowerShell mas o mesmo acontece usando o CMD):

PS C:Usersuser-name> netsh dump

# ----------------------------------
# Configuração de IPv4
# ----------------------------------
pushd interface ipv4

reset
set global icmpredirects=enabled
add route prefix=0.0.0.0/0 interface="Ethernet" nexthop=10.67.61.1 publish=Sim
set interface interface="Conexão Local* 2" forwarding=enabled advertise=enabled nud=enabled ignoredefaultroutes=disabled
set interface interface="VirtualBox Host-Only Network" forwarding=enabled advertise=enabled nud=enabled ignoredefaultroutes=disabled
set interface interface="Conexão de Rede Bluetooth" forwarding=enabled advertise=enabled nud=enabled ignoredefaultroutes=disabled
set interface interface="Wi-Fi" forwarding=enabled advertise=enabled nud=enabled ignoredefaultroutes=disabled
set interface interface="Ethernet" forwarding=enabled advertise=enabled nud=enabled ignoredefaultroutes=disabled
set interface interface="Npcap Loopback Adapter" forwarding=enabled advertise=enabled nud=enabled ignoredefaultroutes=disabled
set interface interface="Conexão Local* 3" forwarding=enabled advertise=enabled nud=enabled ignoredefaultroutes=disabled
set interface interface="vEthernet (NATSwitch)" forwarding=enabled advertise=enabled nud=enabled ignoredefaultroutes=disabled
set interface interface="Conexão Local* 1" forwarding=enabled advertise=enabled nud=enabled ignoredefaultroutes=disabled
set interface interface="vEthernet (Default Switch)" forwarding=enabled advertise=enabled nud=enabled ignoredefaultroutes=disabled
set interface interface="vEthernet (WSL)" forwarding=enabled advertise=enabled nud=enabled ignoredefaultroutes=disabled
add address name="vEthernet (NATSwitch)" address=192.168.0.1 mask=255.255.255.0
add address name="Ethernet" address=10.67.61.138 mask=255.255.255.0
add address name="vEthernet (Default Switch)" address=172.25.48.1 mask=255.255.240.0
add address name="vEthernet (WSL)" address=172.30.64.1 mask=255.255.240.0


popd

A confirmação da situação virá quando confrontarmos a saída do netsh dump com a saída do comdlet Get-NetIPInterface do PowerShell. No exemplo abaixo, para facilitar a nossa análise, estamos filtrando a saída do Get-NetInterface para que sejam exibidas, em ordem crescente da identificação do objeto e em formato de tabela, algumas propriedades específicas dos objetos.

PS C:Usersuser-name> Get-NetIPInterface | select ifIndex,InterfaceAlias,AddressFamily,ConnectionState,Forwarding | Sort-Object -Property IfIndex | Format-Table

ifIndex InterfaceAlias        AddressFamily  ConnectionState  Forwarding

  1     Loopback Pseudo-Interface 1   IPv6   Connected        Disabled
  1     Loopback Pseudo-Interface 1   IPv4   Connected        Disabled
  9     Conexão Local* 2              IPv6   Disconnected     Disabled
  9     Conexão Local* 2              IPv4   Disconnected     Disabled
  12    Conexão Local* 3              IPv4   Disconnected     Disabled
  12    Conexão Local* 3              IPv6   Disconnected     Disabled
  14    Conexão de Rede Bluetooth     IPv4   Disconnected     Disabled
  14    Conexão de Rede Bluetooth     IPv6   Disconnected     Disabled
  17    vEthernet (NATSwitch)         IPv4   Connected        Enabled
  17    vEthernet (NATSwitch)         IPv6   Connected        Enabled
  20    Wi-Fi                         IPv4   Disconnected     Disabled
  20    Wi-Fi                         IPv6   Disconnected     Disabled
  26    Ethernet                      IPv4   Connected        Enabled
  26    Ethernet                      IPv6   Connected        Enabled
  29    vEthernet (Default Switch)    IPv4   Connected        Disabled
  29    vEthernet (Default Switch)    IPv6   Connected        Disabled
  75    vEthernet (WSL)               IPv6   Connected        Disabled
  75    vEthernet (WSL)               IPv4   Connected        Disabled



Observe que existe uma diferença no estado do forwarding das interfaces vEthernet (WSL) e vEthernet (Default Switch) exibidos nos comandos netsh dump e Get-NetIPInterface.

Como o Linux em execução no WSL2 está associada a interface vEthernet (WSL) e Linux no Hyper-V está conectado ao switch virtual vEthernet (Default Switch), basta habilitarmos o forwarding nessas duas interfaces.

Para fazer isso, precisamos de permissão elevadas. Então, executando o PowerShell como super usuário, vamos usar o cmdlet Set-NetIPInterface para habilitar o forwarding das interfaces desejadas que, neste exemplo, são identificadas pelo ifIndex 29 e 75:

PS C:Usersuser-name> Set-NetIPInterface -ifIndex 29 -Forwarding Enabled
PS C:Usersuser-name> Set-NetIPInterface -ifIndex 75 -Forwarding Enabled

Para testar, vamos acessar o host ubuntu02 (em execução no Hyper-V) por SSH a partir do host ubuntu00 (em execução no WSL2) e também disparar um ping nesse mesmo sentido:

ssh root@ubuntu01
ping -c 1 ubuntu01
PING ubuntu01 (192.168.0.21) 56(84) bytes of data.
64 bytes from ubuntu01 (192.168.0.21): icmp_seq=1 ttl=63 time=0.491 ms

--- ubuntu01 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.491/0.491/0.491/0.000 ms


Outras dicas deste autor
Nenhuma dica encontrada.
Leitura recomendada

SSH pelo gerenciador Dolphin

Adicionando rotas de forma massiva a partir de um arquivo

Ferramentas para administradores de redes

Como configurar proxy no Google Chrome para Linux

Evitando login simultâneo FreeRADIUS MySQL PPPoE

  

Comentários
[1] Comentário enviado por maurixnovatrento em 11/02/2021 - 13:52h


Muito bom cara. Legal.

___________________________________________________________
[code]Conhecimento não se Leva para o Túmulo.
https://github.com/MauricioFerrari-NovaTrento [/code]



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts