LXCゲストにサービスを提供しようとしていますが、ホストにサービスを公開したくありません。また、サービスのファイアウォールルールを設定したくないので、ループバックが最も簡単なソリューションのようです。
lo
バインドマウントディレクトリと同様に、LXCゲストと共有されるサービスの受信(ループバック)方法はありますか?
答え1
目標を達成する方法はいくつかあります。
ゲストが仮想ネットワークを共有する場合(つまり、物理インターフェイスにブリッジされるわけではありません)、簡単です。そのインターフェイスを受信するようにサービスに指示するか、新しいゲストを作成してサービスをホストするようにします。
ゲストがにブリッジされている場合でも、ethX
仮想ゲスト+ホスト専用インターフェイスの作成を検討できます。これは、カプセル化はあらゆる種類のサービス(内部メールサーバー、データベースサーバー、ローカルDNSなど)に適しているためです。
(明らかに何らかの理由でこのアプローチを放棄しました:ファイアウォールルール)
lo
各lxcホストには独自のホストがありますが、私の考えでは大丈夫です。
私のlxcゲストはすべて仮想インターフェイスを共有し、パブリックインターネットに公開する必要がある各サービスに対してホストのiptablesにポート転送ルールを作成します。私はホスト自体でできるだけ少ないサービスを実行しようとしています。これにより、ハッカーが誤ってサービスを公開する可能性はほとんどありません。
完全性のために、私の設定は次のとおりです。
私のinterfaces
ファイル(Debian安定):
auto br0
iface br0 inet static
bridge_maxwait 0
bridge_fd 0
bridge_ports dummy0
address 192.168.x.1
netmask 255.255.255.0
# if there are lxc clients that need a public IP, add something like this (a.b.c.d being the public IP) and set the client's `lxc.network.ipv4` config parameter to the same address:
#post-up route add a.b.c.d dev br0
クライアント構成の関連部分:
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0
lxc.network.veth.pair = lxc-apache # each client gets their own .pair name
lxc.network.ipv4 = 192.168.x.y/24 # ... and of course their own address
答え2
別のオプションは、マウントユニックスドミアンソケットをバインドすることです。
たとえば、Linux の外部で fcgiwrap を実行し、コンテナ内にソケットを含むディレクトリをマウントできます。
lxc.mount.entry = /mnt/outer /var/lib/lxc/mylxc/rootfs/mnt/outer none bind,create=dir 0 0
これにより、コンテナは誤って設定されたファイアウォールのために誤ってインターネットにさらされる危険性なしにLinux外部サービスにアクセスできます。
データが一方向にしか流れないようにするには、fifoソケットを使用できます。