有没有办法与 LXC 来宾共享侦听主机环回的服务?

有没有办法与 LXC 来宾共享侦听主机环回的服务?

我正在尝试向 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

另一个选项是绑定安装的 unix domian 套接字。

例如,您可以在外部 Linux 中运行 fcgiwrap 并在容器内部挂载包含套接字的目录。

lxc.mount.entry = /mnt/outer /var/lib/lxc/mylxc/rootfs/mnt/outer none bind,create=dir 0 0

这使得容器能够访问外部 Linux 的服务,并且由于防火墙配置错误而意外地将其暴露在互联网上的风险为零。

如果您只想让数据沿一个方向流动,则可以使用 fifo 套接字。

相关内容