web-dev-qa-db-ja.com

同じホスト上のvirtualboxゲストからLXCコンテナーに到達する

コンテキスト

  • 私はUbuntuラップトップ(Ubuntu 13.04 64b)でWebサイトを開発しています。
  • 各サイトは、ネットワーク10.0.3.x上の専用LXCコンテナー¹内で実行されます
  • Windows²を実行しているvirtualboxゲストからこれらのサイトにアクセスする必要がある場合があります

以前は「箱から出して」動作していましたが、数週間前に停止しました。 Ubuntuのアップデート後だと思いますが、それはLXCまたはVirtualboxでしたか、それとも「ネットワーク関連」のアップデートでしたか?私はそれらのテストを毎日実行していないので、私にはわかりません。

¹さまざまで複雑なプラットフォームを偽造し、実際に必要なリソースのみを使用するため。

²Windowsブラウザでテストします。

質問:

VirtualboxゲストからLXCコンテナー上のWebサイトにアクセスするには、Virtualbox/LXC/Hostネットワーク構成をどのようにセットアップする必要がありますか?

これまでにやったこと

私の現在のvirtualboxセットアップは、2枚のネットワークカードを持つことです。

  • wlan0の橋(インターネットにアクセスするため)
  • LXC仮想カード上のブリッジlxcbr0(コンテナーにアクセスするため)

奇妙なこと:Windows VMからLXCコンテナーにpingを実行できますが、HTTP(ブラウザーまたはポート80のtelnet)でそれらにアクセスできません。

実際に開始されたコンテナのみがpingに応答します。

私は他の多くのセットアップを試しましたが、何が起こっているのかを理解するよりも「推測」しています。

私の現在の回避策

ネットワーク全体でコンテナに到達できるようにするのと同じように、iptablesを使用してホストにポートフォワードを設定します(実際にはそれが実行されます)。

そうすると、WindowsVMから転送されたコンテナにアクセスできます。

しかし、これは間違いなくクリーンな解決策ではありません:

  • 一度にアクセスできるコンテナは1つだけです(または別のポートを使用する必要があります)
  • プロジェクトを切り替えるたびにiptablesを再構成する必要があります
  • 私は実際にコンテナへのアクセスを外の世界に与えます
  • アクティブなLANまたはWAN接続が必要です
  • ドメイン名を使用できなくなりました(WindowsにコンテナのIPと一致するHostファイルがあります)
4
Huge

User228273の提案に従って、問題を解決する構成を見つけることができました。最初に、tap0という名前のtapインターフェイスを作成し、それを起動しました。

ip tuntap add mode tap tap0
ip link set tap0 up

前のコマンドの1つが失敗した場合は、おそらくtap0インターフェイスがすでにあることが原因です。コマンドを使用する

ip link show

状況を評価し、最終的にインターフェイス名を変更します。これで、Ubuntuではtap0という名前のデフォルトのブリッジにlxcbr0インターフェースを追加できます。

brctl addif lxcbr0 tap0

次に、以下に示すように、インターフェースtap0で「ブリッジアダプター」を使用するようにVirtualBoxを構成しました。

VirtualBox configuration

そして、VirtualBoxインスタンスとLXCはお互いを「見る」ことができます。

2019 Update:NetworkManagerを使用している場合は、nmcliを使用してこの追加を行うことができます:

nmcli connection add type tun ifname tap0 con-name tap0 mode tap master lxcbr0
2
Gab

まったく同じ問題がありました。ほぼ確実に、VirtualBoxの「障害」は、独自の方法でブリッジネットワークを実行しているようであり、おそらくさまざまなプラットフォーム(Mac、Solaris、その他)間で一貫性を保っています。証拠:

  • VBoxブリッジネットワークインターフェイスしないでください「brctlshow」に表示されます(LXC vethの場合と同様)
  • ドキュメントには次のとおりです。「VirtualBoxは、物理ネットワークアダプターからのデータをフィルター処理するホストシステム上のデバイスドライバーを使用します」

ICMPが通過しているのは本当に奇妙ですが、TCP(そしておそらく他の人)はそうではありません...

ただし、ドキュメントには「特定の高度なセットアップに引き続きTAPインターフェイスを使用できる」と記載されているため、新しいTAPをブリッジに接続することを検討しました。

# ip tuntap add mode tap
# brctl addif brY tapX
# ip link set tapX up

次に、brYの代わりにtapXを使用するようにVBoxネットワーク設定を調整すると、すべてうまくいきました(ゲストを再起動した後)。

同じtapXを共有する2人のゲストで実験しましたが、うまく機能するかどうかはわかりません。 VBoxゲストごとに1回タップするのがおそらく最も安全です。

1
user228273

ターゲットにpingを実行できるが、そこでアプリケーションにアクセスできない場合は、ほぼ確実にiptablesの問題です。

私の推測では、更新プロセス中にシステムフラグを取得しました"net.bridge.bridge-nf-call-iptables = 1"チェックイン/etc/systcl.conf

もしそうなら、私はそれを削除しませんが、代わりにiptablesの設定を修正します。

0
Veniamin