使用docker启动frp内网穿透

frp是内网穿透工具,客户端和服务端分别为frpc和frps,frpc安装在本地机器、frps安装在拥有公网IP的机器中。
本文主要介绍如何使用docker分别运行frpc和frps。
优点:配置文件(包含密码和公网IP等重要信息)可保留在本机,docker容器可推送至任意镜像仓库,当更换服务器或者新增一个客户端时可以复用镜像,较为简洁。

安装篇

frpc安装

本地机器安装frpc,用于连接frps,将自身服务穿透到外网从而获得公网服务效果
安装流程分3步:

  1. 准备好配置文件,注意修改tokenserver_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
  1. 构建镜像。
# 注意区分Linux和处理器架构hostnamectl可查看 mkdir /tmp/frpc && cd /tmp/frpc # 需提前安装docker 可执行curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun cat >/tmp/frpc/Dockerfile<<EOF FROM golang:1.19 WORKDIR /frpc RUN apt-get update && apt-get install -y unzip ENV GOPROXY=https://goproxy.cn,direct RUN wget https://github.com/fatedier/frp/archive/refs/tags/v0.46.0.zip && unzip v0.46.0.zip && cd frp-0.46.0/ && make build && cp bin/* /frpc ENTRYPOINT ["./frpc", "-c", "/mnt/frp/frpc.ini"] EOF docker build -t frpc:1 /tmp/frpc
  1. 运行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步:

  1. 准备好配置文件
mkdir -p /etc/myconf/frp cat >/etc/myconf/frp/frps.ini<<EOF [common] bind_port = 7000 [auth] token = 你的密码 EOF
  1. 构建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 ENV GOPROXY=https://goproxy.cn,direct 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
  1. 运行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步骤

下一篇

《配置点对点内网穿透》


__EOF__

本文作者钟子期
本文链接https://www.cnblogs.com/nishiliu/p/17015979.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   钟子期  阅读(6562)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示