web-dev-qa-db-ja.com

VirtualBoxからのトラフィックをルーティングする方法VM VPNを介してのみ?

VirtualBox VM(ホストとゲストの両方にUbuntu Maverick)を持っています。私のVPNプロバイダーはOpenVPNを使用してTUNを設定しています。 VMからのトラフィックがVPNのみを経由し、VPNがダウンした場合(発生した場合)にドロップされるように設定します。提案?私のiptables-fuは少し弱い

私が試したこと:VirtualBoxの「Host-only networking」を使用して、Hostでvboxnet0ループバックインターフェイスをゲストに提供しましたが、iptables/routesを正しく取得できませんでした。 VMでのNATは避けたいと思います。すでに二重NAT(ISPとホームルーター)を行っているので、もう1つレベルを上げると頭が飛び出します。

その他の可能性:TAPへの切り替え(方法?)およびVMへのブリッジ。 VM内にVPNを作成し、VPN以外のすべてのeth0トラフィックをフィルタリングするiptablesで接続します(ただし、以下を参照)

ボーナスポイント:ホストのVPNを介してゲストからのトラフィックを二重にトンネリングせずに、ホストとゲストで異なるVPN出口ポイントを使用する方法を教えてください。

10
pfein

他の解決策がありますが、これは私が考えていることです:

  1. VMブリッジモードで設定します。これにより、仮想マシンにホストと同じネットワーク内のIPアドレスが付与されます。
  2. ホストにVPNを設定します。たとえば、tun0です。
  3. ホストでルーティングを有効にするecho 1 > /proc/sys/net/ipv4/ip_forward
  4. VMをホストIPアドレスをデフォルトのgwとして設定します。

この時点で、ホストにはVPN接続があり、VMはすべてのトラフィックをホストにルーティングします。あとは、ゲストを許可しないようにホストを制限するだけです。 tun0デバイスを経由しないトラフィックをルーティングします。次のようなiptablesルールのセットを使用してこれを行うことができます。

iptables -P FORWARD DROP
iptables -A FORWARD -o tun0 -j ACCEPT
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

すべきうまくいきます。最初のルールは、FORWARDチェーンでパケットをドロップするようにデフォルトポリシーを設定します。これは、ホストがルーティングするパケットにのみ影響し、ホストへのパケット(INPUT)またはホストからのパケット(OUTPUT)には影響しません。 2番目のルールは、tun0をルーティングしているすべてのトラフィックを許可します。必要に応じて、-sourceを使用してそれを強化できます。そして最後のルールでは、tun0から戻ってきた返信がVMにルーティングされるようにします。

VPNは、tunインターフェース上のすべてのパケットが単一のIPからのものであることを期待していますか?その場合は、NATルールも追加する必要があります。おそらく次のようになります。

iptables -t nat -A POSTROUTING -o tun0 -j SNAT --to-source {your Host tun0 ip}
4
grep