我正在尝试向 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 套接字。