问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

实战:docker式部署frp内网穿透-2024.7.13(测试成功)

创作时间:
作者:
@小白创作中心

实战:docker式部署frp内网穿透-2024.7.13(测试成功)

引用
CSDN
1.
https://blog.csdn.net/weixin_39246554/article/details/140407784

前提

首先需要准备好一台云服务器,用于提供公网IP和流量转发。至于购买哪家的云服务产品,本着能省则省的原则,当然是哪家便宜用哪家。

假设你手上目前有闲置的腾讯云的服务器,刚好可以用来作为内网穿透的机器。首先需要在云服务器上设置安全组,为了演示方便,可以把所有的端口都放开了,但建议根据实际需求开放指定的端口。

环境

1台公网服务器(centos7.x系统)
1台家里nuc小主机(ubuntu24.4系统)
frp镜像:
registry.cn-shenzhen.aliyuncs.com/mogublog_business/frps:latest
registry.cn-shenzhen.aliyuncs.com/mogublog_business/frpc:latest
#配置
frp server:
阿里云ecs,2核(vCPU),2 GiB,公网带宽3 Mbps,40GiB ESSD Entry云盘(2120 IOPS)
frp client:
英特尔NUC11TNHi5老虎峡谷(8c,16g,512g ssd)

说明:只要是Linux系统就好,且提前安装好Docker环境。

源码

链接:https://pan.baidu.com/s/1B42I1kEZYzRm-rKdPm4FLQ?pwd=fxbk
提取码:fxbk
2024.7.13-实战:docker式部署frp-2024.7.13(测试成功)

简介

Frp是一个专注于内网穿透的高性能的反向代理应用,支持TCP、UDP、HTTP、HTTPS等多种协议,且支持P2P通信。可以将内网服务以安全、便捷的方式通过具有公网IP节点的中转暴露到公网。

通过在具有公网IP的节点上部署Frp服务端,你可以轻松地将内网服务穿透到公网,并享受以下专业特性:

  • 多种协议支持:客户端服务端通信支持TCP、QUIC、KCP和Websocket等多种协议。
  • TCP连接流式复用:在单个连接上承载多个请求,减少连接建立时间,降低请求延迟。
  • 代理组间的负载均衡。
  • 端口复用:多个服务可以通过同一个服务端端口暴露。
  • P2P通信:流量不必经过服务器中转,充分利用带宽资源。
  • 客户端插件:提供多个原生支持的客户端插件,如静态文件查看、HTTPS/HTTP协议转换、HTTP、SOCKS5代理等,以便满足各种需求。
  • 服务端插件系统:高度可扩展的服务端插件系统,便于根据自身需求进行功能扩展。
  • 用户友好的UI页面:提供服务端和客户端的用户界面,使配置和监控变得更加方便。

Frp主要由两个组件组成:客户端(frpc)和服务端(frps)。通常情况下,服务端部署在具有公网IP地址的机器上,而客户端部署在需要穿透的内网服务所在的机器上。

由于内网服务缺乏公网IP地址,因此无法直接被非局域网内的用户访问。用户通过访问服务端的frps,frp负责根据请求的端口或其他信息将请求路由到相应的内网机器,从而实现通信。

Frp是一款在GitHub上非常热门的项目,使用Golang语言开发,目前已经有82k的star数,社区也很活跃。
https://github.com/fatedier/frp/releases

1、安装服务端

首先来安装服务端,服务端需要在具有公网IP的设备上进行安装,假设你的云服务器是预装了ubuntu24.04系统。(是Linux系统就好)

这里需要使用到Docker来进行安装,关于Docker的安装教程,请看如下链接:

vim /root/frps.ini

然后填写配置信息,这里会启动两个端口号:

  • 7000:用于和内网设备数据交互;
  • 7500:提供frp图形化界面,同时需要配置面板访问的账号和密码,以及token是内网设备和frp服务端建立连接时的密码。
[common]
# 监听端口
bind_port = 7000
# 面板端口
dashboard_port = 7500
# 登录面板账号设置
dashboard_user = admin
# 登录面板的密码
dashboard_pwd = 123456
# 身份验证
token = 666666
  • 启动容器

使用下面Docker命令,下载我们的frp服务端。其中,这里使用到了蘑菇的阿里云镜像仓库地址,官方的镜像地址因为被墙的原因,可能很多小伙伴目前无法访问了。

docker run --restart=always --network host -d -v /root/frps.ini:/etc/frp/frps.ini --name frps registry.cn-shenzhen.aliyuncs.com/mogublog_business/frps

细心的小伙伴,可能会发现:命令行中使用了--network host定网络模式为host模式。

众所周知,Docker使用了Linux的Namespaces技术来进行资源隔离,如:

  • PID Namespace:隔离进程,
  • Mount Namespace:隔离文件系统,
  • Network Namespace:隔离网络等。

一个Network Namespace提供了一份独立的网络环境,包括网卡、路由、Iptable规则等都与其他的Network Namespace隔离。

如果使用host模式时,容器中的应用都直接绑定在宿主机的端口上,没有经过NAT转换,但容器的其他如文件系统等还是隔离的。

  • 查看

安装完成后,输入下面命令,即可查看容器运行状态

[root@docusaurus-wiki ~]#docker run --restart=always --network host -d -v /root/frps.ini:/etc/frp/frps.ini --name frps registry.cn-shenzhen.aliyuncs.com/mogublog_business/frps
Unable to find image 'registry.cn-shenzhen.aliyuncs.com/mogublog_business/frps:latest' locally
latest: Pulling from mogublog_business/frps
396c31837116: Pull complete 
23169097eaa2: Pull complete 
Digest: sha256:2356311d8aa9f01c8b60501af1655756c04bfc9595cd4e2c9eeed02bb62bd62c
Status: Downloaded newer image for registry.cn-shenzhen.aliyuncs.com/mogublog_business/frps:latest
ba8cb18a543f77592e6eb93b4b692cfcd93334121747d25dc8270ba3af8b2ddc
[root@docusaurus-wiki ~]#docker ps -l
CONTAINER ID        IMAGE                                                      COMMAND                  CREATED             STATUS              PORTS               NAMES
ba8cb18a543f        registry.cn-shenzhen.aliyuncs.com/mogublog_business/frps   "/bin/sh -c '/usr/bi…"   35 seconds ago      Up 35 seconds                           frps
[root@docusaurus-wiki ~]#

可以看到,现在运行了一个frps的容器

  • 登录web查看后台

http://47.100.215.163:7500/

同时,frp还提供了图形化的界面,我们使用http://your_ip:7500即可打开对应的图形化界面。输入上面配置文件中,配置的账号和密码登录即可。

如果能看到下面的页面,说明就我们的服务端就安装成功了

自己测试效果:

2、客户端安装

客户端需要在你的内网的机器上进行安装,在上一期的文章中,我们通过PVE系统安装了一个CentOS服务器,并搭建了蘑菇系统。

我们接着打开之前的机器,然后使用SSH工具进行连接。

  • 首先,需要在这台机器上,创建frp的客户端配置文件:
vim /root/frpc.ini

然后填写下面的配置,这里需要注意的是server_addr填写的是服务器端的地址,然后token是服务端配置的token令牌,用于客户端和服务端建立连接。

[common]
# server_addr为云服务器IP地址
server_addr = 47.100.215.163
# server_port为服务端监听端口,bind_port
server_port = 7000
# 服务端设置的token
token = 666666
[ruyu-blog]
type = tcp
local_ip = 127.0.0.1
local_port = 80
remote_port = 8083

上面配置是将这台机器中的四个端口,映射到服务端的四个端口上。

这里我映射的是本地80端口服务,其是我测试的一个博客服务。(比较复杂)

为了简便,这里我再映射一个Ngninx服务,如下:(大家使用nginx来测试就好)

[common]
# server_addr为云服务器IP地址
server_addr = 47.100.215.163
# server_port为服务端监听端口,bind_port
server_port = 7000
# 服务端设置的token
token = Admin@2024
[ruyu-blog]
type = tcp
local_ip = 127.0.0.1
local_port = 80
remote_port = 8083
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 8084
[nginx-test]
type = tcp
local_ip = 127.0.0.1
local_port = 81
remote_port = 8085
  • 启动容器

配置完成后,执行下面命令下载客户端的Docker镜像,并加载上面的配置文件,启动frp的客户端。

docker run --restart=always --network host -d -v /root/frpc.ini:/etc/frp/frpc.ini --name frpc registry.cn-shenzhen.aliyuncs.com/mogublog_business/frpc
docker run -d  -p 81:80 --name=web --restart=always nginx
  • 验证

我们再打开frp的图形化界面,选中:Proxies → TCP,可以看到这几个端口都已经注册上来了

3、测试效果

访问公网IP的8083端口,即可看到本地虚拟机部署的页面。

http://47.100.215.163:8083/

当前的demo为:http://47.100.215.163:81/

nginx-test:

http://47.100.215.163:8085/

最后:

测试完,删除Nginx-test,只保留博客、ssh frp即可。

FAQ

二进制方式部署

引用

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号