在开启虚拟机时,需要宿主与虚拟机网络连通并可以上互联网,需要配置网络桥接模式,本文记录配置方法。
桥接模式
- 桥接模式就是将主机网卡与虚拟的网卡利用虚拟网桥进行通信。
- 类似于把物理主机虚拟为一个交换机,所有桥接设置的虚拟机连接到这个交换机的一个接口上,物理主机也同样插在这个交换机当中,所以所有桥接下的网卡与网卡都是交换模式的,相互可以访问而不干扰。
- 在桥接模式下,虚拟机IP地址需要与主机在同一网段,如果需要联网,则网关与DNS需要与主机网卡一致。
桥接模式下的所有虚拟机都是和主机是在同一网段的,可以把它们看成是"平等"的关系,桥接模式下虚拟机和物理的总数不能超过网段容纳的最大主机数量
实际需求
- 当前主机网络由一根网线插入网口提供
- 需要开启若干台虚拟机,主机与虚拟机可以相互通信
- 宿主机与虚拟机可以上网
- 宿主机与虚拟机有静态 IP
解决思路
- 使用网络桥接模式,建立网桥
- 将宿主机与虚拟机挂载在同一个网桥上共享网络
- 为二者分别设置静态IP
解决方案
- ifconfig 查看当前网络状态
ifconfig
- 当前没有配置网桥,本地地址为 DHCP 动态分配
建立网桥
- 使用网络管理器创建网桥最简单的方式就是通过
nm-connection-editor
。这款GUI(图形用户界面)的工具允许你傻瓜式地配置一个网桥,启动nm-connection-editor。
nm-connection-editor
- 此时我们宿主机有默认的以太网连接,没有手动配置网桥
- 点击左下角的
桥接
- 现在,开始配置网桥,包括它的名字和所桥接的连接。如果没有创建过其他网桥,那么默认的网桥接口会被命名为
bridge0
挂载本地网络
- 创建网桥的目的是为了通过网桥共享你的以太网卡接口,所以你需要添加以太网卡接口到网桥。在图形界面添加一个新的“桥接的连接”可以实现上述目的。
- 我们需要将宿主机的网络挂载到网桥上,点击
增加
按钮,选择以太网
,建立从机
- 在
从机
配置界面,以太网选项卡中,设备选择当前的网卡:
常规
选项卡中勾选前两个,之后保存从机
配置选项:
- 切换到
IPv4 设置
标签,为网桥配置DHCP或者是静态IP地址 - 此处我们添加静态IP,设置子网掩码、网关和DNS服务器,并保存
- 现在新增的网桥连接被创建在
桥接
窗口里。因为已经从属与网桥,以前配置好的有线连接
就不再需要了,原来的有线连接
可以删除了。 - 等一会或重启宿主机可以看到网络配置默认为
bridge0 从机 1
- 使用
ifconfig
查看网络配置:
- 主要的网卡已经切换为
bridge0
,并使用了我们设置的IP - 之前的网卡
enp1s0
已经没有 IP 了
至此,网桥已经建立,宿主机静态IP已经设置好了,接下来配置虚拟机
建立虚拟机网络
- 使用
virt -install
创建虚拟机时,网络配置参数:
--network bridge=bridge0
- 进入虚拟机
方法一
- 修改
/etc/netplan/*.yaml
,配置虚拟网卡静态 IP,可以参考Ubuntu 20.04 设置静态IP
network:
ethernets:
enp1s0:
match:
macaddress: 52:54:00:fd:fb:17
dhcp4: false
dhcp6: false
wakeonlan: true
addresses:
- 192.168.1.111/24
gateway4: 192.168.1.255
nameservers:
addresses: [114.114.114.114, 8.8.8.8]
- 此处我们设置IP为 111,应用配置
sudo netplan apply
方法二
有时 netplan 文件夹下没有文件,可以采用如下方法
- 需要编辑2个文件
- `/etc/network/interfaces`(配置IP和网关)
- `/etc/resolv.conf`(配置DNS服务器)修改
代码语言:javascript复制# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto enp1s0
allow-hotplug enp1s0
# iface enp1s0 inet dhcp
iface enp1s0 inet static
address 192.168.1.111
netmask 255.255.255.0
gateway 192.168.1.1
broadcast 192.168.1.255
# This is an autoconfigured IPv6 interface
iface enp1s0 inet6 auto
- 其中
配置 | 含义 |
---|---|
auto enp1s0 | 开机自动连接网络 |
iface enp1s0 inet static | 设置静态IP |
iface enp1s0 inet dhcp | dhcp 自动获取IP |
address 192.168.1.111 | 静态 IPv4地址 |
netmask 255.255.255.0 | 子网掩码 |
gateway 192.168.1.1 | 网关 |
broadcast 192.168.1.255 | 广播地址(也可以不写) |
- 配置
/etc/resolv.conf
文件,设置 dns
nameserver 192.168.1.1
nameserver 114.114.114.114
- 重启网络(debian 系统)
service networking restart
测试
- ifconfig 查看虚拟机网络状态
$ ifconfig
enp1s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.111 netmask 255.255.255.0 broadcast 192.168.1.255
inet6 2409:8a1e:8fc7:3bc0:5054:ff:fefd:fb17 prefixlen 64 scopeid 0x0<global>
inet6 fe80::5054:ff:fefd:fb17 prefixlen 64 scopeid 0x20<link>
ether 52:54:00:fd:fb:17 txqueuelen 1000 (Ethernet)
RX packets 39141 bytes 2699714 (2.5 MiB)
RX errors 0 dropped 24226 overruns 0 frame 0
TX packets 503 bytes 77888 (76.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 2126 bytes 818164 (798.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2126 bytes 818164 (798.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
- 此时可以连接互联网,宿主机和虚拟机可以相互ping通,也都有各自的静态 IP
参考资料
- https://blog.csdn.net/qq_39192827/article/details/85872025
- https://www.jb51.net/LINUXjishu/333778.html
- https://blog.csdn.net/nzjdsds/article/details/77197246