一篇带你了解什么是内网穿透?

一、前言:为什么会有内网穿透?

在我们的日常开发与部署场景中,经常会遇到这样的情况:

  • 我们的电脑(或服务器)在局域网中,使用的 IP 地址通常是 192.168.x.x10.x.x.x172.16.x.x 等内网地址。
  • 公网(如阿里云、腾讯云等云服务器)使用的是可被全世界访问的公网 IP。

当我们希望让互联网上的用户访问到我们在本地(内网)搭建的服务(例如 Django、Node.js、Spring Boot 等),如果没有公网 IP,直接使用 192.168.x.x 这类内网地址是无法在外网访问到的。其根本原因在于:

  1. 私有地址(内网 IP)不会在公网的路由中进行传播。
  2. 路由器(或运营商)通常会做 NAT(网络地址转换),把本地多台设备的内网 IP 映射到路由器的一个或几个公网 IP 上,外部无法直接“反向”找到你局域网里的那台设备。

为了解决这一问题,常见的做法有两种:

1. 部署到云服务器上

最直接的方式是将服务部署到云服务器上(如阿里云、华为云、腾讯云等),因为云服务器拥有公网 IP,这样外网就可以直接通过公网 IP 访问到你的服务了。

  • 优点:访问速度通常更稳定,适合生产环境;公网带宽由云服务商提供;部署方式相对可控。
  • 缺点:需要租用云服务器,产生一定的费用;需要进行额外的运维部署工作。

2. 使用内网穿透技术

如果我们希望本地电脑仍然是开发、运行服务的主力机器,又或者只是临时需要让他人访问本地服务(例如展示 Demo、共享文件等),而又不想或无法购买云服务器时,就可以借助“内网穿透”技术来解决。

  • 通过内网穿透服务提供的客户端与服务器端,可以将内网地址映射到一个公网可访问的域名或地址上,从而实现对内网服务的外网访问。
  • 常见的内网穿透工具包括:NgrokFRPNATAPP 等。

二、网络示意图

下面是本篇文章中引用的示意图(请参考你所提供的图片),结构大致如下:

 ┌─────────────────────────────────────┐
 │         本地环境(内网)         │
 │  ┌─────────────┐    ┌─────────────┐
 │  │    Django    │    │   浏览器    │
 │  │ IP:192.168.0.103 │  │          │
 │  └─────────────┘    └─────────────┘
 │          电  脑                     │
 └─────────────────────────────────────┘
                 │
            (内网路由器)
                 │
             ┌─────────┐
             │  路由器  │
             │   IP     │
             └─────────┘
                 │
           ┌──────────────┐
           │     内网/外网  │
           └──────────────┘
                 │
     ┌─────────────────────┐
     │ 公网服务器(ECS/OSS) │
     └─────────────────────┘

从图中可以看出:

  1. 本地电脑(内网)只有内网 IP(如 192.168.0.103),无法直接被外网访问。
  2. 路由器会将内网 IP 统一“翻译”到路由器本身的外网 IP,但外网用户也仅能访问到路由器,并不知道具体的内网设备。
  3. 公网服务器拥有外网 IP(如阿里云服务器、OSS 等),可以被全球访问。

三、两种常见的访问方式

1. 部署到云服务器上

如果我们需要长期、稳定地对外提供服务,最简单的方式就是购买云服务器(如阿里云 ECS),并在上面部署我们的项目。部署步骤通常包括:

  1. 在云服务器上安装运行环境(Python、Django、Nginx、MySQL 等)。
  2. 将本地开发完成的项目上传到云服务器。
  3. 在云服务器上启动服务,并确保安全组和防火墙已开放对应的端口(如 80、443、8000 等)。
  4. 通过云服务器的公网 IP 或域名进行访问。

这种方式能很好地解决外网访问的问题,但缺点是需要一定的服务器费用,同时也需要维护云端环境。

2. 内网穿透

内网穿透的核心思路是:

  • 借助第三方拥有公网 IP 的服务器,来中转外网请求与本地服务之间的通信。
  • 当你在本地运行穿透客户端后,本地客户端会主动与第三方服务器建立连接,外网请求再通过第三方服务器转发到你的本地服务。
常用的内网穿透工具
  1. Ngrok
    • 早期比较流行的内网穿透工具,提供免费和付费版本。
    • 配置相对简单,但官方服务器在国外,速度可能不够理想。
  2. FRP
    • 开源、免费,配置灵活,可自建服务端,常用于团队或企业内部穿透。
    • 配置稍微复杂,但在国内社区中比较活跃,有很多教程可供参考。
  3. NATAPP
    • 国内的一家服务商,提供内网穿透服务,有免费和付费隧道。
    • 操作简单,国内速度较快,但免费隧道有一定限制。
内网穿透的使用示例(以 FRP 为例)
  1. 在公网服务器上部署 FRP 服务端
    • 准备一台云服务器(拥有公网 IP)。
    • 下载并配置 FRP 服务端(frps),在 frps.ini 中设置监听端口等参数。
    • 启动 FRP 服务端。
  2. 在本地部署 FRP 客户端
    • 下载并配置 FRP 客户端(frpc),在 frpc.ini 中配置好:
      • 公网服务器 IP(你的云服务器 IP)。
      • 需要穿透的本地服务端口(例如 Django 默认的 8000 端口)。
      • 分配的域名或自定义域名。
  3. 启动 FRP 客户端
    • 本地客户端与远程服务器建立连接。
    • 当外网用户通过域名或公网服务器的端口访问时,就会被转发到你的本地 Django 服务上。

这样,就无需将你的项目直接部署到云服务器上,而是通过内网穿透,让别人也能访问到你本地运行的项目。


四、总结

内网穿透解决了内网环境下无法直接暴露给外网访问的问题,为开发测试、临时共享等场景带来了极大的方便。它并不是唯一的解决方案,很多时候如果有稳定的云服务器,直接在云服务器上部署服务也是一个更可靠的选择。

  • 如果你的项目需要长期稳定对外提供服务:建议购买云服务器进行部署。
  • 如果只是临时或测试用途:可使用 Ngrok、FRP、NATAPP 等内网穿透工具来快速让他人访问到你的本地服务。

最后,结合上方示意图,可以看出无论是部署到云服务器上,还是使用内网穿透,核心都是让外部访问能够绕过内网地址的限制,直接访问到本地服务或部署在公网服务器上的服务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值