摘要:FRP 是 Github 上开源的一款内网穿透工具,点击前往项目地址,该项目分为 frps 服务端和 frpc 客户端,通过在拥有公网 IP 的服务器上搭建服务端,然后在被穿透的机器上安装客户端,配置好后就可以实现通过公网 IP 访问内网的内容了
FRP 是 Github 上开源的一款内网穿透工具,点击前往项目地址,该项目分为 frps 服务端和 frpc 客户端,通过在拥有公网 IP 的服务器上搭建服务端,然后在被穿透的机器上安装客户端,配置好后就可以实现通过公网 IP 访问内网的内容了
官方有提供中文文档,可以根据文档进行操作,虽然他的文档对配置项都有介绍,但我个人觉得他这个文档逻辑结构梳理的不是很清楚,有些配置项不知道该不该用,不知道该在哪用,不知道怎么用,所以我自己写个文章简单记录一下做个笔记
本文介绍的是基于 Docker 运行 frps 和 frpc,并通过 TCP 协议简单穿透 SSH 和 HTTP,在观看本文之前请确保你的机器已经安装 docker
服务端搭建 frps#
连接拥有公网 IP 的服务器,在合适的位置创建frps目录作为工作空间
$ mkdir frps$ touch frps/frps.toml$ vim frps/frps.toml服务端配置文件内容如下所示
bindAddr = "服务器的公网IP"bindPort = 7000webServer.addr = "服务器的公网IP"webServer.port = 7500webServer.user = "admin"webServer.password = "123456"auth.method = "token"auth.token = "gbfvzhsybvtybsibvuipqfnnvlkashfgiawug"log.level = "warn"log.to = "/opt/frps/frps.log"配置文件编写完成后下载fatedier/frps:v0.61.2镜像,不同与网上流传的教程(他们啥版本都有),该镜像应该是原作者提供的,镜像仓库名称和作者 Github 名称一致,且该镜像会及时跟进软件版本,v0.61.2 是截止到本文发布时的最新的版本
$ docker pull fatedier/frps:v0.61.2$ docker run --name frps \ --restart always \ --network host \ -e TZ=Asia/Shanghai \ -v ./frps:/opt/frps \ -d fatedier/frps:v0.61.2 -c /opt/frps/frps.toml执行命令后如果容器正常运行,没有自动停止,就算启动成功了,日志文件空白属于正常现象,因为配置文件中设置了只打印 warn 级别日志,启动成功的 info 级别日志不会打印,通过容器运行状态判断是否启动成功即可
启动成功后可以通过之前配置的控制面板检查 frps 的状态,之前配置的是 7500 端口,这里进行访问测试,需要注意该容器是使用 host 网桥启动的,如果服务器中启用了防火墙需要放行之前配置的 7000 和 7500 端口
客户端搭建 frpc#
同之前流程相似,在合适的位置创建frpc目录作为工作空间
$ mkdir frpc$ touch frpc/frpc.toml$ vim frpc/frpc.toml客户端配置文件内容如下所示
serverAddr = "服务端IP地址"serverPort = 7000auth.method = "token"auth.token = "gbfvzhsybvtybsibvuipqfnnvlkashfgiawug"log.level = "warn"log.to = "/opt/frpc/frpc.log"配置文件编写完成后下载fatedier/frpc:v0.61.2镜像,强烈建议与服务端版本一致
$ docker pull fatedier/frpc:v0.61.2$ docker run --name frpc \ --restart always \ -e TZ=Asia/Shanghai \ -v ./frpc:/opt/frpc \ -d fatedier/frpc:v0.61.2 -c /opt/frpc/frpc.toml同之前一样,日志文件是空白的,只要容器保持运行没有中途停止就算运行成功了
内网穿透SSH#
先写一个 SSH 内网穿透的配置,将本机的 22 端口映射到远程的 8001 端口,编辑客户端配置文件frpc.toml在原基础上添加内容
serverAddr = "服务端IP地址"serverPort = 7000auth.method = "token"auth.token = "gbfvzhsybvtybsibvuipqfnnvlkashfgiawug"log.level = "warn"log.to = "/opt/frpc/frpc.log"[[proxies]]name = "SSH"annotations = {title = "SSH远程连接", fuck = "test", desc = "annotations是该连接的备注信息,里面的key和val是随便写的,在服务端控制面板可以看到"}type = "tcp"localIP = "192.168.137.10"localPort = 22remotePort = 8001内网穿透配置完成后docker restart frpc重启容器,就可以使用公网IP在外地SSH远程本机了,控制面板看到连接信息
内网穿透HTTP#
FRP 支持 HTTP/HTTPS 协议的内网穿透,但是使用 HTTP 类型的内网穿透不是很方便,还需要配置一个域名,HTTPS 则更麻烦一些,还需要配置 SSL 证书,这里选择继续使用基于 TCP 协议的网站内网穿透
我本机运行了 Nginx,就以他为例子继续编辑客户端配置文件frpc.toml,在原基础上再在加一个内网穿透
serverAddr = "服务端IP地址"serverPort = 7000auth.method = "token"auth.token = "gbfvzhsybvtybsibvuipqfnnvlkashfgiawug"log.level = "warn"log.to = "/opt/frpc/frpc.log"[[proxies]]name = "SSH"annotations = {title = "SSH远程连接", fuck = "test", desc = "annotations是该连接的备注信息,里面的key和val是随便写的,在服务端控制面板可以看到"}type = "tcp"localIP = "192.168.137.10"localPort = 22remotePort = 8001[[proxies]]name = "NGINX-HOME"type = "tcp"localIP = "192.168.1.183"localPort = 80remotePort = 8002docker restart frpc重启容器后访问公网查看效果
Docker镜像下载失败#
DockerHub 网络阴晴不定,下载镜像经常失败,现在的 Docker 镜像加速地址也好多都失效了,我个人比较喜欢先把镜像下载到本地,然后上传到服务器载入到 Docker 引擎中
为此我特意编写了一款开源工具 did-tool(Docker image download tool),该工具为 Java 语言编写可在任意操作系统上运行,可实现无 Docker 环境下使用 HTTP 协议通过代理下载 Docker 镜像文件,镜像文件下载到本地会被打包为xxx.tar文件,只需要上传到服务器后使用docker load -i xxx.tar就可以导入镜像,本文使用的 Docker 镜像文件已准备好,点击下方链接下载即可
文件下载地址#
自己做博客SEO太差啦没有人,原文地址求你点进去看:
下载frps_v0.61.2.tar和frpc_v0.61.2.tar两个文件即可,分别对应客户端和服务端的 Docker 镜像,如果你不想使用 Docker,里面也提供了 win 和 linux 下的可执行文件
来源:墨码行者