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


10

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

私が試したこと:VirtualBoxの「ホストオンリーネットワーキング」を使用して、ホスト上のvboxnet0ループバックインターフェイスをゲストに提供しますが、iptables / routesを正しく取得できませんでした。VMでのNATは避けたいと思います。すでにNATが2倍になっている(ISPとホームルーター)ので、もう1つレベルを上げると頭が躍ります。

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

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

回答:


4

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

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

この時点で、ホストには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チェーンでパケットをDROPするデフォルトポリシーを設定します。これは、ホストがルーティングするパケットにのみ影響し、ホストへのパケット(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}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.