内网穿透


内网穿透

这是一份从底层原理实操落地的「内网穿透」终极教程。为了让你彻底掌握,我将教程分为三个部分:

  1. 原理篇:它到底是怎么实现的?
  2. **小白篇 (Tailscale)**:5分钟搞定,无需公网IP(推荐)。
  3. **极客篇 (FRP)**:自建服务器,全速、可控、适合建站。

第一部分:原理篇 —— “隧道”是如何打通的?

内网穿透的核心技术叫 NAT穿透 (NAT Traversal) 和 **隧道技术 (Tunneling)**。

1. 为什么会有“墙”?(NAT)

你家里的光猫/路由器像一个传达室

  • 内网 IP(如 192.168.1.x)是你房间号,只有传达室大爷知道。
  • 公网 IP 是大楼的地址。
  • 互联网只能把信送到大楼(公网IP),传达室大爷(路由器NAT)如果没看到你主动寄信出去的记录,就会把外面寄来的信直接扔掉。这就是为什么外面连不进你家。

2. 解决方案:打洞与隧道

我们刚才聊过 Tailscale 的 P2P 打洞(让路由器放行),这里重点讲讲更通用的 **“反向代理隧道” (FRP/Ngrok 原理)**:

  1. 找个接头人: 你需要一台有公网 IP 的服务器(VPS),它就像一个矗立在广场上的中转站
  2. 主动出击: 你家里的电脑(内网)主动去连接这个中转站。因为是你主动连出去的,家里的路由器(传达室)会放行。
  3. 保持通话: 这条连接一旦建立,就一直保持不断(长连接)。
  4. 借道传输: 当你在外地想连回家时,你其实是连到了“中转站”。中转站通过那条早就建立好的“长连接”,把数据转发给你家里的电脑。

第二部分:小白篇 —— Tailscale (无需公网IP,最稳)

这是目前体验最好的方案,适合个人远程办公、访问家里 NAS。

1. 准备工作

  • 一台家里的设备(Windows/Mac/Linux/NAS 都可以)。
  • 一台外面的设备(手机/笔记本)。

2. 操作步骤

第一步:注册与安装

  1. 进入 Tailscale 官网,点击 “Get Started”,使用 Google/Microsoft/GitHub 账号登录。
  2. 在家里电脑上:下载并安装 Tailscale 客户端,登录刚才的账号。
  3. 在外地设备上:同样下载安装,登录同一个账号。

第二步:连接与验证

登录后,你会发现两台设备列表里都亮起了绿灯。

  • 机器名: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 不安全,或者公司网络屏蔽了某些网站,你想伪装成在家里上网。
  • 设置
    1. 家里电脑(作为服务端)开启 Exit Node 功能。
    2. 外地手机(客户端)在 Tailscale App 里点击 “Exit Node”,选择家里电脑。
    3. 现在,你手机的所有流量都会先加密传回家里,再从家里宽带出去。

第三部分:极客篇 —— FRP (高性能自建,推荐有 VPS 的用户)

如果你想搭建一个网站给别人看,或者 Tailscale 的速度满足不了你,你需要 FRP。

1. 准备工作

  • **一台 VPS (云服务器)**:购买阿里云、腾讯云或国外 VPS(作为中转站),假设公网 IP 为 1.2.3.4
  • 一台内网电脑:你想暴露的那台机器。
  • 软件:去 GitHub 下载 FRP。(注意:服务器和客户端都要下载,通常 Linux 用 frp_..._linux_amd64,Windows 用 frp_..._windows_amd64)。

2. 服务端配置 (在 VPS 上)

  1. 解压文件,找到 frps (s代表server) 和 frps.toml (新版配置文件,旧版为 .ini)。

  2. 编辑 frps.toml

    bindPort = 7000          # 必填,FRP 核心通讯端口
    vhostHTTPPort = 8080     # 选填,如果你要穿透网页,这是对外访问的端口
    auth.token = "mypassword123" # 必填,这是连接密码,防止别人蹭你服务器
  3. 启动服务端:

    ./frps -c frps.toml

    (记得去云服务器控制台的安全组,放行 7000 和 8080 端口)

3. 客户端配置 (在家里电脑上)

  1. 解压文件,找到 frpc (c代表client) 和 frpc.toml

  2. 编辑 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        # 在公网访问的端口
  3. 启动客户端 (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) 暴露到公网时,你就在“裸奔”。

  1. 不要用弱密码! 只要你暴露端口,全球的黑客脚本 24 小时都在爆破你的密码。
  2. 改端口: 不要直接映射到公网的 3389,改成 remotePort = 12580 这种不常用的端口。
  3. 加防火墙: 如果用 FRP,尽量只穿透必要的端口。如果可能,首选 Tailscale,因为它是 VPN 内网访问,对外不开放端口,最安全。

文章作者: 0xdadream
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 0xdadream !
评论
  目录