![使用两个 NIC 进行 LXC 桥接](https://linux22.com/image/857165/%E4%BD%BF%E7%94%A8%E4%B8%A4%E4%B8%AA%20NIC%20%E8%BF%9B%E8%A1%8C%20LXC%20%E6%A1%A5%E6%8E%A5.png)
我正在设置一个服务器来托管多个 LXC 容器,目前仅隔离 Web 和数据库服务。我使用的服务器有两个 NIC,我想将一个用于主机流量,另一个用于容器流量(因为两个容器都有可路由的 IP),这样我就可以通过交换机上的两个不同的 VLAN 路由流量。
在真正开始做这一切之前,我想弄清楚我的想法是否正确。我的理解是,我会在主机接口中创建一个桥接设备,比如说br0
,其中包括bridge_ports eth1
。据我所知,这个桥接器不需要任何类型的 IP(但我不太确定……)
然后,在容器上,我将网络接口更改为使用静态 IP 链接到 br0 的 macvlan 桥。
这到底对不对?我以前真的没有接触过容器网络路由……(这里也很好地说明了我在做什么)
+----------------+
| |
| managed switch |
| |
+-+----------+---+
| |
+-----+ +-------+
| |
+---+----+ +--+-----+
| | | |
| vlan 1 | | vlan 2 |
| | | |
+--+-----+ +--+-----+
| |
| eth0 +-------------+
| eth1 | |
| +-------------------+ |
| | |
+---+-----++ +---------------+ |
| | lxc | | |
| lxc host +------+-----+ web container +---+ br0
| | | | | |
+----------+ | +---------------+ |
| |
| +--------------+ |
| | | |
+-----+ db container +----+
| |
+--------------+
答案1
您可以使用网桥或 macvlan,但不需要两者。既然您似乎了解 macvlan,我将概述 macvlan 方法。
您只需在您的 Web 容器中创建虚拟网卡 (VLAN) 并将其绑定到专用于托管容器流量的 NIC。
然后,虚拟网卡将与容器 NIC 一样公开并接收 DHCP,或者您可以使用静态 IP。
以下是核心说明,但详细步骤和背景来自这篇 Bonsai Framework 文章。
在主机上创建永久 macvlan
/etc/network/interfaces
在主机文件底部添加,# Creates a macvlan interface called macvlan0 without an IP address iface mvlan0 inet manual pre-up ip link add mvlan0 link eth0 address 8a:38:2a:cc:d7:aa type macvlan mode bridge post-down ip link del macvlan0 auto mvlan0
重新启动系统以使更改生效。mvlan0
使用 查看网络设备时,您将注意到ifconfig -a
。
macvlan
通过修改位于的配置文件将容器连接到主机/var/lib/lxc/[container]/config
。
要为新网卡添加的条目,
# macvlan for external IP lxc.network.type = macvlan lxc.network.macvlan.mode = bridge lxc.network.flags = up lxc.network.link = mvlan0 lxc.network.hwaddr = 00:16:3e:8d:4f:51 lxc.network.name = eth0
对于 hwaddr,通过免费网站生成一个唯一的本地管理单播 MAC 地址,例如helion.org。
最后,调整容器内的接口文件以通过静态绑定,或者如果您愿意,可以使用动态。
就我而言,我调整了我的家用路由器,以便 192.168.0.1 到 192.168.0.20 不是动态分配的,而是在我的 LXC 中使用静态的。
因此我修改了我的容器接口文件如下,
auto eth0
iface eth0 inet static
address 192.168.0.12
gateway 192.168.0.1
netmask 255.255.255.0
auto eth1
iface eth1 inet dhcp
重新启动您的 Linux 容器。