本文只介绍在windows下实现的过程,Ubuntu采用22.04
安装multipass后,在卓面右下角Open shell 就可以链接默认实例Primary,当然如果你有多个虚拟机,可以针对不同内容单独建立终端的链接,而本文仅仅用Primary来说明。
一、确认网络情况和任务目标。
在控制面板的网络连接里面,你可以看到至少有一个以太网或Wlan的网络连接,也就是你上网的网卡,然后还有一个网络连接,虚拟网卡vEthernet (Default Switch),ip地址并非你局域网的ip,而是一个10开头或者172开头的结尾是1的IP地址,你当前正在操作的计算机连接到你的虚拟机,且你的计算机(宿主服务器)为网关,通过Default switch交换机访问到的Primary,而multipass的Open shell / 快速链接( multipass shell primary 命令) 也是通过这套线路进行的链接,也就是说虚拟机的eth0和Default switch交换机是对应的星际之门。
问题:如何让primary直接连接真实网络的网关(或路由器),而不通过宿主网关直接上网呢??同时还要满足可以使用open shell或小标右键快速创建终端窗口?
任务:创建一条Primary直接连接物理网关的线路,同时让multipass管理器还能继续快速openshell链接虚拟机。
二、实现
既然要让虚拟机直接分配到一个和宿主一样的局域网ip,又要让快速链接可用,那就必须要再添加一块网卡(而不是更改当前网卡的链接),而这块网卡对应的,是一个和外部网关连接的全新交换机,只有这样,才不会破坏到原有宿主到虚拟机的链接,所以与默认的Default Switch交换机完全无关。
开始操作:
Multipass在windows下是基于Hyper-V管理器来创建和管理虚拟机的,所以任务栏搜索Hyper-v,打开Hyper-v管理器。
这时你可以看到左侧一个名叫你主机名字一样 或 DESKTOP-xxxxx的服务器已经链接,同时右侧有一个叫做primary的虚拟主机正在运行。
一、创建第二个虚拟交换机。
鼠标右键点击你的Hyper-v管理器中,红线这里的名字,选择虚拟交换机管理器,创建一个新的虚拟交换机,用于prime虚拟机与局域网链(原有Default switch是与宿主机链接的,始终不管它。)然后选择外部,点击创建虚拟交换机(S)按钮。
名称这里,写一个你能识别出这个交换机是用于链接什么的名字,例如我的是Lan-switch,下面的网卡,选择当前链接局域网正在使用的网卡。然后按应用,再按确定
至此,连接局域网的虚拟交换机创建完成。
二、添加虚拟主机第二个虚拟网卡
回到Hyper-v管理器的页面,鼠标右键点击你的虚拟机,本文中是Primary,菜单中点设置->添加硬件->网络适配器->添加
在虚拟交换机选项中,选择你刚刚创建的Lan-switch虚拟交换机,然后点击应用和确定。至此,宿主机的配置已经完成。
三、Ubuntu虚拟机设置局域网固定IP
通过右下角Mulitpass橘色小标,右键选择Open shell进行快速链接。然后先确认一下虚拟机的IP情况
发现新添加的网卡没有认上,执行命令激活这个刚添加的第二块虚拟网卡
为了方便读者好进行复制,所以我不适用代码模式,使用引用块可以无需登录直接复制
sudo ifconfig eth1 up
执行后再次查看,应该eth1(eth0是第一块网卡负责和宿主机链接的)这个第二块网卡已经挂上了
由于Ubuntu从16之后设置IP已经不再使用ifconfig配置,所以我们直接定位完了过配置文件“Yaml”,位置在/etc/plan/目录下,版本不同名称不同,不一定都是50,但肯定是yaml结尾。
开始编辑这个文件
执行
sudo vi 50-cloud-init.yaml
会看到除了每行开头#注释的内容外,还有以network开头的配置信息,根据我下面的信息,来修改你的信息,每行的内容以及空格的内容一定不要更换,包括开头的空格在内,都是一一堆堆的关闭。每一等级都是对上层的展开或者平级。
我们能看到eth0: 在项目后面都有个冒号“:”,在每个冒号后面必须有一个空格,否则无法识别项目。然后在version: 2的上面,开始进行编辑,添加eth1第二块网卡的信息,如果有了可以忽略,只需要修改IP地址即可,如果没有,根据我下面的内容进行编辑即可,顺序和空格一定不要乱,编辑前记得备份。
network:
ethernets:
eth0:
dhcp4: true
match:
macaddress: 52:xx:xx:xx:f3:xx
set-name: eth0
eth1:
optional: true
addresses: [192.168.1.10/24] #固定ip地址,网段写你自己的
nameservers:
addresses: [192.168.1.1] #nameservers的地址
routes: #配置当前路由,走192.168这个交换机的地址
- to: default
via: 192.168.1.1
version: 2
其中“-”减号代表展开的目录,nameserver下面的address前面必须空格,不能与nameserver对其,这一点写代码的朋友应该都懂。对照上面的没有问题了,wq!保存退出。
然后执行debug命令,先看看有没有什么错误,当然也可以直接apply。然后你的shell窗口会断开,重新链接即可。
sudo netplan --debug apply
sudo netplan apply
至此两个网卡和两个交换机,已经搞定了内链接和外连接的双重连接。
文章结束