FRP:一款功能强大的内网穿透软件

-
-
2023-07-28

前言

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

更多操作


目录