frp是内网穿透工具,客户端和服务端分别为frpc和frps,frpc安装在本地机器、frps安装在拥有公网IP的机器中。
本文主要介绍如何使用docker分别运行frpc和frps。
优点:配置文件(包含密码和公网IP等重要信息)可保留在本机,docker容器可推送至任意镜像仓库,当更换服务器或者新增一个客户端时可以复用镜像,较为简洁。
安装篇
frpc安装
本地机器安装frpc,用于连接frps,将自身服务穿透到外网从而获得公网服务效果
安装流程分3步:
- 准备好配置文件,注意修改
token
和server_addr
mkdir -p /etc/myconf/frp
cat >/etc/myconf/frp/frpc.ini<<EOF
[common]
server_addr = x.x.x.x
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
[auth]
token = 你的密码
EOF
- 构建镜像。
# 注意区分Linux和处理器架构hostnamectl可查看
mkdir /tmp/frpc && cd /tmp/frpc
# 需提前安装docker 可执行curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
platform='unknown'
unamestr=$(uname)
if [ "$unamestr" = 'Linux' ]; then
platform='linux'
elif [ "$unamestr" = 'FreeBSD' ]; then
platform='freebsd'
elif [ "$unamestr" = 'Darwin' ]; then
platform='darwin'
fi
arch='unknown'
archstr=$(uname -m)
if [ "$archstr" = 'aarch64' ] || [ "$archstr" = 'arm64' ] ; then
arch='arm64'
elif [ "$archstr" = 'x86_64' ]; then
arch='amd64'
fi
cat >/tmp/frpc/Dockerfile<<EOF
FROM busybox
WORKDIR /frpc
RUN wget https://github.com/fatedier/frp/releases/download/v0.46.0/frp_0.46.0_linux_arm64.tar.gz && tar -zxvf *.tar.gz
RUN cd $(ls | grep frp | grep -v gz) && cp * /frpc
ENTRYPOINT ["./frpc", "-c", "/mnt/frp/frpc.ini"]
EOF
sed -i "s/linux/$platform/g" /tmp/frpc/Dockerfile
sed -i "s/arm64/$arch/g" /tmp/frpc/Dockerfile
docker build -t frpc:1 /tmp/frpc
- 运行frpc容器
docker run --name frpc --net=host --restart=always -v /etc/myconf/frp:/mnt/frp -d frpc:1
- 容器使用host主机网络,代表直接操作主机网络。
--restart=always
保证本机重启后frp服务自动启动-v /etc/myconf/frp:/mnt/frp
将配置文件挂载到frp容器中
如果发现哪个配置项错了,请执行 docker stop frpc && docker rm frpc
并重新执行前面的1、2步骤
frpc推荐配置文件
[common]
# x.x.x.x修改为自己的公网IP
server_addr = x.x.x.x
server_port = 7000
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
[auth]
token = 你的密码
frps安装
(重要描述)目前全球公网IP即将耗尽,用户获取IPv4的方式大多通过云服务器,而通常购买的是年付云主机,因此推荐使用docker方式安装frps,并将配置文件存储到本地机器,在启动frps服务时将调整好的配置文件挂载至docker容器中
安装流程分3步:
- 准备好配置文件
mkdir -p /etc/myconf/frp
cat >/etc/myconf/frp/frps.ini<<EOF
[common]
bind_port = 7000
[auth]
token = 你的密码
EOF
- 构建docker镜像或直接使用我的
zzc932/frps:v2.1
。注意区分自己的处理器类型,到release页面找到对应的链接内容并修改下文的https://github.com/fatedier/frp/releases/download/v0.46.0/frp_0.46.0_linux_amd64.tar.gz && tar -zxvf *.tar.gz
# 注意区分Linux和处理器架构hostnamectl可查看
mkdir /tmp/frps && cd /tmp/frps
platform='unknown'
unamestr=$(uname)
if [ "$unamestr" = 'Linux' ]; then
platform='linux'
elif [ "$unamestr" = 'FreeBSD' ]; then
platform='freebsd'
elif [ "$unamestr" = 'Darwin' ]; then
platform='darwin'
fi
arch='unknown'
archstr=$(uname -m)
if [ "$archstr" = 'aarch64' ] || [ "$archstr" = 'arm64' ] ; then
arch='arm64'
elif [ "$archstr" = 'x86_64' ]; then
arch='amd64'
fi
# 需提前安装docker
cat >/tmp/frps/Dockerfile<<EOF
FROM busybox
WORKDIR /frps
RUN wget https://github.com/fatedier/frp/releases/download/v0.46.0/frp_0.46.0_linux_arm64.tar.gz && tar -zxvf *.tar.gz
RUN cd $(ls | grep frp | grep -v gz) && cp * /frps
ENTRYPOINT ["./frps", "-c", "/mnt/frp/frps.ini"]
EOF
# 替换对应的内核和架构
sed -i "s/linux/$platform/g" /tmp/frpc/Dockerfile
sed -i "s/arm64/$arch/g" /tmp/frpc/Dockerfile
docker build -t frps:1 /tmp/frps
- 运行frps服务
docker run --name frps --net=host --restart=always -v /etc/myconf/frp:/mnt/frp -d frps:1
- 容器使用host主机网络,代表直接操作主机网络。
--restart=always
保证本机重启后frp服务自动启动-v /etc/myconf/frp:/mnt/frp
将配置文件挂载到frp容器中
如果发现哪个配置项错了,请执行 docker stop frps && docker rm frps
并重新执行前面的1、2步骤