使用两个 NIC 进行 LXC 桥接

使用两个 NIC 进行 LXC 桥接

我正在设置一个服务器来托管多个 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 容器。

相关内容