如何实现云上服务器和家庭内网穿透?

110 阅读4分钟

内网穿透(也称为 NAT 穿透)的核心是让外网设备能够访问处于内网(局域网)中的服务或设备,其本质是解决内网设备没有公网 IP、被路由器 / NAT 设备隔离的问题。以下是几种常见的实现方式,适用于不同场景:

一、基本原理

内网设备通常通过路由器接入互联网,路由器会分配内网 IP(如 192.168.x.x),并通过一个公网 IP 与外网通信。当外网设备直接访问内网设备时,路由器会拦截请求(因为不知道转发给哪个内网设备)。

内网穿透的核心是:通过一个中间节点(通常是有公网 IP 的服务器),建立内网设备与外网之间的转发通道

二、常用实现方法

1. 借助现成工具(适合新手 / 快速使用)

这类工具已封装好穿透逻辑,无需复杂配置,适合临时调试、远程访问等场景。

(1)ngrok(适合开发调试)
  • 特点:简单易用,支持 HTTP/HTTPS/TCP 协议,免费版有域名限制和流量限制。

  • 步骤:

  1. 访问 ngrok 官网 注册账号并下载客户端。
  2. 登录后获取授权令牌(Authtoken),在本地终端执行授权:ngrok config add-authtoken 你的令牌。
  3. 启动穿透:例如将本地 8080 端口的 HTTP 服务暴露到外网,执行 ngrok http 8080。
  4. 终端会生成一个外网访问地址(如xxx.ngrok.io),外网通过该地址即可访问本地服务。
(2)花生壳(适合长期稳定访问)
  • 特点:国内工具,支持多种协议,提供免费版(限速限流量)和付费版,适合远程访问 NAS、摄像头等设备。

  • 步骤:

  1. 下载花生壳客户端并安装(支持 Windows、Linux、路由器等)。
  2. 注册账号并登录,添加 “映射”:选择协议(如 HTTP)、内网 IP(如 192.168.1.100)、内网端口(如 80)。
  3. 系统会分配一个免费域名,外网通过该域名即可访问内网服务。
(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)。

步骤:

  1. 下载 frpfrp 官网 下载对应系统的版本(服务端和客户端需同版本)。
  2. 配置服务端(公网服务器)
  • 解压文件,修改配置文件 frps.ini:
[common]
bind_port = 7000  # frp服务端与客户端通信的端口(自定义,需在服务器防火墙开放)
token = 123456    # 认证令牌(客户端需一致,增强安全性)
  • 启动服务端:

Linux:./frps -c ./frps.ini

Windows:frps.exe -c frps.ini

  1. 配置客户端(内网设备)
    • 解压文件,修改配置文件 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

  1. 外网访问
  • HTTP 服务:通过 yourdomain.com 访问内网 8080 端口。
  • SSH 服务:通过 ssh 用户名@公网服务器IP -p 6000 连接内网设备。

三、注意事项

  1. 安全性
  • 避免直接暴露敏感服务(如数据库),可设置令牌(token)、限制访问 IP(frp 的allow_ports配置)。
  • 公网服务器需开放必要端口(如 frp 的 bind_port、remote_port),并配置防火墙规则。
  1. 网络限制
  • 部分宽带运营商会封锁 80、443 等端口,可改用其他端口(如 8080)。
  • 若公网 IP 是动态的(如家庭宽带),需配合 DDNS(动态域名解析)绑定域名。
  1. 性能
  • 穿透速度受公网服务器带宽和网络延迟影响,建议选择靠近用户的服务器节点。

根据需求选择合适的方案:临时调试用 ngrok,长期稳定访问用花生壳或自建 frp,自建方案灵活性最高但需要一定的服务器配置知识。