• VBox组件内部局域网


    我使用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中,需要新增服务器就复制镜像修改。后来我查找资料,学习研究,设计了一个将就够用的脚本,用脚本来修改网卡配置。

    脚本源码如下: 

    1. #!/bin/bash
    2. #auto alter ip
    3. #auth by chris chan
    4. #2020年10月30日 10:50:00
    5. #######################
    6. DATE=`date +%Y%m%d%H%M`
    7. #定义函数 - 选择要修改IP的网卡
    8. INTERFACE_CHOOSE () {
    9. echo -e "\033[32m---------------------------------------------------------\033[0m"
    10. PS3="请按提示,选择要修改的网卡:"
    11. select INTERFACE in `ls /sys/class/net/|grep -v 'lo'`
    12. do
    13. break
    14. done
    15. }
    16. #定义函数 - 输入IP地址,如果IP地址不正确,循环输入,直到正确为止
    17. DEFINE_IPADDR_NEW () {
    18. echo -e "\033[32m----------------------------------------------------------\033[0m"
    19. echo ""
    20. read -p "请正确输入IP地址: " NEW_IPADDR
    21. echo ${NEW_IPADDR}|grep -iwE '^[1-2][0-9]{0,2}\.([0-9]{1,3}\.){2}[0-9]{1,3}$' >/dev/null 2>&1
    22. while [ $? -ne 0 ]
    23. do
    24. read -p "IP定义不正确,请重新输入 : " NEW_IPADDR
    25. echo ${NEW_IPADDR}|grep -iwE '^[1-2][0-9]{0,2}\.([0-9]{1,3}\.){2}[0-9]{0,3}$' >/dev/null 2>&1
    26. done
    27. }
    28. #定义函数 - 检测IP输入后,是否会IP冲突,如果冲突,则重新调用函数DEFINE_IPADDR_NEW,重新输入IP
    29. CHECK_IP_conflict () {
    30. echo "检测IP中,请稍等2秒..."
    31. ping -c 2 "${NEW_IPADDR}" |grep "ttl" >/dev/null 2>&1
    32. while [ $? -eq 0 ]
    33. do
    34. echo -e "\033[33mIP冲突,请重新输入: \033[0m"
    35. DEFINE_IPADDR_NEW
    36. echo "检测IP中,请稍等2秒..."
    37. ping -c 2 "${NEW_IPADDR}" |grep "ttl" >/dev/null 2>&1
    38. done
    39. echo -e "\033[32m------IP定义成功!------\033[0m"
    40. }
    41. #定义函数 - 输入子网掩码,如果子网掩码不正确,循环输入,直到正确为止
    42. DEFINE_NETMASK_NEW () {
    43. echo -e "\033[32m----------------------------------------------------------\033[0m"
    44. echo ""
    45. read -p "请输入子网掩码(255.255.255.0):" NEW_NETMASK
    46. echo ${NEW_NETMASK}|grep -iwE '^255\.([0-9]{1,3}\.){2}[0-9]{1,3}$' >/dev/null 2>&1
    47. if [ !$NEW_NETMASK ]; then
    48. NEW_NETMASK="255.255.255.0"
    49. echo "已设定默认子网掩码:" ${NEW_NETMASK}
    50. return
    51. fi
    52. while [ $? -ne 0 ]
    53. do
    54. read -p "子网掩码定义不正确,请重新输入: " NEW_NETMASK
    55. echo ""
    56. echo ${NEW_NETMASK}|grep -iwE '^255\.([0-9]{1,3}\.){2}[0-9]{1,3}$' >/dev/null 2>&1
    57. done
    58. }
    59. #定义函数 - 输入网关,如果网关不通,循环输入,直到输入后能ping通为止
    60. DEFINE_GATEWAY () {
    61. echo -e "\033[32m----------------------------------------------------------\033[0m"
    62. read -p "请输入网关(192.168.0.1): " NEW_GATEWAY
    63. echo "检测网关中,请稍等2秒..."
    64. ping -c 2 "${NEW_GATEWAY}"|grep -iE "ttl" >/dev/null 2>&1
    65. if [ !$NEW_GATEWAY ]; then
    66. # NEW_GATEWAY="192.168.0.1"
    67. echo "已设定默认网关:" ${NEW_GATEWAY}
    68. return
    69. fi
    70. while [ $? -ne 0 ]
    71. do
    72. read -p "网关不通,请重新输入正确网关: " NEW_GATEWAY
    73. echo "检测网关中,请稍等2秒..."
    74. ping -c 2 "${NEW_GATEWAY}"|grep -iE "ttl" >/dev/null 2>&1
    75. done
    76. echo -e "\033[32m------网关定义成功!------\033[0m"
    77. }
    78. ping -c 2 ${NEW_GATEWAY}|grep -iE "ttl" >/dev/null 2>&1
    79. INTERFACE_CHOOSE
    80. DEFINE_IPADDR_NEW
    81. CHECK_IP_conflict
    82. DEFINE_NETMASK_NEW
    83. DEFINE_GATEWAY
    84. echo $INTERFACE
    85. echo ${NEW_IPADDR}
    86. echo ${NEW_NETMASK}
    87. echo ${NEW_GATEWAY}
    88. INTERFACE_DIR="/etc/sysconfig/network-scripts"
    89. # 判断网卡配置文件是否存在
    90. NET_CONFIG_FILE=${INTERFACE_DIR}/ifcfg-${INTERFACE}
    91. # 不存在就把ifcfg-enp0s3网卡配置文件复制一份
    92. if [ !$NET_CONFIG_FILE ]; then
    93. \cp ${INTERFACE_DIR}/ifcfg-{enp0s3,${INTERFACE}}
    94. # 写入新的网卡信息
    95. sed -i "/^NAME/cNAME=${INTERFACE}" ${INTERFACE_DIR}/ifcfg-${INTERFACE}
    96. sed -i "/^DEVICE/cDEVICE=${INTERFACE}" ${INTERFACE_DIR}/ifcfg-${INTERFACE}
    97. sed -i "/^UUID/cUUID=$(cat /proc/sys/kernel/random/uuid)" ${INTERFACE_DIR}/ifcfg-${INTERFACE}
    98. sed -i "/^DNS1/cDNS1=${NEW_GATEWAY}" ${INTERFACE_DIR}/ifcfg-${INTERFACE}
    99. fi
    100. DHCP_OR_STATIC=`cat ${INTERFACE_DIR}/ifcfg-${INTERFACE} |sed '/^BOOTPROTO/p' -n|awk -F"=" '{print $2}'`
    101. echo $DHCP_OR_STATIC
    102. #备份网卡文件
    103. \cp ${INTERFACE_DIR}/ifcfg-${INTERFACE}{,${DATE}.bak}
    104. #备份DNS配置文件
    105. \cp /etc/resolv.conf{,.bak}
    106. if [[ ${DHCP_OR_STATIC} == "dhcp" ]];then
    107. sed -i '/^BOOTPROTO/cBOOTPROTO=static' ${INTERFACE_DIR}/ifcfg-${INTERFACE}
    108. sed -i "/^BOOTPROTO/aGATEWAY=${NEW_GATEWAY}" ${INTERFACE_DIR}/ifcfg-${INTERFACE}
    109. sed -i "/^BOOTPROTO/aNETMASK=${NEW_NETMASK}" ${INTERFACE_DIR}/ifcfg-${INTERFACE}
    110. sed -i "/^BOOTPROTO/aIPADDR=${NEW_IPADDR}" ${INTERFACE_DIR}/ifcfg-${INTERFACE}
    111. echo -e "\033[32m已生成网卡${INTERFACE}配置文件,见下: \033[0m"
    112. echo -e "\033[32m#################################################################\033[0m"
    113. cat ${INTERFACE_DIR}/ifcfg-${INTERFACE}
    114. elif [[ ${DHCP_OR_STATIC} == "static" ]];then
    115. sed -i "/^GATEWAY/cGATEWAY=${NEW_GATEWAY}" ${INTERFACE_DIR}/ifcfg-${INTERFACE}
    116. sed -i "/^NETMASK/cNETMASK=${NEW_NETMASK}" ${INTERFACE_DIR}/ifcfg-${INTERFACE}
    117. sed -i "/^IPADDR/cIPADDR=${NEW_IPADDR}" ${INTERFACE_DIR}/ifcfg-${INTERFACE}
    118. echo -e "\033[32m已生成网卡${INTERFACE}配置文件,见下\033[0m"
    119. echo -e "\033[32m#################################################################\033[0m"
    120. cat ${INTERFACE_DIR}/ifcfg-${INTERFACE}
    121. fi
    122. echo -e "\033[32m#################################################################\033[0m"
    123. echo ""
    124. while true
    125. do
    126. read -p "请检查网卡${INTERFACE}配置文件,确认是否执行修改IP操作,YES or NO : " ALTER_Y_N
    127. if [ ! $ALTER_Y_N ]; then
    128. ALTER_Y_N="YES"
    129. fi
    130. case $ALTER_Y_N in
    131. YES|Y|yes|y)
    132. echo -e "\033[32m 网卡${INTERFACE}IP修改成功,网络重启中,请使用新IP链接服务器................the end !\033[0m"
    133. #重启网卡
    134. systemctl restart network.service
    135. #恢复dns配置文件
    136. \cp /etc/resolv.conf.bak /etc/resolv.conf
    137. ifconfig ${INTERFACE}
    138. ping -c 5 www.baidu.com
    139. if [ $? -ne 0 ];then
    140. echo -e "\033[33m-----------------------\033[0m"
    141. echo -e "\033[33m 无法上网,IP回滚!!\033[0m"
    142. echo -e "\033[33m-----------------------\033[0m"
    143. \mv ${INTERFACE_DIR}/ifcfg-${INTERFACE}${DATE}.bak ${INTERFACE_DIR}/ifcfg-${INTERFACE}
    144. systemctl restart network.service
    145. \cp /etc/resolv.conf.bak /etc/resolv.conf
    146. ping -c 2 www.baidu.com
    147. if [ $? -eq 0 ];then
    148. echo -e "\033[32m-----------------------!\033[0m"
    149. echo -e "\033[32m 回滚成功!!\033[0m"
    150. echo -e "\033[32m-----------------------!\033[0m"
    151. ifconfig ${INTERFACE}
    152. else
    153. echo -e "\033[33m回滚失败,请检查!!\033[0m"
    154. fi
    155. fi
    156. exit 0
    157. ;;
    158. NO|no|N|n)
    159. \mv ${INTERFACE_DIR}/ifcfg-${INTERFACE}${DATE}.bak ${INTERFACE_DIR}/ifcfg-${INTERFACE}
    160. echo -e "\033[33m网卡${INTERFACE}IP未修改,退出操作!!\033[0m"
    161. exit 1
    162. ;;
    163. esac
    164. done

  • 相关阅读:
    Java后端社招3年
    python获取时间戳
    阿里最新产,SpringCloud 微服务核心技术全解手册 Github 星标 50k
    以太网基础学习(二)——ARP协议
    SAP GUID分配时出错;不可能保存
    Neo4j学习笔记(一) 安装配置
    什么是数字化存在?数字化转型要先从数字化存在开始
    百度面试题——迷宫问题(超详细解析)
    SpringCloud 微服务(三)-分布式事务问题
    51单片机学习:DS18B20温度传感器实验
  • 原文地址:https://blog.csdn.net/xxkalychen/article/details/128082057