前言※
FRP 是一款功能强大的内网穿透软件,通过它可以实现外网访问内网的服务,让我们可以在外面也能访问家里的电话或者服务器(当然如果家里有公网IP的话就不需要这个了)
相关地址※
- GitHub原项目地址:https://github.com/fatedier/frp
- 官方中文文档地址:https://gofrp.org/zh-cn/
搭建教程※
本文主要基于Debain + Docker + Docker-compose 进行快速部署,如有不同之处请自行调整。
FRP需要分别部署服务端和客户端,支持多个客户端通过一个服务端实现内网穿透。
项目文件下载※
1、前往 Releases · fatedier/frp · GitHub 根据系统版本选择需要下载的项目文件(此处以amd64架构的v0.58.0版本举例)
# 创建下载目录 & 进入下载主目录 & 使用weget下载文件到目录中
mkdir /home/docker/frp && cd /home/docker/frp && wget -P /home/docker/frp https://github.com/fatedier/frp/releases/download/v0.58.0/frp_0.58.0_linux_amd64.tar.gz
# 解压文件并重命名为app
tar -zxvf frp_0.58.0_linux_amd64.tar.gz && mv frp_0.58.0_linux_amd64 app
服务端部署(FRPS)※
完成步骤项目文件下载后,再进行此操作,否则找不到frp相关文件
1、配置 frps 的配置文件frps.toml
# 进入配置文件目录 & 编辑配置文件
cd /home/docker/frp/app && nano frps.toml
2、复制下方内容到frps.toml
中,并根据注释配置内容
# frps.toml
# 通讯桥接端口(根据需要自定义)
bindPort = 8888
# kcp 绑定的是 UDP 端口,可以和 bindPort 一样
# kcpBindPort = 8888
# QUIC 绑定的是 UDP 端口,可以和 bindPort 一样
quicBindPort = 8888
# 单个代理连接池数量,默认5个
transport.maxPoolCount = 20
# 身份认证(15~20位验证密码,建议定时更换)
auth.token = "youselftoken"
# 输出日志
log.to = "./frps.log"
log.level = "trace"
log.maxDays = 7
3、创建Dockerfile
容器镜像构建文件
# 进入挂载主目录 & 创建 Dockerfile
cd /home/docker/frp && nano Dockerfile
4、复制下方内容到Dockerfile
中
# 指定基础镜像为 Alpine
FROM alpine:latest
# 设置工作目录
WORKDIR /usr/src/app
# 设置容器时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai" > /etc/timezone
# 复制app成为容器的一部分
COPY ./app /usr/src/app
# 定义容器启动时执行的命令(填写frps则为服务端,frpc则为客户端)
CMD ["./frps", "-c", "frps.toml"]
5、运行构建命令创建容器镜像
# docker build -t [构建的镜像名称]
docker build -t frps-alpine:0.58.0 .
6、创建docker-compose.yml
容器编排文件
# 进入挂载主目录 & 创建 docker-compose.yml
cd /home/docker/frp && nano docker-compose.yml
7、复制下方内容到docker-compose.yml
中
version: "3.8"
services:
frps:
image: frps-alpine:0.58.0 #刚刚构建的镜像名称
container_name: frps
volumes:
- ./app:/usr/src/app
network_mode: host #直接使用主机网络模式
environment:
- TZ=Asia/Shanghai
restart: always
8、运行命令完成搭建
docker-compose up -d
客户端部署(FRPC)※
与服务端的部署相同,都需要完成步骤项目文件下载后,再进行此操作,否则找不到frp相关文件
1、配置 frpc 的配置文件frpc.toml
# 进入配置文件目录 & 编辑配置文件
cd /home/docker/frp/app && nano frpc.toml
2、复制下方内容到frpc.toml
中,并根据注释配置内容
# frpc.toml
#服务端配置(根据前面配置的服务端信息配置)
serverAddr = "服务端的IP地址"
serverPort = 8888
transport.protocol = "quic"
auth.token = "youselftoken"
# ------------内网穿透配置------------
# 假设 需要映射本地服务192.168.50.1的80端口到服务端的8800端口,则可配置如下:
[[proxies]]
name = "servername"
type = "tcp"
localIP = "192.168.50.1"
localPort = 80
remotePort = 8800
3、创建Dockerfile
容器镜像构建文件
# 进入挂载主目录 & 创建 Dockerfile
cd /home/docker/frp && nano Dockerfile
4、复制下方内容到Dockerfile
中
# 指定基础镜像为 Alpine
FROM alpine:latest
# 设置工作目录
WORKDIR /usr/src/app
# 设置容器时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai" > /etc/timezone
# 复制app成为容器的一部分
COPY ./app /usr/src/app
# 定义容器启动时执行的命令(填写frps则为服务端,frpc则为客户端)
CMD ["./frpc", "-c", "frpc.toml"]
5、运行构建命令创建容器镜像
# docker build -t [构建的镜像名称]
docker build -t frpc-alpine:0.58.0 .
6、创建docker-compose.yml
容器编排文件
# 进入挂载主目录 & 创建 docker-compose.yml
cd /home/docker/frp && nano docker-compose.yml
7、复制下方内容到docker-compose.yml
中
version: "3.8"
services:
frpc:
image: frpc-alpine:0.58.0 #刚刚构建的镜像名称
container_name: frpc
volumes:
- ./app:/usr/src/app
network_mode: host #直接使用主机网络模式
environment:
- TZ=Asia/Shanghai
restart: always
8、运行命令完成搭建
docker-compose up -d