Multipass "exec failed: ssh connection failed" ve IP Alamama Hatası
3 min read

Multipass "exec failed: ssh connection failed" ve IP Alamama Hatası

Multipass "exec failed: ssh connection failed" ve IP alamama hatasını çözüyoruz.
Multipass "exec failed: ssh connection failed" ve IP Alamama Hatası
Photo by Sigmund / Unsplash

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
💡
IF parametresinin aldığı değerler adapterların ifIndex değerleridir. Powershell üzerinden Get-NetIPAddress komutu ile baktığınızda hem ip aralığını hemde adapter index değerini kolaylıkla bulabilirsiniz.

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.