かつて山市良と呼ばれたおじさんのブログ
セイテクエンジニアのブログ かつて山市良と呼ばれたおじさんのブログ vol.243 静的IPインジェクションのLinux向け代替策|Hyper-V 小技・裏技集
2026年10月19日配信
2026年10月19日更新
執筆者:山内 和朗
「Hyper-V小技・裏技集」シリーズでは、Hyper-Vの仮想環境を利用していて、知っていると便利な小技や裏技を紹介します。前回は、Hyper-Vが昔から備えている「静的IPインジェクション(Static IP Injection)」機能を紹介しましたが、この機能、Windowsゲストではうまく機能しますが、Linuxゲストでは機能しないことがあります。今回はその代替策を紹介。
前回説明したように、Linuxゲストに対してStatic IP Injectionが機能するためには、対象のVMで統合サービスの「データ交換」が有効になっていて、さらに対応するディストリビューションおよびバージョンであることと、hv-kvp-daemon(linux-cloud-tools-*)またはhypervkvpd(hyperv-daemons)の導入が必要です。しかし、すべての条件を満たしていても、必ず期待通りに動作するというわけではありません。前回はAlmalinux 9.xで動作を確認しましたが、Almalinux 10.xでは成功しませんでした。また、UbuntuはStatic IP Injectionに対応しており、古いバージョンでは問題なく動作していましたが、最近のバージョンでは動作を確認できませんでした(Static IP Injectionと互換性のないNetwork Managerの有無に関係なく)。
そこで、Copy-VMFileとSSH Remoting(vol.237を参照)を使用して、PowerShellスクリプトをリモート実行してIPアドレスを設定する代替策を考えました。なお、SSH Remotingのためには、Hyper-VホストとLinux VMの両方にPowerShell 6以降が必要で、Linux VM側のOpen SSH ServerでSSH Remotingの設定と、sudo pwshをパスワードなしで実行できるようにするための設定(sudo visudoによるsudoersの編集)の設定が必要です。
次の「Set-UbuntuIP.ps1」は、UbuntuのローカルのPowerShell(pwsh)で-Interface、-IPAddress、-PrefixLength、-Gateway、-DNSServersの各パラメーターを指定して実行することで、ネットワーク周りの設定を変更します。このスクリプトは、SSH Remotingを使用してネットワーク経由でリモートから実行することを想定しています。つまり、ネットワーク設定の変更でSSH Remotingの接続が切断されることを想定し、netplanの適用を2秒後にスケジューリングしてから終了するようにしています。
[Set-UbuntuIP.ps1](プレーンテキストでダウンロード)
PowerShellスクリプト「Set-UbuntuIP.ps1」をHyper-Vホスト側で用意し、次のようにCopy-VMFile(VMの統合サービスの「ゲストサービス」が有効で、Linux側にhv-fcopy-daemonまたはhypervfcopydが必要)を使用してHyper-VホストからLinuxゲストにスクリプトをコピーし、SSH Remotingを使用して「Set-UbuntuIP.ps1」を適切なパラメーター付きで実行します(画面1)。
|
Copy-VMFile -Name "VM名" -SourcePath ".\Set-UbuntuIP.ps1" -DestinationPath "/tmp" -FileSource Host -Force Invoke-Command -Hostname "ホスト名またはIPアドレス" -UserName ユーザー名 -ScriptBlock { sudo pwsh -File /tmp/Set-UbuntuIP.ps1 -Interface eth0 -IPAddress IPアドレス ` |

画面1 Copy-VMFileとSSH Remotingを使用した、PowerShellスクリプトによるLinux VM(Ubuntu)のネットワーク設定の変更
リファレンス(Microsoft Learn):
Copy-VMFile(Hyper-V)|SSH Remoting(PowerShell)
Hyper-V 小技・裏技集 (1)|(2)|(3)|(4)|(5)|(6)|(7)|(8)|(9)|(10)|(11)|(12)