web-dev-qa-db-ja.com

仮想ボックスゲストosからvpn

Windows 7ホスト上のVirtualBoxでWebサーバーを実行しているOracle Linuxゲストがあります。 3つのことができるように、ネットワークをセットアップする必要があります。

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

私はいくつかの答えを読み、いくつかの設定を試してみました、そしてここで何が起こるかです:

ブリッジ

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

NAT

  1. ホストがゲストにアクセスできない
  2. ゲストはVPNを通して見ることができます
  3. ゲストはインターネットにアクセスできない

ホストオンリー

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

NAT-Network

  1. ホストがゲストにアクセスできない
  2. ゲストはVPNを通して見ることができます
  3. ゲストはインターネットにアクセスできない

また、ホストはVPN経由で接続されていることもあれば、企業ネットワークに直接接続されていることもあります。それが直接差し込まれるとき、繋がれたアダプターは3つの条件すべてを満たします。理想的には、VPN接続か直接接続かにかかわらず、3つの条件すべてを満たす構成があります。

38
ewok

私は exact と同じ問題を抱えていて、それを解決するまで見てきました。そのため、問題と解決策について詳しく説明します。

VPNを関与させずに

あなたの要求を満たすために必要な設定を理解することは重要です VPNなしで 。また、この情報は、ソフトウェアファイアウォールがホスト上でもゲスト上でも干渉していないことを前提としています。

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

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

Adapter 1: NAT

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

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

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

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

Networking Preferences 1

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

Networking Preferences 2

VirtualBoxの設定に関する最後のステップは、VMのネットワーク設定に戻って、作成したばかりのホストオンリーアダプタを参照する2番目のアダプタを追加することです。

Adapter 2: Host-only

現在、ゲストオペレーティングシステムでは、これら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全体を再起動すると、すべてが「正常に」動作するはずです。

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

同様に、10.0.2.2でホストにpingを送信できるはずです。このIPアドレスは、VirtualBoxのNAT実装に "ハードコーディング"されているか、少なくとも不明瞭な設定ディレクティブを介して指定されているようで、Originについてはほとんど情報がありません。しかし、ああ、「それはただうまくいく」。

この構成では、質問で概説されている3つの条件すべてが満たされます。

入力:VPN

しかし、これがこすりです。 VPNを導入すると、ショーストップの問題が発生します(特定のVPNとその設定によって異なります)。

現代のVPNは スプリットトンネリング が可能です。これは、前述のVirtualBox設定が3つの要件に従って機能するために必要です。 (良い)セキュリティ上の理由から、スプリットトンネリングはしばしば無効にされており、これはまさにあなたの場合(そして私の場合)の問題です。

VPNに接続すると、VPNクライアント(Cisco AnyConnectセキュアモビリティクライアント、私の場合は3.1.02026)はホストコンピュータのルーティングテーブルを調べ、それらを覚えておいてから、通常は中央値の値を使用して値を渡します。管理された場所(つまり、ローカルのAdministrator権限を持っていても、設定を上書きすることは不可能です)。

Windowsの場合はcommand.exeを開くことで、ルーティングテーブルを自分で調べることができます。

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トンネリングでスプリットトンネリングが無効になっている場合の正確な動作です。

通常、これら二つのコマンドはそれらのルートを復元します:

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 client: allow access to LAN resources

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

万が一、あなたのVPNがスプリットトンネリングを許可するのであれば、それを有効にすることは簡単なことかもしれません。その場合、「すべてがうまくいく」かどうかについてあなたから聞いてみたいです。

57
Ben Johnson