私はまったく同じ問題を抱えていたので、それを解決まで見通したので、問題と解決策を詳細に説明させていただきます。
VPNを含まない
VPNを使用せずに要件を満たすために必要な構成を理解することが重要です。また、この情報は、ホストでもゲストでも、ソフトウェアファイアウォールが干渉していないことを前提としています。
VPNがない場合、これは通常、仮想マシンの構成に2つのネットワークアダプターを作成することで解決されます。
最初のアダプタはNAT
モードに設定する必要があります。これにより、ゲストはホストのネットワークインターフェイスを介してネットワークリソース(インターネットを含む)にアクセスできます。
2番目のアダプターはに設定する必要がありますHost-only
。これにより、ホストとゲスト間の双方向通信が可能になります。
このアダプターは、ホスト専用アダプターを構成するためにVirtualBoxのグローバルネットワーク設定を変更する必要があるため、最初のアダプターよりもセットアップがやや複雑です(注:これには管理者権限が必要です)。
VirtualBoxで、に進みFile -> Preferences -> Network
ます。クリックしてHost-only Networks
タブをクリックし、少し+
新しいアダプタを追加するためにアイコンを。VirtualBoxの権限を上げるように求められます。
充填アウトAdapter
タブは必須です。次のようになります(ラベルの付いたアダプターは無視してください#2
;これは無関係なものに使用されます)。
DHCP
[サーバー]タブの値はオプションです。ゲストのネットワーク構成内でこのアダプターのIPアドレスをハードコーディングする場合、これらの値は不要です。一方、DHCPを使用する場合、値は次のようになります。
VirtualBoxの構成に関する最後の手順は、VMのネットワーク構成に戻り、作成したホスト専用アダプターを参照する2番目のアダプターを追加することです。
次に、ゲストオペレーティングシステムで、これらの2つのネットワークインターフェイスを利用するようにネットワークを構成する必要があります。
DebianまたはUbuntu GNU / Linuxでは、設定は次の/etc/network/interfaces
ように変更するだけで簡単です。
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet dhcp
# The secondary network interface
auto eth1
iface eth1 inet static
address 192.168.56.101
netmask 255.255.255.0
(純粋主義者は/etc/network/interfaces.d
代わりにディレクトリを利用することを好むかもしれませんが、それはこの説明の範囲を超えています)
ゲストのネットワークサービスを再起動するか、より簡単にゲストVM全体を再起動すると、すべてが「正常に動作する」はずです。
この時点で、ゲストVMをpingし192.168.56.101
て応答を受信できるはずです(ソフトウェアファイアウォールが干渉していない場合)。
同様に、1でホストにpingできる必要があります10.0.2.2
。このIPアドレスは、VirtualBoxのNAT実装に「ハードコード」されているか、少なくとも何らかの非自明の設定ディレクティブで指定されているようで、その起源に関する情報はほとんどありません。しかし、悲しいかな、「それはただ機能する」。
この構成を考えると、質問で概説した3つの条件がすべて満たされます。
入力:VPN
しかし、ここにこすります。VPNを導入すると、表示停止の問題が発生します(特定のVPNとその構成によって異なります)。
最新のVPNはスプリットトンネリングに対応しています。これは、前述のVirtualBox構成が3つの要件に従って機能するために必要です。(良い)セキュリティ上の理由から、スプリットトンネリングは多くの場合無効になっていますが、これはまさに(そして私の場合の)問題です。
VPNに接続すると、VPNクライアント(私の場合、Cisco AnyConnect Secure Mobility Client、3.1.02026)はホストコンピューターのルーティングテーブルを調べ、それらを記憶してから、一般的に中央から送られる値でそれらを舗装します。管理された場所(つまり、ローカルの管理者権限がある場合でも、設定を上書きすることはできません)。
command.exe
(Windowsの場合)を開くと、ルーティングテーブルを確認できます。
C:\>route print
VPNに接続する前に、ルーティングテーブルには、このVirtualBox設定が正しく機能することを可能にする重要なエントリが含まれています。VPNに接続すると、これらのエントリが削除され、ホストとゲスト間の通信ができなくなります。
(他にも多くのエントリがありますが、この動作の根本的な原因とは無関係なので、ここでは省略しました。)
VPNに接続する前に:
192.168.56.0 255.255.255.0 On-link 192.168.56.1 266
192.168.56.1 255.255.255.255 On-link 192.168.56.1 266
192.168.56.255 255.255.255.255 On-link 192.168.56.1 266
224.0.0.0 240.0.0.0 On-link 192.168.56.1 266
255.255.255.255 255.255.255.255 On-link 192.168.56.1 266
VPNに接続した後:
192.168.56.1 255.255.255.255 On-link 192.168.56.1 266
224.0.0.0 240.0.0.0 On-link 192.168.56.1 266
255.255.255.255 255.255.255.255 On-link 192.168.56.1 266
VPNクライアントは次の行を削除します。
192.168.56.0 255.255.255.0 On-link 192.168.56.1 266
192.168.56.255 255.255.255.255 On-link 192.168.56.1 266
これらの最後の2つのエントリがないと、ホストとゲストは通信できません。これは、VPN構成でスプリットトンネリングが無効になっている場合の正確な動作です。
通常、これらの2つのコマンドはこれらのルートを復元します。
C:\>route ADD 192.168.56.0 MASK 255.255.255.0 192.168.56.1 METRIC 266
C:\>route ADD 192.168.56.255 MASK 255.255.255.255 192.168.56.1 METRIC 266
ただし、VPNクライアントは引き続き警戒します。ルーティングテーブルを変更しようとする試みを傍受します。私のクライアントは2番目のエントリを許可しているようですが、最初のエントリは許可していないようです。(そして、定期的に両方を舗装するかもしれません。私はそれについてテストしませんでした。)
場合は、あなたの特定のVPNとそれに付随設定を有効にするスプリットトンネリングを可能に、それは一般的にスイッチオンされ、このように:
VPNから切断すると、正常に動作するVPNクライアントは、接続前に配置されていたルーティングテーブルを復元します。私のVPNクライアントは確実にこれを行うようです。これは、VPNに接続または切断するときにゲストVMを再起動する必要がないことを意味するため、有益です。このような場合、VMのセカンダリアダプターはリセットされますが、IPアドレスを自動的かつ透過的に再取得し、ホストとゲスト間の通信をほぼ即座に復元します。さらに良いことに、ホストとゲスト間のNFSマウント(私はCIFSマウントを使用しています)は、VPN接続/切断操作を介して接続されたままです。
万が一、VPNでスプリットトンネリングが許可されている場合は、それを有効にするだけの単純な問題かもしれません。