服务器与大带宽专家 · 持牌IDC/CDN/ISP服务商
简米科技官网JIANMI TECH
资讯 2026-11-08 简米科技 4,620 字 11 分钟阅读

本地映射虚拟机如何实现内网穿透与端口访问?映射虚拟机端口访问方法

导读本地映射虚拟机实现内网穿透与端口访问,核心思路就三条:用frp自建隧道、用ngrok类托管隧道、用ZeroTier类虚拟组网,选哪条路取决于你有没有公网服务器以及想要的控制力,多数情况下,个人开发者和中小团队的第一诉求是“让外部能访问到虚拟机里的Web服务”,下文从原理到实操,逐步拆透这些方案,为什么虚拟机比物……

本地映射虚拟机实现内网穿透与端口访问,核心思路就三条:用frp自建隧道、用ngrok类托管隧道、用ZeroTier类虚拟组网,选哪条路取决于你有没有公网服务器以及想要的控制力。多数情况下,个人开发者和中小团队的第一诉求是“让外部能访问到虚拟机里的Web服务”,下文从原理到实操,逐步拆透这些方案。

为什么虚拟机比物理机更容易碰到“端口访问”疑难杂症

虚拟机多了一层NAT或Host-Only网络,宿主机和虚拟机之间有虚拟交换机隔离,即便你把Tomcat、Nginx或Docker容器跑在虚拟机里,宿主机能通过映射端口访问,但外界完全感知不到这个内网IP,行业共识认为,虚拟机内网穿透的核心价值就是把业务暴露面从物理局域网拉伸到公网,同时保留虚拟化隔离带来的环境和快照优势。

另一个常见场景是多人协作:后端在虚拟机里跑着SpringBoot,前端想联调,手头没有公网环境,这时本地映射虚拟机端口到公网地址,本质上等同于把开发环境“临时上架”,联调结束即可关停。

虚拟机内网穿透怎么设置先分清三个穿透层级

配置前需要明确穿透发生在哪一层,不同层级的工具和端口访问方式完全不同,避免混为一谈。

应用层协议穿透:适合HTTP/HTTPS服务

常见工具有ngrok、frp(带HTTP类型代理)、cpolar,这类工具会解析HTTP头里的Host字段,实现域名到内网虚拟机的路由。优点是无需改动虚拟机网络结构,像Windows虚拟机里的IIS或Linux里的Nginx都能被直接代理,访问者通过生成的公网域名(如https://xxx.ngrok-free.dev)直接进入服务界面。

TCP/UDP端口级穿透:适合SSH、RDP、数据库协议

当你需要从公网SSH进虚拟机、远程桌面(RDP)连接Windows虚拟机,或者让外部程序直连虚拟机里的MySQL(3306端口)时,必须采用TCP端口映射,frp用remote_port将公网服务器的端口转发给内网虚拟机,ngrok的tcp隧道也做类似事,多数情况下,协议不感知的上层业务都能跑通,包括自定义端口协议。

二层/三层组网穿透:适合多机互联、内网IP互通

ZeroTier、Tailscale、NPS(可自建)属于在OSI模型第三层建立虚拟网络,安装客户端后,虚拟机获得一个虚拟内网IP(如24.33.10),其他成员无需再关心端口映射规则,直接用该IP访问任意端口。如果目标是让办公室电脑、家里NAS和云虚拟机处于同一局域网,这个方案最省心。

本地虚拟机端口映射工具怎么选frp、ngrok、ZeroTier横向对比

工具选型直接影响后续维护成本,先看一张对比表,再解释核心差异。

维度 frp(自建) ngrok(SaaS) ZeroTier(组网)
是否需公网服务器 需要 不需要 不需要
自定义域名 支持(自己控制DNS) 免费版随机域名,付费版自定义 不适用
延迟 取决于你的服务器带宽 取决于ngrok节点质量 P2P直连时极低,走中转时较高
配置难度 略高,需编辑两端TOML文件 低,一条命令启动 低,但需注册虚拟网络
适合场景 长期稳定使用、有云服务器 临时演示、快速联调 多设备组网、局域网替代

业内专家指出,如果你已经拥有一台轻量云服务器,优先级最高的是frp,原因是线路可控、端口资源自主,且没有第三方带宽瓶颈,如果你的场景是给客户展示几分钟效果,不想碰服务器配置,ngrok免费版足够了。

手把手:用frp把虚拟机SSH和Web端口暴露到公网

frp由服务端frps与客户端frpc组成,假设云服务器公网IP是2.3.4,虚拟机IP是168.122.101,目标是暴露SSH(22)与Nginx(80)。

第一步:在公网服务器下载frps并修改配置

wget https://github.com/fatedier/frp/releases/download/xxx/frp_xxx_linux_amd64.tar.gz
tar -zxvf frp_xxx_linux_amd64.tar.gz
cd frp_xxx_linux_amd64
# 编辑 frps.toml

核心配置:

bindPort = 7000
# 设置访问认证,客户端需填相同token
auth.token = "your-strong-token"

第二步:在虚拟机里配置frpc

serverAddr = "1.2.3.4"
serverPort = 7000
auth.token = "your-strong-token"
[[proxies]]
name = "vm-ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6022
[[proxies]]
name = "vm-web"
type = "http"
localPort = 80
customDomains = ["vm.example.com"]

第三步:启动并验证

公网服务器上执行./frps -c frps.toml,虚拟机里执行./frpc -c frpc.toml,此时你从公网访问2.3.4:6022等于走虚拟机的22端口;访问http://vm.example.com则直接命中虚拟机的80端口,若有多个虚拟机需要映射,只需在配置里增加新的[[proxies]]段,并更改remotePort。

不想买公网服务器?用ngrok三分钟露出端口

ngrok适合临时场景,去ngrok官网注册拿到Authtoken,然后本地执行:

ngrok config add-authtoken 你的token
ngrok http 8080

若虚拟机跑的是非HTTP服务,换成ngrok tcp 3389(远程桌面)或ngrok tcp 22(SSH)。免费版公网URL每次启动会变化,正式对接时建议升级付费固定域名或换用frp。

ZeroTier方案:让远程访问像在同一个办公室

在虚拟机与你的电脑上分别安装ZeroTier客户端,登录其Web控制台创建一个Network ID,然后将两台设备加入该网络。ZeroTier分配给虚拟机的IP是稳定的,例如24.33.10,之后你在电脑上直接ssh root@172.24.33.10,或浏览器访问http://172.24.33.10:3000查看Grafana面板端口访问规则完全等同于局域网内操作,无需额外映射。

端口能通但访问卡住最常见的四个排查点

内网穿透配置本身没报错,外部却发现迟迟连不上,问题多半出在这些环节。

  • 防火墙拦截:云服务商安全组规则只放行了80端口,没放开你自定的remotePort(比如6022),去控制台检查入站规则,同时检查虚拟机内部firewalld或ufw状态。
  • 本地服务绑定地址:虚拟机里的MySQL或Redis只监听了0.0.1,frpc转发时连不上,确认监听地址为0.0.0或至少覆盖到虚拟机的局域网网卡。
  • TOML配置项版本过旧:frp在0.52.0之后抛弃INI格式改用TOML,用老版本教程复制语法会直接报错,去官方GitHub Releases下载最新版,核对参数名。
  • HTTP隧道域名未解析:使用customDomains时,需要把该域名A记录指向你的云服务器公网IP,本地可以先用curl -H "Host: vm.example.com" http://1.2.3.4测试能否穿透,若能则说明frp本身工作正常,纯DNS问题。

一个实用的调试命令序列:在虚拟机里先跑curl 127.0.0.1:端口确认服务正常,再到公网服务器跑nc -vz 127.0.0.1 远端端口确认frps在监听,最后从外部访问检验安全组。哪里不通,问题就定位在哪一层。

穿透暴露后的安全底线绕过隧道直连内网的口子必须堵住

内网穿透让公网直达虚拟机,同时意味着攻击面扩大,以下几点是必须落地的基线动作。

  • 更换frp默认Token,且强密码长度不低于16位。
  • 使用HTTP隧道时,在Nginx反向代理层开启Basic Auth或IP白名单。
  • 公网服务器仅开放必要端口:云安全组里只放行frps的bindPort、需要对外服务的remotePort,其余全部拒绝。
  • 定期查看frps日志中的异常连接尝试,关注非业务时段的SSH爆破。
  • 对虚拟机启用快照或备份卷,穿透期间频繁回滚状态、降低被植入后门的风险。

方案选型上还有一个现实建议:别为了省钱把自己长期生产环境暴露在免费隧道上,但如果你只是想在家里连学校虚拟机的Jupyter Notebook写代码,免费方案完全够用。

本地映射虚拟机内网穿透自己搭和买现成,成本差多少

搜到这篇文章的读者,往往也会比较“自建frp”与“云市场内网穿透服务”的费用,如果按一台轻量应用服务器一年约200-500元(1核2G配置)计算,自建方案约等于服务器本身的价格,而第三方内网穿透商业版按流量或端口数量计费,月度费用从十几到上百元不等,如果你已有闲置公网服务器,自建frp边际成本接近于零;如果没有,第三方服务反而是更省心的入门选择,这没有绝对的对错,只有“按流量计费”与“按固定资源包月”两种成本模型适合不同的预算结构。

虚拟机内网穿透与端口访问常见问题

frp和ngrok可以同时用吗?

可以,但实际没必要,frp负责自建隧道把公网服务器的端口转发给虚拟机,ngrok负责从虚拟机主动拨出到ngrok平台,两者机制不同且都会占用额外连接,同时使用会增加排障难度,建议同一时间只用一种。

虚拟机的端口映射到公网后,局域网内访问地址会变化吗?

不会,穿透仅建立了一条从公网到虚拟机的反向通道,虚拟机在虚拟机网络中的IP与端口保持不变,局域网内依旧访问原有的私有IP地址,例如168.122.101:8080,公网访问则使用云服务器的IP加映射端口。

每次重启虚拟机后frpc没自动连上怎么办?

将frpc注册为systemd服务可实现开机自启,创建/etc/systemd/system/frpc.service包含ExecStart=/绝对路径/frpc -c /绝对路径/frpc.toml,然后执行systemctl enable --now frpc,若虚拟机网络启动较慢,在Unit段添加After=network-online.target和Wants=network-online.target确保网络就绪后再拉起隧道,另一方延迟取决于frps所在服务器的网络稳定性,与虚拟机关机与否无关,只要公网服务端在线,重新开机后客户端会自动重连。

分享本文
本文为 简米科技官网 原创,已由运维技术专家审核。转载请注明来源:原文链接
售前咨询 服务热线 售后 邮箱