Docker搭建frp内网穿透服务器
HDUZN

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

说直白点,我主要是想用来:

  • 访问内网(现在能访问,但直接访问其它的内网地址还有点问题);
  • 安装frpc的电脑开web服务的内网没问题,可以访问;
  • 访问不了其它的内网,就先用用远程桌面连接吧。(当然,这个也有第三方的工具,但TeamView免费不好用,Todesk免费还行、就是分辨率、稳定性这些还是差一些)

反正服务器本来就有,就顺便试一下。

frp中文文档:https://github.com/fatedier/frp/blob/dev/README_zh.md
完整文档:https://gofrp.org

release版本下载:https://github.com/fatedier/frp/releases

准备工作:

一共3台机子:

  • Ubuntu服务器(带Docker,有公网ip):用来安装frp server端
  • 办公室Windows10(已安装docker):安装frp client端
  • 本机Windows10:远程连接办公室电脑

frp实现了啥:

比如我办公室Windows10中运行了一个web服务,局域网可以访问,通过以下地址访问:192.168.1.110:5000

但外网是无法访问的。

然后我的Ubuntu服务器(公网ip:43.142.94.65),分别安装了frps、frpc端。

然后通过frp,外面就可以用:43.142.94.65:18188 来访问 192.168.1.110:5000 了。(这里5000端口映射到服务器的18188端口了)

一、搭建frp server(服务器端)

云服务器:带Docker的Ubuntu20.04

1.创建配置文件(frps.ini)

先建个frp的目录,随便放哪里,比如我就放在用户目录(/home/ubuntu)下:

1
mkdir frp

可以直接在服务器(Linux)系统中用vi frps.ini创建配置文件、编辑、保存。

也可以在本地直接创建好了,用FTP工具上传到 /home/ubuntu/frp目录下。

frps.ini 文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[common]
# 监听端口
bind_port = 7000
# 面板端口
dashboard_port = 7500
# 登录面板账号设置
dashboard_user = admin
dashboard_pwd = Administrator1234
# 设置http及https协议下代理端口(非重要)
vhost_http_port = 7080
vhost_https_port = 7081

# 身份验证
token = 9LgPn24TaC2NYZXY

token尽量复杂一些,用Python的话,可以用secrets库生成一下随机密码。

用的是腾讯云轻量服务器,所以要在【防火墙】中先把这些服务器上要用到的端口开一下,即:
7000、7500、7080、7081 四个端口。

2.创建frps容器

1).下载frp服务器镜像 snowdreamtech/frps

docker官方镜像网址:https://hub.docker.com/r/snowdreamtech/frps

1
docker pull snowdreamtech/frps

碰到没有权限的时候,命令前面加上sudo就行。

2).启动容器

我这里配置文件在:/home/ubuntu/frp/frps.ini

1
docker run --restart=always --network host -d -v /home/ubuntu/frp/frps.ini:/etc/frp/frps.ini --name frps snowdreamtech/frps
1
2
3
--network host:网络模式host
-v /home/ubuntu/frp/frps.ini:/etc/frp/frps.ini:配置文件映射
--name frps:容器名称,可以随便取

启动后,通过docker ps -a命令查看容器列表。

创建好后,打开网址:服务器ip:7500 就可以看到frp面板了。(我这是:43.142.94.65:7500)

如果出现无法访问的情况,可以在以下网站上查询一下,看服务器端口是否开放:
https://tool.chinaz.com/port

二、搭建frp client(客户端)

办公室Windows10(已安装docker)
安装docker方法:https://yeasy.gitbook.io/docker_practice/install/windows

1.创建配置文件(frpc.ini)

先建个frp的目录,随便放哪里,比如我就放在(E:\frp)下.

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
28
29
30
31
32
[common]
# server_addr为FRPS服务器IP地址
server_addr = 43.142.94.65
# server_port为服务端监听端口,bind_port,与frps.ini中保存一致
server_port = 7000
# 身份验证,与frps.ini中保存一致
token = 9LgPn24TaC2NYZXY

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 2288

# [ssh] 为服务名称,下方此处设置为,访问frp服务段的2288端口时,等同于通过中转服务器访问127.0.0.1的22端口。
# type 为连接的类型,此处为tcp
# local_ip 为中转客户端实际访问的IP
# local_port 为目标端口
# remote_port 为远程端口

# 远程桌面RDP,连接需要3389端口
[RDP]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 18189

[web_host]
type = tcp
local_ip = 127.0.0.1
local_port = 5002
remote_port = 18289

这里可以建多个,比如我这就开了3个:ssh、RDP、web_host。

最后对应的访问地址为:FRPS服务器IP地址:remote_port

远程桌面连接地址:43.142.94.65:18189
web访问地址:43.142.94.65:18289 对应本机的 127.0.0.1:5002

用的是腾讯云轻量服务器,所以要在【防火墙】中把这些服务器上要用到的端口开一下,即:
2288、18189、18289 三个端口。

2.创建frpc容器

可以在docker软件中操作,反正跟服务器端差不多的命令,我这就直接用命令了。

1).下载frp客户端镜像 snowdreamtech/frpc

docker官方镜像网址:https://hub.docker.com/r/snowdreamtech/frpc

打开Windows Powershell/命令提示符 用命令下载镜像:

1
docker pull snowdreamtech/frpc

2).启动容器

我这里配置文件在:E:/frp/frpc.ini

1
docker run --restart=always --network host -d -v E:/frp/frpc.ini:/etc/frp/frpc.ini --name frpc snowdreamtech/frpc

启动后,通过docker ps -a命令查看容器列表。

再刷新刚才打开的网址:服务器ip:7500 就可以看到frp面板了。(我这是:43.142.94.65:7500)如下图所示:

三、远程桌面连接

当然,首先,要在办公室Windows10(已安装docker)这台机子上开启远程桌面:

远程桌面连接地址:43.142.94.65:18189

在Windows系统中打开【远程桌面连接】,输入连接地址和远程连接的计算机的用户名:

注意,Windows10在【体验】选项中,可以选择【LAN(10 Mbps或更高)】,也可以选择【自动检测连接质量】。默认是【低速宽带】,连接上之后,字体变样,感觉很丑、看起来不舒服。

而Windows11的话,默认是【自动检测连接质量】,就没事问题,连接上后自动检测的效果挺好的。

就成功连接啦!

更多关于frp的介绍、配置文件说明,都在官方的文档中有:https://gofrp.org

参考文章:自建内网穿透服务器

frp客户端 login to server failed:EOF解决方法

frp客户端容器启动失败
  • 本文标题:Docker搭建frp内网穿透服务器
  • 本文作者:HDUZN
  • 创建时间:2022-06-18 11:54:07
  • 本文链接:http://hduzn.cn/2022/06/18/Docker搭建frp内网穿透服务器/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
 评论