ホストの VPN 接続で Hyper-V ゲストの DNS が失われる
ゲスト VM はホストのトンネルを継承しません。スイッチか NAT のモードを確認し、提供されている場合は VPN アダプターを共有し、提供されていない場合はポートを転送します。
今朝までゲストは正常でした。そこへホストが Cisco AnyConnect を起動すると、VM は内部が何も変わっていないのに DNS、ドメイン信頼、共有フォルダーを失いました。ホストのトンネルとゲストのネットワークは別の経路であり、片方をつないでも他方は動きません。ゲストの内側から外側へ調べ、変更する前に見たことを書き留めてください。
ゲストにまだ見えるもの
VM でアドレス、デフォルトゲートウェイ、リゾルバーを、ホスト接続前と接続後に一度ずつ記録します。アドレスを保ち名前解決だけを失ったゲストはリゾルバーの問題です。経路を一度も持たなかったゲストは経路の問題であり、両者は別の作業を要します。ホスト側からは区別できないため、読み取りは内側から行う必要があります。
その三つの読み取りを二回取ったものが基準線です。以降はすべてそれと比較します。
ゲストが使っている出口
Hyper-V はこれを二つのコマンドで答えます:Get-VMSwitch はスイッチを一覧し、Get-VMNetworkAdapter -VMName TestVM はゲストが接続しているスイッチを示します。Default Switch は Windows が管理する NAT ネットワークで、外部スイッチはトラフィックを物理アダプターへ渡し、内部スイッチは誰かが NAT かルーターを追加するまで何も運びません。VirtualBox も同じ三つの考えを NAT、NAT Network、bridged として提示します。
モードが、ホストのトンネルがそもそも関係するかを決める。NAT ゲストは WinNAT で変換され、ホストのスタックで転送されるため、ホストの経路テーブルに従い、フルトンネルのクライアントではその通信が VPN アダプターに入る通信そのもので、クライアントがローカルサブネットを遮断すると破棄されます。外部スイッチ上のブリッジゲストはホストのルーティングにまったく届かず、フレームは物理 NIC から直接出るため、トンネルとクライアントのローカル LAN ポリシーの両方を回避します。
ホストのトンネルを Hyper-V と共有する
ゲストにトンネルが必要で、独自のクライアントを実行できない場合、Windows は VPN 接続を共有できます。VPN アダプターのプロパティを開き、共有に進み、他のネットワークユーザーに経由接続を許可します。ホームネットワーク接続を Hyper-V アダプターに向け、vEthernet (Default Switch)、その後でゲストの内側から新しい要求を試します。
この構成は、実際にそう振る舞うため、実験室向けの対処として扱ってください。切断、再接続、ホストの再起動のたびに再適用が必要です。一部の Windows 11 ビルドではアダプターがドロップダウンにまったく現れず、その場合はこの経路は閉ざされます。
Hyper-V 機能の再インストールで救われた頑固なゲストもいます。それは最後に回し、まずゲストの状態を記録してください。
サブネットがフィルターされる場合のポート転送
ゲストの NAT サブネットをフィルターするホスト VPN は、名前解決ではなく直接アクセスを壊します。VM は動作しているのに ssh [email protected] が固まり、ハイパーバイザーの変換はまだ機能しています。作業に必要なポートを転送し、代わりにホストのアドレスへ接続します。以下の Vagrantfile の行は SSH と一つの HTTPS サービスを対象にしており、どちらも再読み込みの前に追加します。
config.vm.network "forwarded_port", guest: 22, host: 22
config.vm.network "forwarded_port", guest: 3443, host: 3443名前解決は別の判断であり、独自の修正に値します。その NAT アダプターに対してホストのリゾルバー機能を有効にするか、ゲスト内の内部 DNS サーバーを手動で構成します。ゲストを公開リゾルバーに向けるとブラウジングは動きますが、あらゆる内部名が壊れ、成功に見えるぶん障害より悪い状態です。内部リゾルバーだけが知る名前で試してください。
うまくいったことを示す確認
これらの変更のあとは、ホスト VPN を接続した状態で、その前にではなくゲストの内側から新しい要求を実行します。どちらか一方しか耐えない修正は修正ではないため、再接続後と再起動後に共有を再確認してください。ゲストのリゾルバー一覧が、実際に通信が使うネットワークと一致することを確認します。ゲストから試しても何も証明にならないため、次にホストのアドレスからポート転送を試します。ゲストの内側から、二つの PowerShell 確認がリゾルバーと転送ポートを対象にします:
Resolve-DnsName intranet.corp
Test-NetConnection 192.0.2.10 -Port 22スイッチやドライバーの変更は、元に戻す手順とともに記録します。Microsoft の Hyper-V NAT ガイド は Default Switch が実際に何かを説明しており、それと競合する二つ目の NAT ネットワークを作る前に読む価値があります。