Multipass "exec failed: ssh connection failed" ve IP Alamama Hatası
Multipass sanal makinelerinizi oluşturduğunuzda IP adresi alamıyor ve shell
komutu kullandığınızda "exec failed: ssh connection failed: 'Timeout connecting to <name>.mshome.net
" hatası alıyorsanız çözüme hoşgeldiniz.
Multipass ile bir sanal makine oluşturduğunuzda o sanal makineye bir de network adapter atanır. --network
parametresi ile özel bir adapter'ı belirleyebilirsiniz fakat her iki durumda da sanal makine bir adapter eklenmiş oluyor. Bunu Hyper-V üzerinden kontrol edebilirsiniz.
Peki sanal makinemize bir adapter atanıyorsa neden makinemiz bir IP alamıyor ve makinemize exec
, shell
gibi komutlarla erişemiyoruz?
Bu sorunun cevabını anlayabilmek için öncelikle sanal makineye atanan adapter'ın subnet aralığını kontrol edelim.
Sanal makinenin kullandığı subnet aralığını öğrendikten sonra artık bu aralığı route table'da kontrol edebiliriz.
Subnet aralığımıza denk gelen iki adet route kuralı görüyoruz. Bu iki kuraldan On-link yani (0.0.0.0
) olan, sanal makinemize atadığımız Default Switch adapter'a ait. Öyleyse ikinci kural nereden geliyor?
Adapterlarımıza Denetim Masası veya Get-NetAdapter
komutu ile baktığınızda bir de VPN adapter olduğunu görebilirsiniz. İşte diğer tüm adapterlarımız içinde gelen ekstra route kuralı sisteminizde kurulu olan VPN dapter sebebiyle ekleniyor.
Bilgisayarınızdaki tüm network trafiği VPN adapter'ın metric değeri daha düşük olduğu için öncelikle bu adapter'a yönlendiriliyor.
Bu sebeple de multipass, sanal makinelerinize erişmek için VPN adapter'a yönlendirilmiş oluyor ve ilgili sanal makineleri bulamıyor. Haliyle sizde exec ve shell gibi komutlar kullandığınızda sanal makineye erişememiş oluyorsunuz.
Bunu düzeltmek için sanal makinemizin kullandığı route table girdisindeki metric değerini (271
), VPN adapter'ın kullandığı metric değerinden (8
) daha düşük bir değere (örneğin 5
) değiştirebilirsiniz. Veya diğer kesin bir çözümde VPN adapter'a yönlendiren route kuralını silmek.
Kendi adapter'ınızın metric değerini değiştirebilmek veya diğer adapter'ın kuralını silmek için önce o adapterların ID numarasını bulmalısınız. Bunun için route print
, Get-NetAdapter
veya Get-NetIPAddress
komutunun çıktısındaki ifIndex
değerini kullanabilirsiniz.
Ardından route change
veya route delete
komutu ile route kuralınızın metric değerini VPN adapter'ın route kuralından daha düşük bir değere çekebilir veya VPN adapter'ın kuralını tamamen silebilirsiniz.
route CHANGE 172.30.240.0 MASK 255.255.240.0 0.0.0.0 METRIC 5 IF 25
route DELETE 172.30.240.0 MASK 255.255.240.0 10.48.248.1 IF 7
Ben ikinci tercih olan VPN adapter route kuralını silmeyi tercih ediyorum. Ve route print -4
komutu ile route table'a bakarak silindiğini teyit ediyorum. Ardından multipass exec
komutunu ve sanal makinenin IP alıp aldığını multipass list
komutu ile test edebilirim.
Süper! Artık tüm sorunlar çözülmüş bir şekilde multipass kullanmaya başlayabilirsiniz.