仅拥有用于 LXC 的众多公共 IP 地址之一

仅拥有用于 LXC 的众多公共 IP 地址之一

我有一台使用托管服务提供商的 Xen 托管的 VPS 服务器。我被分配了几个 IP 地址(*.*.56.234、*.*.56.235、*.*.56.236 等),但有一个物理网络设备 eth0。

主机正在使用池中的第一个地址 (*.*.56.234)。我希望我的容器使用 *.*.56.235 并完全自主。也就是说,.235 地址应该只对容器可用,而 .234 对主机可用,这样我就可以在主机和容器上启动两个不同的服务,它们都在同一端口上监听。

我想我搞乱了配置条目,因为我能够让网络在容器上运行,但是:

  • 尝试访问互联网(curl、wget)时出现短暂冻结——就像是在寻找正确的路由,但在 curl 检查网站 IP 后,它显示正确的 .235 IP
  • 当我在主机未使用的端口上的容器内设置监听器时,它有时会工作,有时则不工作(意味着有时我可以或无法连接到它)
  • 如果我使用与主机上的某个服务相同的端口在容器内托管服务,那么即使我连接到 .235 地址,我也将始终连接到主机的端口

这是我的配置(请注意,X,Y 表示公共范围,这些都不是 LAN 范围)

主机的 /etc/network/interfaces

# The primary network interface
allow-hotplug eth0
iface eth0 inet static
        address X.Y.56.234
        netmask 255.255.255.248
        network X.Y.56.232
        broadcast X.Y.56.239
        gateway X.Y.56.233
        dns-nameservers 8.8.8.8

auto br0
iface br0 inet static
        bridge_ports eth0
        bridge_fd 0
        ###################
        address X.Y.56.235
        network X.Y.56.232
        broadcast X.Y.56.239
        gateway X.Y.56.233
        dns-nameservers 8.8.8.8

容器的 /etc/network/interfaces

auto lxcnet0
iface lxcnet0 inet static
        address X.Y.56.235
        network X.Y.56.232
        broadcast X.Y.56.239
        gateway X.Y.56.233
        dns-nameservers 8.8.8.8

容器的配置条目

## Network
lxc.network.type = veth
lxc.network.flags = up
lxc.network.name = lxcnet0
lxc.network.hwaddr = 00:FF:AA:11:22:33
lxc.network.link = br0
lxc.network.ipv4 = X.Y.56.235/32

答案1

您做错了一部分。主机的 IP 应该位于桥接接口上(出于某种原因,当 IP 配置在其中一个分支上时,Linux 网络堆栈无法正常工作),容器 IP 应该位于容器的接口上,但位于容器端,而不是主机端(这可能是您遇到峰值的原因)。此外,您可以在其配置中省略容器 IP,仅从容器操作系统进行 IP 配置就足够了(并且将容器地址放在一个地方更方便)。

相关内容