如何配NAT和hostonly网卡使虚机既能上网又能互相通讯

一、问题起源

由于在企业中,个人工作电脑的IP地址是公司手工、或者公司DHCP服务器分配的,一般一台个人电脑只能申请1个工作用IP地址。如何在个人工作电脑上虚出多个不同操作系统的虚机,使用不同的IP地址,又与公司的IP地址管理策略不冲突,就是一个很大的问题。归结为以下三个问题点:

  1. 如何在自己的电脑上配置多个虚机?
  2. 如何让自己配置的虚机既能通过母机网卡上网?
  3. 又能互相之间互通?

这三个问题的解决,是我们以一己之力,以自己的一台电脑,来学习各种IT技能的基础。

二、虚机管理器介绍

对于第一个问题的解答如下,

目前广泛流行两个虚机管理器,一个是 “Oracle VM VirtualBox 管理器”,另一个是“VMware Workstation Pro”;两个管理器的概念相似、功能也相似,知道了一个的配置方法,第二个也就基本知道了。如何安装配置,大家可以参考官方文档。

Oracle VM VirtualBox 管理器

如何配NAT和hostonly网卡使虚机既能上网又能互相通讯_第1张图片

VMware Workstation Pro

 如何配NAT和hostonly网卡使虚机既能上网又能互相通讯_第2张图片

 

以下以“Oracle VM VirtualBox ”管理器 为例,虚机为redhat操作系统,解答问题2和3。对于“VMware Workstation Pro”,可参考我的博文

Mongodb的安装和使用初级实战

三、如何让虚机连通internet

在 VirtualBox中提供了两种网络配置,一种是NAT 网络,另外一种是仅主机(Host-Only)网络

如何配NAT和hostonly网卡使虚机既能上网又能互相通讯_第3张图片

NAT网络配置用以解决虚机通过母机上网。

如何配NAT和hostonly网卡使虚机既能上网又能互相通讯_第4张图片

 

其原理如下

虚拟机的请求传递给NAT Engine,由它来利用主机进行对外的网络访问,返回的数据包再由NAT Engine给虚拟机。

具体配置方法如下

1,在VirualBox全局设定中添加一块NAT网络的网卡

如何配NAT和hostonly网卡使虚机既能上网又能互相通讯_第5张图片

2,编辑该NAT网卡

如何配NAT和hostonly网卡使虚机既能上网又能互相通讯_第6张图片

3,对以生成的虚机“redhat”的网卡1进行网络配置,如下图

如何配NAT和hostonly网卡使虚机既能上网又能互相通讯_第7张图片

记住它的MAC地址为0800272BC1BC

4,启动虚机“redhat”,登录系统,查看网络配置

[root@xuwhredhat ~]# ifconfig
enp0s3: flags=4163  mtu 1500
        inet 10.0.2.4  netmask 255.255.255.0  broadcast 10.0.2.255
        inet6 fe80::6467:ab4f:8cbe:774a  prefixlen 64  scopeid 0x20
        ether 08:00:27:2b:c1:bc  txqueuelen 1000  (Ethernet)
        RX packets 20  bytes 3580 (3.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 47  bytes 6405 (6.2 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 1  (Local Loopback)
        RX packets 1  bytes 88 (88.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1  bytes 88 (88.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

可以看出,系统有一块网卡enp0s3,其MAC地址为08:00:27:2b:c1:bc,正是3中配置的那块NAT网卡,它通过DHCP获得的ip地址为10.0.2.4,可以ping通母机的NAT网关10.0.2.1

root@xuwhredhat ~]# ping 10.0.2.1
PING 10.0.2.1 (10.0.2.1) 56(84) bytes of data.
64 bytes from 10.0.2.1: icmp_seq=1 ttl=255 time=0.677 ms
64 bytes from 10.0.2.1: icmp_seq=2 ttl=255 time=0.433 ms
64 bytes from 10.0.2.1: icmp_seq=3 ttl=255 time=0.411 ms
64 bytes from 10.0.2.1: icmp_seq=4 ttl=255 time=0.191 ms
64 bytes from 10.0.2.1: icmp_seq=5 ttl=255 time=0.302 ms
64 bytes from 10.0.2.1: icmp_seq=6 ttl=255 time=0.279 ms
64 bytes from 10.0.2.1: icmp_seq=7 ttl=255 time=0.256 ms

也可以ping通外部网站

[root@xuwhredhat ~]# ping www.sina.com.cn
PING spool.grid.sinaedge.com (202.102.94.124) 56(84) bytes of data.
64 bytes from 202.102.94.124 (202.102.94.124): icmp_seq=1 ttl=48 time=11.4 ms
64 bytes from 202.102.94.124 (202.102.94.124): icmp_seq=2 ttl=48 time=10.3 ms

上网也没问题了

如何配NAT和hostonly网卡使虚机既能上网又能互相通讯_第8张图片

四、如何让虚机互相连通

仅主机(Host-Only)网络解决虚机互相连通的问题
如何配NAT和hostonly网卡使虚机既能上网又能互相通讯_第9张图片

原理如下:

通过VirtualBox Host-Only Network网卡进行通信,虚拟机以此ip作为网关,因此模拟了一个本机与各个虚拟机的局域网

配置方法如下

1,在VirualBox全局设定中添加一块hostonly网络的网卡

如何配NAT和hostonly网卡使虚机既能上网又能互相通讯_第10张图片

2,编辑该网卡

如何配NAT和hostonly网卡使虚机既能上网又能互相通讯_第11张图片

这里我们不用DHCP服务器。所以在之后的虚机网络配置时,需要手工配虚机的IP地址,地址为192.168.122.X,

3,此时查看母机的网络配置可以看到,母机虚拟出一块hostonly网卡,

如何配NAT和hostonly网卡使虚机既能上网又能互相通讯_第12张图片

4,对虚机“redhat”的网卡2进行网络配置,如下图

如何配NAT和hostonly网卡使虚机既能上网又能互相通讯_第13张图片

记住它的MAC地址为0800276B1BE0

现在,虚机redhat的网络配置如下

 

如何配NAT和hostonly网卡使虚机既能上网又能互相通讯_第14张图片

该虚机有两块虚拟网卡,

网卡1:接入NAT网络,MAC地址为0800272BC1BC,DHCP ,网段为10.0.2.0/24

网卡2:接入仅主机(Host-Only)网络,MAC地址为0800276B1BE0,不用DHCP,网段为192.168.122.0/24

5,启动虚机“redhat”,登录系统,查看网络配置

[root@xuwhredhat ~]# ifconfig
enp0s3: flags=4163  mtu 1500
        inet 10.0.2.4  netmask 255.255.255.0  broadcast 10.0.2.255
        inet6 fe80::6467:ab4f:8cbe:774a  prefixlen 64  scopeid 0x20
        ether 08:00:27:2b:c1:bc  txqueuelen 1000  (Ethernet)
        RX packets 24  bytes 3620 (3.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 51  bytes 6415 (6.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp0s8: flags=4163  mtu 1500
        ether 08:00:27:6b:1b:e0  txqueuelen 1000  (Ethernet)
        RX packets 8  bytes 663 (663.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 30  bytes 4217 (4.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

可以看到又增加了一块网卡enp0s8,其MAC地址为08:00:27:6b:1b:e0,正是4中配置的那块仅主机(Host-Only)网络网卡。由于没有配DHCP,所以我们需要手工给它配IP地址。

通过redhat的Application-->System Tools-->setting-->Network ,打开网络配置功能,对Ethernet(enp0s8)网卡进行配置

如何配NAT和hostonly网卡使虚机既能上网又能互相通讯_第15张图片

仅需配ipv4,且不配网关、DNS、路由,因为该网卡只需和192.168.122.0/24网段连通。IP地址手工设为192.168.122.10

如何配NAT和hostonly网卡使虚机既能上网又能互相通讯_第16张图片

点击add,结果如下

如何配NAT和hostonly网卡使虚机既能上网又能互相通讯_第17张图片

在执行ifconfig ,查看网络配置

enp0s3: flags=4163  mtu 1500
        inet 10.0.2.4  netmask 255.255.255.0  broadcast 10.0.2.255
        inet6 fe80::6467:ab4f:8cbe:774a  prefixlen 64  scopeid 0x20
        ether 08:00:27:2b:c1:bc  txqueuelen 1000  (Ethernet)
        RX packets 52  bytes 6058 (5.9 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 285  bytes 23739 (23.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

enp0s8: flags=4163  mtu 1500
        inet 192.168.122.10  netmask 255.255.255.0  broadcast 192.168.122.255
        inet6 fe80::1954:6d58:26fc:4b81  prefixlen 64  scopeid 0x20
        ether 08:00:27:6b:1b:e0  txqueuelen 1000  (Ethernet)
        RX packets 21  bytes 1443 (1.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 59  bytes 8415 (8.2 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

此时该虚机就可以和另外一台IP为192.168.122.20的虚机ping通了。

[root@xuwhredhat ~]# ping 192.168.122.20
PING 192.168.122.20 (192.168.122.20) 56(84) bytes of data.
64 bytes from 192.168.122.20: icmp_seq=1 ttl=64 time=0.527 ms
64 bytes from 192.168.122.20: icmp_seq=2 ttl=64 time=0.233 ms
64 bytes from 192.168.122.20: icmp_seq=3 ttl=64 time=0.366 ms
64 bytes from 192.168.122.20: icmp_seq=4 ttl=64 time=0.270 ms
64 bytes from 192.168.122.20: icmp_seq=5 ttl=64 time=0.902 ms
64 bytes from 192.168.122.20: icmp_seq=6 ttl=64 time=0.279 ms

总结

通过以上配置,我们为虚机redhat配置了两块网卡

网卡1enp0s3:IP地址 10.0.2.4,接入NAT网络,MAC地址为0800272BC1BC,DHCP ,网段为10.0.2.0/24,负责连通外部网络

网卡2enp0s8:IP地址 192.168.122.10,接入仅主机(Host-Only)网络,MAC地址为0800276B1BE0,不用DHCP,网段为192.168.122.0/24,负责连通该网段的各个虚机

[root@xuwhredhat network-scripts]# nmcli dev show
GENERAL.DEVICE:                         enp0s3
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         08:00:27:2B:C1:BC
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     enp0s3
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/4
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         10.0.2.4/24
IP4.GATEWAY:                            10.0.2.1
IP4.DNS[1]:                             10.122.1.82
IP4.DNS[2]:                             10.122.2.82
IP4.DOMAIN[1]:                          csvw.com
IP6.ADDRESS[1]:                         fe80::6467:ab4f:8cbe:774a/64
IP6.GATEWAY:                            

GENERAL.DEVICE:                         enp0s8
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         08:00:27:6B:1B:E0
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     Profile 1
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/3
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         192.168.122.10/24
IP4.GATEWAY:                            
IP6.ADDRESS[1]:                         fe80::1954:6d58:26fc:4b81/64
IP6.GATEWAY:                            

查看一下路由,默认路由是通过enp0s3这块网卡出去的。也可以通过修改enp0s3的 default gateway 设置将系统默认网关强制设为10.0.2.1

[root@xuwhredhat ~]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         gateway         0.0.0.0         UG    100    0        0 enp0s3
10.0.2.0        0.0.0.0         255.255.255.0   U     100    0        0 enp0s3
192.168.122.0   0.0.0.0         255.255.255.0   U     100    0        0 enp0s8

[root@xuwhredhat ~]# ip route show
default via 10.0.2.1 dev enp0s3  proto static  metric 100 
10.0.2.0/24 dev enp0s3  proto kernel  scope link  src 10.0.2.4  metric 100 
192.168.122.0/24 dev enp0s8  proto kernel  scope link  src 192.168.122.10  metric 100 

用traceroute跟踪路由的结果如下,路由跟踪未完成的原因可能是因为采用NAT转换,但可以看出,是通过10.0.2.1出去的。

[root@xuwhredhat ~]#  traceroute -d www.sina.com.cn
traceroute to www.sina.com.cn (202.102.94.124), 30 hops max, 60 byte packets
 1  gateway (10.0.2.1)  0.148 ms  0.109 ms  0.138 ms
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * * *

参考文档 VirtualBox中的虚拟网络环境设置

你可能感兴趣的:(IT技术)