虚拟机如何在主机可以访问外网的情况下也访问外网
为什么写这篇文章?
最近在学习Raspberry Pi Pico的相关内容,Pico是支持MicroPython SDK和 C++ SDK 的。用MicroPython官方推荐的IDE是Thonny,但我用它写代码觉得很难受,智能提示和补全用起来不是很顺手。我在想要不用VS code + 拓展试试?还真在网上找到了相关的文章,用的是VS code + Python + MicroPico拓展。
在查找相关文章之时,发现了一篇用Raspberry Pi Pico官方C++ SDK + Linux + cmake 的环境配置教程,开发方式是 Windows下用 VS code 写代码,远程连接Ubuntu虚拟机,在虚拟机下用 gcc 编译 + make构建生成.uf2文件,再将.uf2文件传输到Windows主机并拖拽至RPI-RP2存储设备(即Pico板)实现开发。
教程链接:轻松玩转树莓派Pico一、树莓派pico新手上路 - 知乎 (zhihu.com)
在Ubuntu用 git 克隆Raspberry Pi官方的Pico SDK时要么特别慢要么会显示拒绝连接,加之有时克隆的项目会出现部分文件缺失。个人猜测是在国内访问GitHub站点不稳定所致。
对个人而言,最好的解决办法就是挂VPN。我在Windows下用的是Clash for windows,最简单的方式就是在Ubuntu也下一个Clash。个人认为,这也是一种解决方式,但一定不是最合理的。那有没有一种方法,让**Windows主机用Clash能够访问外网的同时,让虚拟机也能访问到外网呢?**答案是肯定的。
解决方法:
在和ChatGPT“磨合”了一会后,摸索出了一套方案。首先,你得具有一些必要的软件或环境。
- 主机系统:Windows 11
- 代理软件:Clash for windows
- 虚拟机软件:VM wave 14
- 虚拟机系统:Ubuntu 18.04 LTS(Linux)
-
打开VM wave 点击编辑 → 虚拟机网络编辑器。
-
点击右下角的更改设置,需要用管理员身份运行。
-
添加一个网络,选择桥接模式,我电脑和路由器是无线连接的,所以选择Wi-Fi驱动设备,若是用网线连接,选择相应的驱动设备即可。修改完成后,先点击应用,再点击确定。
-
在Windows下按 Win + R 输入cmd或者powershell,点击确定。
在命令行输入ipconfig,查看Windows本地IP。
-
登录Ubuntu系统,在命令行输入ifconfig查看本地IP地址,并尝试Ping主机。
主机和虚拟机相互Ping通是必须的。

-
在命令行输入gedit .bashrc(若没有安装gedit工具,则用 vi .bashrc 或 vim .bashrc)。
sudo gedit .bashrc
在 .bashrc 文件中添加以下两行。
export http_proxy=http://Windows主机IP:Clash代理端口 export https_proxy=http://Windows主机IP:Clash代理端口

IP是用Windows主机的IP,端口号可以在Clash查看。
编辑完 .bashrc 后,Ctrl + S 保存退出。(必要的话可以尝试重启系统,用命令reboot即可重启)
- 勾选Clash中的必要选项。(Clash for Windows的使用我不在这里赘述,详细使用教程可上网搜索查得。)
Allow LAN选项是允许同一网段下的网络绑定,此前我已将 Windows 主机和 Ubuntu 虚拟机已经配置到了同一网段下;System Proxy是开启代理。

- 至此,你的虚拟机便可与主机通过桥接模式访问外网。访问外网和在Github拉取文件更加稳定。
虚拟机下访问YouTube: