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

文章目录

  • 前言
  • 安装
    • 1. 环境
    • 2. 步骤
      • 查看SELinux
      • 查看防火墙
      • 添加端口
      • 安装docker
      • 配置frps
      • 制作镜像
      • 配置目标主机
      • 测试远程连接
    • 3. 其他
      • 关于P2P模式
      • 关于远程桌面
  • 总结
  • 参考


前言

由于没有公网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

selinux

查看防火墙

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

systemctl status firewalld
systemctl start firewalld
systemctl enable firewalld
systemctl status firewalld

status
start
Docker安装frp实现远程桌面连接_第1张图片

添加端口

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

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

Docker安装frp实现远程桌面连接_第2张图片

安装docker

查看docker
docker

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

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

docker

查看docker-ce版本

yum list docker-ce --showduplicates | sort -r

Docker安装frp实现远程桌面连接_第3张图片

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

yum versionlock list
yum versionlock clear

Docker安装frp实现远程桌面连接_第4张图片

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

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

这里直接安装最新版本,等待安装完成
Docker安装frp实现远程桌面连接_第5张图片
Docker安装frp实现远程桌面连接_第6张图片

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

docker -v
systemctl status docker
systemctl enable docker
systemctl start docker
systemctl status docker

Docker安装frp实现远程桌面连接_第7张图片

配置frps

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

mkdir frp && cd frp
chmod +x frps

将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

Docker安装frp实现远程桌面连接_第8张图片

制作镜像

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

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

Docker安装frp实现远程桌面连接_第9张图片

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

docker images

在这里插入图片描述

基于镜像开启容器

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

在这里插入图片描述

查看监听端口是否开启

netstat -anp | grep 200

Docker安装frp实现远程桌面连接_第10张图片

查看容器日志

docker logs -f frps

在这里插入图片描述

目前看来一切正常。尝试访问监控面板。
之前配置端口 dashboard_port = 20001,假设代理服务器IP是106.13.127.200,那么通过 http://106.13.127.200:20001 访问监控面板
正常情况下,会提示输入之前配置的用户和密码,并看到如下页面
Docker安装frp实现远程桌面连接_第11张图片

配置目标主机

代理服务器配置好后,配置目标主机,
关于远程连接的配置这里不做说明,默认已配置好远程连接的参数,只是需要代理服务器中转。
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
在这里插入图片描述

查看frps的日志
在这里插入图片描述

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

测试远程连接

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

3. 其他

关于P2P模式

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

关于远程桌面

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


总结

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

参考

  • frp https://github.com/fatedier/frp
  • frp docker https://hub.docker.com/repository/docker/wenneryu/linux_frps
  • dockerfile https://github.com/WennerYu/frp

你可能感兴趣的:(Linux,docker,frp,linux,centos,远程桌面)