Skip to content

虚拟机网络配置

虚拟机需要既能与宿主机通讯,又能访问公网,在 VirtualBox 可通过 Nat 实现连接外网,通过 Host-Only 实现与宿主机通讯。

VirtualBox 网络的几种连接方式

桥接模式

特点: 1. 如果主机可以上网,虚拟机可以上网 2. 虚拟机之间可以ping通 3. 虚拟机可以ping通主机 4. 主机可以ping通虚拟机 5. 以上各点基于一个前提:主机可以上网 6. 如果主机不可以上网,所有1-4特点均无

NAT 模式

特点: 1. 如果主机可以上网,虚拟机可以上网 2. 虚拟机之间不能ping通 3. 虚拟机可以ping通主机(此时ping虚拟机的网关,即是ping主机) 4. 主机不能ping通虚拟机

Host-Only Adapter 模式

特点: 1. 虚拟机不可以上网 2. 虚拟机之间可以ping通 3. 虚拟机可以ping通主机(注意虚拟机与主机通信是通过主机的名为VirtualBox Host-Only Network的网卡,因此ip是该网卡ip 192.168.56.1,而不是你现在正在上网所用的ip) 4. 主机可以ping通虚拟机

NAT 和 Host-Only 双网卡设置

虚拟机先装个 route 工具

## ubuntu 下
sudo apt install route

关闭虚拟机,打开管理>>全局设定>>网络,点击右侧 + 就会创建一个 NatNetwok,点击 ⚙ 进行设置

%E8%99%9A%E6%8B%9F%E6%9C%BA%E7%BD%91%E7%BB%9C%E9%85%8D%E7%BD%AE%2068502/Untitled.png

进入管理>>主机网络管理器,创建适配器并启用,手动配置网卡

%E8%99%9A%E6%8B%9F%E6%9C%BA%E7%BD%91%E7%BB%9C%E9%85%8D%E7%BD%AE%2068502/Untitled%201.png

DHCP 设置如下,可根据自己需要设置

%E8%99%9A%E6%8B%9F%E6%9C%BA%E7%BD%91%E7%BB%9C%E9%85%8D%E7%BD%AE%2068502/Untitled%202.png

在系统网络设配器可看到

%E8%99%9A%E6%8B%9F%E6%9C%BA%E7%BD%91%E7%BB%9C%E9%85%8D%E7%BD%AE%2068502/Untitled%203.png

右键虚拟机设置,网卡1设置 NAT 模式

%E8%99%9A%E6%8B%9F%E6%9C%BA%E7%BD%91%E7%BB%9C%E9%85%8D%E7%BD%AE%2068502/Untitled%204.png

网卡2设置 Host-Only ,界面名称选择刚创建的适配器

%E8%99%9A%E6%8B%9F%E6%9C%BA%E7%BD%91%E7%BB%9C%E9%85%8D%E7%BD%AE%2068502/Untitled%205.png

启动虚拟机,这里用的是 ubuntu 20.04 版本, sudo vi /etc/netplan/00-installer-config.yaml 编辑文件,须严格按照 yaml 文件格式填写。

# This is the network config written by 'subiquity'
network:
  ethernets:
    enp0s3:
      addresses: []
      dhcp4: true
    enp0s8:
      dhcp4: false
      addresses: [192.168.56.102/24]
      nameservers:
        addresses: [192.168.56.1]
  version: 2

:x 保存后 sudo netplan apply 让网络设置生效

enp0s3 就是 NAT 网络的网卡,enp0s8 则是 Host-Only 网络,两个网卡设置别搞反了。

不用设置网关 gateway4,用默认的就行,设置错了可能反而有问题。

route 命令看下路由表,如果设置错了外网不通可看下有没有配错,我一开始 enp0s8 设置错了 gateway4 不是用的 default 网关导致外网不通。

nathan@ubuntu20:~$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         10.0.2.2        0.0.0.0         UG    100    0        0 enp0s3
10.0.2.0        0.0.0.0         255.255.255.0   U     0      0        0 enp0s3
10.0.2.2        0.0.0.0         255.255.255.255 UH    100    0        0 enp0s3
192.168.56.0    0.0.0.0         255.255.255.0   U     0      0        0 enp0s8

ip addr 看下最终的网络

nathan@ubuntu20:~$ ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> 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: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:54:b0:94 brd ff:ff:ff:ff:ff:ff
    inet 10.0.2.15/24 brd 10.0.2.255 scope global dynamic enp0s3
       valid_lft 85761sec preferred_lft 85761sec
    inet6 fe80::a00:27ff:fe54:b094/64 scope link 
       valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:e4:75:f1 brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.102/24 brd 192.168.56.255 scope global enp0s8
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fee4:75f1/64 scope link 
       valid_lft forever preferred_lft forever

让后宿主机可通过 192.168.56.102 连接虚拟机了。

附 CentOS 7 的配置

vi /etc/sysconfig/network-scripts/ifcfg-enp0s3

TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s3
UUID=7f1bc04e-54e7-49f6-8597-29085d9ec3de
DEVICE=enp0s3
ONBOOT=yes
IPADDR=192.168.56.101

ip addr

[root@localhost ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    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: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:87:2e:ee brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.101/24 brd 192.168.56.255 scope global enp0s3
       valid_lft forever preferred_lft forever
    inet6 fe80::b853:ee1c:d582:c407/64 scope link 
       valid_lft forever preferred_lft forever
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 08:00:27:fe:67:25 brd ff:ff:ff:ff:ff:ff
    inet 10.0.3.15/24 brd 10.0.3.255 scope global dynamic enp0s8
       valid_lft 86292sec preferred_lft 86292sec
    inet6 fe80::2926:9286:bfb2:d040/64 scope link 
       valid_lft forever preferred_lft forever