記事検索

検索ワードを入力してください。
Sky Tech Blog
Hyper-V上の​Default Switchの​仮想マシンに​ホスト名で​SSH接続する​方​法

Hyper-V上の​Default Switchの​仮想マシンに​ホスト名で​SSH接続する​方​法

Hyper-VのDefault Switchに接続されたLinux仮想マシンのIPアドレスが再起動のたびに変わる問題を回避し、「mshome.net」を利用して固定のホスト名でSSH接続する方法とその注意点について解説します。

はじめに

Hyper-Vの仮想マシンにはネットワーク接続を提供する仮想スイッチが接続できます。
仮想スイッチについては以下の記事でわかりやすく解説されています

その仮想スイッチの1つである「Default Switch」を接続した仮想マシンは起動するたびにIPアドレスが変更されてしまうため、ホストマシンからSSH接続を行う際に、都度IPアドレスを確認する手間が発生します。

仮想マシンがWindowsの場合であれば、ホストマシンのPowerShellから以下のコマンドを実行することで、IPアドレスの情報を取得することができます。

Get-VMNetworkAdapter -VMName "仮想マシン名"

しかし、仮想マシンがUbuntuなどのLinux OSの場合、このコマンドではIPアドレスを特定できません。
ホストマシンからLinux仮想マシンに自動でSSH接続するバッチやスクリプトを作成したい場合、別途「内部スイッチ」を作成し仮想マシンに固定IPアドレスを割り当てる必要があります。

mshome.net を​利用した​ホスト名に​よる​名前解決

この問題を解決する方法として、"仮想マシンのホスト名".mshome.net という形式でホスト名を指定することで、固定のホスト名で仮想マシンにSSH接続することが可能になります。

ssh "ユーザー名"@"仮想マシンのホスト名".mshome.net

mshome.net とは、Windowsの「インターネット接続共有 (ICS : Internet Connection Sharing)」機能によって、ローカルネットワークの名前解決のために自動的に生成・利用される特別なドメインサフィックスです。

この mshome.net が付いた名前解決の情報は
C:\Windows\System32\drivers\etc\hosts.ics というファイルに書き込まれています。
仮想マシンが起動しIPアドレスが割り当てられたタイミングで、ホストOSは hosts.ics にその仮想マシンのホスト名とIPアドレスの対応関係を自動的に書き込みます。
これにより仮想マシンのホスト名とIPアドレスの関係が自動更新されるため、SSH接続が可能になります。

注意点

hosts.ics の​データ不整合

hosts.ics ファイルに正しく仮想マシンのホスト名とIPアドレスが書き込まれていない場合があり、名前解決できない場合があります。
hosts.icsには以下のように通常のhostsファイルと同じ形式でホスト名とIPアドレスの対応関係が記載されています。

"IPアドレス" "仮想マシンのホスト名".mshome.net

名前解決ができない場合、該当の仮想マシンのレコードがなかったり、古いままであることがあります。

ics 拡張子に​ついて

ics拡張子のファイルはiCalendarというカレンダーアプリ用のデータ形式のファイルとみなされます。
そのためhosts.icsをダブルクリックで開こうとすると、Outlookなどのアプリで開かれてしまう可能性があります。
hosts.icsの中身はテキストのため、確認したい場合はメモ帳などで開くことをおすすめします。

hosts.ics ファイルの​手動変更は​厳禁

hosts.ics ファイルには、以下の文章が記載されています。

# This file has been automatically generated for use by Microsoft Internet
# Connection Sharing. It contains the mappings of IP addresses to host names
# for the home network. Please do not make changes to the HOSTS.ICS file.
# Any changes may result in a loss of connectivity between machines on the
# local network.

【和訳】

# このファイルは、Microsoftインターネット接続共有(ICS)によって自動的に生成されました。
# ホームネットワーク上のホスト名とIPアドレスのマッピング情報が含まれています。
# HOSTS.ICSファイルは手動で変更しないでください。
# 変更を加えると、ローカルネットワーク上のマシン間の接続が失われる可能性があります。

文章によるとネットワーク接続に問題が生じる可能性があるため、手動で編集はしない方がよさそうです。
データの不整合が起きた場合の解決策の1つとしては、仮想マシンを再起動してhosts.icsを更新させることが挙げられます。

まとめ

Hyper-VのDefault Switchを接続した仮想マシンは再起動の度IPアドレスが変更されてしまうためバッチファイルなどで固定IPを指定した接続はできません。
しかし、mshome.net を付けた仮想マシンのホスト名とIPアドレスの関係が自動更新されるため、ホスト名.mshome.netとすることで接続が可能になることを解説しました。
本記事が皆様の開発の一助となれば幸いです。


\シェアをお願いします!/
  • X
  • Facebook
  • LINE
キャリア採用募集中!

入社後にスキルアップを目指す若手の方も、ご自身の経験を幅広いフィールドで生かしたいベテランの方も、お一人おひとりの経験に応じたキャリア採用を行っています。

Sky株式会社のソフトウェア開発や製品、採用に関するお問い合わせについては、下記のリンクをご確認ください。
お問い合わせ
ホーム