内网穿透(也称为 NAT 穿透)的核心是让外网设备能够访问处于内网(局域网)中的服务或设备,其本质是解决内网设备没有公网 IP、被路由器 / NAT 设备隔离的问题。以下是几种常见的实现方式,适用于不同场景:
一、基本原理
内网设备通常通过路由器接入互联网,路由器会分配内网 IP(如 192.168.x.x),并通过一个公网 IP 与外网通信。当外网设备直接访问内网设备时,路由器会拦截请求(因为不知道转发给哪个内网设备)。
内网穿透的核心是:通过一个中间节点(通常是有公网 IP 的服务器),建立内网设备与外网之间的转发通道。
二、常用实现方法
1. 借助现成工具(适合新手 / 快速使用)
这类工具已封装好穿透逻辑,无需复杂配置,适合临时调试、远程访问等场景。
(1)ngrok(适合开发调试)
-
特点:简单易用,支持 HTTP/HTTPS/TCP 协议,免费版有域名限制和流量限制。
-
步骤:
- 访问 ngrok 官网 注册账号并下载客户端。
- 登录后获取授权令牌(Authtoken),在本地终端执行授权:ngrok config add-authtoken 你的令牌。
- 启动穿透:例如将本地 8080 端口的 HTTP 服务暴露到外网,执行 ngrok http 8080。
- 终端会生成一个外网访问地址(如xxx.ngrok.io),外网通过该地址即可访问本地服务。
(2)花生壳(适合长期稳定访问)
-
特点:国内工具,支持多种协议,提供免费版(限速限流量)和付费版,适合远程访问 NAS、摄像头等设备。
-
步骤:
- 下载花生壳客户端并安装(支持 Windows、Linux、路由器等)。
- 注册账号并登录,添加 “映射”:选择协议(如 HTTP)、内网 IP(如 192.168.1.100)、内网端口(如 80)。
- 系统会分配一个免费域名,外网通过该域名即可访问内网服务。
(3)Sunny-Ngrok(国内版 ngrok)
- 特点:针对国内网络优化,免费版支持 TCP/HTTP,适合开发者调试。
- 步骤类似 ngrok,需在 官网 注册并获取隧道 ID,启动命令:sunny clientid 你的隧道ID。
2. 自建穿透服务(适合需要高可控性 / 自定义场景)
如果需要稳定、无限制的穿透服务,可通过一台有公网 IP 的服务器(如 VPS)自建,常用工具为frp(Fast Reverse Proxy)。
(以 frp 为例,支持 TCP/UDP/HTTP 等协议)
前提:
-
一台有公网 IP 的服务器(称为 “服务端”,如阿里云 / 腾讯云 VPS)。
-
内网设备(称为 “客户端”,如本地电脑、NAS)。
步骤:
- 下载 frp 从 frp 官网 下载对应系统的版本(服务端和客户端需同版本)。
- 配置服务端(公网服务器)
- 解压文件,修改配置文件 frps.ini:
[common]
bind_port = 7000 # frp服务端与客户端通信的端口(自定义,需在服务器防火墙开放)
token = 123456 # 认证令牌(客户端需一致,增强安全性)
- 启动服务端:
Linux:./frps -c ./frps.ini
Windows:frps.exe -c frps.ini
- 配置客户端(内网设备)
-
- 解压文件,修改配置文件 frpc.ini:
[common]
server_addr = 公网服务器IP # 如1.2.3.4
server_port = 7000 # 与服务端bind_port一致
token = 123456 # 与服务端token一致
# 示例1:穿透内网HTTP服务(如本地8080端口的网站)
[web]
type = http
local_ip = 127.0.0.1 # 内网服务IP(本地服务填127.0.0.1)
local_port = 8080 # 内网服务端口
custom_domains = yourdomain.com # 外网访问的域名(需解析到公网服务器IP)
# 示例2:穿透内网SSH服务(如本地22端口)
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000 # 外网访问的端口(服务器需开放该端口)
-
- 启动客户端:
Linux:./frpc -c ./frpc.ini
Windows:frpc.exe -c frpc.ini
- 外网访问
- HTTP 服务:通过 yourdomain.com 访问内网 8080 端口。
- SSH 服务:通过 ssh 用户名@公网服务器IP -p 6000 连接内网设备。
三、注意事项
- 安全性:
- 避免直接暴露敏感服务(如数据库),可设置令牌(token)、限制访问 IP(frp 的allow_ports配置)。
- 公网服务器需开放必要端口(如 frp 的 bind_port、remote_port),并配置防火墙规则。
- 网络限制:
- 部分宽带运营商会封锁 80、443 等端口,可改用其他端口(如 8080)。
- 若公网 IP 是动态的(如家庭宽带),需配合 DDNS(动态域名解析)绑定域名。
- 性能:
- 穿透速度受公网服务器带宽和网络延迟影响,建议选择靠近用户的服务器节点。
根据需求选择合适的方案:临时调试用 ngrok,长期稳定访问用花生壳或自建 frp,自建方案灵活性最高但需要一定的服务器配置知识。