先说下背景:
之前实验室有几台服务器,每台服务器中大概有4张1080Ti卡,现在想四个人用一台服务器,但是又不能直接让用户操作宿主机,不然一人出错其他人也都不能用了。于是就发现原来虚拟容器真的是非常适合,只需要给每个人一个容器,容器之间相互独立,这篇文章主要为了解决联网问题。可以让各个容器之间独立的登陆校园网。
eth1
是连接外网的网桥,单独IP
,需要登录校园网
eth0
是可以直接通过宿主机上网
可以使用ifup
或者ifdown
命令进行网桥的开关。
首先安装
bridge-utils
,用于创建网桥br1
1 |
sudo apt install bridge-utils |
然后,打开
/etc/network/interfaces
,更改为下列:
1 2 3 4 5 6 7 |
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
与容器相连
1 |
lxc network attach-profile br1 default eth0 |
如果eth0
提示已存在,那就用eth1
1 |
lxc network attach-profile br1 default eth1 |
接着,进入容器,修改容器的网络配置文件vi /etc/network/interfaces
1 2 3 4 5 6 |
auto lo iface lo inet loopback auto eth1 iface eth1 inet dhcp auto eth0 iface eth0 inet dhcp |
错误记录:
错误1:
1 |
missing-parent-lxdbr0-for-nic-eth0 |
这时先查看一下default
中的网络配置:
然后删掉出错的eth0
1 |
sipl@sipl-1080Ti:~$ lxc profile device remove default eth0 |
即可。
错误2:
但是没有IPV4
地址 lxc profile edit default
结果如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
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
,然后把列出来的网络设备都删掉
1 2 3 |
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
修改为下面:
1 2 3 4 5 6 |
auto lo iface lo inet loopback auto br1 iface br1 inet dhcp bridge_ports enp5s0 iface enp5s0 inet dhcp |
已经完成一半啦,接着,重启电脑
然后我们查看IP
会发现,默认br1
的IP
值是个很奇怪的地址,10.181.xx.xx
,这显然不是我们想要的。
这个时候,输入
sudo ifdown br1
sudo ifup br1
这时再查看地址,你会发现,我们期待的局域网地址已经分配啦
接着,我们需要把这个把
br1
绑定到容器里:
1 |
lxc network attach-profile br1 default eth0 |
然后我们
lxc ls
看看效果:
恩,完美!
错误3:
嚄,当我想把所有的容器都打开的时候,发现了另一个错误:
1 2 |
sipl@sipl-1080Ti:~$ lxc start dlnqoe3 Error: Missing parent 'br2' for nic 'br2' |
这个错误很奇怪呀,因为我上面已经把默认文件中的br2都删掉了呀,于是开始找原因,最终发现,原来我之前曾经手动给这个容器添加过br2,想来也是惭愧,当时也遇到之前的问题(无法获取IP),当时我采取的办法很笨,就是用哪个就给哪个容器添加设备。结果。。。。
不过亡羊补牢,还不晚~~我们只需要把设备删掉就行啦
1 |
sipl@sipl-1080Ti:~$ lxc config device remove dlnqoe3 br2 |
这时,再启动就没问题了。