【技服新员工云计算实验手册】4.通过Linux Bridge配置虚拟机通信网络
  

鸡爷 2150

{{ttag.title}}
本帖最后由 鸡爷 于 2019-11-22 15:49 编辑

版权声明:本文为CSDN博主「CloudMan6」的原创文章

Linux Bridge 基本概念
假设宿主机有 1 块与外网连接的物理网卡 eth0,上面跑了 1 个虚机 VM1,现在有个问题是: 如何让 VM1 能够访问外网?
至少有两种方案
1.将物理网卡eth0直接分配给VM1,但随之带来的问题很多: 宿主机就没有网卡,无法访问了; 新的虚机,比如 VM2 也没有网卡。 下面看推荐的方案
2. VM1 分配一个虚拟网卡 vnet0,通过 Linux Bridge  br0 将 eth0 和 vnet0 连接起来,如下图所示
Linux Bridge 是 Linux 上用来做 TCP/IP 二层协议交换的设备,其功能大家可以简单的理解为是一个二层交换机或者 Hub。多个网络设备可以连接到同一个 Linux Bridge,当某个设备收到数据包时,Linux Bridge 会将数据转发给其他设备。
在上面这个例子中,当有数据到达 eth0 时,br0 会将数据转发给 vnet0,这样 VM1 就能接收到来自外网的数据; 反过来,VM1 发送数据给 vnet0,br0 也会将数据转发到 eth0,从而实现了 VM1 与外网的通信。

现在我们增加一个虚机 VM2,如下图所示
VM2 的虚拟网卡 vnet1 也连接到了 br0 上。 现在 VM1 和 VM2 之间可以通信,同时 VM1 和 VM2 也都可以与外网通信。

本节将演示如何在实验环境中实现下图所示的虚拟网络

配置 Linux Bridge br0
配置bridge上网方式
1、创建桥接器
/etc/sysconfig/network-scripts目录下,创建一个ifcfg-br0 文件,其类型设为Bridge:
例:
DEVICE=br0
BOOTPROTO=static
BROADCAST=192.168.110.255
IPADDR=192.168.110.205
NETMASK=255.255.255.0
NETWORK=192.168.110.0
ONBOOT=yes
GATEWAY=192.168.110.1
TYPE=Bridge

2、将物理接口桥接到桥接器
/etc/sysconfig/network-scripts目录下,修改eth0的内容(本实验中,物理服务器是用eth0上网的),去掉其IP相关信息,加上“BRIDGE=br0”,将其桥接到br0上;如果是双网卡或是多网卡,照此过程修改:
DEVICE=eth0
HWADDR=00:30:48:F1:7C:3A
ONBOOT=yes
BRIDGE=br0

3、重启物理机网络服务
[root@virt ~]# service network restart
正在关闭接口 br0:                                        [确定]
正在关闭接口 eth0:                                        [确定]
关闭环回接口:                                            [确定]
弹出环回接口:                                            [确定]
弹出界面 eth0:                                            [确定]
弹出界面 br0:                                            [确定]
重启宿主机,查看 IP 配置,可以看到 IP 已经放到 br0 上了

# ifconfig
br0       Link encap:Ethernet  HWaddr 00:0c:29:8d:ec:be         
inet addr:192.168.111.107  Bcast:192.168.111.255  Mask:255.255.255.0         
inet6 addr: fe80::20c:29ff:fe8d:ecbe/64 Scope:Link         
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1         
RX packets:22573 errors:0 dropped:0 overruns:0 frame:0         
TX packets:2757 errors:0 dropped:0 overruns:0 carrier:0         
collisions:0 txqueuelen:0         
RX bytes:4927580 (4.9 MB)  TX bytes:368895 (368.8 KB)

eth0      Link encap:Ethernet  HWaddr 00:0c:29:8d:ec:be         
inet6 addr: fe80::20c:29ff:fe8d:ecbe/64 Scope:Link         
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1         
RX packets:24388 errors:0 dropped:0 overruns:0 frame:0         
TX packets:2816 errors:0 dropped:0 overruns:0 carrier:0         
collisions:0 txqueuelen:1000         
RX bytes:5590438 (5.5 MB)  TX bytes:411558 (411.5 KB)

brctl show 查看当前 Linux Bridge 的配置。 eth0 已经挂到 br0 上了
# brctl show bridge name     bridge id               STP enabled     interfaces
br0             8000.000c298decbe       no                    
eth0 virbr0          8000.000000000000       yes

配置 VM1
下面我们在 virt-manager 中查看一下 VM1 的网卡配置
可以看到虚拟网卡的 source device 我们选择的是 br0
下面我们启动 VM1,看会发生什么

# virsh start VM1 Domain VM1 started
# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.000c298decbe       no                    eth0                                                              
                                                      vnet0
virbr0          8000.000000000000       yes
brctl show 告诉我们 br0 下面添加了一个 vnet0 设备,通过 virsh 确认这就是VM1的虚拟网卡。

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

给VM1 设置静态 IP (和Bridge IP同一网段),通过 virt-manager 控制台登录 VM1,查看 IP。
# ifconfig
eth0      Link encap:Ethernet  HWaddr 52:54:00:75:dd:1a         
inet addr:192.168.111.106  Bcast:192.168.111.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:400 errors:0 dropped:0 overruns:0 frame:0         
TX packets:101 errors:0 dropped:0 overruns:0 carrier:0         
collisions:0 txqueuelen:1000         
RX bytes:41950 (41.9 KB)  TX bytes:12583 (12.5 KB)

VM1 的 IP 是 192.168.111.106,与宿主机(IP为192.168.111.107)是同一个网段。

Ping 一下外网
root@VM1:~# ping www.baidu.com
PING www.a.shifen.com (180.97.33.108) 56(84) bytes of data.
64 bytes from 180.97.33.108: icmp_seq=1 ttl=53 time=34.9 ms
64 bytes from 180.97.33.108: icmp_seq=2 ttl=53 time=36.2 ms
64 bytes from 180.97.33.108: icmp_seq=3 ttl=53 time=38.8 ms

没问题,可以访问。
另外,在 VM1 中虚拟网卡是 eth0,并不是 vnet0。 vent0 是该虚拟网卡在宿主机中对应的设备名称,其类型是 TAP 设备,这里需要注意一下。、

配置 VM2
VM1 一样,VM2 的虚拟网卡也挂在 br0上,启动 VM1,查看网卡信息
# virsh start VM2 Domain VM2 started
# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.000c298decbe       no                   eth0                                                                               
                                                 vnet0                                                                                 
                                                 vnet1
virbr0          8000.000000000000       yes

br0 下面多了 vnet1,通过 virsh 确认这就是 VM2 的虚拟网卡。
# virsh domiflist VM2 Interface  Type       Source     Model       MAC
-------------------------------------------------------
vnet0      bridge     br0        rtl8139     52:54:00:cf:33:a1

VM2 配置 IP地址 192.168.111.108,登录 VM2,验证网络的连通性

Ping VM1
root@VM2:~# ping VM1
PING VM1 (192.168.111.106) 56(84) bytes of data.
64 bytes from 192.168.111.106: icmp_seq=1 ttl=64 time=4.54 ms
64 bytes from 192.168.111.106: icmp_seq=2 ttl=64 time=1.63 ms
64 bytes from 192.168.111.106: icmp_seq=3 ttl=64 time=2.16 ms

Ping 宿主机
root@VM2:~# ping 192.168.111.107
PING 192.168.111.107 (192.168.111.107) 56(84) bytes of data.
64 bytes from 192.168.111.107: icmp_seq=1 ttl=64 time=1.02 ms
64 bytes from 192.168.111.107: icmp_seq=2 ttl=64 time=0.052 ms
64 bytes from 192.168.111.107: icmp_seq=3 ttl=64 time=0.064 ms

Ping 外网
root@VM2:~# 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=53 time=53.9 ms
64 bytes from 180.97.33.107: icmp_seq=2 ttl=53 time=45.0 ms
64 bytes from 180.97.33.107: icmp_seq=3 ttl=53 time=44.2 ms

打赏鼓励作者,期待更多好文!

打赏
暂无人打赏

一个无趣的人 发表于 2020-3-11 20:39
  
多谢楼主的分享,期待楼主分享更多的技术贴。
发表新帖
热门标签
全部标签>
安全效果
西北区每日一问
技术盲盒
技术笔记
干货满满
【 社区to talk】
每日一问
信服课堂视频
GIF动图学习
新版本体验
技术咨询
2023技术争霸赛专题
功能体验
产品连连看
安装部署配置
标准化排查
通用技术
秒懂零信任
技术晨报
自助服务平台操作指引
原创分享
排障笔记本
玩转零信任
排障那些事
SDP百科
技术争霸赛
深信服技术支持平台
以战代练
升级&主动服务
畅聊IT
答题自测
专家问答
技术圆桌
在线直播
MVP
网络基础知识
升级
安全攻防
上网策略
测试报告
日志审计
问题分析处理
流量管理
每日一记
运维工具
云计算知识
用户认证
解决方案
sangfor周刊
VPN 对接
项目案例
SANGFOR资讯
专家分享
技术顾问
信服故事
功能咨询
终端接入
授权
设备维护
资源访问
地址转换
虚拟机
存储
迁移
加速技术
产品预警公告
信服圈儿
S豆商城资讯
「智能机器人」
追光者计划
社区帮助指南
答题榜单公布
纪元平台
卧龙计划
华北区拉练
天逸直播
山东区技术晨报
文档捉虫活动
齐鲁TV
华北区交付直播
每周精选
2024年技术争霸赛
北京区每日一练
场景专题
故障笔记
高手请过招
高频问题集锦
社区新周刊
POC测试案例
全能先锋系列
云化安全能力

本版达人

新手89785...

本周建议达人

YangZhe...

本周分享达人