用 Docker 搭建 frps 内网穿透服务

用 Docker 搭建 frps 内网穿透服务

frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。

用 Docker 搭建 frps 内网穿透服务

虽然现在宽带速度都很快,但对于电脑玩家来说,最大的问题是“没有公网 IP”!这使得想要在外访问家里的电脑、NAS、树莓派、摄像头等网络设备或远程控制等,都无法轻松实现。

这时你就需要一款内网穿透工具来让外网与你家内网建立起连接,实现无公网 IP 的远程访问了。「Frp」是一款流行的跨平台开源免费内网穿透工具,支持 Windows、macOSLinux。你只需一台快速稳定的 VPS 服务器即可愉快地进行内网穿透,实现家中设备公网直接访问了……

部署

自从学会了docker,我就在搭建各种环境的时候就有了_洁癖_:服务器上的各种软件,必须使用docker来搭建.

去hub.docker.com上搜了一下,有现成的服务端( snowdreamtech/frps) 和客户端(snowdreamtech/frpc),但这次我只需要服务端就好了,如果你的 openwrt 固件上没有安装frpc 客户端,你可以在这里下载( kuoruan/openwrt-frp kuoruan/luci-app-frpc)

启动服务端

先创建服务端的配置文件`frps.ini` (完整的服务端配置)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[common]
# 绑定远程主机端口
bind_port = 17000
# 开启 token 验证
token = P.3cqN4vr4g9oPRvN.PB

# http 和 https 的访问端口
# http端口和https端口可以与bind_port相同
vhost_http_port = 10080
# vhost_https_port = 10443

# 监控面板端口
# 注:Dashboard 尚未针对大量的 proxy 数据展示做优化,如果出现 Dashboard 访问较慢的情况,请不要启用此功能。
dashboard_port = 17500
dashboard_user = admin
dashboard_pwd = admin

# TCP 多路复用
# 从 v0.10.0 版本开始,客户端和服务器端之间的连接支持多路复用,不再需要为每一个用户请# # 求创建一个连接,使连接建立的延迟降低,并且避免了大量文件描述符的占用,使 frp 可以承载# 更高的并发数。
tcp_mux = true

# 连接池
max_pool_count = 10

# 自定义二级域名
# 只需要将 *.{subdomain_host} 解析到 frps 所在服务器。之后用户可以通过 subdomain
# 行指定自己的 web 服务所需要使用的二级域名,通过 {subdomain}.{subdomain_host} 来访
# 问自己的 web 服务。
subdomain_host = fillpit.top

创建 docker-compose.yml 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
version: '3'

services:
frps:
image: snowdreamtech/frps
container_name: frps
ports:
- "17000:17000"
- "17500:17500"
- "10080:10080"
- "10010-10020":"10010-10020" # 映射其他端口
volumes:
- $PWD/conf/frps.ini:/etc/frp/frps.ini
restart: always

执行 `docker stack deploy  myfrps -c=docker-compose.yml`

创建客户端配置 frpc.ini

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# frpc.ini
[common]
# 服务器地址 和 端口
server_addr = x.x.x.x
server_port = 7000

[web]
# 连接类型,填 http 或 https
type = http

# 本地web服务访问地址 和端口
local_ip = 127.0.0.1
local_port = 80

# 开启 加密与压缩
use_encryption = true
use_compression = true

# 客户端的访问子域名,搭配服务端的 [subdomain_host] 使用
# 通过 test.frps.com 就可以访问到内网的 web 服务。
subdomain = test

# 通过密码保护你的 web 服务
# 由于所有客户端共用一个 frps 的 http 服务端口,任何知道你的域名和 url 的人都能访问到
# 你部署在内网的 web 服务,但是在某些场景下需要确保只有限定的用户才能访问。
http_user = abc
http_pwd = abc
作者

坑 飞

发布于

2021-06-17

更新于

2021-09-06

许可协议

评论