本文全文均为转载,原教程写的非常详细,在此附上原教程的链接,本文仅作留档,防止原教程网站意外关停无法回溯,如果存在侵权现象,本文将于24小时之内删除:

https://www.xiaoyu.ing/article/net_traversal


什么是内网穿透?简单来讲,就像给内网设备装了一扇外网设备可以进的门

家用设备,比如NAS、电脑,通常都躲在路由器分配的内网IP(如192.168.x.x)里,外网根本进不来。而内网穿透的原理就是用一台具备公网IP的服务器作为中转站,让外部设备通过它访问你的内网设备

搞定内网穿透,你可以远程访问NAS、部署私人服务、搭建网盘、控制家中设备、实现远程办公和娱乐:只要不断网,设备随时在线,资源随地可用

内网穿透原理
内网穿透原理

在教程正式开启前,你需要先准备一台自带公网IP的云服务器以及需要进行内网穿透的本地设备(我这里以Mac mini为例)

教程总共分为两大部分,第一部分是云服务器配置,第二部分是本地环境配置,只要你按照步骤来,大概率不会出现问题

notion image

内网穿透教程示意图

不喜欢看图文?点这里查看视频教程:

https://www.bilibili.com/video/BV1UHqrY8Evm/
notion image

第一部分:云服务器配置

具备公网 IP 的云服务器将作为中转站,帮助转发内网和外网的数据流量


SSH登录服务器

打开命令行窗口:

  • Windows 用户:使用 CMD 或 PowerShell

打开 CMD:按下 Win+R 输入 cmd,然后回车

打开 PowerShell:按下 Win+X,选择 Windows PowerShell

  • Mac 用户:使用 终端(Terminal)

按下 Command+Space 打开 Spotlight,搜索“终端”并打开

SSH连接步骤:

  • 在终端输入以下命令后回车:ssh 用户名@服务器IP地址

用户名通常默认是root

浏览器搜索“我的IP”,可以找到提供查询IP地址的网站

notion image
  • 首次连接会提示确认,输入yes,回车
notion image
  • 之后会来到密码输入页面,输入密码不会显示字符,输完直接回车即可
notion image
  • 密码输入正确后,提示类似图示信息代表成功连接到服务器
notion image

查看服务器信息:

  • 成功登录后可输入uname -a 查看服务器信息

我这台服务器运行的是 Ubuntu 操作系统,留意自己的,接下来会用到

notion image

安装1Panel管理面板

下载安装:

  • 打开1Panel官网,点击下载安装
https://1panel.cn/ 

JavaScript

notion image
  • 下划找到安装部署,根据服务器系统获取安装命令
notion image
  • 在终端中执行刚才拷贝好的安装命令,如图所示
notion image

配置说明:

  • 国内服务器用户:安装时需要选择y设置Docker镜像

切换到国内加速源,可以解决访问国外镜像慢或失败的问题,加速安装流程

notion image
  • 设置访问端口、安全入口和密码,也可以直接回车使用默认参数
notion image
  • 如果忘记保存密码,可以使用1pctl user-info命令获取安全入口,使用1pctl update password修改密码
notion image
  • 跟前面一样,在命令行窗口中,输入密码的过程是看不到的,输入完直接回车即可
notion image

登录面板:

  • 将外网地址拷贝到浏览器地址栏中打开
notion image
  • 进入到图示页面,输入我们刚刚设置好的面板用户账号和密码
notion image
  • 成功登录之后的页面如图所示
notion image

容器配置

  • 点击“容器”后,点击“配置”,将 https://docker.1panel.live 添加进去,然后手动输入“立即重启”后确认
notion image
notion image

安装配置FRP服务端

配置防火墙:

  • 防火墙默认是关闭的,我们需要手动打开系统防火墙
notion image
  • 新建端口规则,协议选择 TCP/UDP,端口输入7000,然后点击确认

配置 FRP 时,如果没有特别修改,7000 端口就是默认值

notion image
  • 如图所示,代表创建端口规则成功
notion image

创建配置文件:

  • 回到命令行窗口,运行mkdir -p dockers/frps,创建多级文件夹

然后cd dockers/frps进入frps文件夹

输入vi docker-compose.yml命令,创建docker-compose.yml文件

notion image
  • 然后复制粘贴这段代码,编写docker-compose.yml文件
version: '3'
services:
  frps:
    image: snowdreamtech/frps
    container_name: frps
    restart: always
    network_mode: host
    volumes:
      - ./frps.toml:/etc/frp/frps.toml
    environment:
      - FRP_CONFIG_FILE=/etc/frp/frps.toml                                           

JavaScript

  • 按一下esc进入命令行模式,输入:wq,回车
  • 输入 vi frps.toml 创建 frps.toml文件,复制粘贴下面这段代码
# frps.toml

# 基本配置
bindPort = 7000           # frps 监听的端口,用于接收 frpc 的连接

# 认证配置
[auth]
method = "token"          # 认证方法,这里使用 token
token = "token1234xyz"  # 用于验证 frpc 的 token,请使用安全的随机字符串

# Web 管理界面配置(如果不需要 Web 管理界面,可以删除这部分)
[webServer]
addr = "0.0.0.0"          # Web 界面监听的地址,0.0.0.0 表示所有地址
port = 7500               # Web 界面的端口
user = "user"            # Web 界面的登录用户名
password = "passwordxxx"  # Web 界面的登录密码

# 日志配置
[log]
to = "console"            # 日志输出位置,console 表示输出到控制台
level = "info"            # 日志级别:debug, info, warn, error
notion image
  • 这里需要修改三个地方,tokenuserppassword,要修改成自己的,然后同样按下esc后输入:wq, 回车
notion image

启动FRP服务:

  • 输入docker compose up -d后回车,启动FRP服务,此时前面开放的7000端口也会变成已使用
notion image
notion image

第二部分:本地环境配置

使用 Docker 快速运行 FRP 客户端(frpc),将本地服务映射到云服务器,完成内网与外网的安全连接,正式实现内网穿透


安装Docker环境:

下载安装Docker Desktop:

https://www.docker.com/products/docker-desktop/
  • 按照自己系统的型号下载对应版本的docker
notion image
notion image

如何区分电脑型号

  • 第一次打开docker会让我们登录,直接按“skip”跳过就好
notion image
notion image
  • 新建终端窗口,在命令行中输入docker -v出现版本号就代表docker安装成功了
notion image

配置FRP客户端

创建项目目录:

  • 在电脑上创建文件夹并命名为docker_project,然后创建子文件夹并命名为frpc

并且将两个配置文件放进去:docker-compose.ymlfrpc.toml

在文章底部,获取图中两个配置文件
在文章底部,获取图中两个配置文件

配置文件准备:

  • 你需要修改的有 serverAddr(服务器的IP地址)、serverPort(服务器当时开放的端口)以及设置的token(验证信息),这几个都需要和自己服务器的实际信息保持一致
notion image

部署测试服务并验证

创建测试网站:

  • 在刚才创建的存放docker项目的文件夹,创建一个website-demo用于存放网站的文件夹,在里面创建一个docker-compose.yml文件,代码文件直接复制进去即可,然后创建一个存放网站的目录www同样将index.html的网页粘贴进去
在文章底部,获取图中两个配置文件
在文章底部,获取图中两个配置文件
  • 设置好后,可以直接通过浏览器打开index.html
notion image
  • 返回到有docker-compose.yml文件的目录,右键底部的地址栏拷贝为路径名称
notion image
  • 如果mac电脑不显示地址栏,则需保持访达为活跃窗口,点击“显示”,选择“显示路径栏”
notion image

win电脑的地址栏在窗口顶部

启动服务:

  • 打开终端,输入指令cd+空格+刚刚拷贝的路径,进入到该目录中,然后输入docker compose up -d进入程序,没有报错就代表成功运行
notion image

验证测试:

  • 验证一下,在浏览器地址栏输入http://localhost:8080/
notion image
  • 打开刚才创建的frpc文件夹,然后使用vs code编辑器编辑frpc.toml文件
https://code.visualstudio.com/download
notion image
  • 这里需要修改的就是 配置的注释、name、和本地的端口以及服务器的端口

name从mac-vnc改成mac-web

本地IP就是8080, 远程的IP随意,例如我们就+10000,改为18080

然后保存(⌘command+s)后退出

notion image
  • 同样在终端中打开这个目录,运行docker compose up -d启动frpc客户端
notion image
  • 因为我们是通过服务器的18080端口访问本地的8080端口的程序,所以还需要在服务器中开放18080端口,点击确认后退出即可
notion image
  • 我们在浏览器中访问服务器的IP+:18080端口,回车,现在所有人都可以访问这个网站
notion image
  • 我们还可以修改网页代码,让这个网址呈现不一样的画面


项目中使用到的文件:

服务器相关资源:

  1. docker-compose.yml — 用于在服务器上部署和运行frp服务端的Docker配置文件
  2. frps.toml — frp服务端的核心配置文件,包含端口、认证等重要设置
docker-compose.yml文件version: '3'  # Docker Compose文件格式版本

services:     # 定义服务
  frpc:       # 服务名称为frpc
    image: snowdreamtech/frpc   # 使用的Docker镜像
    container_name: frpc        # 容器名称
    restart: always            # 容器重启策略
    network_mode: host         # 网络模式
    volumes:                   # 数据卷挂载
      - ./frpc.toml:/etc/frp/frpc.toml  # 配置文件映射
      - ./logs:/var/log               # 日志目录映射
    environment:              # 环境变量
      - FRP_CONFIG_FILE=/etc/frp/frpc.toml  # 指定配置文件路径
# frpc.toml

# 服务器配置
serverAddr = "39.98.38.171"  # 公网服务器的IP
serverPort = 7000

# 认证配置
auth.method = "token"
auth.token = "token1234xyz"

# 日志配置
log.to = "console"
log.level = "info"

# -----从这里开始都是,程序的信息-----
# SSH 服务配置
[[proxies]]
name = "mac-ssh"
type = "tcp"
localIP = "host.docker.internal"
localPort = 22
remotePort = 10022

# VNC 服务配置
[[proxies]]
name = "mac-vnc"
type = "tcp"
localIP = "host.docker.internal"
localPort = 5900
remotePort = 15900