前言知识
在学习配置网络之前,我们需要先了解下关于virtualBox的三种网络模式
需求分析
现在如何实现一种效果,我想达到主机可以访问虚拟机,并且虚拟机能够访问外网。还有如果我更换了路由器,之前配置的虚拟机ip是不变的,而且之前配置的虚拟机网络也是正常访问的
简单概况下几种网络模式的注意点
桥接模式
虚拟机ip地址需要与主机在同一个网段,如果需要联网,则网关与DNS需要与主机网卡一致。
主机模式
它的网络结构是在NAT网络的基础上,去除虚拟NAT设备让它不能上网。虚拟机的IP地址和Host-Only的网卡地址要在同一个网段
NAT模式
NAT模式下,虚拟机访问网络的所有数据都是由主机提供的
- 虚拟机可以通过网络访问主机
- 主机无法通过网络访问虚拟机
根据上面的分析,我们可以使用NAT + Host-Only两种模式,实现虚拟机上网和物理机通信两种能力
所以我们思路就是使用
设置2个网卡:第一个为nat(网络地址转换),实现虚拟机到主机、虚拟机到外网的访问;第二个为host-only,实现主机到虚拟机、虚拟机到虚拟机的访问。
动手实践
在virtualBox菜单工具 使用管理-》全局设定 创建nat网络并修改默认生成的ip网段为我们自定义的
选中我们的虚拟机实例,点击设置到网络这里,我们添加两种网卡
添加完之后,我们就可以进入我们的虚拟机实例,配置下静态ip
cd /etc/sysconfig/network-scripts
vim ifcfg-enp0s3 (ifcfg-enp0s3这个名称可能会不同,我们可以使用ifconfig 获取ip a 命令查看到对应的网卡名称找到对应的文件修改) 这个是nat模式的虚拟网卡名称
下面是 ifcfg-enp0s3 文件修改后完整的内容,这里我们填写了
BOOTPROTO=static
IPADDR=10.0.3.10
NETMASK=255.255.255.0
GATEWAY=10.0.3.1
TYPE=Ethernet
ONBOOT=yes
#PROXY_METHOD=none
BOOTPROTO=static
#DEFROUTE=yes
IPV4_FAILURE_FATAL=no
UUID=5ac6e7f0-861cf-49af-a150-62057ef44c3t7
DEVICE=enp0s3
IPADDR=10.0.3.10
NETMASK=255.255.255.0
GATEWAY=10.0.3.1
到这里我们返回切换到主机环境的网络连接
双击配置以下内容,这里我们配置下宿主机为固定ip 地址,这里需要注意的是
设置主机的IP地址和Host-Only的网卡地址要在同一个网段
返回我们的virtualbox工具栏 管理-》主机网络管理器,设置手工配置网卡,如果DHCP服务器选项是启用请去掉勾选
进入虚拟机,我们配置下host模式网卡配置
我自己机器是这个ifcfg-enp0s8文件名称,如果没有该文件,我们可以使用ipconfig 或者ip a命令获取到对应的网卡名称 ifcfg-这个开头的名称是不变的 然后复制一份ifcfg-enp0s3的配置来改改
ifcfg-enp0s8文件具体的内容是
TYPE=Ethernet
ONBOOT=yes
#PROXY_METHOD=none
#BROWSER_ONLY=no
BOOTPROTO=static
#DEFROUTE=yes
IPV4_FAILURE_FATAL=no
UUID=5ac6e7f0-861cf-49af-a150-62057ef44c37h
DEVICE=enp0s8
IPADDR=192.168.56.10
NETMASK=255.255.255.0
GATEWAY=192.168.56.1
以上内容操作完成后,我们就执行systemctl restart network 命令来看下效果,我这里直接是reboot
查看效果
主机cmd命令ping 下我们的虚拟机ip
进入虚拟机,ping下主机
测试下虚拟机ping下外网的地址
如何来排查
使用route -n 命令结果发现我们enp0s8网卡成为了默认路由,就导致其他路由不能匹配到的网段都会走enp0s8这个网卡,而我们实际上配置与外网连接的虚拟网卡是enp0s3,环境自然就连接不了外网了。我们可以尝试手动来删除现在的默认路由。
来我们调整以下这里,删除默认路由
route del default
配置默认路由,注意这里的gw 10.0.3.2 的取值
简单的说,就是如果第1个网卡是NAT网卡,那么其网段的第三个数字就0+2=2就是10.0.3.0,网关为10.0.3.2,name server则是10.0.3.3.以此类推。
route add default gw 10.0.3.2 dev enp0s3
弄完之后我们看下效果
以上的解决是我通过在网上找到的解决方案,但是大家有没有想过,如果我在ifcfg网卡配置文件里面指定nat模式的网卡配置 为默认路由,将host模式的网卡配置设置为不是默认路由,是不是可以解决这个问题呢?试一试
找到ifcfg-enp0s3文件之前把这里注释掉了,我们把这里放开
’
找到ifcfg-enp0s8文件我们改选项参数设置为no
我们执行下重启网络命令看下效果
systemctl restart network
果然我们也实现了这种效果
ssh工具连接
nat端口转发连接
回到我们的virtualBox工具栏选择 管理-》全局设定 修改nat网络
添加端口转发配置规则
使用ssh工具连接
可以看到我们已经可以正常连接
host主机模式通信连接
使用ssh工具连接
可以看到我们已经可以正常连接