本文全文均为转载,原教程写的非常详细,在此附上原教程的链接,本文仅作留档,防止原教程网站意外关停无法回溯,如果存在侵权现象,本文将于24小时之内删除:
https://www.xiaoyu.ing/article/net_traversal
什么是内网穿透?简单来讲,就像给内网设备装了一扇外网设备可以进的门
家用设备,比如NAS、电脑,通常都躲在路由器分配的内网IP(如192.168.x.x)里,外网根本进不来。而内网穿透的原理就是用一台具备公网IP的服务器作为中转站,让外部设备通过它访问你的内网设备
搞定内网穿透,你可以远程访问NAS、部署私人服务、搭建网盘、控制家中设备、实现远程办公和娱乐:只要不断网,设备随时在线,资源随地可用

在教程正式开启前,你需要先准备一台自带公网IP的云服务器以及需要进行内网穿透的本地设备(我这里以Mac mini为例)
教程总共分为两大部分,第一部分是云服务器配置,第二部分是本地环境配置,只要你按照步骤来,大概率不会出现问题

内网穿透教程示意图
不喜欢看图文?点这里查看视频教程:
https://www.bilibili.com/video/BV1UHqrY8Evm/

第一部分:云服务器配置
具备公网 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地址的网站

- 首次连接会提示确认,输入
yes
,回车

- 之后会来到密码输入页面,输入密码不会显示字符,输完直接回车即可

- 密码输入正确后,提示类似图示信息代表成功连接到服务器

查看服务器信息:
- 成功登录后可输入
uname -a
查看服务器信息
我这台服务器运行的是 Ubuntu 操作系统,留意自己的,接下来会用到

安装1Panel管理面板
下载安装:
- 打开1Panel官网,点击下载安装
https://1panel.cn/
JavaScript

- 下划找到安装部署,根据服务器系统获取安装命令

- 在终端中执行刚才拷贝好的安装命令,如图所示

配置说明:
- 国内服务器用户:安装时需要选择
y
设置Docker镜像
切换到国内加速源,可以解决访问国外镜像慢或失败的问题,加速安装流程

- 设置访问端口、安全入口和密码,也可以直接回车使用默认参数

- 如果忘记保存密码,可以使用
1pctl user-info
命令获取安全入口,使用1pctl update password
修改密码

- 跟前面一样,在命令行窗口中,输入密码的过程是看不到的,输入完直接回车即可

登录面板:
- 将外网地址拷贝到浏览器地址栏中打开

- 进入到图示页面,输入我们刚刚设置好的面板用户账号和密码

- 成功登录之后的页面如图所示

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


安装配置FRP服务端
配置防火墙:
- 防火墙默认是关闭的,我们需要手动打开系统防火墙

- 新建端口规则,协议选择 TCP/UDP,端口输入7000,然后点击确认
配置 FRP 时,如果没有特别修改,7000 端口就是默认值

- 如图所示,代表创建端口规则成功

创建配置文件:
- 回到命令行窗口,运行
mkdir -p dockers/frps
,创建多级文件夹
然后cd dockers/frps
进入frps
文件夹
输入vi docker-compose.yml
命令,创建docker-compose.yml
文件

- 然后复制粘贴这段代码,编写
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

- 这里需要修改三个地方,
token
、user
和ppassword
,要修改成自己的,然后同样按下esc
后输入:wq
, 回车

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


第二部分:本地环境配置
使用 Docker 快速运行 FRP 客户端(frpc),将本地服务映射到云服务器,完成内网与外网的安全连接,正式实现内网穿透
安装Docker环境:
下载安装Docker Desktop:
https://www.docker.com/products/docker-desktop/
- 按照自己系统的型号下载对应版本的docker


如何区分电脑型号
- 第一次打开docker会让我们登录,直接按“skip”跳过就好


- 新建终端窗口,在命令行中输入
docker -v
出现版本号就代表docker安装成功了

配置FRP客户端
创建项目目录:
- 在电脑上创建文件夹并命名为
docker_project
,然后创建子文件夹并命名为frpc
并且将两个配置文件放进去:docker-compose.yml
和frpc.toml

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

部署测试服务并验证
创建测试网站:
- 在刚才创建的存放
docker
项目的文件夹,创建一个website-demo
用于存放网站的文件夹,在里面创建一个docker-compose.yml
文件,代码文件直接复制进去即可,然后创建一个存放网站的目录www
同样将index.html
的网页粘贴进去

- 设置好后,可以直接通过浏览器打开
index.html

- 返回到有
docker-compose.yml
文件的目录,右键底部的地址栏拷贝为路径名称

- 如果mac电脑不显示地址栏,则需保持访达为活跃窗口,点击“显示”,选择“显示路径栏”

win电脑的地址栏在窗口顶部
启动服务:
- 打开终端,输入指令
cd
+空格+刚刚拷贝的路径,进入到该目录中,然后输入docker compose up -d
进入程序,没有报错就代表成功运行

验证测试:
- 验证一下,在浏览器地址栏输入
http://localhost:8080/

- 打开刚才创建的frpc文件夹,然后使用vs code编辑器编辑
frpc.toml
文件
https://code.visualstudio.com/download

- 这里需要修改的就是 配置的注释、name、和本地的端口以及服务器的端口
name从mac-vnc
改成mac-web
本地IP就是8080, 远程的IP随意,例如我们就+10000,改为18080
然后保存(⌘command+s)后退出

- 同样在终端中打开这个目录,运行
docker compose up -d
启动frpc客户端

- 因为我们是通过服务器的18080端口访问本地的8080端口的程序,所以还需要在服务器中开放18080端口,点击确认后退出即可

- 我们在浏览器中访问服务器的IP+:18080端口,回车,现在所有人都可以访问这个网站

- 我们还可以修改网页代码,让这个网址呈现不一样的画面
项目中使用到的文件:
服务器相关资源:
docker-compose.yml
— 用于在服务器上部署和运行frp服务端的Docker配置文件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
参与讨论