做公开数据采集、跑自动化脚本,或者想看看自家页面在别的城市显示成什么样,很多人会开一台虚拟机来干活。但虚拟机的网络跟物理机不是一回事——网络模式选不对,代理填了也不生效;系统不同,配置入口更是藏在完全不一样的地方。这篇文章把 Windows、Linux、macOS 三种常见环境的配法一次讲全,照着步骤做,很快就能让虚拟机的流量走你指定的代理。
一、动手之前:先分清虚拟机的三种联网模式
虚拟机软件(VMware、VirtualBox、Hyper-V 都一样)创建虚拟机时会让你选网络模式,这个选择直接决定代理该怎么配。常见的是三种:
NAT 模式:虚拟机躲在宿主机后面,共享宿主机的网络出口。好处是省事,宿主机能上网虚拟机就能上网;代价是虚拟机在局域网里是"隐身"的,别的设备访问不到它。
桥接模式:虚拟机直接接入你所在的局域网,像一台独立的电脑,有自己的内网地址,路由器把它当成一台真机器对待。
仅主机模式:虚拟机只跟宿主机互通,默认连不了外部服务,一般用来做本地联调,本文不多展开。
| 模式 | 虚拟机的身份 | 配代理的难度 | 适合的场景 |
|---|---|---|---|
| NAT | 宿主机的"房客" | 低,跟着宿主机走 | 日常开发、跑脚本 |
| 桥接 | 局域网独立设备 | 中,按自身网络配置 | 需要被局域网访问 |
| 仅主机 | 只与主机互通 | 高,需额外设置 | 本地联调、隔离测试 |
结论很简单:想让虚拟机走代理,NAT 和桥接都能配,区别只在于代理请求从哪个网络口出去。拿不准就用 NAT,配起来最省心。
二、Windows 虚拟机:图形界面两分钟搞定
Windows 的代理入口藏得比较深,跟着点就行:
1. 打开设置 → 网络和 Internet → 代理,Win10 和 Win11 路径基本一致;
2. 找到"手动设置代理",把开关打开,填入服务商给你的代理地址和端口,点保存;
3. 如果代理需要账号密码,保存后第一次使用时浏览器会弹出认证窗口,输一次记住即可。但不少命令行工具不会弹这个窗,得把认证信息直接写进代理地址里,写法参考下一节 Linux 的示例。
要注意的是,系统代理不是强制性的。浏览器和大部分桌面软件会遵守这个设置,但很多命令行工具压根不看它。想在 PowerShell 里也让请求走代理,得单独设一条:
# PowerShell 里让单次请求走代理
Invoke-WebRequest -Uri "目标网址" -Proxy "http://代理IP:端口"
# 给系统级命令行服务设代理(管理员权限运行)
netsh winhttp set proxy "代理IP:端口"
# 用完取消
netsh winhttp reset proxy
另外提醒一句:虚拟机里的 Windows 和宿主机是两套系统,代理要在虚拟机里配,在宿主机上配了不会自动带过去。
三、Linux 虚拟机:环境变量是万能钥匙
Linux 没有统一的图形代理开关(桌面版有,服务器版没有),最通用的办法是设环境变量,几乎所有命令行工具都认:
# 临时生效,关掉窗口就失效
export http_proxy="http://代理IP:端口"
export https_proxy="http://代理IP:端口"
# 代理需要账号密码时,把认证信息写进地址里
export http_proxy="http://用户名:密码@代理IP:端口"
# 只让某一条命令走代理,不污染全局
curl -x http://代理IP:端口 目标网址
想让配置长期有效,把这行 export 写进 ~/.bashrc(用 zsh 就写 ~/.zshrc),然后让它立刻生效:
echo 'export http_proxy="http://代理IP:端口"' >> ~/.bashrc
echo 'export https_proxy="http://代理IP:端口"' >> ~/.bashrc
source ~/.bashrc
两个小细节:一是密码里如果有 @ 、: 这类符号,要做转义,不然会被当成地址的一部分解析错;二是有些工具(比如 apt、yum)有自己的配置文件,环境变量对它们不一定生效,遇到了再单独处理,别一上来就全配一遍。
四、macOS 虚拟机:跟连 Wi-Fi 一样简单
macOS 的操作路径:打开系统设置 → 网络,点当前在用的网络连接,进入详细信息里的"代理"标签页,勾选"网页代理"和"安全网页代理"两项,各填一遍地址和端口,保存即可。
命令行部分跟 Linux 完全一样,export 环境变量那套照搬就行。唯一要留意的是,macOS 上不少应用不读系统代理,得进应用自己的偏好设置里单独填,别以为设了系统代理就万事大吉。
五、配完必做:三分钟验证代理真的生效了
配置保存了不代表生效了。验证方法很土但有效:在虚拟机里查一下当前的出口 IP,跟你本地的宽带 IP 对一下,不一样就说明代理在工作。
浏览器党直接搜"本机IP",看搜索结果里显示的地址;命令行党用一条 curl 就够:
curl -x http://代理IP:端口 查询出口IP的接口地址
如果服务商提供了个人中心,顺便去后台看一眼——你刚发的那次请求应该已经记在里面了。像神龙HTTP的个人中心就有可视化用量统计和实时监控,请求有没有走代理、走了多少,一眼就能对上。
六、这几个坑,我替你踩过了
坑一:虚拟机里连不上代理。先在宿主机上用同一组代理试一次。宿主机能通而虚拟机不通,多半是网络模式的问题或者防火墙拦了端口;宿主机也不通,那就是代理本身的问题,直接找服务商。
坑二:IP 明明配了,查出来还是本地 IP。九成是软件不走系统代理。浏览器看插件设置,命令行看环境变量,逐个排查。
坑三:报 407 认证错误。账号密码填错了,或者密码里的特殊符号没转义。把认证信息单独拿出来在别处试一遍,很快能定位。
坑四:用着用着突然失效。短效动态IP有存活时间,到期就下线,这不是故障。跑长任务前先确认手里这种IP的存活时长,或者在脚本里加个失败后自动获取新的IP的逻辑。
坑五:HTTPS 证书报错。虚拟机挂起太久,系统时间会漂移,证书校验就过不去,看起来像代理坏了,其实同步一下时间就好。
七、代理IP从哪来?选服务商盯住这几点
虚拟机环境对代理的要求其实比物理机更挑——你既然专门开了虚拟机,说明任务有一定规模或者要长期跑,代理的稳定性和纯净度直接决定成败。挑选时重点看三样:可用率(低于99%的会频繁中断任务)、IP质量(被目标网站标记过的IP,请求发出去也是白费)、定位精度(能不能指定到城市级别)。
拿神龙HTTP来说,IP池有3000万+正规授权储备,来自国内三大运营商的正规授权,可用率标称99.9%。我比较看重的一点是300+城市级精准定位——做地区相关的测试时,可以直接取指定城市的IP,虚拟机装在哪都无所谓,出口想落在哪个城市就落在哪个城市。另外它的短效动态IP和长效静态IP是分开的产品线:短任务用短效的按量取用,需要固定出口的长任务用长效静态IP,不用一套配置硬撑所有场景。协议上 HTTP、HTTPS、SOCKS5 都支持,虚拟机里不管什么软件基本都能接上。
常见问题
Q:虚拟机配了代理,宿主机的 IP 会跟着变吗?
不会。代理设置只作用于配了它的那台虚拟机,宿主机上网完全不受影响。反过来也一样,宿主机配了代理,虚拟机不会自动继承,得在虚拟机里再配一遍。
Q:一台宿主机开好几台虚拟机,能各用各的代理吗?
能。代理是在每台虚拟机的系统内部设置的,互相不干扰。NAT 模式下多台虚拟机虽然共享宿主机出口,但只要各自填了不同的代理,出口就各是各的。
Q:免费代理能不能凑合用?
跑通流程可以,正经干活不建议。免费代理可用率低、速度没保障,来源也不明不白。做项目还是选正规服务商,出了问题至少有人管,神龙HTTP这类有技术团队7×24小时支持的服务商,遇到配置问题也能直接问。
Q:部分软件死活不走代理怎么办?
先确认这类软件是否支持读取系统代理或环境变量,不支持的只能进软件自己的网络设置里单独填写。如果软件连代理设置项都没有,考虑换一个支持代理的替代工具,或者把代理配在更底层的网络环节上。





