在 AWS EC2 实例上,我喜欢将 LXC 容器托管为虚拟服务器。我创建了一个仅包含 eth0 的网桥 (br0),并为其提供了我的 VPC 子网的私有 IP。我重新配置了 LXC,使其不使用 lxcbr0 作为网桥,而是使用我的 br0 设备。
当我添加一个新容器并为其分配我的 VPC 子网的 IP 地址时,我可以从 lxc 主机访问该容器。我也可以从容器内部访问 lxc 主机。但尽管在同一子网中,但无法访问其他所有地址。
桥接配置:
auto br0
iface br0 inet static
bridge_ports eth0
bridge_fd 2
bridge_stp off
address 10.8.0.11
netmask 255.255.255.0
network 10.8.0.0
broadcast 10.8.0.255
gateway 10.8.0.1
dns-nameservers 8.8.8.8 8.8.4.4
VPC NIC 已设置为“禁用源/目标检查”
ip_forwarding 设置为 1
不存在 iptables 规则
eth0 设置为混杂模式(ip link set eth0 promisc on)
lxc 容器与我的桥正确关联
在仅有硬件的环境以及 VirtualBox 环境中,此设置有效。但在 AWS 上则无效。
答案1
桥接不起作用,VPC 不是第 2 层网络,所有 IP 都需要通过 ec2 API 分配。最好的办法是使用完全独立(无冲突)的子网,并让主机将流量路由到 lxc 容器,然后通过 ec2 实例 NIC 使用到此子网的静态路由更新 VPC 路由表。这就是 openVPN 的工作方式。
答案2
根据 Nath 的回答,我已将 LXC 容器放入它们自己的网络,并在网络之间路由流量。现在一切正常!