我有一台使用托管服务提供商的 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 配置就足够了(并且将容器地址放在一个地方更方便)。