VBox组件内部局域网

news2024/11/24 6:00:02

我使用VirtualBox并不是很专业,只是拿它来组件服务器。后来这个虚拟机对我越来越重要,我的各种测试服务器和学习服务器越来越多,于是我就给他们规划了IP地址,像这样:

 我用的网络一直都是桥接,每个虚拟机都可以上网,也都可以和本地电脑通信,用起来得心应手。

有一天我忽然需要要把一个使用了虚拟机服务器的项目拿到别的地方展示。脱离了我家里的路由器,网络通信出了问题。我才意识到我的本地电脑和虚拟机之间需要组件一个内部网络,没有物理路由器的支持也能正常工作。当然,我希望能切换自如,毕竟虚拟机也需要上网。

经过研究,我采用了双网卡机制,网卡1还是原来的,采用桥接方式上网,可以访问互联网。开启网卡2,用host-only方式上网。

首先需要建立一个新的网络,vbox本身是有一个192.168.56.x网段的网络,如果有必要可以另外创建一个。

在网络设置里面对相应的适配器做点设置。

 

 开启网卡2,选择host-only模式,选择自己创建的一个网络。

 启动虚拟机。由于此时的网卡2使用的是动态分配的ip,所以没法用网卡2的ip去ssh,可以使用网卡1的ip登录,或者在虚拟机显示界面直接登录,查看和修改网卡2的配置。

centos7默认网卡1的配置文件在/etc/sysconfig/network-scripts/下面,文件名为ifcfg-enp0s3,网卡2的名称为ifcfg-enp0s8,网卡3为ifcfg-enp0s9,网卡4为ifcfg-enp0s10,但是后面三张网卡实际上没有配置文件,需要手动去创建。我们可以把网卡1的配置文件复制一份,改文件名,再打开,修改内容。

 红框部分都是需要修改的,UUID可以重新生成一个,也可以做一点稍微的修改,不要与复制的源文件相同就好了。

重启网络,就可以用网卡2的ip登录了。

 为了不混乱,我把网卡1确定为桥接网络,网卡2,确定为192.168.2.x网段,网卡3确定为192.168.10.x网段,网卡4使用vbox默认的192.168.56.x网段,一般使用前两个就行,四个网卡全开会出问题。可以根据网络环境的不同开启合适的网络。

手动复制和修改网络配置文件比较麻烦。我一般会把配置文件做好,放置在一个基础镜像vdi中,需要新增服务器就复制镜像修改。后来我查找资料,学习研究,设计了一个将就够用的脚本,用脚本来修改网卡配置。

脚本源码如下: 

#!/bin/bash
#auto alter ip
#auth by chris chan
#2020年10月30日 10:50:00
#######################
DATE=`date +%Y%m%d%H%M`

#定义函数 - 选择要修改IP的网卡
INTERFACE_CHOOSE () {
        echo -e "\033[32m---------------------------------------------------------\033[0m"
        PS3="请按提示,选择要修改的网卡:"
        select INTERFACE in `ls /sys/class/net/|grep -v 'lo'`
        do
                break
        done
}

#定义函数 - 输入IP地址,如果IP地址不正确,循环输入,直到正确为止
DEFINE_IPADDR_NEW () {
        echo -e "\033[32m----------------------------------------------------------\033[0m"
        echo ""
        read -p "请正确输入IP地址: " NEW_IPADDR
        echo ${NEW_IPADDR}|grep -iwE '^[1-2][0-9]{0,2}\.([0-9]{1,3}\.){2}[0-9]{1,3}$' >/dev/null 2>&1
        while [ $? -ne 0 ]
        do
                read -p "IP定义不正确,请重新输入 :    " NEW_IPADDR
                echo ${NEW_IPADDR}|grep -iwE '^[1-2][0-9]{0,2}\.([0-9]{1,3}\.){2}[0-9]{0,3}$' >/dev/null 2>&1
        done

}

#定义函数 - 检测IP输入后,是否会IP冲突,如果冲突,则重新调用函数DEFINE_IPADDR_NEW,重新输入IP
CHECK_IP_conflict () {
        echo  "检测IP中,请稍等2秒..."
        ping -c 2 "${NEW_IPADDR}" |grep "ttl" >/dev/null 2>&1
        while [ $? -eq 0 ]
        do
                echo -e "\033[33mIP冲突,请重新输入: \033[0m" 
                DEFINE_IPADDR_NEW
                echo  "检测IP中,请稍等2秒..."
                ping -c 2 "${NEW_IPADDR}" |grep "ttl" >/dev/null 2>&1
        done
        echo -e "\033[32m------IP定义成功!------\033[0m"
}


#定义函数 - 输入子网掩码,如果子网掩码不正确,循环输入,直到正确为止
DEFINE_NETMASK_NEW () {
        echo -e "\033[32m----------------------------------------------------------\033[0m"
        echo ""
        read -p "请输入子网掩码(255.255.255.0):" NEW_NETMASK
        echo ${NEW_NETMASK}|grep -iwE '^255\.([0-9]{1,3}\.){2}[0-9]{1,3}$' >/dev/null 2>&1
        if [ !$NEW_NETMASK ]; then
            NEW_NETMASK="255.255.255.0"
            echo "已设定默认子网掩码:" ${NEW_NETMASK}
            return
        fi
        while [ $? -ne 0 ]
        do
                read -p "子网掩码定义不正确,请重新输入: " NEW_NETMASK
                echo ""
                echo ${NEW_NETMASK}|grep -iwE '^255\.([0-9]{1,3}\.){2}[0-9]{1,3}$' >/dev/null 2>&1
        done
}

#定义函数 - 输入网关,如果网关不通,循环输入,直到输入后能ping通为止
DEFINE_GATEWAY () {
        echo -e "\033[32m----------------------------------------------------------\033[0m"
        read -p "请输入网关(192.168.0.1): " NEW_GATEWAY
        echo  "检测网关中,请稍等2秒..."
        ping -c 2 "${NEW_GATEWAY}"|grep -iE "ttl" >/dev/null 2>&1
        if [ !$NEW_GATEWAY ]; then
        #     NEW_GATEWAY="192.168.0.1"
            echo "已设定默认网关:" ${NEW_GATEWAY}
            return
        fi
        while [ $? -ne 0 ]
        do
                read -p "网关不通,请重新输入正确网关: " NEW_GATEWAY
                echo  "检测网关中,请稍等2秒..."
                ping -c 2 "${NEW_GATEWAY}"|grep -iE "ttl" >/dev/null 2>&1
        done
        echo -e "\033[32m------网关定义成功!------\033[0m"
}

ping -c 2 ${NEW_GATEWAY}|grep -iE "ttl" >/dev/null 2>&1

INTERFACE_CHOOSE
DEFINE_IPADDR_NEW
CHECK_IP_conflict
DEFINE_NETMASK_NEW
DEFINE_GATEWAY
echo $INTERFACE
echo ${NEW_IPADDR}
echo ${NEW_NETMASK}
echo ${NEW_GATEWAY}


INTERFACE_DIR="/etc/sysconfig/network-scripts"
# 判断网卡配置文件是否存在
NET_CONFIG_FILE=${INTERFACE_DIR}/ifcfg-${INTERFACE}
# 不存在就把ifcfg-enp0s3网卡配置文件复制一份
if [ !$NET_CONFIG_FILE ]; then
        \cp ${INTERFACE_DIR}/ifcfg-{enp0s3,${INTERFACE}}
        # 写入新的网卡信息
        sed -i "/^NAME/cNAME=${INTERFACE}" ${INTERFACE_DIR}/ifcfg-${INTERFACE}
        sed -i "/^DEVICE/cDEVICE=${INTERFACE}" ${INTERFACE_DIR}/ifcfg-${INTERFACE}
        sed -i "/^UUID/cUUID=$(cat /proc/sys/kernel/random/uuid)" ${INTERFACE_DIR}/ifcfg-${INTERFACE}
        sed -i "/^DNS1/cDNS1=${NEW_GATEWAY}" ${INTERFACE_DIR}/ifcfg-${INTERFACE}
fi
DHCP_OR_STATIC=`cat ${INTERFACE_DIR}/ifcfg-${INTERFACE} |sed '/^BOOTPROTO/p' -n|awk -F"=" '{print $2}'`
echo $DHCP_OR_STATIC

#备份网卡文件
\cp ${INTERFACE_DIR}/ifcfg-${INTERFACE}{,${DATE}.bak}
#备份DNS配置文件
\cp /etc/resolv.conf{,.bak}

if [[ ${DHCP_OR_STATIC} == "dhcp" ]];then
        sed -i '/^BOOTPROTO/cBOOTPROTO=static' ${INTERFACE_DIR}/ifcfg-${INTERFACE}
        sed -i "/^BOOTPROTO/aGATEWAY=${NEW_GATEWAY}" ${INTERFACE_DIR}/ifcfg-${INTERFACE}
        sed -i "/^BOOTPROTO/aNETMASK=${NEW_NETMASK}" ${INTERFACE_DIR}/ifcfg-${INTERFACE}
        sed -i "/^BOOTPROTO/aIPADDR=${NEW_IPADDR}" ${INTERFACE_DIR}/ifcfg-${INTERFACE}
        echo -e "\033[32m已生成网卡${INTERFACE}配置文件,见下: \033[0m"
        echo -e "\033[32m#################################################################\033[0m"
        cat ${INTERFACE_DIR}/ifcfg-${INTERFACE}

elif [[ ${DHCP_OR_STATIC} == "static" ]];then
        sed -i "/^GATEWAY/cGATEWAY=${NEW_GATEWAY}" ${INTERFACE_DIR}/ifcfg-${INTERFACE}
        sed -i "/^NETMASK/cNETMASK=${NEW_NETMASK}" ${INTERFACE_DIR}/ifcfg-${INTERFACE}
        sed -i "/^IPADDR/cIPADDR=${NEW_IPADDR}" ${INTERFACE_DIR}/ifcfg-${INTERFACE}
        echo -e "\033[32m已生成网卡${INTERFACE}配置文件,见下\033[0m"
        echo -e "\033[32m#################################################################\033[0m"
        cat ${INTERFACE_DIR}/ifcfg-${INTERFACE}
fi

echo -e "\033[32m#################################################################\033[0m"
echo ""
while true
do
        read -p "请检查网卡${INTERFACE}配置文件,确认是否执行修改IP操作,YES or NO :  " ALTER_Y_N
        if [ ! $ALTER_Y_N ]; then
            ALTER_Y_N="YES"
        fi
        case $ALTER_Y_N in
                YES|Y|yes|y)
                echo -e "\033[32m 网卡${INTERFACE}IP修改成功,网络重启中,请使用新IP链接服务器................the end !\033[0m"
                #重启网卡
                systemctl restart network.service
                #恢复dns配置文件
                \cp /etc/resolv.conf.bak /etc/resolv.conf
                ifconfig ${INTERFACE}
                ping -c 5 www.baidu.com
                if [ $? -ne 0 ];then
                        echo -e "\033[33m-----------------------\033[0m"
                        echo -e "\033[33m    无法上网,IP回滚!!\033[0m"
                        echo -e "\033[33m-----------------------\033[0m"
                        \mv ${INTERFACE_DIR}/ifcfg-${INTERFACE}${DATE}.bak ${INTERFACE_DIR}/ifcfg-${INTERFACE}
                        systemctl restart network.service
                        \cp /etc/resolv.conf.bak /etc/resolv.conf
                        ping -c 2 www.baidu.com
                        if [ $? -eq 0 ];then
                                echo -e "\033[32m-----------------------!\033[0m"
                                echo -e "\033[32m    回滚成功!!\033[0m"
                                echo -e "\033[32m-----------------------!\033[0m"
                                ifconfig ${INTERFACE}
                        else
                                echo -e "\033[33m回滚失败,请检查!!\033[0m"
                        fi
                fi
                exit 0
                ;;
                NO|no|N|n)
                \mv ${INTERFACE_DIR}/ifcfg-${INTERFACE}${DATE}.bak ${INTERFACE_DIR}/ifcfg-${INTERFACE}
                echo -e "\033[33m网卡${INTERFACE}IP未修改,退出操作!!\033[0m"
                exit 1
                ;;
        esac


done

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/43373.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高性能HTTP和反向代理Web服务器 - Nginx

Nginx一、安装1.1.Windows安装1.2.Linux安装1.3.常用命令二、动静分离三、反向代理3.1.正向代理3.2.反向代理四、负载均衡4.1.轮询4.2.加权轮询4.3.Ip hash五、限流六、缓存七、黑白名单Nginx是一个高性能的HTTP服务器和反向代理的web服务器,同时也提供IMAP&#xf…

一文带你读懂公司卫生间一直有人窜稀的原理

不知道你有没有这样的经历,一直忙忙碌碌,需求不断,当你终于解决完手头的事情,突然特别着急想要去卫生间的时候,仅有的几个门总是关着的,于是怀疑,可能其他人更需要这次机会,他们也一…

华为云安装Docker,在其中安装Tomcat运行Html项目一步到位

一日不学习浑身难受,对于追光者的我来说,就是这种情况!!!今天心血来潮,想把云服务器、Docker、Tomcat、Html项目集成一块进行练习,为了后面的部署项目做准备。 环境介绍:华为云cent…

KafKa存储机制

目录 存储机制 kafka 存储选型 Kafka 存储方案剖析 kafka 存储架构设计 kafka 日志系统架构设计 日志目录布局 磁盘数据存储 可靠性 Producer的可靠性保证 kafka 配置为 CP系统 kafka 配置为 AP系统 Broker 的可靠性保证 Consumer 的可靠性策略 AutoCommit&#xff…

【二叉树从无到有】

目录:前言一、树1.什么是树结构?2.为什么使用树结构?3.树的概念4.树的表示5.树在现实生活中的应用二、二叉树(一)二叉树概念既结构1.概念2.现实中的二叉树3.特殊的二叉树4.二叉树的性质5.二叉树的存储结构(…

线程的深度剖析

线程和进程的区别和联系: 1.进程可以处理多并发编程的问题,但是进程太重,主要指它的资源分配和资源回收上,进程消耗资源多,速度慢,其创建、销毁、调度一个进程开销比较大。 2.线程的出现有效地解决了这一…

面向对象的个人理解(使用JAVA代码描述)

前言 功能分类 类(class)的第一个功能是隔离,起到边界的作用,使得不同功能的代码互不干扰。 干扰的起源 在非面向对象的语言中,我们主要定义结构和函数来实现功能。下边用C语言来举个例子。 某程序员写了宠物模拟…

Ajax学习:nodejs安装+express框架介绍

ajsx应用中,需要安装nodejs环境 基于Chrome V8引擎(和浏览器上的谷歌的解析引擎一样)JavaScript运行环境 (31条消息) Node.js_安装_哇嘎123的博客-CSDN博客 查看安装是否完成 express框架介绍--为了创建一个web服务器 (31条消息) Express…

Spark系列之Spark体系架构

title: Spark系列 第四章 Spark体系架构 4.1 Spark核心功能 Alluxio 原来叫 tachyon 分布式内存文件系统Spark Core提供Spark最基础的最核心的功能,主要包括: 1、SparkContext 通常而言,DriverApplication的执行与输出都是通过SparkC…

STM32G491RCT6,STM32H743BIT6规格书 32bit IC MCU

STM32G4系列将强大的ArmCortex-M4加上FPU和DSP能力与丰富和先进的模拟外设相结合。它引入了两种新的数学加速器(Cordic和Filtering), CAN-FD (Flexible Datarate),USB Type-C接口的功率传输,包括物理层(PHY)和先进的安全功能。(图…

Day38——Dp专题

DP专题 动态规划五部曲: 确定dp数组以及下标的含义 确定递推公式 dp数组如何初始化 确定遍历顺序 举例推导dp数组 1.斐波那契数 题目链接:509. 斐波那契数 - 力扣(LeetCode) 思路:做dp类题目,根据…

Meta 内部都在用的 FX 工具大起底:利用 Graph Transformation 优化 PyTorch 模型

PyTorch 中的 graph mode 在性能方面表示更为出色,本文介绍 Torch.FX 这个强大工具,可以捕捉和优化 PyTorch 程序 graph。 一、简介 PyTorch 支持两种执行模式:eager mode 和 graph mode。 eager mode 中,模型中的运算符在读取时…

JUC并发编程

目录JUC概述什么是JUC进程与线程的概念线程的状态线程的方法并发与并行管程(Monitor)用户线程和守护线程Lock接口Synchronized 关键字Synchronized 作用范围Synchronized 实现卖票例子Lock接口什么是LockLock与synchronized的区别可重入锁(ReentrantLock&#xff09…

剑桥大学哪些专业需要IB物理成绩?

如果IB学生申请目标是剑桥大学,那么申请哪些专业需要学习IBDP物理课程?要不要学习IBDP物理课程呢?剑桥大学:IB成绩要求高,招录竞争激烈 在申请英国大学之前,理性的申请者都会提前查看一下目标大学的学术成绩…

Python破解WIFI源代码,测试成功(暴力跑字典)

目录 1,先安装Python环境(这个不用多说了吧) 2,安装PyWifi 3,自己手工整理高频弱口令,不建议程序生成的字典,生成的字典成功率实在太低。 4,自己生成字典的算法: 5,破解WIF代码第一种&#…

NetCore多租户开源项目,快速后台开发企业框架,赚钱就靠她了

今天给大家推荐一个开源项目,基于.NetCore开发的、多租户的企业开发框架。 文章目录项目简介技术架构项目结构系统功能代码生成器部分功能截图项目地址项目简介 这是一个基于.Net和Layui、基于多数据库的多租户,敏捷开发优选框架。系统自带权限功能、数…

面向移动支付过程中网络安全的研究与分析

基础防护系统设计 4.1.1入侵监测系统 入侵监测系统(IDS)的部署主要是防治外界非法人员对银行网络进行攻击,及时发现非法人员的入侵行为,以确保能够立刻采取网络阻止措施。在银行网络中的关键部位部署入侵检测系统,可…

springboot中controller层代码优雅写法

在基于spring框架的项目开发中,必然会遇到controller层,它可以很方便的对外提供数据接口服务,也是非常关键的出口,所以非常有必要进行规范统一,使其既简洁又优雅。 controller层的职责为负责接收和响应请求&#xff0c…

快手资讯|快手推出多档世界杯相关节目

1、快手直播间上线“相亲角”功能 近日,快手直播间上线了“相亲角”功能,可为主播打造相亲功能。 此外,快手还在“热门活动”中推出了“婚庆”频道,主要展示“婚礼现场”、“婚纱照”等短视频内容。企查查App显示,北京…

博主常用的 idea 插件,建议收藏!!!

一、Key Promoter X **快捷键提示工具:**每次操作,如果有快捷键,会提示用了什么快捷键。 二、Maven Helper maven 助手:展示 jar 包依赖关系 三、Lombok 只需加上注解 什么get set 什么toString 等等方法都不需要写 四、MyBati…