VPN 経由で VirtualBox ゲスト OS に接続するにはどうすればよいですか?

VPN 経由で VirtualBox ゲスト OS に接続するにはどうすればよいですか?

Windows 7 ホスト上の VirtualBox で Web サーバーを実行する Oracle Linux ゲストがあります。次の 3 つのことを行うためにネットワークを設定する必要があります。

  1. ホストはブラウザとSSHを介してゲストに接続できる
  2. ゲストはホストのVPNを介して内部ネットワーク上の他のサーバーと通信できる
  3. ゲストは外部のインターネットにアクセスできる

いくつかの回答を読んで、いくつかの構成を試してみましたが、次のような結果になりました。

ブリッジ

  1. ホストがゲストにアクセスできない
  2. ゲストはVPN経由では見ることができません
  3. ゲストはインターネットにアクセスできる

NAT

  1. ホストがゲストにアクセスできない
  2. ゲストはVPN経由で見ることができる
  3. ゲストはインターネットにアクセスできません

ホストのみ

3 つの条件すべてが失敗します。

NAT ネットワーク

  1. ホストがゲストにアクセスできない
  2. ゲストはVPN経由で見ることができる
  3. ゲストはインターネットにアクセスできません

また、ホストが VPN 経由で接続される場合もあれば、企業ネットワークに直接接続される場合もあることにも注意してください。直接接続されている場合、ブリッジ アダプタは 3 つの条件をすべて満たします。理想的には、VPN または直接接続の有無に関係なく、3 つの条件をすべて満たす構成が存在します。

答え1

私はちょうど私も同じ問題を抱えていましたが、解決に至りましたので、問題と解決策を詳しく説明させていただきます。

VPNを使わずに

要件を満たすために必要な構成を理解することが重要です。それなしVPN が関係します。また、この情報は、ホストでもゲストでもソフトウェア ファイアウォールが干渉していないことを前提としています。

VPN がない場合、通常、仮想マシンの構成に 2 つのネットワーク アダプタを作成することでこの問題を解決します。

最初のアダプタをNATモードに設定する必要があります。これにより、ゲストはホストのネットワーク インターフェイスを介してネットワーク リソース (インターネットを含む) にアクセスできるようになります。

アダプタ 1: NAT

2 番目のアダプタは に設定する必要がありますHost-only。これにより、ホストとゲスト間の双方向通信が可能になります。

このアダプタは、ホスト専用アダプタを構成するために VirtualBox のグローバル ネットワーク設定を変更する必要があるため、最初のアダプタよりもセットアップが少し複雑です (注: これには管理者権限が必要です)。

VirtualBox で、 に移動しますFile -> Preferences -> NetworkHost-only Networksタブをクリックし、小さな+アイコンをクリックして新しいアダプターを追加します。VirtualBox の権限を昇格するように求められます。

タブへの入力はAdapter必須です。次のようになります ( というラベルの付いたアダプタは無視してください。#2これは無関係の目的に使用されます)。

ネットワーク設定 1

サーバー タブの値DHCPはオプションです。ゲストのネットワーク構成内でこのアダプタの IP アドレスをハードコードする場合、これらの値は不要です。一方、DHCP を使用する場合は、値は次のようになります。

ネットワーク設定 2

VirtualBox の設定に関する最後の手順は、VM のネットワーク設定に戻り、先ほど作成したホスト専用アダプターを参照する 2 番目のアダプターを追加することです。

アダプタ 2: ホストのみ

ここで、ゲスト オペレーティング システムでは、これらの 2 つのネットワーク インターフェイスを利用するようにネットワークを構成する必要があります。

/etc/network/interfacesDebian または Ubuntu GNU/Linux では、設定は次のように変更するだけです。

# 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 全体を再起動すると、すべてが「正常に動作する」はずです。

192.168.56.101この時点で、ゲスト VM に ping を実行して応答を受け取ることができるはずです(ソフトウェア ファイアウォールが干渉していない場合)。

同様に、 のホストに 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) がホスト コンピュータのルーティング テーブルを調べて記憶し、通常は中央管理されている場所から取得される値で上書きします (つまり、ローカル管理者権限があっても設定を上書きすることはできません)。

ルーティング テーブルを自分で調べるには、次の URL を開きます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 とそれに付随する構成によりスプリット トンネリングを有効にすることができます。通常は次のようにオンにします。

Cisco VPN クライアント: LAN リソースへのアクセスを許可する

VPN から切断すると、正常に動作する VPN クライアントは接続前に配置されていたルーティング テーブルを復元します。私の VPN クライアントはこれを確実に実行しているようです。これは、VPN に接続したり切断したりするときにゲスト VM を再起動する必要がないため便利です。このような場合、VM のセカンダリ アダプターはリセットされますが、IP アドレスは自動的かつ透過的に再取得され、ホストとゲスト間の通信がほぼ即座に復元されます。さらに良いことに、ホストとゲスト間の NFS マウント (私は CIFS マウントを使用しています) は、VPN の接続/切断操作をまたいで接続されたままになります。

万が一、VPN がスプリット トンネリングを許可している場合は、それを有効にするだけで済む可能性があります。その場合、「すべて正常に動作する」かどうかについて、ぜひご意見をお聞かせください。

答え2

ゲスト Linux マシンで Windows ホスト VPN を使用する方法

1-) VPN 設定を開きます。ローカル ポート番号をいくつか指定します。

VPN設定

2-) 仮想マシンの設定を開きます。ネットワークがNATに接続されていることを確認します。次に、詳細とポート転送をクリックします。

ここに画像の説明を入力してください

3-) ルールを追加し、VPNで指定したのと同じポート番号を入力します。

ポート転送

4-) 仮想マシンを起動します。ネットワーク設定に移動します。手動を選択し、IP アドレスに 10.0.2.2 (デフォルトの VirtualBox NAT ゲートウェイ) と、前に指定したポートを入力します。

Linux ネットワーク設定

5-) Firefoxを開いてwhoer.netにアクセスし、VPNが機能しているかどうかを確認します。これで完了です。

誰だ

関連情報