背景
需要宿主机连接虚拟机,且虚拟机可以访问外网。
本人电脑(没有无线网卡)在连接网线的情况下,直接通过桥接网卡就可以访问外网。但是由于一些原因,只能使用外接无线USB适配器方式连接 wifi,导致 vbox 通过桥接网卡无法使用外网(我的猜测),但是可以通过宿主机访问虚拟机,为了使虚拟机也可以访问外网,因此增加一个 NAT网卡。
操作步骤
通过虚拟机网络配置,开通两个网卡,分别为 NAT 网卡(enp0s3)、桥接网卡(enp0s8)
- 启动虚拟机
记住下面的配置,稍后会把这些设置到配置文件中eagle@local:~$ ifconfig enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255 inet6 fe80::4911:7451:32fc:475f prefixlen 64 scopeid 0x20<link> ether 08:00:27:71:95:ac txqueuelen 1000 (Ethernet) RX packets 121 bytes 15114 (15.1 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 180 bytes 17718 (17.7 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.5.88 netmask 255.255.255.0 broadcast 192.168.5.255 inet6 fe80::a00:27ff:fe39:b2d8 prefixlen 64 scopeid 0x20<link> ether 08:00:27:39:b2:d8 txqueuelen 1000 (Ethernet) RX packets 203 bytes 28141 (28.1 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 300 bytes 30387 (30.3 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
- 设置网卡的静态IP,直接贴出配置文件的内容如下:
# => 方法一:传统方式 # 首先修改 IP 设置如下,这里使用 ifconfig 内容,当然 address 也可以改成自己想要的 eagle@local:~$ cat /etc/network/interfaces auto lo iface lo inet loopback auto enp0s3 iface enp0s3 inet static address 10.0.2.15 netmask 255.255.255.0 gateway 10.0.2.2 auto enp0s8 iface enp0s8 inet static address 192.168.5.88 netmask 255.255.255.0 gateway 192.168.5.1 # 更新 DNS 解析 eagle@local:~$ cat /etc/systemd/resolved.conf [Resolve] DNS=8.8.8.8 # 重启生效 eagle@local:~$ reboot # => 方法二:使用 netplan (本人选择的方案) eagle@local:~$ sudo cp /etc/netplan/01-network-manager-all.yaml /etc/netplan/02-network-manager-custom.yaml eagle@local:~$ cat /etc/netplan/02-network-manager-custom.yaml network: version: 2 renderer: NetworkManager ethernets: enp0s3: dhcp4: no addresses: [10.0.2.15/24] gateway4: 10.0.2.2 nameservers: addresses: [8.8.8.8, 114.114.114.114] enp0s8: dhcp4: no addresses: [192.168.5.88/24] gateway4: 192.168.5.1 nameservers: addresses: [8.8.8.8, 114.114.114.114] sudo netplan apply # 立即生效
- 重启,然后确认IP是否设置成功
eagle@local:~$ ifconfig enp0s3 enp0s3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255 inet6 fe80::a00:27ff:fe71:95ac prefixlen 64 scopeid 0x20<link> ether 08:00:27:71:95:ac txqueuelen 1000 (Ethernet) RX packets 135 bytes 18331 (18.3 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 343 bytes 37889 (37.8 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eagle@local:~$ ifconfig enp0s8 enp0s8: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.5.88 netmask 255.255.255.0 broadcast 192.168.5.255 inet6 fe80::a00:27ff:fe39:b2d8 prefixlen 64 scopeid 0x20<link> ether 08:00:27:39:b2:d8 txqueuelen 1000 (Ethernet) RX packets 1042 bytes 120516 (120.5 KB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 611 bytes 53698 (53.6 KB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eagle@local:~$ ping baidu.com PING baidu.com (123.125.114.144) 56(84) bytes of data. 64 bytes from 123.125.114.144 (123.125.114.144): icmp_seq=1 ttl=51 time=40.6 ms 64 bytes from 123.125.114.144 (123.125.114.144): icmp_seq=2 ttl=51 time=40.9 ms 64 bytes from 123.125.114.144 (123.125.114.144): icmp_seq=3 ttl=51 time=41.7 ms 64 bytes from 123.125.114.144 (123.125.114.144): icmp_seq=4 ttl=51 time=41.0 ms ^C --- baidu.com ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3005ms rtt min/avg/max/mdev = 40.646/41.096/41.702/0.432 ms
此时可以看到 两个网卡都是 是我设置的IP,一般你现在都可以访问网络了。如果还不能访问网络,则继续进行下面的步骤。
- 修改路由
# 查看当前的路由信息 eagle@local:~$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 10.0.2.2 0.0.0.0 UG 100 0 0 enp0s3 0.0.0.0 192.168.5.1 0.0.0.0 UG 20101 0 0 enp0s8 10.0.2.0 0.0.0.0 255.255.255.0 U 100 0 0 enp0s3 169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 enp0s3 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0 172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-d17b92044bd2 172.20.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-c5056e3550a9 192.168.5.0 0.0.0.0 255.255.255.0 U 101 0 0 enp0s8 # 因为当前只有 NAT 网卡可以连外网,所以这里只需要保留 NAT 网卡的路由即可(删除前记得把上面的输出保存好,后面方便增加回来)。 eagle@local:~$ sudo route del -net 0.0.0.0 gw 192.168.5.1 [sudo] password for eagle: eagle@local:~$ route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 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 100 0 0 enp0s3 169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 enp0s3 172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0 172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-d17b92044bd2 172.20.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-c5056e3550a9 192.168.5.0 0.0.0.0 255.255.255.0 U 101 0 0 enp0s8 # 现在再尝试一下是否可以联网 eagle@local:~$ ping baidu.com PING baidu.com (220.181.57.216) 56(84) bytes of data. 64 bytes from 220.181.57.216 (220.181.57.216): icmp_seq=1 ttl=53 time=38.7 ms 64 bytes from 220.181.57.216 (220.181.57.216): icmp_seq=2 ttl=53 time=38.7 ms 64 bytes from 220.181.57.216 (220.181.57.216): icmp_seq=3 ttl=53 time=38.5 ms ^C --- baidu.com ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2004ms rtt min/avg/max/mdev = 38.515/38.695/38.789/0.205 ms
总结
通过上面的方式设置并生效之后,存在一个问题就是虚拟机不能访问宿主机(我猜应该也是路由的问题,但由于自己不需要,所以就不折腾了),由于本人在网上搜了很多资料,都没有解决桥接网卡下无法连外网的问题,同时也看到很多人遇到这个问题,所以就把自己这个解决方案记录下来,分享给大家。、
参考文章
https://blog.csdn.net/u010039418/article/details/80934346
https://blog.csdn.net/qq_42975842/article/details/81705244