周振林 周振林
首页
  • 前端文章

    • HTML
    • CSS
    • Tailwind CSS (opens new window)
    • JavaScript
    • Vue3
    • 其他
  • 学习笔记

    • 《JavaScript教程》
    • 《ES6 教程》
    • 《TypeScript》
    • 《Vue》
    • 《Git》
    • 《小程序笔记》
    • 《JS设计模式总结笔记》
  • 规范
  • Spring
  • 安装教程
  • 其他教程
  • 归真医学
  • 常用药材
  • 学习笔记
  • 经方学习心得
  • 基础
  • 虚拟化
  • Docker
  • OpenStack
  • 心情杂货
关于
收藏
  • 分类
  • 标签
  • 归档

周振林

IT界的小学生
首页
  • 前端文章

    • HTML
    • CSS
    • Tailwind CSS (opens new window)
    • JavaScript
    • Vue3
    • 其他
  • 学习笔记

    • 《JavaScript教程》
    • 《ES6 教程》
    • 《TypeScript》
    • 《Vue》
    • 《Git》
    • 《小程序笔记》
    • 《JS设计模式总结笔记》
  • 规范
  • Spring
  • 安装教程
  • 其他教程
  • 归真医学
  • 常用药材
  • 学习笔记
  • 经方学习心得
  • 基础
  • 虚拟化
  • Docker
  • OpenStack
  • 心情杂货
关于
收藏
  • 分类
  • 标签
  • 归档
  • 基础

  • 虚拟化

    • 虚拟化介绍
    • 准备KVM实验环境
    • 启动第一个KVM虚拟机
    • 远程管理KVM虚拟机
    • KVM内存和CPU虚拟化原理
    • KVM存储虚拟化原理
    • KVM LVM类型的存储池
    • KVM网络虚拟化基础
    • KVM动手实践虚拟网络
    • KVM理解virbr0
      • 理解 virbr0
    • Linux 如何实现 VLAN
    • 动手实践 Linux VLAN
    • 云计算与 OpenStack
    • ESXI主机安装与配置
    • ESXI虚拟机安装
    • KVM介绍
    • KVM主机安装
    • KVM虚拟机安装
    • KVM Libvirt 存储池
    • KVM网络配置
  • Docker

  • OpenStack

  • 心情杂货

  • 更多
  • 虚拟化
周振林
2025-03-21
目录

KVM理解virbr0

# 理解 virbr0

doc3f92a33d82f74063be7ec3767114e881.webp

virbr0 是 KVM 默认创建的一个 Bridge,其作用是为连接其上的虚机网卡提供 NAT 访问外网的功能。virbr0 默认分配了一个IP 192.168.122.1,并为连接其上的其他虚拟网卡提供 DHCP 服务。

下面我们演示如何使用 virbr0。

在 virt-manager 打开 VM1 的配置界面,网卡 Source device 选择 “default”,将 VM1 的网卡挂在 virbr0 上。

docb916993ed3214e4baf18fe8c415f9595.webp

启动 VM1,brctl show 可以查看到 vnet0 已经挂在了 virbr0 上。

# brctl show

bridge name     bridge id       STP enabled     interfaces

br0      8000.000c298decbe       no                    eth0

virbr0   8000.fe540075dd1a       yes                   vnet0
1
2
3
4
5
6
7

用 virsh 命令确认 vnet 就是 VM1 的虚拟网卡。

# virsh domiflist VM1

Interface  Type       Source     Model   MAC

-------------------------------------------------------

vnet0   network  default  rtl8139  52:54:00:75:dd:1a
1
2
3
4
5
6
7

virbr0 使用 dnsmasq 提供 DHCP 服务,可以在宿主机中查看该进程信息

# ps -elf|grep dnsmasq
5 S libvirt+  2422     1  0  80   0 -  7054 poll_s 11:26 ?        00:00:00 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf
1
2

在 /var/lib/libvirt/dnsmasq/ 目录下有一个 default.leases 文件,当 VM1 成功获得 DHCP 的 IP 后,可以在该文件中查看到相应的信息

# cat /var/lib/libvirt/dnsmasq/default.leases

144177 52:54:00:75:dd:1a 192.168.122.6 ubuntu *
1
2
3

上面显示 192.168.122.6 已经分配给 MAC 地址为 52:54:00:75:dd:1a 的网卡,这正是 vnet0 的 MAC。之后就可以使用该 IP 访问 VM1 了。

# ssh 192.168.122.6

root@192.168.122.6's password: 

Welcome to Ubuntu 14.04.2 LTS 

Last login: Sun Sep  6 01:30:23 2015

root@VM1:~# ifconfig

eth0   Link Ethernet  HWaddr 52:54:00:75:dd:1a

      inet addr:192.168.122.6  Mask:255.255.255.0

      inet6 fe80::5054:ff:fe75:dd1a/64 Scope:Link

      UP BROADCAST MULTICAST  MTU:1500

      RX packets:61 errors:0 dropped:0 frame:0

      TX packets:66 errors:0 dropped:0 carrier:0

      collisions:0 txqueuelen:1000 

      RX bytes:7453  TX bytes:8649
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

Ping一下外网。

root@VM1:~# ping www.baidu.com

PING www.a.shifen.com (180.97.33.107)

from 180.97.33.107: icmp_seq=1 ttl=52 time=36.9 ms

from 180.97.33.107: icmp_seq=2 ttl=52 time=119 ms

from 180.97.33.107: icmp_seq=3 ttl=52 time=88.5 ms

from 180.97.33.107: icmp_seq=4 ttl=52 time=38.0 ms

from 180.97.33.107: icmp_seq=5 ttl=52 time=122 ms
1
2
3
4
5
6
7
8
9
10
11
12
13

没有问题,可以访问外网,NAT 起作用了。

需要说明的是,使用 NAT 的虚机 VM1 可以访问外网,但外网无法直接访问 VM1。 因为 VM1 发出的网络包源地址并不是 192.168.122.6,而是被 NAT 替换为宿主机的 IP 了。

这个与使用 br0 不一样,在 br0 的情况下,VM1 通过自己的 IP 直接与外网通信,不会经过 NAT 地址转换。

下节我们讨论 vlan 在 linux bridge 中的实现。

Last Updated: 2025/06/18, 08:59:15
KVM动手实践虚拟网络
Linux 如何实现 VLAN

← KVM动手实践虚拟网络 Linux 如何实现 VLAN→

最近更新
01
Docker安装
06-10
02
Docker运行JAR
06-10
03
Docker部署MySQL
06-10
更多文章>
Copyright © 2019-2025 鲁ICP备19032096号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式