理解 virbr0 - 每天5分钟玩转 OpenStack(11)

本文涉及的产品
公网NAT网关,每月750个小时 15CU
简介: virbr0 是 KVM 默认创建的一个 Bridge,其作用是为连接其上的虚机网卡提供 NAT 访问外网的功能。 virbr0 默认分配了一个IP 192.168.122.1,并为连接其上的其他虚拟网卡提供 DHCP 服务。


virbr0 是 KVM 默认创建的一个 Bridge,其作用是为连接其上的虚机网卡提供 NAT 访问外网的功能。

virbr0 默认分配了一个IP 192.168.122.1,并为连接其上的其他虚拟网卡提供 DHCP 服务。

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

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

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

# brctl show bridge name     bridge id               STP enabled     interfaces br0             8000.000c298decbe       no                    eth0 virbr0          8000.fe540075dd1a       yes                   vnet0

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

# virsh domiflist VM1 Interface  Type       Source     Model       MAC ------------------------------------------------------- vnet0      network    default    rtl8139     52:54:00:75:dd:1a

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

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

# cat /var/lib/libvirt/dnsmasq/default.leases 1441525677 52:54:00:75:dd:1a 192.168.122.6 ubuntu *

上面显示 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 (GNU/Linux 3.16.0-30-generic x86_64) Last login: Sun Sep  6 01:30:23 2015 root@VM1:~# ifconfig eth0      Link encap:Ethernet  HWaddr 52:54:00:75:dd:1a          inet addr:192.168.122.6  Bcast:192.168.122.255  Mask:255.255.255.0          inet6 addr: fe80::5054:ff:fe75:dd1a/64 Scope:Link          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1          RX packets:61 errors:0 dropped:0 overruns:0 frame:0          TX packets:66 errors:0 dropped:0 overruns:0 carrier:0          collisions:0 txqueuelen:1000          RX bytes:7453 (7.4 KB)  TX bytes:8649 (8.6 KB)

Ping一下外网。

root@VM1:~# ping www.baidu.com PING www.a.shifen.com (180.97.33.107) 56(84) bytes of data. 64 bytes from 180.97.33.107: icmp_seq=1 ttl=52 time=36.9 ms 64 bytes from 180.97.33.107: icmp_seq=2 ttl=52 time=119 ms 64 bytes from 180.97.33.107: icmp_seq=3 ttl=52 time=88.5 ms 64 bytes from 180.97.33.107: icmp_seq=4 ttl=52 time=38.0 ms 64 bytes from 180.97.33.107: icmp_seq=5 ttl=52 time=122 ms

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

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

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

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

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
传感器 Ubuntu 机器人
Python 机器人学习手册:1~5
Python 机器人学习手册:1~5
359 0
|
数据采集 安全 前端开发
视频类音频了网站如何防止被盗
视频类音频了网站如何防止被盗
455 0
|
消息中间件 算法 Linux
【Linux】详解如何利用共享内存实现进程间通信
【Linux】详解如何利用共享内存实现进程间通信
864 1
|
Prometheus 监控 Cloud Native
Golang深入浅出之-Go语言中的分布式追踪与监控系统集成
【5月更文挑战第4天】本文探讨了Go语言中分布式追踪与监控的重要性,包括追踪的三个核心组件和监控系统集成。常见问题有追踪数据丢失、性能开销和监控指标不当。解决策略涉及使用OpenTracing或OpenTelemetry协议、采样策略以及聚焦关键指标。文中提供了OpenTelemetry和Prometheus的Go代码示例,强调全面可观测性对微服务架构的意义,并提示选择合适工具和策略以确保系统稳定高效。
358 5
|
小程序 前端开发 API
深入解析微信小程序全栈开发流程
【4月更文挑战第12天】本文详述了微信小程序全栈开发流程,从需求分析到发布运营。首先,需进行需求分析与规划,明确目标用户和功能。接着,前端开发使用WXML和WXSS构建页面,JavaScript处理逻辑,结合微信API实现交互。后端开发涉及数据库设计、业务逻辑处理、API接口开发及服务器运维。完成后的调试与测试确保质量,最后发布并持续优化。全栈开发涉及多种技能,理解整个流程对创建优质小程序至关重要。
551 1
|
JSON 数据格式
Node convert pdf to json
Node convert pdf to json
266 0
|
消息中间件 机器学习/深度学习 传感器
Kafka +深度学习+ MQTT搭建可扩展的物联网平台【附源码】
Kafka +深度学习+ MQTT搭建可扩展的物联网平台【附源码】
743 3
Kafka +深度学习+ MQTT搭建可扩展的物联网平台【附源码】
|
机器人 C++
【什么是摆线减速器?设计、3D 打印和测试】
在本教程中,我们将学习什么是摆线驱动器,它是如何工作的,解释如何设计我们自己的模型和 3D 打印模型,以便我们可以在真实现场看到它并更好地了解它是如何工作的。
365 0
|
NoSQL Linux 网络协议
GDB(十)--调试正在运行的进程
我编写了一个循环:     long i;    for (i = 0; i < 999999; i++) {        mt.a += 1;        sleep(1);    }把它编译成a.out,并在后台执行它:./a.out & [1] 2570 然后用命令gdb ./a.out 2570可以附加到这个进程上。
2264 0