虚拟机安装 CentOS 6.5 版本可以参考 这个文章

虚拟机创建、CentOS7 系统默认安装

新建虚拟机:
image.png
设置内存大小,根据你自己的硬件资源设置
image.png
创建虚拟硬盘
image.png
选择虚拟硬盘类型
image.png
动态分配
image.png
设置位置和大小
image.png
设置 -> 存储 选择刚刚下载的 iso 镜像
image.png
启动虚拟机
image.png
选择第一个:Install CentOS 7
image.png
屏幕太小的话,可以在 VirtualBox 顶部选择 视图 -> 自动缩放模式,可以将屏幕放大一点(但是放大之后,鼠标点击有问题,所以看你自己了)。
选择语言,我这里直接选择默认的 English 了
image.png
点击 Continue 后进入下一页,设置时区
image.png
设置 Asia/Shanghai,然后点击左上角的 Done 按钮完成设置
image.png
配置磁盘分区
image.png
这里使用最简单的默认自动分区模式,点击它进入后,直接点击左上角 Done 按钮完成设置即可
image.png
然后点击右下角的 Begin Installation 按钮开始安装
image.png
在这个界面可以设置 root 用户密码
image.png
我这里设置为 root
image.png
然后等待完成,之后选择右下角的 Reboot 按钮重启
image.png
完成之后,可以移除下虚拟光盘上的 ISO 镜像。

网络设置

关于网络 Win10 上和 mac 上还不太一样,win 10 可以参考 这篇文章去试试看
本章记录下 mac 上我选择的方式。下图的介绍感觉不准确。
image.png
我这里会将虚拟机配置多个网卡:

  • 一个网卡用 Host Only 方式,让宿主机和虚拟机可以相互访问
  • 一个网卡使用 NAT 让虚拟机可以 ping 宿主机

    官方文档 - 最权威的

Mode VM→Host VM←Host VM1↔VM2 VM→Net/LAN VM←Net/LAN
Host-only + + +
Internal +
Bridged + + + + +
NAT + Port forward + Port forward
NATservice + Port forward + + Port forward

上面的表格很清楚了,比上面的图而且权威:

  • HostOnly:虚拟机到主机可以互相联通、虚拟机到虚拟机 也可以互相联通,就是 不能访问外面的网络
  • NAT:虚拟机可以访问主机、虚拟机之间不能访问、虚拟机可以访问外面的网络

    Virtual Box 网络设置

    查看 Virtual BOX 的 NAT 网络设置
    image.png
    image.png
    默认会生成一个 NatNetwork,如果没有的话,可以右侧 + 号自己创建一个。
    查看 Virtual Box 的 Host Only 网络设置
    image.png
    image.png
    同上,如果没有则自己创建一个。

然后虚拟机设置上面的两个网络:网卡 1 选择 Nat 网络
image.png
网卡 2 选择 Host-Only 网络
image.png

Centos7 网络设置

重启虚拟机后,使用 root/root 登录到系统

  1. # 编辑默认的配置文件 ifcfg-enp0s3
  2. vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
  1. TYPE=Ethernet
  2. PROCY_METHOD=none
  3. BROWSER_ONLY=no
  4. BOOTPROTO=dhcp
  5. DEFROUTE=yes
  6. IPV4_FAILURE_FATAL=no
  7. IPV6INIT=yes
  8. IPV6_AUTOCONF=yes
  9. IPV6_DEFROUTE=yes
  10. IPV6_FAILURE_FATAL=no
  11. IPV6_ADDR_GEN_MODE=stable-privacy
  12. NAME=enp0s3
  13. UUID=ad785b1f-8ef6-4dd7-9e32-8e28e10a8785
  14. DEVICE=enp0s3
  15. # 这里改为 yes
  16. ONBOOT=yes

保存配置文件后,执行命令重启网络

  1. [root@localhost ~]# service network restart
  2. Restarting network (via systemctl): [ OK ]
  3. # 查看当前自动分配的 IP 地址
  4. [root@localhost ~]# ip addr
  5. 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
  6. link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
  7. inet 127.0.0.1/8 scope host lo
  8. valid_lft forever preferred_lft forever
  9. inet6 ::1/128 scope host
  10. valid_lft forever preferred_lft forever
  11. 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
  12. link/ether 08:00:27:28:72:98 brd ff:ff:ff:ff:ff:ff
  13. inet 10.0.2.5/24 brd 10.0.2.255 scope global noprefixroute dynamic enp0s3
  14. valid_lft 573sec preferred_lft 573sec
  15. inet6 fe80::951d:2d98:f6cc:8233/64 scope link noprefixroute
  16. valid_lft forever preferred_lft forever
  17. 3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
  18. link/ether 08:00:27:0c:1e:55 brd ff:ff:ff:ff:ff:ff
  19. inet 192.168.56.107/24 brd 192.168.56.255 scope global noprefixroute dynamic enp0s8
  20. valid_lft 311sec preferred_lft 311sec
  21. inet6 fe80::ca47:e473:1010:66db/64 scope link noprefixroute
  22. valid_lft forever preferred_lft forever
  • enp0s3:是网卡 1 的 Nat 配置,可以让虚拟机上网

    1. # 可以 ping 下 百度,能看到网络是通的了
    2. [root@localhost ~]# ping www.baidu.com
    3. PING www.a.shifen.com (110.242.68.3) 56(84) bytes of data.
    4. 64 bytes from 110.242.68.3 (110.242.68.3): icmp_seq=1 ttl=52 time=17.1 ms
    5. 64 bytes from 110.242.68.3 (110.242.68.3): icmp_seq=2 ttl=52 time=17.5 ms
  • enp0s8:是 Host Only 模式:可以让宿主机和虚拟机互通。我们可以通过 sh 软件链接到 192.168.56.107 这个地址,就能链接上虚拟机了

    CentOS7 静态 IP

    你可以看下 enp0s8 对应的配置文件是否存在,我这里是不存在的,所以需要复制一份,然后修改 ```bash

    进入配置目录

    [root@localhost ~]# cd /etc/sysconfig/network-scripts/

    复制一份配置文件为 ifcfg-enp0s8

    [root@localhost network-scripts]# cp ifcfg-enp0s3 ifcfg-enp0s8

    然后编辑它

    [root@localhost network-scripts]# vi ifcfg-enp0s8

TYPE=Ethernet PROCY_METHOD=none BROWSER_ONLY=no

改为 yes

BOOTPROTO=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

改为 enp0s8

NAME=enp0s8

UUID 改为和上面的不一致方式,也可以使用 uuidgen 方式生成一个新的

UUID=ad785b1f-8ef6-4dd7-9e32-8e28e10a8786 DEVICE=enp0s8 ONBOOT=yes

然后添加固定的 ip 地址、子网掩码、网关

IPADDR=192.168.56.107 NATMASK=255.255.255.0 GATEWAY=192.168.56.1

最后重启网络配置

[root@localhost network-scripts]# service network restart Restarting network (via systemctl): [ OK ]

然后可以查看网络信息

[root@localhost network-scripts]# ip addr 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s3: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:27:28:72:98 brd ff:ff:ff:ff:ff:ff inet 10.0.2.5/24 brd 10.0.2.255 scope global noprefixroute dynamic enp0s3 valid_lft 515sec preferred_lft 515sec inet6 fe80::951d:2d98:f6cc:8233/64 scope link noprefixroute valid_lft forever preferred_lft forever

已经变成静态的了

3: enp0s8: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 08:00:27:0c:1e:55 brd ff:ff:ff:ff:ff:ff inet 192.168.56.107/24 brd 192.168.56.255 scope global noprefixroute enp0s8 valid_lft forever preferred_lft forever inet6 fe80::a637:ae06:3a81:2be8/64 scope link noprefixroute valid_lft forever preferred_lft forever

尝试 ping 外网,也没有问题

[root@localhost network-scripts]# ping www.baidu.com PING www.a.shifen.com (110.242.68.3) 56(84) bytes of data. 64 bytes from 110.242.68.3 (110.242.68.3): icmp_seq=1 ttl=52 time=16.8 ms 64 bytes from 110.242.68.3 (110.242.68.3): icmp_seq=2 ttl=52 time=17.0 ms

然后 ping 宿主机,也没有问题

[root@localhost network-scripts]# ping 192.168.3.162 PING 192.168.3.162 (192.168.3.162) 56(84) bytes of data. 64 bytes from 192.168.3.162: icmp_seq=1 ttl=63 time=0.561 ms 64 bytes from 192.168.3.162: icmp_seq=2 ttl=63 time=0.781 ms

  1. <a name="tJQ2f"></a>
  2. ## HostOnly 主机网络管理设置后主机 ping 不通网关
  3. <a name="yOjof"></a>
  4. ### 问题描述
  5. ![image.png](https://cdn.nlark.com/yuque/0/2022/png/651749/1655535785486-d602af11-6c4b-45d4-b06e-e5761c64c10d.png#clientId=u9d9b1707-3509-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=518&id=u545ae037&margin=%5Bobject%20Object%5D&name=image.png&originHeight=1036&originWidth=1568&originalType=binary&ratio=1&rotation=0&showTitle=false&size=248843&status=done&style=none&taskId=u69b19b76-1e62-4802-ba12-8967ce33ee4&title=&width=784)<br />上面有两个主机网络:
  6. - 192.168.56.1:但是这个你在宿主机上使用 ping 命令 ping 不通,也就无法与虚拟机通信
  7. - 10.141.141.1:这个能,这是为什么?
  8. > 这里说下为什么问题描述里面会出现一个正常的 vboxnet1 和一个异常的 vboxnet0:我在选择虚拟机关机的时候,导致 VirtualBox 卡死了,只能暴力的重启了电脑,之后就发现连接不上和 ping 不通 vboxnet0 上的虚拟机和网关了。百度了很久,没有想到办法。 灵机一动,发现前两天使用了一个 用 vagrant 部署 VirtualBox 的项目环境 [mesosphere/playa-mesos](https://github.com/mesosphere/playa-mesos) ,这个项目给我很深的映像就是,执行 vagrant up 之后,就自动部署好了一台虚拟机,并且使用 vagrant ssh 就能直接连上,既然能连上说明网络没有问题,而且它的方案和我上面的一样,使用 hostonly 和 nat 两张网卡。
  9. > 在 vboxnet0 异常的情况下,我部署了它,发现它可以正常访问虚拟机。这就出现了一个正常的 vboxnet1 和一个异常的 vboxnet0
  10. 下面看网卡信息,发现这两个信息不一致
  11. ```bash
  12. mrcode@mrcode playa-mesos % ifconfig
  13. vboxnet1: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
  14. ether 0a:00:27:00:00:01
  15. inet 10.141.141.1 netmask 0xffffff00 broadcast 10.141.141.255
  16. vboxnet0: flags=8842<BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
  17. ether 0a:00:27:00:00:00

再看路由表信息发现根本就没有 192.168.56.1 这个路由信息

  1. mrcode@mrcode playa-mesos % netstat -r
  2. Routing tables
  3. Internet:
  4. Destination Gateway Flags Netif Expire
  5. default 192.168.3.1 UGScg en0
  6. 10.141.141/24 link#18 UC vboxnet1 !
  7. 10.141.141.1 a:0:27:0:0:1 UHLWIi lo0
  8. 10.141.141.10 link#18 UHLWIi vboxnet1 !

问题解决

上面就定位到是创建虚拟网卡的时候虚拟网卡信息不对导致的问题(其实在得出这个结论之前,我百度了很多资料,总的思路是看着路由表里面没有该 IP 的路由信息,想着如何手动添加这个信息,搞了几个小时后无果,最后重新清理思路的时候发现好像在网卡里面就没有 IP 信息)

:::tips 然后去官方文档查看描述,下图红框中这一句话让我一开始没有想到需要特殊处理这个 IP 地址范围image.png ::: 当我走投无路的时候,我想着既然 vboxnet1 是正常的,我直接将它的 IP 改成 192.168.56.1 就行了,结果出现了下面这个错误
image.png
这个时候我才想到,文档上面写的是 192.168.56.0/21但是我们截图上面是 192.168.56.1/24,新版本已经加限制了?(v6.1.34)
image.png
抱着试一试的态度,/etc/vbox/networks.conf 文件中将 192.168.56.1/24 添加到文件中,再次保存,发现可以保存成功了

  1. # 10.141.141.0/21 这一行是之前部署 mesosphere/playa-mesos 的时候,它的文档让加上的
  2. mrcode@mrcode ~ % sudo vim /etc/vbox/networks.conf
  3. * 10.141.141.0/21
  4. * 192.168.56.1/24

而且 ifconfig 里面能看到网卡的 IP 地址了

  1. mrcode@mrcode ~ % ifconfig
  2. vboxnet0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
  3. ether 0a:00:27:00:00:00
  4. inet 192.168.56.1 netmask 0xffffff00 broadcast 192.168.56.255
  5. vboxnet1: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
  6. ether 0a:00:27:00:00:01
  7. inet 10.141.141.1 netmask 0xffffff00 broadcast 10.141.141.255
  8. # 再来看路由信息
  9. mrcode@mrcode ~ % netstat -r
  10. Routing tables
  11. Internet:
  12. Destination Gateway Flags Netif Expire
  13. default 192.168.3.1 UGScg en0
  14. 10.141.141/24 link#18 UC vboxnet1 !
  15. 127 localhost UCS lo0
  16. localhost localhost UH lo0
  17. 169.254 link#5 UCS en0 !
  18. 192.168.3 link#5 UCS en0 !
  19. 192.168.3.1/32 link#5 UCS en0 !
  20. 192.168.3.1 98:d:51:38:f4:51 UHLWIir en0 1198
  21. 192.168.3.136 68:ab:bc:2e:1:45 UHLWI en0 963
  22. 192.168.3.162/32 link#5 UCS en0 !
  23. 192.168.3.180 ec:4d:3e:6b:53:86 UHLWI en0 1169
  24. 192.168.3.187 c6:8b:c4:46:e0:17 UHLWIi en0 1100
  25. 192.168.56 link#17 UC vboxnet0 !
  26. # 现在肯定能 ping 通了
  27. mrcode@mrcode ~ % ping 192.168.56.1
  28. PING 192.168.56.1 (192.168.56.1): 56 data bytes
  29. 64 bytes from 192.168.56.1: icmp_seq=0 ttl=64 time=0.092 ms
  30. 64 bytes from 192.168.56.1: icmp_seq=1 ttl=64 time=0.059 ms

提示:

  • /etc/vbox/networks.conf 文件如果不存在需要自己创建
  • 里面写 192.168.56.1/24 或则 192.168.56.0/21 都有效
  • 自从 192.168.56.1 更改成功之后,后面发现这个功能又正常了,写 192.168.57.1 也可以,也不用在 networks.conf 文件中提前配置

虚拟机复制

快速的复制刚才弄好的虚拟机,可以得到多台服务器,只需要做少量的修改。
关闭虚拟机后,右键,然后选择复制
image.png
配置基础信息
image.png
选择完全复制
image.png
复制完成后,启动该虚拟机,就可以通过 sh 软件链接了(IP 地址是复制之前的哪一台,所以可以使用之前的 IP 链接)。链接上之后,可以修改他们的 IP 地址为其他的,否则所有机器启动的话就会出现问题了

  1. # ifcfg-enp0s3 是 NAT 自动获取的 IP,所以不用修改,只需要修改 HOST Only 的 ifcfg-enp0s8 就行了
  2. vi /etc/sysconfig/network-scripts/ifcfg-enp0s8
  3. TYPE=Ethernet
  4. PROCY_METHOD=none
  5. BROWSER_ONLY=no
  6. BOOTPROTO=static
  7. DEFROUTE=yes
  8. IPV4_FAILURE_FATAL=no
  9. IPV6INIT=yes
  10. IPV6_AUTOCONF=yes
  11. IPV6_DEFROUTE=yes
  12. IPV6_FAILURE_FATAL=no
  13. IPV6_ADDR_GEN_MODE=stable-privacy
  14. NAME=enp0s8
  15. UUID=ad785b1f-8ef6-4dd7-9e32-8e28e10a8786
  16. DEVICE=enp0s8
  17. ONBOOT=yes
  18. # 只需要更改这个 IP 地址就可以了
  19. IPADDR=192.168.56.108
  20. NATMASK=255.255.255.0
  21. GATEWAY=192.168.56.1

重启网络

  1. # 重启网络
  2. [root@localhost ~]# service network restart
  3. # 之后就用 sh 软件链接 192.168.56.108 了
  4. # 链接之后,将两台服务器都启动起来,然后在 108 上 ping 107 ,可以看到虚拟机之间能正常互通
  5. [root@localhost ~]# ping 192.168.56.107
  6. PING 192.168.56.107 (192.168.56.107) 56(84) bytes of data.
  7. 64 bytes from 192.168.56.107: icmp_seq=1 ttl=64 time=1.01 ms

关于通过 hostName 进行虚拟机之间的访问

请参考该笔记

关于虚拟机之间免密登录

请参考该笔记