内网穿透(web服务、远程桌面)
内网指家庭、公司内部的局域网,局域网内部设备之间可以互相访问,实现文件、设备资源共享。
外网即互联网,内网设备依靠网关接入互联网。
内网穿透:让外网可以访问本地局域网内运行的服务,也叫 NAT-DDNS。 基于 DDNS 动态域名与 NAT 网络地址转换,完成内外网地址映射。FRP、Ngrok、Cloudflare Tunnel 一类则是本机客户端把流量从公网节点反代进来,不依赖路由器端口映射。
开发场景中,本地启动的 Web 服务默认仅本机、同局域网设备可以访问;如果需要互联网上其他用户访问本机服务,就需要内网穿透。
内网穿透原理
内网穿透也叫 NAT 穿透。局域网主机对外通信,网关 NAT 设备完成地址转换,把内网私有地址翻译成公网地址。家庭宽带路由器就是典型 NAT 网关。
NAT 对 TCP、UDP 都会做端口映射。UDP 无连接,跟踪表超时后回包会丢,并不能用来「解决 UDP 传输不稳定」。
NAT(网络地址转换)
NAT(Network Address Translation,网络地址转换),将内网私有 IP 转换为公网合法 IP 的技术。
- 解决公网 IPv4 地址资源不足
- 对外隐藏内网设备 IP,起到基础防护效果
NAT 工作流程
NAT 网关拥有两张网卡:公网网卡拥有公网 IP(示例:202.20.65.5),内网网卡为局域网网关 IP(示例:192.168.1.1)。

- 内网主机发起请求:内网主机
192.168.1.2访问公网服务器202.20.65.4,数据包源 IP192.168.1.2,目的 IP202.20.65.4。 - 网关替换源 IP:数据包经过 NAT 网关,把源 IP 替换为网关公网 IP
202.20.65.5,转发到互联网。公网服务器收到的数据包看不到内网真实 IP。 - 公网服务返回响应:服务器回包,目的 IP 为网关公网 IP
202.20.65.5。 - 网关还原目的 IP:NAT 网关查询连接记录,将数据包目的 IP 改回内网主机
192.168.1.2,转发给内网设备。整个转换过程对通信双方透明。

- 连接跟踪表 Connection Track:网关维护一张连接跟踪表,记录每一条内外网对应连接。收到外部响应数据包,查表匹配,确定转发给哪一台内网设备。

- 端口转换:多台内网设备同时访问外网,仅依靠 IP 无法区分不同连接。NAT 网关会同时记录端口信息;当内网客户端源端口冲突,网关还会自动替换源端口,区分不同会话。

NAPT 网络地址端口转换:NAPT 是 NAT 的扩展,同时转换 IP 地址和 TCP、UDP 端口,家用路由器绝大多数使用 NAPT,实现多台设备共享同一个公网 IP 上网。
Frp(Sakura-FRP)
Windows 安装
参考文档:SakuraFrp 帮助文档
注册账号:访问 Sakura FRP 官网 注册账号,进入管理面板,在软件下载页面下载 Windows 客户端。
登录客户端:运行
SakuraLauncher.exe,填入管理面板获取的访问密钥登录。创建隧道:客户端隧道页面新建隧道,也可以网页后台创建;网页创建隧道后需要重启客户端才会显示。
- 本地 IP:一般填写
127.0.0.1;查看本机内网 IP 执行cmd→ipconfig - 本地端口:Web 服务如 3000;Windows 远程桌面默认端口 3389。
- 隧道类型:远程桌面选 TCP;HTTP、HTTPS 隧道要求 已备案域名,没有域名直接用 TCP 隧道。
- 远程端口:10240-65535,填 0 随机分配。
- 服务器:Web 业务注意看服务器说明,部分节点不支持建站。
- 本地 IP:一般填写
远程桌面提示端口不存在:Win+R 输入 services.msc,启动 Remote Desktop Services 服务。
隧道开启成功,日志输出公网访问地址:服务器IP:端口,使用该地址访问本地服务。
Mac 安装
参考文档:SakuraFrp 帮助文档
- 官网下载
frpc_darwin_amd64。 - 自动脚本安装:
sudo bash <(curl -s https://getfrp.sh);如 curl、wget 环境异常,可以下载脚本本地 bash 执行。 - 启动隧道:
frpc_darwin_amd64路径 -f 账户密钥:隧道ID
创建 HTTP 隧道
- 需要自己持有备案域名;无备案域名直接使用 TCP 隧道。
- 注意 FRP 服务器节点是否支持建站。
- 访问格式:
域名:端口。
Sunny-Ngrok
# cmd 进入程序目录
sunny.exe clientid 隧道id
# 多隧道
sunny.exe clientid 隧道id1,隧道id2
也可以双击 Sunny-Ngrok启动工具.bat,输入隧道 ID 运行。
Ngrok
下载解压程序,配置系统 PATH 环境变量。
官网注册账号,Dashboard 页面复制 Authtoken。
设置认证 token
ngrok config add-authtoken 你的Authtoken暴露本地端口
ngrok http 80控制台输出公网转发地址,即可访问本地服务。
Forwarding https://6c4a7b705c7e.ngrok-free.app -> http://localhost:80
IPv6 直连方案
运营商分配公网 IPv6 地址,运营商允许入站 IPv6 流量,不需要第三方穿透服务。
Windows 查看 IPv6 地址
ipconfig
Wireless LAN adapter WLAN:
Connection-specific DNS Suffix . :
IPv6 Address. . . . . . . . . . . : 2409:8a28:8c4:2e52::de5
IPv6 Address. . . . . . . . . . . : 2409:8a28:8c4:2e52:c991:b12b:947:ea83
Temporary IPv6 Address. . . . . . : 2409:8a28:8c4:2e52:bcfd:e6ba:1a2a:a8f5
Link-local IPv6 Address . . . . . : fe80::8496:a50c:1937:f8a9%10
IPv4 Address. . . . . . . . . . . : 192.168.31.146
Subnet Mask . . . . . . . . . . . : 255.255.255.0
Default Gateway . . . . . . . . . : fe80::d6da:21ff:fe99:2303%10
192.168.31.1
Windows 防火墙放行端口
- Win+S 搜索
Windows Defender 防火墙,打开高级设置。 - 新建规则 → 端口 → TCP,填写需要开放端口。
- 允许连接,域、专用、公用全部勾选,填写规则名称保存。
局域网其他设备访问格式:http://[IPv6地址]:端口
路由器 IPv6 配置(小米)
- 后台地址
http://192.168.31.1登录管理页。 - 上网设置,开启 IPv6(Native、DHCPv6)。
- 高级设置 → 端口转发,添加转发规则:外部端口、内部 IP、内部端口,协议 TCP。
同一 WiFi 可以 IPv6 访问,切换手机流量无法访问。常见原因是运营商屏蔽 IPv6 入站流量。可以使用端口扫描网站检测端口状态;Closed、Filtered 代表端口被拦截。
Cloudflare Tunnel(cloudflared)
不需要公网 IP,域名不需要备案;流量经过 Cloudflare 边缘网络,隐藏本机端口,内置 WAF 安全防护;个人免费不限流量。
前置条件
- Cloudflare 账号;
- 托管在 Cloudflare 的域名;
- 本地运行 Web 服务,例如
localhost:8080。
Windows 安装配置
在 cloudflare/cloudflared Releases 下载
cloudflared-windows-amd64.exe,重命名为cloudflared.exe。终端登录账号,浏览器跳转授权,完成登录。
./cloudflared.exe tunnel login创建隧道,执行命令,成功输出隧道 ID,生成凭证 json 文件。
./cloudflared.exe tunnel create my-tunnel编写配置文件
%USERPROFILE%\.cloudflared\config.ymltunnel: 你的隧道ID credentials-file: C:\Users\<你的用户名>\.cloudflared\<隧道ID>.json ingress: - hostname: your-subdomain.example.com service: http://localhost:8080 - service: http_status:404启动隧道,日志打印
Registered tunnel connection代表隧道建立成功。cloudflared.exe tunnel run my-tunnel
DNS 域名解析配置
Cloudflare DNS 管理面板添加 CNAME 记录
- 名称:子域名前缀,如
dev - 目标:
隧道ID.cfargotunnel.com - 代理状态:橙色云(开启 CDN 代理)
浏览器访问 https://your-subdomain.example.com 访问本地服务。
远程桌面连接
内网环境直接填写被控机局域网 IP;外网访问需要先做内网穿透。
Windows 系统
- Win7:开始菜单 → 附件 → 远程桌面连接。
- Win10:搜索框输入远程桌面连接。
填写 IP(内网 IP、穿透后的公网地址),输入被控 Windows 账号密码。
Windows 无密码账号默认拒绝远程登录;防火墙需要放行 3389 端口。
Mac
安装 Microsoft Remote Desktop 客户端(现行 App Store 名称是 Windows App),填入地址、账号密码连接。
TeamViewer
跨平台远程工具,Windows、macOS、手机端均可支持。主控、被控设备都需要安装软件,输入对方 TeamViewer ID 建立会话。
远程桌面排查清单
- 被控电脑处于开机,睡眠休眠会无法连接。
- 远程桌面服务正常运行。
- Windows 账户设置登录密码,空密码禁止远程登录。
- 防火墙、安全软件放行远程桌面端口 3389。
- 外网访问确认内网穿透隧道正常开启。