目标:
在本地没有任何公网ip的情况下实现对内网的访问
前言:
本教程将带你使用frp反向代理,实现具备公网 IP 的云服务器将作为中转站,帮助转发内网和外网的数据流量。
在教程正式开启前,你需要先准备一台自带公网IP的云服务器以及需要进行内网穿透的本地设备。
教程总共分为两大部分,第一部分是云服务器配置,第二部分是本地环境配置。
步骤:
1.云端服务器上部署frp服务端
- ssh登陆你的云服务器
在终端中输入
ssh <user>@<ipv4地址>
上面的user是你的服务器的用户名,阿里云服务器一般来说是root,ipv4地址填服务器的公网ipv4地址就行
回车输入密码,注意密码不会显示,首次连接会提示确认,输入yes ,回车就可以
用户名和ipv4地址和密码都正确的情况下会进入服务器的终端
输入命令查看服务器系统
uname -a
我这里是ubuntu,下面的教程会按照ubuntu来操作,win和macos都差不多

- 安装docker
进入docker官网
www.docker.com
按照你服务器的系统下载对应的docker

我这里选择linux下载,然后会跳到linux下载的教程文档,在选择ubuntu发行版,按照该教程可完成docker的安装
这里是ubuntu系统的docker官方安装教程地址
https://docs.docker.com/desktop/setup/install/linux/ubuntu/
下载安装完成后会在你的应用列表里面显示一个docker desktop的程序
第一次打开docker会让我们登录,直接按“skip”跳过就好

- 确定docker是否安装成功
在终端输入docker -v出现版本号就代表docker安装成功了
- 创建配置文件:
回到命令行窗口,运行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
按一下 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和password,要修改成自己的,记住后面要用到,然后同样按下esc后输入:wq, 回车
- 启动FRP服务:
在终端中cd到docker-compose.yml的同级文件夹下然后输入docker compose up -d后回车,启动FRP服务
docker compose up -d #启动docker
这样,frp的服务端就部署好了,请注意在防火墙中开启对应的端口,不然会无法访问到frp服务器
在阿里云ecs服务器中,关闭系统防火墙,然后在阿里云ecs管理页面,找到安全组,点击手动添加

添加下面两条规则,注意与上面的docker-compose.yml文件里面配置的端口一致,我这里是7000与7500的端口

这样才能从外部访问到7000和7500的端口,frp才可以正常运行
现在就完成了对frp服务端的配置
可以使用服务器的ip地址加端口号访问frp的管理网站看看是否部署成功
127.0.0.0:7500
2.frp客户端的配置:
客户端的配置过程与服务端类似
安装docker
这里和服务端一样可以进入docker官网安装,
还可以使用鱼香肉丝fishros的一键安装脚本,特别方便
wget http://fishros.com/install -O fishros && . fishros
输入后选择【5】一键安装docker
docker安装完成后就可以来创建容器和frpc配置文件了
创建专门用于存放dockers的文件夹,并在dockers下创建frpc文件夹
mkdir -p docker/frpc
进入frpc文件夹
创建docker-compose.yml文件与frpc.toml文件
touch docker-compose.yml
touch frpc.toml
使用nano编辑.yml文件
nano 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 # 指定配置文件路径
编辑.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
修改服务器公网ip为你自己的公网ip,服务端口默认是7000,token要注意保持与服务端一致,最下面是你可以配置的服务
注意:localIP = “host.docker.internal” 只有在你的电脑上有docker desktop软件时才可以使用这条命令,表示你真实的ip地址,当你电脑上没有docker desktop软件时次命令不会生效,此时应该用本机的真实ip,这个地方困扰了我好久,好不容易才找到原因
两个文件配置好之后,就可以使用命令创建容器了
docker compose up -d
报错误的话试一下加sudo执行
这样客户端也就配置好了
测试
在浏览器输入
<服务器公网ip>:7500
输入之前在服务端配置的用户名和密码
出现这样子的页面就成功了

恭喜实现frp内网穿透
加油更新呀