TL; DR:
- その間、ホストのVPNステータス(接続または切断)が変化しないことを確認してVMを再起動します。
- VirtualBox NATエンジンにDNSリクエストをインターセプトさせ、それらをホストのリゾルバーに転送します。つまり、ホストのDNS APIを使用して情報を照会し、ゲストに返します。これを設定するには:
VBoxManage modifyvm "VM name" --natdnshostresolver1 on
VPNに接続されたホストでVMを実行すると、VPNステータスが変化するたびにDNSの問題が発生する可能性があります。2つのシナリオがあります。
- VMはVPN接続されたホストで生成され、特定の時点でVPNが切断されます。
- VPNに接続されていないホストでVMが生成され、特定の時点でVPNが接続する
1)VPN接続-> VPN接続解除
この場合、VMはおそらくVPNプロバイダーネットワークの一部であるDNSアドレスを受信しています。これは通常、内部プライベートIPアドレスです。の内容を確認してくださいcat /etc/resolv.conf
。私の場合、私は以下を得ます:
nameserver 10.8.8.1
<---これはVPNプロバイダーネットワークの内部にあります
nameserver 192.168.178.1
<---これは私のホームゲートウェイ(ルーター)です
次に、ホストをVPN接続から切断します。
- VMのDNS構成は変更されません-> VMはDNSリクエストを宛先IP 10.8.8.1に送信し続けますが、ホストがVPNに接続されていないため到達できません
詳細:
- パケットは、VirtualBox NATネットワークによって定義されたdef GWに送信され、送信元NATTされ(ホストIPアドレスを使用)、最終的にはホームゲートウェイに転送するホストのルーティングテーブルによって処理されます。
- ここでは、ホームゲートウェイにLAN側(プライベートアドレス)に10.8.8.1のエントリがなく、WAN側(パブリックアドレス)にプライベートアドレスとして転送できないため、パケットはドロップされます。
2)VPN接続解除-> VPN接続
この場合、VMの起動時にホストがVPNに接続されていなかったため、VMはVPNネットワークプロバイダーの一部であるDNSアドレスを受信しません。の内容を確認してくださいcat /etc/resolv.conf
。私の場合、私は以下を得ます:
nameserver 192.168.178.1
<---これは私のホームゲートウェイ(ルーター)です
次に、ホストをVPN接続に接続します。
- VM内のDNS構成は変更されません-> VMは引き続きDNS要求を宛先IP 192.168.178.1に送信しますが、到達できません(pingは引き続き機能します)。 192.168.178.1(内部ホームゲートウェイIPアドレス)に到達できないVPNネットワークにパケットを転送するVPN Tapインターフェイス。
詳細:
- パケットは、VirtualBox NATネットワークで定義されたdef GWに送信され、VPNタップインターフェイスに送信されます。これにより、IPヘッダーが変更され、VM IP送信元アドレスがVPNネットワークによってホストに割り当てられたIPアドレスに置き換えられます。アドレスはDNSアドレス192.168.178.1のままです。
- 次に、このパケットは外部IPヘッダーにカプセル化され、送信元としてホストIPアドレス(後でホームゲートウェイの送信元NATに置き換えられます)と宛先アドレスとしてVPNサーバーが含まれます。
- パケットがVPNネットワークに到達すると、カプセル化が解除されます。ここでも、宛先IPアドレスは、VPNプロバイダーネットワークが到達できないDNSアドレス192.168.178.1になります(これが、VPNネットワークプロバイダーがDNSサーバー用に使用しているIPアドレスとまったく同じであるという特別な場合を除いて)。