Linux bridge桥接两个VirtualBox虚拟网络的方法步骤

这篇文章缘起于这段时间我对拆东墙补西墙这种工作方式的抱怨。

先是磁盘空间不够用,配发的电脑仅仅剩余12G的空间,不能外接硬盘,暂时也不能上传备份,相当于一台离线的机器吧。我却要完整编译一个4.19版本的Linux内核…于是没日没夜的,我开始人肉压缩再释放的操作,不得开心颜。最终我还是搞定了问题,不过这个磁盘空间问题解决得不算优雅,至少它无法让人觉得我在炫技。

和针对磁盘空间的抱怨相比,下面的问题就有点意思了。

使用虚拟机搭建网络测试环境总是会遇到各种奇葩的问题,这往往是各种虚拟机平台的缺陷所致。(也许我理解狭隘,但在我看来阻碍工作的机制就是缺陷)

虚拟网络毕竟不是真实的,网络技术发展40余年,一个软件想通过覆盖全面的测试几乎是不可能的,设计考虑不周全也是正常现象。

比方说用VirtualBox虚拟机搭建满足如下需求的测试环境:

我需要一台Linux主机作为网桥桥接两个网络。(我需要中间设置些规则又不想走路由)

很简单是不是?你试过吗?

想法非常直接且简单。类似VMWare的Lan Segment,VirtualBox有一种虚拟网络叫做Internal Network,说白了就是帮你摸你一个内部的私有网络。

主机B作为Bridge,网卡配置如下:

作为Bridge桥接两个网络的两台主机,Linux系统做如下配置:

brctl addbr br0;
brctl addif br0 enp0s9;
brctl addif br0 enp0s10;
ifconfig br0 up;

主机H1的enp0s9设置为Internal模式,接入intnet:

H1的Linux系统配置如下:

ifconfig enp0s9 40.40.40.201/24

主机H2的enp0s9设置为Internel模式,接入intnet2:

H2的Linux系统配置如下:

ifconfig enp0s9 40.40.40.100/24

你觉得H1和H2互相ping对方的地址,能通吗?

试过就知道,不行!

迄至2019年11月8日,6.0.14是最新的了:

是的,不行!

我先解释Why,再来演示How。

那么,Why?

和VMWare的LAN Segment内部有一个 虚拟学习型交换机(早期是广播式Hub) 不同, VirtualBox的Internal Network内部的交换机不是学习型的,而是注册型的!

所谓的注册型交换机就是,只有注册过的Mac地址,该交换机才会帮你转发!这类交换机只有两种转发策略:

对于广播帧,所有的端口都发一份。对于单播帧,仅向注册该目标Mac地址的端口发送。

很显然,猜测其内部是有一张表的:

注册端口 Mac地址
P1 Mac1
P2 Mac2

那么交换机是如何注册Mac地址的呢?或者说,从哪里可以看到一个虚拟机的一个网卡注册了哪个Mac呢?

请看“虚拟机->设置->网络”:

每激活一块网卡,展开下面的Advanced就是该网卡的注册Mac地址。

上面的实验不通的原因现在很明确了。H1 ping H2时,经由Linux Bridge,ARP请求可以广播到H2,此时H2收到的ARP广播中,源MAC自然是H1的MAC地址,当H2回复ARP Reply时,目标MAC为H1的MAC地址,而H1的MAC地址没有注册在intnet2的虚拟交换机中,所以intnet2的交换机不会转发这个帧。 所以自然就不通咯!

好了,接下来,我来打通其任督二脉,让它通!是演示How的时候了。

只需要三步:

  • 将intnet上H1的MAC地址注册在Linux Bridge的intnet2网卡enp0s10。
  • 将intnet2上H2的MAC地址注册在Linux Bridge的intnet网卡enp0s9。
  • Linux Bridge主机起来后,通过ifconfig命令将其enp0s9,enp0s10网卡的MAC改成别的。

我来分别演示具体如何做。

我们看到网卡配置界面貌似没有指定MAC地址的选项,只有一个随机生成MAC的按钮:

怎么办?

用命令行啊!

我们使用VBoxManage命令指定特定网卡的MAC地址,如下所示:

zhaoyadeMacBook-Pro:~ $ VBoxManage modifyvm "ubuntu new" --macaddress4 0800279ff0e6
zhaoyadeMacBook-Pro:~ $ VBoxManage modifyvm "ubuntu new" --macaddress3 080027bb3d67

以上的 0800279ff0e6 是H1 enp0s9的MAC地址,而 080027bb3d67 则是H2 enp0s9的MAC地址,从它们的网络配置界面可以看到:

OK,现在启动Linux Bridge机器,完成第三步,之所以需要这一步,是防止地址冲突导致Bridge的转发表中毒:

  • 0800279ff0e6可以从H1的intnet学习到。
  • 0800279ff0e6被配置在自己的enp0s10上。

懵圈了不是?所以必须把Linux Bridge的enp0s9,enp0s10这两个网卡的MAC改成别的,而这个修改动作VirtualBox的Internal Network交换机并不知道(只有新的网卡激活或者重新注册新的MAC会改变转发表,即点击那个小按钮或者执行VBoxManage命令改变MAC地址),所以并不影响其转发表。

好了,让我们行动:

ifconfig enp0s9 hw ether 08:00:27:bb:3d:68
ifconfig enp0s10 hw ether 08:00:27:9f:f0:e7

OK,所有步骤做完,让我们测试:

brctl addbr br0;
brctl addif br0 enp0s9;
brctl addif br0 enp0s10;
ifconfig br0 up;

再次ping一下?

这不就通了嘛…

事实上,HostOnly模式的桥接与Intenal Network类似,也有这样的问题,也是一样的解决方法。

我不知道这个无法桥接两个网络的问题是VirtualBox有意为之还是说它真的是一个实现上的缺陷,但我是真的在实际工作当中遇到了这个需求,所以在我个人看来,它就是缺陷!这一点明显不如VMWare的LAN Segment。

又或者说,VirtualBox仅仅在Mac OS上有这个问题?在Windows上好好的?也说不准,离开Windows平台已经快两年了。

这个问题解决了快一天。

一开始,我觉得是我的brctl配置问题,这么显然的一个操作,咋就不通呢…百思不得其解,我是使用HostOnly做实验的,后来通过抓包发现,H1的返回包直接返回到了Mac OS宿主机的vboxnet1网卡上的,而vboxnet1并没有向Linux Bridge转发这个包,先是怀疑是VirtualBox的一个BUG,重启系统无果后,我大致就猜出什么意思了。至于说什么 “注册型交换机” 这种词,都是我瞎猜自造的,不管怎么说,八九不离十吧,并且我显然跟随这问题解决了它。

好久没有遭遇这类问题了,不过我还是比较喜欢并且善于解这种疑难杂症的,个人不是很擅长写常规知识的教程,但对于这种平时大家不怎么遇到的怪问题,我这里自有妙药。

在找到答案之前,我也Google了很久,查找VirtualBox上对应LAN Segment的东西,并且查找Internal Network和LAN Segment的区别,我甚至想找一个Mac OS上的Virtual Switch来用,自己营造一个虚拟并真实的以太网…如果真的找不到,那就只能DIY一个了。

还好,在这个及其不切实际的大场面上动干戈之前,我突然想到了本文所述的解决问题的方法,谢天谢地~

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • VirtualBox 未指定要bridged的网络界面的解决办法

    VirtualBox 未指定要bridged的网络界面的解决办法 之前换了个新的笔记本,VirtualBox上的东西也陆续迁移了过来, 基本iso安装完成后,在配置网络的时候,出现了错误,设置桥接模式 总是提示网卡1 未指定要bridged的网络界面 纠结了需求,网上的说法是进入网络适配器,选择本地连接,安装VirtualBox下的驱动, 不过这个我试了下发现还是无效的,查看网络连接里面找不到该驱动适配器 如下:是正常的桥接驱动,如果没有红色框中的网卡驱动则,实现不了桥接模式: 纠结了一下,把本

  • Linux bridge桥接两个VirtualBox虚拟网络的方法步骤

    这篇文章缘起于这段时间我对拆东墙补西墙这种工作方式的抱怨. 先是磁盘空间不够用,配发的电脑仅仅剩余12G的空间,不能外接硬盘,暂时也不能上传备份,相当于一台离线的机器吧.我却要完整编译一个4.19版本的Linux内核-于是没日没夜的,我开始人肉压缩再释放的操作,不得开心颜.最终我还是搞定了问题,不过这个磁盘空间问题解决得不算优雅,至少它无法让人觉得我在炫技. 和针对磁盘空间的抱怨相比,下面的问题就有点意思了. 使用虚拟机搭建网络测试环境总是会遇到各种奇葩的问题,这往往是各种虚拟机平台的缺陷所致.

  • Virtualbox NAT网络配置方法

    Virtualbox 本身自带了一个NAT网络地址转换的连接方式,不用配置可以直接使用. 既然有现成的直接可以选,为什么还要配置 NAT网络呢?原因在于默认的NAT网络,网段是预置好的** 10.0.2.0/24**,本来也没什么问题.只是最近连接 项目VPN时,VPN的网段也是 10.0.2.0/24. 虽然能成功连接VPN,但是虚拟机上的多个服务之间的经常会出现无法连接的情况,在虚拟机中用SSH也连不上VPN中的服务器,折腾了好长时间才发现可能是网段冲突导致的. 于是,才想到自己去配置一个N

  • VMware配置VMnet8网络的方法步骤

    目录 一.简介 二.配置步骤 一.简介 1.NAT模式(VMnet8)可以实现虚拟机之间.虚拟机和主机之间以及虚拟机和外部的网络通信: 2.虚拟机的IP只需要配置NAT网段中的IP,访问外部host可以通过宿主机IP访问.它不需要有外部网络独立的IP(即物理交换机网段中的IP): 3.虚拟机的网络配置确定后,就可以很少变动.因为NAT配置不变,宿主机连接的网络变化,不影响虚拟机. 二.配置步骤 1.关闭主机的防火墙(好像可以不用关闭) 2.关闭虚拟机的防火墙 切换root用户,输入以下命令 ce

  • Linux环境下使用Docker搭建Jenkins容器的方法步骤

    目录 需要提前准备的条件 Step1:安装Jenkins镜像 Step2:docker启动Jenkins容器 Step3:访问Jenkins Step4:安装Jenkins插件 需要提前准备的条件 Maven环境 Docker环境 JDK环境(Centos8 自带JDK环境去除,重装的JDK) Step1:安装Jenkins镜像 用docker查询jenkins镜像 docker search jenkins 我们选择下载第二个,jenkins/jenkins,下载命令 docker pull

  • linux环境apache多端口配置虚拟主机的方法深入介绍

    默认情况下,linux上apache使用的默认文档目录是:/var/www默认端口是:80如果想发布自己的一个系统资源目录,可以使用下面的方法,执行如下命令:(1)添加监听端口#cd /etc/apache2#vim ports.conf文件添加:NameVirtualHost *:8000Listen 8000(2)配置虚拟目录#cd /etc/apache2/sites-available#cp default default-me#vim default-me文件内容如下: 复制代码 代码

  • CentOS 7.3配置Nginx虚拟主机的方法步骤

    实验环境 一台最小化安装的CentOS 7.3虚拟机 配置基本环境 1. 安装nginx yum install -y epel-* yum isntall -y nginx vim 2. 建立虚机主机的站点根目录 mkdir /var/wwwroot mkdir /var/wwwroot/site1 mkdir /var/wwwroot/site2 echo -e "site1" >> /var/wwwroot/site1/index.html echo -e "

  • LInux下如何挂载光盘找rpm包的方法步骤

    写在前面 Linux 使用有时需要安装软件,当然可以通过 yum 命令来在线安装,也可以通过下载好的 rpm 包来进行安装,但是 rpm 安装需要自己来找安装软件所依赖的 rpm 包.今天就来尝试操作下 系统环境 CentOS 7.5 [root@localhost /]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) 1.找到光盘的全路径 [root@localhost /]# ls -l /dev | grep cd

  • VirtualBox虚拟机网络设置四种模式详细说明

    VirtualBox的提供了四种网络接入模式,它们分别是: 1.NAT 网络地址转换模式(NAT,Network Address Translation) 2.Bridged Adapter 桥接模式 3.Internal 内部网络模式 4.Host-only Adapter 主机模式 第一种 NAT模式  NAT模式是最简单的实现虚拟机上网的方式,你可以这样理解:Vhost访问网络的所有数据都是由主机提供的,vhost并不真实存在于网络中,主机与网络中的任何机器都不能查看和访问到Vhost的存

  • Linux基本网络配置方法介绍

    1.常用配置网络指令 (1) 配置eth0的IP地址, 同时激活该设备 sudo ifconfig eth0 192.168.1.10 netmask 255.255.255.0 up (2) 添加默认网关 sudo route add default gw 192.168.1.1 (3) 配置DNS $ sudo vi /etc/resolv.conf nameserver 202.96.134.133 nameserver 202.96.128.68 nameserver 202.96.12

  • virtualbox虚拟机网络设置原理解析

    这几天在虚拟机中研究操作系统(OS)的属性问题,众所周知,最经济实惠,最廉价的方法就是架设虚拟机.这段时间我在我的个人电脑上面装了CENTOS.LINUXMINT.WINDOWS8的操作系统,系统是装好了,但是遇到了一个问题,虚拟机与实体机的网络互联,及虚拟机的网络访问问题始终没有解决. 这几天耐心下通过度娘,查找了一些资料,通过观察,渐渐弄明白了VIRTUALBOX的网络设置问题,恩,废话不多说,首先介绍一下虚拟机的几种网络连接方式. 第一种:NOT ATTACHED 顾名思义就是不设置网络连

随机推荐