如何实现外网也能正常访问本地电脑

前言

  • 背景:本地项目(端口 3456)需要公网访问
  • 目标:通过域名 dajun.dpdns.org 将本地服务展示给外网
  • 核心问题:域名如何指向电脑、外网请求如何穿透到本地项目

知识讲解

  • 内网穿透的基本原理:DNS 记录负责域名解析,内网穿透工具负责建立安全隧道
  • 方案一:Cloudflare DNS + 路由器端口转发
    • 依赖公网 IP,在 Cloudflare 添加 A 记录指向公网 IP
    • 在路由器配置端口转发,将外网请求转到内网 IP 对应端口
    • 需放行防火墙端口;局限是家庭宽带常封 80/443 端口
  • 方案二:Cloudflare Tunnel(推荐)
    • 无需公网 IP、无需配置路由器,运行 cloudflared 建立安全隧道
    • 自带 HTTPS,配置简单,是文章最终推荐并实际采用的方案
  • 方案三:Ngrok / 樱花 FRP(备选)
    • 运行一条命令即可生成临时公网域名,适合快速测试
  • 两种方案的本质区别对比
    • 表格对比:是否需要公网 IP、是否需配置路由器、运营商封端口影响、IP 变化影响、安全性等

具体实操

  • 方案一实操步骤

    • 2.1 获取公网 IP:访问 ip.sbipinfo.io/ip
    • 2.2 在 Cloudflare 添加 A 记录:@www 指向公网 IP,开启橙色云
    • 2.3 查看电脑内网 IP:Windows 用 ipconfig,Mac/Linux 用 ifconfig
    • 2.4 进入路由器后台:访问网关地址(如 192.168.1.1
    • 2.5 设置端口转发:外部端口(80/443 常被封,建议用 8080)→ 内部 IP → 内部端口(3456)
    • 2.6 防火墙放行:允许项目端口入站
    • 2.7 常见问题:内网 IP 以 WLAN 为准;建议做静态 IP 绑定;网关无管理页面时此方案失效
  • 方案二实操步骤(推荐)

    • 3.1 下载 Cloudflared:从 GitHub 下载 cloudflared-windows-amd64.exe
    • 3.2 创建 Tunnel:Cloudflare 仪表盘 → Zero Trust → Networks → Tunnels
    • 3.3 安装并运行:管理员权限运行 cloudflared.exe service install <隧道ID>
    • 3.4 配置路由:在"路由"选项卡添加,域名 dajun.dpdns.org → 服务 localhost:3456
    • 3.5 测试访问:手机用 4G/5G 访问 https://dajun.dpdns.org
  • 方案三实操步骤

    • 运行 ngrok http 3456 生成临时域名
  • 重要结论与注意事项

    • 电脑必须开机,项目必须运行,外网才能访问
  • 方案四:云服务器部署(长期推荐)

    • 无需本地电脑保持开机,项目 7×24 小时在线
    • 以 Cloudflare Workers 为例,将本地 Node.js 项目(端口 3456)部署到云端
    • 4.1 创建 Worker :Cloudflare 仪表盘 → Workers & Pages → Create Worker,命名如 dajun-app
    • 4.2 粘贴代码:将下方最小可运行代码粘贴到 Worker 编辑器中,点击 Deploy
    • 4.3 绑定自定义域名 :Worker 详情 → Settings → Domains & Routes → Add Custom Domain,输入 dajun.dpdns.org,Cloudflare 会自动配置 DNS 与 HTTPS
    • 4.4 配置路由规则 :在 Domains & Routes 中确认路由为 dajun.dpdns.org/*,指向该 Worker
    • 4.5 测试访问 :手机用 4G/5G 访问 https://dajun.dpdns.org,无需本地电脑开机

    最小可运行的 Worker 代码示例(Node.js 兼容):

    js 复制代码
    export default {
      async fetch(request, env, ctx) {
        const url = new URL(request.url);
    
        // 简单路由:根路径返回欢迎页
        if (url.pathname === "/") {
          return new Response("Hello from Cloudflare Workers! 🚀", {
            headers: { "content-type": "text/plain; charset=utf-8" },
          });
        }
    
        // 模拟原 3456 端口项目的 API 接口
        if (url.pathname === "/api/status") {
          return Response.json({ status: "ok", port: 3456, deployed: true });
        }
    
        return new Response("Not Found", { status: 404 });
      },
    };

若需关机也能访问,应部署到云服务器(VPS、Vercel、Railway、Cloudflare Workers 等)

  • 当前进度:域名已注册 → Cloudflare Tunnel 已配置 → 等待 DNS 生效 → 手机访问测试
相关推荐
搬码临时工1 年前
如何通过外网访问内网?对比5个简单的局域网让互联网连接方案
服务器·网络·智能路由器·内网穿透·外网访问
搬码临时工1 年前
内网和外网怎么互通?外网访问内网的几种简单方式
服务器·网络·智能路由器·外网访问
搬码临时工1 年前
路由器转发规则设置方法步骤,内网服务器端口怎么让异地连接访问的实现
服务器·网络·智能路由器·内网穿透·端口映射·外网访问
搬码临时工1 年前
外网如何通过路由器访问内网服务器?没有公网ip怎么实现?
运维·服务器·网络·智能路由器·内网穿透·端口映射·外网访问