Docker安装frp实现远程桌面连接

[TOC]


前言

由于没有公网IP,无法远程连接家里的电脑,搜到了frp这个项目,尝试使用后发现效果不错,所以写出安装过程分享。
frp是一个反向代理工具,可以将流量转发到目标主机,包括TCP,UDP,HTTP,HTTPS。其基本原理是目标主机安装客户端连接到代理服务器建立固定连接,客户主机通过代理服务器连接到目标主机进行访问。
市面上有向日葵,TeamViewer也是类似原理,只不过这里变成代理服务器需要我们自己提供,比如从腾讯云或者阿里云购买一台轻量服务器作为代理服务器,有固定的公网IP可以访问。自建服务器的好处是带宽独享,可以有更稳定的连接效果。
而制作镜像是希望能够方便多次部署。


安装

1. 环境

  • 代理服务器 百度轻量云服务器 CentOS-7.6
  • docker-ce-20.10.16-3.el7
  • frp 0.41.0
  • 目标主机 Windows10
  • 客户主机 Windows10
  • 假定代理服务器IP 106.13.127.200

2. 步骤

查看SELinux

SELinux是关闭状态,不需要处理

getenforce
image.png

查看防火墙

防火墙是关闭状态,把防火墙开启

systemctl status firewalld
systemctl start firewalld
systemctl enable firewalld
systemctl status firewalld
image.png

image.png

image.png

添加端口

提前开放一段端口范围,用于frp流量转发。

firewall-cmd --add-port=20000-20030/tcp --permanent
firewall-cmd --add-port=20000-20030/udp --permanent
firewall-cmd --reload
firewall-cmd --list-all
image.png

安装docker

查看docker


image.png

docker还没安装,需要自己安装。
添加docker的安装源。

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
image.png

查看docker-ce版本

yum list docker-ce --showduplicates | sort -r
image.png

这里看到提示versionlock,由于只是安装frp,所以先把锁删掉。

yum versionlock list
yum versionlock clear
image.png

Docker可以默认安装最新版本,或者指定版本安装,分别指令如下。

yum install docker-ce -y
yum install docker-ce-20.10.16-3.el7 -y

这里直接安装最新版本,等待安装完成


image.png

image.png

安装完后确认docker版本,并启动docker服务

docker -v
systemctl status docker
systemctl enable docker
systemctl start docker
systemctl status docker
image.png

配置frps

登录代理服务器,创建目录并将frp复制到目录下

mkdir frp && cd frp
chmod +x frps
image.png

将frps.ini备份并编辑frps.ini。

bind_port 监听tcp端口
bind_udp_port 监听udp端口,实际上p2p模式才会用到,这里用不上
dashboard_port 监控网页端口
dashboard_user dashboard_pwd 监控网页用户和密码
token 用户客户端frpc连接frps时进行校验

vi frps.ini

[common]
bind_port = 20000
bind_udp_port = 20000
dashboard_port = 20001
dashboard_user = frp
dashboard_pwd = frpisawesome
token = frpisawesome

编辑Dockerfile

vi Server.Dockerfile

FROM centos:7
WORKDIR /root/frp
ADD ./* ./
RUN chmod +x frps
CMD ./frps -c ./frps.ini

制作镜像

配置完毕,可以开始构建镜像
构建需要拉取CentOS,根据网速可能需要等待一会儿

docker build -f Server.Dockerfile -t wenneryu/linux_frps:v1 .
image.png

查看镜像,可以看到镜像已经制作完成,TAG是v1

docker images
image.png

基于镜像开启容器

docker run -itd -p 20000-20010:20000-20010 -p 20000-20010:20000-20010/udp --name frps wenneryu/linux_frps:v1
docker ps
image.png

查看监听端口是否开启

netstat -anp | grep 200
image.png

查看容器日志

docker logs -f frps
image.png

目前看来一切正常。尝试访问监控面板。
之前配置端口 dashboard_port = 20001,假设代理服务器IP是106.13.127.200,那么通过 http://106.13.127.200:20001 访问监控面板
正常情况下,会提示输入之前配置的用户和密码,并看到如下页面


image.png

配置目标主机

代理服务器配置好后,配置目标主机,
关于远程连接的配置这里不做说明,默认已配置好远程连接的参数,只是需要代理服务器中转。
frpc和frps配置类似,编辑frpc.ini

server_addr 服务器地址
server_port 服务器端口
token 用于连接代理服务器时检验口令
type 由于远程连接同时支持TCP和UDP,所以这里两个都进行配置
local_ip 本地ip
local_port 本地开放的端口,远程连接默认端口是3389
remote_port 远程服务器开放的端口,用于客户主机连接
use_compression 是否启用压缩,用于节省流量
访问流程可以描述为
目标主机登录代理服务器106.13.127.200:20000
客户主机 -> 代理服务器106.13.127.200:20010 -> 目标主机:3389

具体配置

[common]
server_addr = 106.13.127.200
server_port = 20000
token = frpisawesome

[mstsc_tcp]
type = tcp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 20010
use_compression = true

[mstsc_udp]
type = udp
local_ip = 127.0.0.1
local_port = 3389
remote_port = 20010
use_compression = true

运行frpc

frpc.exe -c frpc_tcp_udp.ini >> frpc.log

查看frpc的日志frpc.log


image.png

查看frps的日志


image.png

目标主机与代理服务器成功建立TCP和UDP连接

测试远程连接

客户主机打开远程桌面连接,输入IP和端口进行连接106.13.127.200:20010
可以看到成功连接,并且已启用UDP


image.png

3. 其他

关于P2P模式

frp也支持P2P模式,即客户主机和目标主机直接建立连接,理论上会有更好的连接效果。但是由于现实中的网络环境,这种模式可能失败。本人尝试过有失败情况,也有成功情况。可以参考frp文档自行尝试。

关于远程桌面

Windows远程桌面会尝试使用UDP提供更好的效果,所以这里同时配置了TCP和UDP代理。如果希望有更好的效果,可以考虑配置GPU渲染。关于远程桌面的流量和GPU有机会其他文章说明。


总结

  • 使用代理的原因是因为没有公网IP,如果有动态公网IP,可以考虑DDNS实现直连。
  • IPV6可能会有固定的IP,如果有的话也可以尝试IPV6直连。
  • frp的基本功能是流量转发,所以不止远程桌面,内网服务器也可以通过frp对外提供服务。
  • IP访问不太方便,可以绑定域名访问,不过国内域名需要备案。

参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,142评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,298评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,068评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,081评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,099评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,071评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,990评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,832评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,274评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,488评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,649评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,378评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,979评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,625评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,643评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,545评论 2 352

推荐阅读更多精彩内容