内网穿透(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)。

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

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

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

NAT网关端口转换

NAPT 网络地址端口转换:NAPT 是 NAT 的扩展,同时转换 IP 地址和 TCP、UDP 端口,家用路由器绝大多数使用 NAPT,实现多台设备共享同一个公网 IP 上网。

Frp(Sakura-FRP)

Windows 安装

参考文档:SakuraFrp 帮助文档

  1. 注册账号:访问 Sakura FRP 官网 注册账号,进入管理面板,在软件下载页面下载 Windows 客户端。

  2. 登录客户端:运行 SakuraLauncher.exe,填入管理面板获取的访问密钥登录。

  3. 创建隧道:客户端隧道页面新建隧道,也可以网页后台创建;网页创建隧道后需要重启客户端才会显示。

    • 本地 IP:一般填写 127.0.0.1;查看本机内网 IP 执行 cmdipconfig
    • 本地端口:Web 服务如 3000;Windows 远程桌面默认端口 3389
    • 隧道类型:远程桌面选 TCP;HTTP、HTTPS 隧道要求 已备案域名,没有域名直接用 TCP 隧道。
    • 远程端口:10240-65535,填 0 随机分配。
    • 服务器:Web 业务注意看服务器说明,部分节点不支持建站。

远程桌面提示端口不存在: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

  • 注册账号
  • 下载客户端,解压得到 sunny.exe 和启动批处理。
  • 网页后台开通隧道,获取隧道 ID。
  • 启动隧道
# cmd 进入程序目录
sunny.exe clientid 隧道id
# 多隧道
sunny.exe clientid 隧道id1,隧道id2

也可以双击 Sunny-Ngrok启动工具.bat,输入隧道 ID 运行。

Ngrok

  1. 下载解压程序,配置系统 PATH 环境变量。

  2. 官网注册账号,Dashboard 页面复制 Authtoken。

  3. 设置认证 token

    ngrok config add-authtoken 你的Authtoken
    
  4. 暴露本地端口

    ngrok http 80
    
  5. 控制台输出公网转发地址,即可访问本地服务。

    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 安装配置

  1. cloudflare/cloudflared Releases 下载 cloudflared-windows-amd64.exe,重命名为 cloudflared.exe

  2. 终端登录账号,浏览器跳转授权,完成登录。

    ./cloudflared.exe tunnel login
    
  3. 创建隧道,执行命令,成功输出隧道 ID,生成凭证 json 文件。

    ./cloudflared.exe tunnel create my-tunnel
    
  4. 编写配置文件 %USERPROFILE%\.cloudflared\config.yml

    tunnel: 你的隧道ID
    credentials-file: C:\Users\<你的用户名>\.cloudflared\<隧道ID>.json
    ingress:
      - hostname: your-subdomain.example.com
        service: http://localhost:8080
      - service: http_status:404
    
  5. 启动隧道,日志打印 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。
  • 外网访问确认内网穿透隧道正常开启。

© lizhao all right reserved,powered by Gitbook文件修订时间: 2026-09-02 21:28:54

results matching ""

    No results matching ""