美文网首页
Docker安装frp实现远程桌面连接

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

作者: WenjinYu | 来源:发表于2022-05-15 02:03 被阅读0次

    [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访问不太方便,可以绑定域名访问,不过国内域名需要备案。

    参考

    相关文章

      网友评论

          本文标题:Docker安装frp实现远程桌面连接

          本文链接:https://www.haomeiwen.com/subject/igcvurtx.html