内网穿透
这是一份从底层原理到实操落地的「内网穿透」终极教程。为了让你彻底掌握,我将教程分为三个部分:
- 原理篇:它到底是怎么实现的?
- **小白篇 (Tailscale)**:5分钟搞定,无需公网IP(推荐)。
- **极客篇 (FRP)**:自建服务器,全速、可控、适合建站。
第一部分:原理篇 —— “隧道”是如何打通的?
内网穿透的核心技术叫 NAT穿透 (NAT Traversal) 和 **隧道技术 (Tunneling)**。
1. 为什么会有“墙”?(NAT)
你家里的光猫/路由器像一个传达室。
- 内网 IP(如
192.168.1.x)是你房间号,只有传达室大爷知道。 - 公网 IP 是大楼的地址。
- 互联网只能把信送到大楼(公网IP),传达室大爷(路由器NAT)如果没看到你主动寄信出去的记录,就会把外面寄来的信直接扔掉。这就是为什么外面连不进你家。
2. 解决方案:打洞与隧道
我们刚才聊过 Tailscale 的 P2P 打洞(让路由器放行),这里重点讲讲更通用的 **“反向代理隧道” (FRP/Ngrok 原理)**:
- 找个接头人: 你需要一台有公网 IP 的服务器(VPS),它就像一个矗立在广场上的中转站。
- 主动出击: 你家里的电脑(内网)主动去连接这个中转站。因为是你主动连出去的,家里的路由器(传达室)会放行。
- 保持通话: 这条连接一旦建立,就一直保持不断(长连接)。
- 借道传输: 当你在外地想连回家时,你其实是连到了“中转站”。中转站通过那条早就建立好的“长连接”,把数据转发给你家里的电脑。
第二部分:小白篇 —— Tailscale (无需公网IP,最稳)
这是目前体验最好的方案,适合个人远程办公、访问家里 NAS。
1. 准备工作
- 一台家里的设备(Windows/Mac/Linux/NAS 都可以)。
- 一台外面的设备(手机/笔记本)。
2. 操作步骤
第一步:注册与安装
- 进入 Tailscale 官网,点击 “Get Started”,使用 Google/Microsoft/GitHub 账号登录。
- 在家里电脑上:下载并安装 Tailscale 客户端,登录刚才的账号。
- 在外地设备上:同样下载安装,登录同一个账号。
第二步:连接与验证
登录后,你会发现两台设备列表里都亮起了绿灯。
- 机器名:Tailscale 会自动分配一个名字(如
my-desktop)。 - Tailscale IP:分配一个
100.x.y.z的固定内网 IP。
如何测试?
在外地电脑的终端(CMD)里输入:ping 100.x.y.z (家里电脑的 Tailscale IP)。如果通了,说明组网成功。
第三步:实际使用场景
- **远程桌面 (Windows)**:打开“远程桌面连接”,输入家里电脑的
100.x.y.z,直接连接。 - **访问文件 (SMB)**:在文件资源管理器地址栏输入
\\100.x.y.z,像在局域网一样访问共享文件夹。
3. 进阶玩法:开启“出口节点” (Exit Node)
这招非常厉害。它可以让你在外地上网时,所有流量都绕回家里走。
- 场景:你在公共 WiFi 不安全,或者公司网络屏蔽了某些网站,你想伪装成在家里上网。
- 设置:
- 家里电脑(作为服务端)开启 Exit Node 功能。
- 外地手机(客户端)在 Tailscale App 里点击 “Exit Node”,选择家里电脑。
- 现在,你手机的所有流量都会先加密传回家里,再从家里宽带出去。
第三部分:极客篇 —— FRP (高性能自建,推荐有 VPS 的用户)
如果你想搭建一个网站给别人看,或者 Tailscale 的速度满足不了你,你需要 FRP。
1. 准备工作
- **一台 VPS (云服务器)**:购买阿里云、腾讯云或国外 VPS(作为中转站),假设公网 IP 为
1.2.3.4。 - 一台内网电脑:你想暴露的那台机器。
- 软件:去 GitHub 下载 FRP。(注意:服务器和客户端都要下载,通常 Linux 用
frp_..._linux_amd64,Windows 用frp_..._windows_amd64)。
2. 服务端配置 (在 VPS 上)
解压文件,找到
frps(s代表server) 和frps.toml(新版配置文件,旧版为 .ini)。编辑
frps.toml:bindPort = 7000 # 必填,FRP 核心通讯端口 vhostHTTPPort = 8080 # 选填,如果你要穿透网页,这是对外访问的端口 auth.token = "mypassword123" # 必填,这是连接密码,防止别人蹭你服务器启动服务端:
./frps -c frps.toml(记得去云服务器控制台的安全组,放行 7000 和 8080 端口)
3. 客户端配置 (在家里电脑上)
解压文件,找到
frpc(c代表client) 和frpc.toml。编辑
frpc.toml,告诉它你要穿透什么服务:serverAddr = "1.2.3.4" # 你的 VPS 公网 IP serverPort = 7000 # 对应服务端的 bindPort auth.token = "mypassword123" # 必须和服务端一致 # 配置 1:穿透 Windows 远程桌面 [[proxies]] name = "rdp-home" type = "tcp" localIP = "127.0.0.1" localPort = 3389 # Windows 远程桌面默认端口 remotePort = 6000 # 在公网访问的端口 # 配置 2:穿透一个网页服务 (比如 NAS 管理页) [[proxies]] name = "nas-web" type = "tcp" localIP = "127.0.0.1" localPort = 5000 # 你内网服务的端口 remotePort = 6001 # 在公网访问的端口启动客户端 (Windows 下用 CMD 运行):
frpc.exe -c frpc.toml
4. 最终效果
- 远程桌面:在外网打开远程桌面工具,输入
1.2.3.4:6000-> 直接连回家里。 - 网页访问:浏览器输入
http://1.2.3.4:6001-> 看到家里的 NAS 网页。
总结与安全建议
| 方案 | 原理 | 适合人群 | 优点 | 缺点 |
|---|---|---|---|---|
| Tailscale | 虚拟局域网 + 打洞 | 90% 的普通用户 | 简单、零配置、安全 | 无法让陌生人访问你的服务 |
| FRP | 反向代理 | 有 VPS 的折腾党 | 极速、完全可控、可建站 | 配置麻烦、需要花钱买 VPS |
⚠️ 致命安全警告 (必读)
当你把 3389 (远程桌面) 或 22 (SSH) 暴露到公网时,你就在“裸奔”。
- 不要用弱密码! 只要你暴露端口,全球的黑客脚本 24 小时都在爆破你的密码。
- 改端口: 不要直接映射到公网的 3389,改成
remotePort = 12580这种不常用的端口。 - 加防火墙: 如果用 FRP,尽量只穿透必要的端口。如果可能,首选 Tailscale,因为它是 VPN 内网访问,对外不开放端口,最安全。