环境准备
Windows 10
VirtualBox
CentOS 7
功能需求
Linux 虚拟机可以共享宿主机网络上的互联网
宿主机与虚拟机以及虚拟机与虚拟机之间互相通讯,组成一个虚拟的局域网,且在主机上可通过 SSH 工具连接虚拟机 Linux
具体实现
步骤一:检查 NAT 模式是否开启 DHCP 支持
NAT 的 DHCP
步骤二:检查 Host-Only 模式的配置信息
Host-Only配置信息
从图中可以得到当前 Host-Only 的主机地址为 192.168.56.1,子网掩码为 255.255.255.0
步骤三:检查当前宿主机的 DNS
例如当前宿主机的 DNS 服务器为 223.5.5.5
步骤四:配置 Linux 虚拟机网卡
配置网卡 1 为 Host-Only 模式
网卡1
配置网卡 2 为 NAT 模式
网卡2
步骤五:进入 Linux 配置网络连接
查看当前网络配置信息,找到第 1 块网卡名称
ifconfig
enp0s3: flags=4163 mtu 1500
inet 192.168.56.198 netmask 255.255.255.0 broadcast 192.168.56.255
inet6 fe80::1d39:2448:19ee:a5e5 prefixlen 64 scopeid 0x20
ether 08:00:27:ed:20:d2 txqueuelen 1000 (Ethernet)
RX packets 162 bytes 14321 (13.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 172 bytes 31435 (30.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
enp0s8: flags=4163 mtu 1500
inet 10.0.3.15 netmask 255.255.255.0 broadcast 10.0.3.255
inet6 fe80::b478:ae2e:ec91:199 prefixlen 64 scopeid 0x20
ether 08:00:27:3a:ca:56 txqueuelen 1000 (Ethernet)
RX packets 89 bytes 9664 (9.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 109 bytes 9144 (8.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
此时可以看到两块网卡 enp0s3 和 enp0s8
其中 enp0s3 是 Host-Only 模式的网卡,enp0s8 是 NAT 模式的网卡
在 /etc/sysconfig/network-scripts/ 中找到第 1 块网卡配置 ifcfg-enp0s3 进行编辑
vim ifcfg-enp0s3
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
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
NAME=enp0s3
UUID=72da31ca-7436-41ae-8b27-83fa8b9c27a6
DEVICE=enp0s3
ONBOOT=yes
IPADDR=192.168.56.198 # 此处配置该虚拟机的ip地址,注意必须在host-only的网段(192.168.56)内
NETMASK=255.255.255.0 # 子网掩码
GATEWAY=192.168.56.1 # 网关,主机地址
DNS1=223.5.5.5 # dns服务器,与宿主机相同
保存退出,重启网络服务
systemctl restart network
步骤六:连通测试
测试单元 1:虚拟机互联网 ping 通测试
ping baidu.com -c 3
PING baidu.com (220.181.38.148) 56(84) bytes of data.
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=1 ttl=49 time=38.3 ms
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=2 ttl=49 time=38.9 ms
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=3 ttl=49 time=38.9 ms
--- baidu.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 38.356/38.748/38.983/0.360 ms
测试单元 2:虚拟机与宿主机 ping 通测试
提示:如果是 Windows 系统,建议关闭防火墙或者开放 ICMP 端口
在虚拟机中 ping 宿主机
ping 192.168.56.1 -c 3
PING 192.168.56.1 (192.168.56.1) 56(84) bytes of data.
64 bytes from 192.168.56.1: icmp_seq=1 ttl=128 time=0.222 ms
64 bytes from 192.168.56.1: icmp_seq=2 ttl=128 time=0.651 ms
64 bytes from 192.168.56.1: icmp_seq=3 ttl=128 time=0.652 ms
--- 192.168.56.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.222/0.508/0.652/0.203 ms
在宿主机中 ping 虚拟机
ping 192.168.56.198
正在 Ping 192.168.56.198 具有 32 字节的数据:
来自 192.168.56.198 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.56.198 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.56.198 的回复: 字节=32 时间<1ms TTL=64
来自 192.168.56.198 的回复: 字节=32 时间<1ms TTL=64
192.168.56.198 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 0ms,平均 = 0ms
测试单元 3:虚拟机与虚拟机 ping 通测试
在两台配置好的虚拟机之间进行
在虚拟机 1 中 ping 虚拟机 2
ping 192.168.56.197 -c 3
PING 192.168.56.197 (192.168.56.197) 56(84) bytes of data.
64 bytes from 192.168.56.197: icmp_seq=1 ttl=64 time=0.469 ms
64 bytes from 192.168.56.197: icmp_seq=2 ttl=64 time=0.765 ms
64 bytes from 192.168.56.197: icmp_seq=3 ttl=64 time=0.478 ms
--- 192.168.56.197 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2042ms
rtt min/avg/max/mdev = 0.469/0.570/0.765/0.140 ms
在虚拟机 2 中 ping 虚拟机 1
ping 192.168.56.198 -c 3
PING 192.168.56.198 (192.168.56.198) 56(84) bytes of data.
64 bytes from 192.168.56.198: icmp_seq=1 ttl=64 time=0.452 ms
64 bytes from 192.168.56.198: icmp_seq=2 ttl=64 time=1.13 ms
64 bytes from 192.168.56.198: icmp_seq=3 ttl=64 time=0.869 ms
--- 192.168.56.198 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.452/0.817/1.131/0.280 ms
测试单元 4:使用 SSH 工具登陆虚拟机
SSH登陆虚拟机
无法 ping 通问题提醒
如果重新开启虚拟机后无法 ping 互联网,可以重启网络服务解决问题
systemctl restart network