马春杰杰 Exit Reader Mode

ubuntu16.04-LXD网络配置说明

先说下背景:

之前实验室有几台服务器,每台服务器中大概有4张1080Ti卡,现在想四个人用一台服务器,但是又不能直接让用户操作宿主机,不然一人出错其他人也都不能用了。于是就发现原来虚拟容器真的是非常适合,只需要给每个人一个容器,容器之间相互独立,这篇文章主要为了解决联网问题。可以让各个容器之间独立的登陆校园网。

eth1 是连接外网的网桥,单独IP,需要登录校园网

eth0 是可以直接通过宿主机上网

可以使用ifup或者ifdown命令进行网桥的开关。

首先安装bridge-utils,用于创建网桥br1
sudo apt install bridge-utils
然后,打开/etc/network/interfaces,更改为下列:
auto lo 
iface lo inet loopback 

auto br1 
iface br1 inet dhcp 
        bridge_ports enp3s0 
iface enp3s0 inet dhcp

接着,先关闭enp3s0,再打开br1sudo ifdown enp3s0sudo ifup br1然后,把br1与容器相连

lxc network attach-profile br1 default eth0

如果eth0提示已存在,那就用eth1

lxc network attach-profile br1 default eth1

接着,进入容器,修改容器的网络配置文件vi /etc/network/interfaces

auto lo 
iface lo inet loopback 
auto eth1 
iface eth1 inet dhcp 
auto eth0 
iface eth0 inet dhcp

错误记录:

错误1:

missing-parent-lxdbr0-for-nic-eth0

这时先查看一下default中的网络配置:


然后删掉出错的eth0

sipl@sipl-1080Ti:~$ lxc profile device remove default eth0

即可。

错误2:

但是没有IPV4地址 lxc profile edit default结果如下:

config:
  environment.http_proxy: ""
  user.network_mode: ""
description: Default LXD profile
devices:
  eth0:
    name: eth0
    nictype: bridged
    parent: lxdbr1
    type: nic
  eth1:
    nictype: bridged
    parent: br3
    type: nic
  root:
    path: /
    pool: lxd-zfs
    type: disk
name: default
used_by:
- /1.0/containers/ceshi
- /1.0/containers/ceshi1
- /1.0/containers/ceshi2
- /1.0/containers/dlnqoe2
- /1.0/containers/dlnqoe3
- /1.0/containers/docker
这时,我们使用一个终极的办法,首先,重复上面步骤lxc profile show default,然后把列出来的网络设备都删掉
sipl@sipl-1080Ti:~$ lxc profile device remove default eth0
sipl@sipl-1080Ti:~$ lxc profile device remove default eth1
sipl@sipl-1080Ti:~$ lxc profile device remove default eth2

全部删除之后,这时lxc ls应该是什么都没有的。

OK,这个时候,我们就可以开始了,打开网络配置文件sudo vi /etc/network/interfaces

修改为下面:

auto lo
iface lo inet loopback
auto br1
iface br1 inet dhcp
        bridge_ports enp5s0
iface enp5s0 inet dhcp

已经完成一半啦,接着,重启电脑

然后我们查看IP会发现,默认br1IP值是个很奇怪的地址,10.181.xx.xx,这显然不是我们想要的。

这个时候,输入

sudo ifdown br1

sudo ifup br1

这时再查看地址,你会发现,我们期待的局域网地址已经分配啦

接着,我们需要把这个把br1绑定到容器里:
lxc network attach-profile br1 default eth0

然后我们lxc ls看看效果:

恩,完美!

错误3:

嚄,当我想把所有的容器都打开的时候,发现了另一个错误:
sipl@sipl-1080Ti:~$ lxc start dlnqoe3
Error: Missing parent 'br2' for nic 'br2'

这个错误很奇怪呀,因为我上面已经把默认文件中的br2都删掉了呀,于是开始找原因,最终发现,原来我之前曾经手动给这个容器添加过br2,想来也是惭愧,当时也遇到之前的问题(无法获取IP),当时我采取的办法很笨,就是用哪个就给哪个容器添加设备。结果。。。。

不过亡羊补牢,还不晚~~我们只需要把设备删掉就行啦
sipl@sipl-1080Ti:~$ lxc config device remove dlnqoe3 br2

这时,再启动就没问题了。