代码改变世界

virtualbox 虚拟机网络问题 VirtualBox虚拟机不同网络IP变动的最佳解决方案

2022-03-02 15:28  youxin  阅读(3526)  评论(0编辑  收藏  举报

virtualbox 主机和虚拟机处于同一网段

 

首先说明使用有线网卡和使用wifi模式是不同的。

 

virtualbox默认的网络连接方式如下

这种连接方式虚拟机可以ping通宿主机和外网,但是宿主机无法ping通虚拟机,执行ip address命令可以看到虚拟机自动分配的ip地址是10.0.2.15(我这里显示的是这个ip,可能会有不同),跟宿主机根本不在一个网段。

VirtualBox的四种网络连接方式

可以看到桥接模式是最佳选项,它支持所有情况的访问 。

 最简单的办法:使用桥接模式(虚拟机网卡的ip需要设置和主机在同一网段)

我的实际情况是在新建虚拟机的时候就设置好 bridge模式。 我是wifi网络,选择intel wifi. 然后建好虚拟机就行了,这种方法不需要额外设置,就可以有虚拟机和主机相互ping通的效果。可谓是开箱即用。

在虚拟机里选择要桥接的物理网卡,这里选择的是Intel wi-fi这个物理网卡:

 

 

 

因为启用了【网卡1】,虚拟机会给Ubuntu系统配置一块虚拟网卡【enp03】,这里我们设置Ubuntu虚拟网卡和桥接的Windows物理网卡在同一个网段,这样就可以实现互通了;

 

因为windows的wifi网卡地址是:10.4.23.200,所以设置虚拟机的enp0s3网卡地址为:10.4.23.218;这样两个系统现在都在真实的网络上,且可以正常上网

 

出现的问题:有一次我发现主机可以ping通虚拟机,虚拟机ping不同主机。

解决办法:

控制面板->windows 防火墙->启用或关闭windows防火墙->关闭(建议重启计算机)。

 

 

Bridged(桥接模式)

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

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

其网络结构如下图所示:

  • 桥接模式:物理机和虚拟机在网络上是一样的,虚拟系统相当于在此网络下的一个独立系统,需要分配网络的一个独立IP。
  • 连接时指定的桥接到哪个物理网卡,相当于要把虚拟系统接到那个网段的交换机上。

https://zhuanlan.zhihu.com/p/403513377

https://www.cnblogs.com/chenhaoqiang/p/9491902.html

https://zhuanlan.zhihu.com/p/403513377

 

桥接网络配置静态IP访问(最简单的方式,只需要配置一块网卡)

virtualbox设置桥接模式联网

注意:选择电脑正在使用的网卡!!!共享同一张网卡

  1. 在 CentOS 7 中,通过编辑网络配置文件来配置网络参数。找到 /etc/sysconfig/network-scripts/ 目录下与网卡名对应的网络配置文件,如 ifcfg-enp0s3
  2. 在该文件中,将 BOOTPROTO 的值设置为 dhcp,表示使用 DHCP 方式自动获取 IP 地址;或者将 BOOTPROTO 的值设置为 static,表示手动配置 IP 地址。
  3. 如果使用静态 IP 地址,可以设置 IPADDRNETMASKGATEWAYDNS1 等参数,例如:
DEVICE=enp0s3
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.1.100 #与宿主机在同一个网络
NETMASK=255.255.255.0 
GATEWAY=192.168.1.1  #要和宿主机相同
DNS1=8.8.8.8
DEFROUTE=yes


9.保存文件并退出编辑器,然后重新启动网络服务。
systemctl restart network

这样,在虚拟机中设置桥接模式,并在 CentOS 7 中配置网络参数,就可以实现虚拟机与主机所在局域网的通信。

[参考文章:

Virtualbox桥接实现静态固定IP内外网访问

 

 

 

不同网络环境IP变动的最佳解决方案 (下面废弃,不可行)

网络连接种类

由下图可以看到,网络有很多种选择,但是我们常用的是这是三个 网络地址转换(NAT)、桥接网卡、仅主机(Host-Only)网络

为什么有这些网络选择呢,因为每种网络有着自己的特点,下面列举下主要特点

模式名称特点
网络地址转换(NAT) 连接这个网络可以访问外部网络,但是外部网络不可访问虚拟机
桥接网卡 这个网络完全可以共享主机网络,主机网络发生变化时,也跟随变化,ip也随之变动
仅主机(Host-Only)网络 这个网络也可以用来主机访问虚拟机以及虚拟机上web服务,但是虚拟机不可访问外网

 


一、网络选择

从上面的介绍来看有多种网络可以选择

最简单的就是:选择桥接网卡,直接共享主机网络,主机、虚拟机之间访问都没有问题

但是我们家用或者公司使用,都不会固定ip的,主机随时变化,那么虚拟机的ip也随时变化,很不方便,我们希望虚拟机的ip是固定的,方便我们连接和访问服务使用

所以最终的选择是:网络地址转换(NAT) + 仅主机(Host-Only)网络 的组合

https://zhuanlan.zhihu.com/p/363202714

 

二、实施步骤

1.新增 仅主机(Host-Only)网络

操作步骤:管理 => 主机网路管理器 => 创建网络

然后就会在 控制面板 => 网络和 Internet => 网络连接

这里看到对应的网络,这样主机(Host-Only)网络的ip就配置好了

2.配置虚拟机网络

点击安装好的Centos7虚拟机 设置 => 网络 网卡1 启用 选择 仅主机(Host-Only) 这里的网卡顺序也是有意义的,对应内部的设置

网卡2 启用 选择 网络地址转换(NAT) 网络 ( 我选择的不是这个,是桥接网络

(设置的时候需要关闭虚拟机,要不然不能选择网卡。)

3.虚拟机内部设置

启动Centos7

执行

ifconfig

得到如下结果

 

进入网络配置文件的路径

cd /etc/sysconfig/network-scripts/

可以看到 ifcfg-enp0s3 (仅主机(Host-Only) 对应的配置)

vi ifcfg-enp0s3

 

结果参考

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static   #修改为static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s3
DEVICE=enp0s3
ONBOOT=yes  # 改为yes
IPADDR=192.168.11.11   # 自定义该虚拟机的固定IP ,只要其 IP 在 192.168.11.0 / 24 这个网段就行
UUID=c7695ef6-167b-4589-8c04-4feedef3e203 

修改完毕之后,需要重新启动网路

systemctl restart network

到这里就可以 执行 ifconfig 查看了,已经设置成固定ip了 同时 ping  也是可以联网的

(

网络配置文件 /etc/sysconfig/network-scripts/ifcfg-enp0s3
/etc/sysconfig/network-scripts/ifcfg-enp0s3文件是最重要的网络配置文件,后面的enp0s3其实是网卡的名称,不同的Linux网卡的名称可能有所不同,但网络配置文件的路径位置基本不变,

YPE=Ethernet #类型Ethernet表示以太网
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp #引导协议,三个值:dhcp自动获取IP地址,static表示静态/固定IP,none表示引导时不使用协议
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes #以下几个是IPV6的相关信息
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s3 #网卡名称,有些网卡也会叫ens33
UUID=4899a9b4-3e56-46e4-9722-9267383c1b0d #UUID,这个应该是网卡的一个ID号吧
DEVICE=enp0s3 #网卡设备名称
ONBOOT=yes #网卡是否开机启动,yes表示开机启动
HWADDR=08:00:27:05:57:A2 #物理地址,即mac地址

 

 

 

4. 防火墙设置

上面这些操作之后发现,只能通过xshell 连接

如果xshell 不能连接 ,是没有安装sshd

yum list | grep ssh
yum install openssh-clients.x86_64

安装之后就可以了

当只能通过xshell 连接 ,比如启动一个tomcat服务8080端口,发现不能连接,这是就是防火墙问题了

CentOS 7的防火墙默认是firewall而不是之前的iptables, 所以需要确定防火墙是否已经关闭,如果没有安装iptables的话, 只需要通过

systemctl stop firewalld.service  ## 关闭firewall防火墙
systemctl disable firewalld.service  ## 禁止开机启动

然后通过

firewall-cmd --state

可以查看防火墙状态(关闭显示notrunning,开启显示running)。

可以使用关闭iptables防火墙

systemctl stop iptables.service

这样就能通过主机访问虚拟的服务了


总结

本文详细描述了VirtualBox设置静态ip和怎么让主机访问虚拟机内的服务,其中的一些网络配置都可以直接使用,linux指令也可以直接复制使用

 https://zhuanlan.zhihu.com/p/363202714

 

 

【VirtualBox虚拟机】不同网络环境IP变动的最佳解决方案