Ubuntu 配置虚拟机网络桥接模式

本文最后更新于:2022年8月10日 上午

在开启虚拟机时,需要宿主与虚拟机网络连通并可以上互联网,需要配置网络桥接模式,本文记录配置方法。

桥接模式

  • 桥接模式就是将主机网卡与虚拟的网卡利用虚拟网桥进行通信。

  • 类似于把物理主机虚拟为一个交换机,所有桥接设置的虚拟机连接到这个交换机的一个接口上,物理主机也同样插在这个交换机当中,所以所有桥接下的网卡与网卡都是交换模式的,相互可以访问而不干扰。

  • 在桥接模式下,虚拟机IP地址需要与主机在同一网段,如果需要联网,则网关与DNS需要与主机网卡一致。

桥接模式下的所有虚拟机都是和主机是在同一网段的,可以把它们看成是"平等"的关系,桥接模式下虚拟机和物理的总数不能超过网段容纳的最大主机数量

实际需求

  • 当前主机网络由一根网线插入网口提供
  • 需要开启若干台虚拟机,主机与虚拟机可以相互通信
  • 宿主机与虚拟机可以上网
  • 宿主机与虚拟机有静态 IP

解决思路

  • 使用网络桥接模式,建立网桥
  • 将宿主机与虚拟机挂载在同一个网桥上共享网络
  • 为二者分别设置静态IP

解决方案

  • ifconfig 查看当前网络状态
1
ifconfig

  • 当前没有配置网桥,本地地址为 DHCP 动态分配

建立网桥

  • 使用网络管理器创建网桥最简单的方式就是通过nm-connection-editor。这款GUI(图形用户界面)的工具允许你傻瓜式地配置一个网桥,启动nm-connection-editor。
1
nm-connection-editor

  • 此时我们宿主机有默认的以太网连接,没有手动配置网桥
  • 点击左下角的 + ,添加一个网桥,选择桥接

  • 现在,开始配置网桥,包括它的名字和所桥接的连接。如果没有创建过其他网桥,那么默认的网桥接口会被命名为bridge0

挂载本地网络

  • 创建网桥的目的是为了通过网桥共享你的以太网卡接口,所以你需要添加以太网卡接口到网桥。在图形界面添加一个新的“桥接的连接”可以实现上述目的。
  • 我们需要将宿主机的网络挂载到网桥上,点击增加按钮,选择以太网,建立从机

  • 从机配置界面,以太网选项卡中,设备选择当前的网卡:

  • 常规选项卡中勾选前两个,之后保存从机配置选项:

  • 切换到IPv4 设置标签,为网桥配置DHCP或者是静态IP地址
  • 此处我们添加静态IP,设置子网掩码、网关和DNS服务器,并保存

  • 现在新增的网桥连接被创建在桥接窗口里。因为已经从属与网桥,以前配置好的有线连接 就不再需要了,原来的有线连接可以删除了。

  • 等一会或重启宿主机可以看到网络配置默认为 bridge0 从机 1

  • 使用 ifconfig 查看网络配置:

  • 主要的网卡已经切换为 bridge0,并使用了我们设置的IP
  • 之前的网卡enp1s0已经没有 IP 了

至此,网桥已经建立,宿主机静态IP已经设置好了,接下来配置虚拟机

建立虚拟机网络

  • 使用 virt -install 创建虚拟机时,网络配置参数:
1
--network bridge=bridge0
  • 进入虚拟机
方法一
1
2
3
4
5
6
7
8
9
10
11
12
13
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,应用配置
1
sudo netplan apply
方法二

有时 netplan 文件夹下没有文件,可以采用如下方法

  • 需要编辑2个文件

    • /etc/network/interfaces(配置IP和网关)
    • /etc/resolv.conf(配置DNS服务器)
  • 修改 /etc/network/interfaces 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 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
1
2
nameserver 192.168.1.1
nameserver 114.114.114.114
  • 重启网络(debian 系统)
1
service networking restart
测试
  • ifconfig 查看虚拟机网络状态
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ 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

参考资料


Ubuntu 配置虚拟机网络桥接模式
https://www.zywvvd.com/notes/system/linux/net-brideg-config/net-brideg-config/
作者
Yiwei Zhang
发布于
2021年11月16日
许可协议