通过 docker 部署 frp 内网穿透(Linux and Windows)

2024-10-09 14:02:32 浏览数 (5)

FRP 介绍

FRP (Fast Reverse Proxy) 是一个用于内网穿透的高效反向代理应用,它支持 TCP、UDP、HTTP 和 HTTPS 等多种协议,能够让处于防火墙或 NAT 后的内网服务通过公网访问。通过 FRP,内网服务可以绑定到外网 IP 地址和端口,用户可以方便地通过公网访问这些内网服务,适用于远程管理、应用发布等场景。

FRP 工作原理

FRP 分为两部分:客户端(frpc)服务端(frps)

  • frps 服务端:部署在拥有公网 IP 的服务器上,负责接收来自外部的请求并将其转发到内网的服务。
  • frpc 客户端:部署在内网的机器上,与 frps 建立持久连接,将内网的服务暴露给公网。

当客户端(frpc)向服务端(frps)注册时,会告知服务端希望暴露哪些内网服务。服务端会将这些服务的流量转发给客户端,并通过客户端再发送给相应的内网服务。

FRP 使用场景

远程访问内网服务:例如,你可以通过 FRP 访问家里或公司的服务器,而不需要配置复杂的端口映射。

  • 开发环境共享:开发者可以通过 FRP 共享自己本地的开发环境,外部团队可以直接访问内网的应用和 API。
  • 多种协议支持:FRP 支持 HTTP、HTTPS、TCP、UDP 等协议,可以穿透不同类型的服务。
  • 穿透防火墙/NAT:即使内网服务器处于 NAT 后面或防火墙后面,仍然可以通过 FRP 将服务暴露到公网。

FRP 的优势

  • 高效:FRP 采用了较为高效的协议和数据传输方式,性能较好,能够处理较大的流量。
  • 多协议支持:不仅支持常见的 TCP 和 HTTP,还支持 UDP、WebSocket 等协议,灵活性强。
  • 简单易用:配置文件简洁,支持多种配置方式,快速上手。
  • 安全性:FRP 支持 TLS、身份验证等安全机制,保障数据的传输安全。
  • 丰富的功能:如负载均衡、流量统计、服务限速等,可以满足各种复杂的应用场景需求。

服务器配置部署

1,创建并配置 frp 文件

代码语言:javascript复制
[root@server ~]# cat /root/frps.ini 
[common]
# 监听端口
bind_port = 7000
# 面板端口
dashboard_port = 7500
# 登录面板账号设置
dashboard_user = admin
# 登录面板的密码
dashboard_pwd = 123456

# 身份验证
token = qwertyui
[root@server ~]#

2,拉取镜像启动容器

代码语言:javascript复制
[root@server ~]# docker pull registry.cn-shenzhen.aliyuncs.com/mogublog_business/frps

[root@server ~]# 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
5d1c7d3ec1697c08bd77fa267e9ae007ffa8c379b81bb6953d6e01ff85c5cbb7

[root@server ~]# docker ps -a
CONTAINER ID   IMAGE                                                      COMMAND                  CREATED         STATUS                 PORTS                                       NAMES
5d1c7d3ec169   registry.cn-shenzhen.aliyuncs.com/mogublog_business/frps   "/bin/sh -c '/usr/bi…"   4 seconds ago   Up 3 seconds                                                       frps
[root@server ~]# 

3,登录 frp 的 web 后台进行查看(账号: admin 密码: 123456)

代码语言:javascript复制
http://服务器IP:7500
通过 docker 部署 frp 内网穿透(Linux and Windows)_linux通过 docker 部署 frp 内网穿透(Linux and Windows)_linux
通过 docker 部署 frp 内网穿透(Linux and Windows)_linux_02通过 docker 部署 frp 内网穿透(Linux and Windows)_linux_02

客户端配置部署 Linux

1,创建并配置 frp 文件

代码语言:javascript复制
[root@client ~]# cat /root/frpc.ini 
[common]
# server_addr为云服务器IP地址
server_addr = xx.xx.xx.xx
# server_port为服务端监听端口,bind_port
server_port = 7000
# 服务端设置的token
token = qwertyui

# 添加穿透端口1
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 8822

# 添加穿透端口2
[nginx]
type = tcp
local_ip = 127.0.0.1
local_port = 80
remote_port = 8880
[root@client ~]#

2,客户端镜像拉取启动

代码语言:javascript复制
[root@client ~]# docker pull registry.cn-shenzhen.aliyuncs.com/mogublog_business/frpc:latest

[root@client ~]# 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:latest 
5d73d9ee2583b73b84a2863f61ddf29d722b7ac8a79f1e366bec7998bc8e278b

[root@client ~]# docker ps -a
CONTAINER ID   IMAGE                                                             COMMAND                   CREATED         STATUS         PORTS     NAMES
5d73d9ee2583   registry.cn-shenzhen.aliyuncs.com/mogublog_business/frpc:latest   "/bin/sh -c '/usr/bi…"   4 seconds ago   Up 4 seconds             frpc
[root@client ~]# 

3,测试内网穿透端口 1

代码语言:javascript复制
root@ceshi:~# ssh root@服务器IP -p 8822
root@服务器IP's password: 
Last login: Tue Oct  8 16:38:52 2024 from localhost
[root@client ~]# 

4,测试内网穿透端口 2

代码语言:javascript复制
# 拉取一个 nginx 镜像并启动
[root@client ~]# docker run -d  -p 80:80 --name=web --restart=always nginx
32204c6ca6c19ff662ba21511a916dc58141add3c02fa8cd34b1c024cdf03474
[root@client ~]# 
[root@client ~]# 
[root@client ~]# docker ps -a
CONTAINER ID   IMAGE                                                             COMMAND                   CREATED          STATUS         PORTS                               NAMES
32204c6ca6c1   nginx                                                             "/docker-entrypoint.…"   11 seconds ago   Up 9 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   web
[root@client ~]# 
通过 docker 部署 frp 内网穿透(Linux and Windows)_linux_03通过 docker 部署 frp 内网穿透(Linux and Windows)_linux_03

客户端配置部署 windows

1,进入 GitHub 下载对应版本

代码语言:javascript复制
https://github.com/fatedier/frp/

2,解压 创建 frpc.ini 文件 添加内容

代码语言:javascript复制
[common]
# 服务端公网ip
server_addr = 47.116.17.20
# 对应服务端配置 bind_port
server_port = 7000
# 对应服务端配置中的 token
token = qwertyui

[mstsc]
type = tcp
# 此处不需要改
local_ip = 127.0.0.1
# windows服务器默认的远程端口,如果考虑安全问题,可以修改远程端口,对应再修改此处
local_port = 3389
# local_port映射的远程端口,也就是映射的服务端的端口
remote_port = 8888
通过 docker 部署 frp 内网穿透(Linux and Windows)_frp_04通过 docker 部署 frp 内网穿透(Linux and Windows)_frp_04

3,创建 bat 启动文件并添加内容

代码语言:javascript复制
frpc.exe -c frpc.ini
通过 docker 部署 frp 内网穿透(Linux and Windows)_linux_05通过 docker 部署 frp 内网穿透(Linux and Windows)_linux_05

4,运行bat文件之后 web 网页查看端口已生效

通过 docker 部署 frp 内网穿透(Linux and Windows)_windows_06通过 docker 部署 frp 内网穿透(Linux and Windows)_windows_06
通过 docker 部署 frp 内网穿透(Linux and Windows)_linux_07通过 docker 部署 frp 内网穿透(Linux and Windows)_linux_07

5,测试远程登录

通过 docker 部署 frp 内网穿透(Linux and Windows)_frp_08通过 docker 部署 frp 内网穿透(Linux and Windows)_frp_08
通过 docker 部署 frp 内网穿透(Linux and Windows)_frp_09通过 docker 部署 frp 内网穿透(Linux and Windows)_frp_09

1 人点赞