1 目的

FRP+RDP+云服务器,实现win10远程桌面控制。

2 环境

服务器:腾讯云,2核2G4M,ubuntu22.04 LTS
控制端:win10专业版笔记本电脑
被控端:win 10专业版台式电脑

3 方法步骤

3.1 服务器设置

3.1.1 购买云服务器

我购买的是腾讯云的2核2G4M服务器,安装的是ubuntu 22.04。

3.1.2 frps配置

  1. 登陆ubuntu系统,设置root密码(以下命令默认root下执行):

    sudo passwd root #初始化密码
    su # 进入root权限
    
  2. 安装systemd:

    #使用 yum 安装 systemd(CentOS/RHEL)
    yum install systemd
    #使用 apt 安装 systemd(Debian/Ubuntu)
    apt install systemd
    
  3. 配置frps:
    ① 去GitHub下载frp:
    下载地址https://github.com/fatedier/frp;其中根据自己的系统选择不同的版本,ubuntu22.04选择frp_0.61.0_linux_amd64.tar.gz版本
    ② 创建安装文件夹:

    #进入/usr/local
    cd /usr/local
    #创建FRP文件,并进入
    mkdir FRP
    cd FRP
    #给与文件读写权限
    sudo chmod 777 文件路径
    

    ③ 安装frps:
    先将下载的frp文件上传到FRP文件夹内,进行以下操作:

    #解压文件
    tar -zxvf frp_0.61.0_linux_amd64.tar.gz
    #进入解压后的文件
    cd frp_0.61.0_linux_amd64
    #打开frps.toml配置文件并修改
    vi frps.toml
    

    进入后按“I”进行编辑,按’ESC"后输入":wq"保存退出

    frps.toml文件的配置如下

    bindAddr = "0.0.0.0" #服务端监听的 IP 地址,0.0.0.0表示监听所有网络接口
    bindPort = 6000 #指定 FRP 服务端的监听端口,客户端将通过这个端口连接到 FRP 服务端
    
    vhostHTTPPort = 28080 #指定虚拟主机 HTTP 服务监听的端口 
    webServer.addr = "0.0.0.0" #指定 FRP Web UI(管理界面)的绑定地址
    webServer.port = 7500 #指定 FRP Web UI 的端口号,可以通过 7500 端口访问管理界面,可以设置成别的
    webServer.user = "admin" #Web UI 登录所需的用户名,自由设置
    webServer.password = "admin" #Web UI 登录所需的密码,自由设置
     
    log.to = "/frpslog/frps.log" #指定日志输出的文件路径
    log.level = "info" #日志的记录级别,info 表示记录一般的信息
    log.maxDays = 3 #设置日志文件保留的天数,超过 3 天的日志文件将被自动删除
     
    auth.method = "token" #指定认证方式,token 表示客户端和服务端通过 Token 进行身份认证
    auth.token = "abcdefg" #Token 用于客户端和服务端的身份认证,自由设置
     
    allowPorts = [
        { start = 6000, end = 7000}, #定义允许客户端使用的端口范围,客户端可以使用 6000 到 7000 之间的端口进行映射
    ]
    

    保存退出。

    ④ 配置frps.service文件:
    先将下载的frp文件上传到FRP文件夹内,进行以下操作:

    #进入文件
    cd /etc/systemd/system
    #创建frps.service文件进行配置
    vi frps.service
    

    frps.service文件的配置如下

    [Unit]
    Description = frp server # 服务名称,可自定义
    After = network.target syslog.target
    Wants = network.target
     
    [Service]
    Type = simple
    #启动frps的命令,学修改为frps的安装路径
    ExecStart = /usr/local/FRP/frp_0.61.0_linux_amd64/frps -c /usr/local/FRP/frp_0.61.0_linux_amd64/frps.toml
     
    [Install]
    WantedBy = multi-user.target
    

    保存退出!

    ⑤ 云服务器防火墙开放端口:
    协议选择TCP,允许的端口须包括frps.toml中的:bindPort、vhostHTTPPort、webServer.Port、allowPorts端口。

    ⑥ frps的相关命令:

    # 启动frp
    sudo systemctl start frps
    # 停止frp
    sudo systemctl stop frps
    # 重启frp
    sudo systemctl restart frps
    # 查看frp状态
    sudo systemctl status frps
    # 设置frps开机自启动
    sudo systemctl enable frps
    

    ⑦ 如果frps状态如下,则证明其配置成功:
    在这里插入图片描述
    也可以通过访问:http://云服务器ip地址:webServer.port端口查看frps情况在这里插入图片描述

3.2 虚拟组网后进行远程控制(流量走服务器):

3.2.1 控制端配置:

① 下载frp软件:同样的去GitHub下载frp软件,因为我的控制端和被控端都是Win10专业版,所以均使用frp_0.61.0_windows_amd64版本。后将压缩文件解压到你想安frp的位置即可。

② 编辑frpc.toml配置文件,具体配置如下:

[common]
#true代表启用 TLS 加密连接
tls_enable = true
#指定 FRP 服务器的 IP 地址,即服务器公网IP
server_addr = "xxx.xxx.xxx.xxx"
#指定 FRP 服务器的端口号,与frps.toml的bindPort相同
server_port = 6000 
#连接到服务器时使用的身份验证令牌,与frps.toml的token相同
token = "abcdefg"

#具体的服务映射,RDP是名称,可以自定义
[RDP_HOST]
#传输协议类型,tcp 表示使用 TCP 协议来转发流量
type = tcp
#本地监听的 IP 地址,0.0.0.0 表示客户端在所有网络接口上监听本地服务
local_ip = 0.0.0.0
#本地服务的端口号,3389 是 Windows 远程桌面协议(RDP)使用的端口号
local_port = 3389 
#值介于服务器端allowPort之间,远程服务器上监听的端口
remote_port = 6790     

3.2.2 被控端配置:

① 同理下载frp软件。

② 编辑frpc.toml配置文件,具体配置如下:

[common]
#true代表启用 TLS 加密连接
tls_enable = true
#指定 FRP 服务器的 IP 地址,既服务器公网IP
server_addr = "xxx.xxx.xxx.xxx"
#指定 FRP 服务器的端口号,与frps.toml的bindPort相同
server_port = 6000 
#连接到服务器时使用的身份验证令牌,与frps.toml的token相同
token = "abcdefg"

#具体的服务映射,RDP是名称,可以自定义
[RDP_LAPTAP]
#传输协议类型,tcp 表示使用 TCP 协议来转发流量
type = tcp
#本地监听的 IP 地址,0.0.0.0 表示客户端在所有网络接口上监听本地服务
local_ip = 0.0.0.0
#本地服务的端口号,3389 是 Windows 远程桌面协议(RDP)使用的端口号
local_port = 3389 
#值介于服务器端allowPort之间,远程服务器上监听的端口
remote_port = 6630    

3.2.3 执行frpc.exe进行连接:

frpc.exe文件下,进入cmd,执行:

frpc -c frpc.toml

如果看到如下结果,证明连接服务器成功:
在这里插入图片描述
也可以通过访问:http://云服务器ip地址:webServer.port端口查看frps情况
在这里插入图片描述

3.2.4 使用windows自带的远程桌面连接(RDP)进行桌面控制:

通过服务器公共ip:被控端端口号(本文中为xxx.xxx.xxx.xxx:6630)进行连接即可。

3.3 P2P内网穿透远程控制(流量不走服务器):

在以上基础上,修改被控端和控制端的ftsc.toml文件即可。

3.3.1 控制端ftsc.toml配置:

#true代表启用 TLS 加密连接
tls_enable = true
#指定 FRP 服务器的 IP 地址,即服务器公网IP
server_addr = "xxx.xxx.xxx.xxx"
#指定 FRP 服务器的端口号,与frps.toml的bindPort相同
server_port = 6000 
#连接到服务器时使用的身份验证令牌,与frps.toml的token相同
token = "abcdefg"

#具体的服务映射,RDP是名称,可以自定义
[RDP_HOST]
#传输协议类型,tcp 表示使用 TCP 协议来转发流量
type = tcp
#本地监听的 IP 地址,0.0.0.0 表示客户端在所有网络接口上监听本地服务
local_ip = 0.0.0.0
#本地服务的端口号,3389 是 Windows 远程桌面协议(RDP)使用的端口号
local_port = 3389 
#值介于服务器端allowPort之间,远程服务器上监听的端口
remote_port = 6790   

[p2p_ssh_visitor1]
type = stcp
#要访问的 P2P 代理的名称
server_name = p2p_rdp_stcp
secretKey = 123456
#绑定本地端口以访问 SSH 服务
bind_addr = 127.0.0.1
bindPort = 4001
# 如果需要自动保持隧道打开,将其设置为 true
keepTunnelOpen = true
use_encryption = true
use_compression = true

[p2p_ssh_visitor2]
type = xtcp
#要访问的 P2P 代理的名称
server_name = p2p_rdp_xtcp
secretKey = 123456
#绑定本地端口以访问 SSH 服务
bind_addr = 127.0.0.1
bindPort = 4002
# 如果需要自动保持隧道打开,将其设置为 true
keepTunnelOpen = true
use_encryption = true
use_compression = true

3.3.2 被控端ftsc.toml配置:

[common]
#true代表启用 TLS 加密连接
tls_enable = true
#指定 FRP 服务器的 IP 地址,既服务器公网IP
server_addr = "xxx.xxx.xxx.xxx"
#指定 FRP 服务器的端口号,与frps.toml的bindPort相同
server_port = 6000 
#连接到服务器时使用的身份验证令牌,与frps.toml的token相同
token = "abcdefg"

#具体的服务映射,RDP是名称,可以自定义
[RDP_LAPTAP]
#传输协议类型,tcp 表示使用 TCP 协议来转发流量
type = tcp
#本地监听的 IP 地址,0.0.0.0 表示客户端在所有网络接口上监听本地服务
local_ip = 0.0.0.0
#本地服务的端口号,3389 是 Windows 远程桌面协议(RDP)使用的端口号
local_port = 3389 
#值介于服务器端allowPort之间,远程服务器上监听的端口,当远程用户通过 121.63.43.152:6789 访问时,FRP 会将流量转发到客户端本地的 3389 端口
remote_port = 6630  

# 名称需与被控端的server_name一致
[p2p_rdp_stcp]
type = stcp
# 只有共享密钥 (secretKey) 与服务器端一致的用户才能访问该服务
secretKey = 123456
localIP = 127.0.0.1
localPort = 3389

# 名称需与被控端的server_name一致
[p2p_rdp_xtcp]
type = xtcp
# 只有共享密钥 (secretKey) 与服务器端一致的用户才能访问该服务
secretKey = 123456
localIP = 127.0.0.1
localPort = 3389

3.3.3 使用windows自带的远程桌面连接(RDP)进行桌面控制:

通过ftsc.toml的bind_addr:ftsc.toml的bindPort(本文中为127.0.0.1:4002)进行连接即可。

4 总结:

  1. frp的P2P并不是所有类型的NAT都能穿透,比如我的校园网(防hack)就不行,使用皎月连虚拟组网也失败了。具体可参考:frp udp p2p打洞内网穿透net,xtcp点对点直连win远程桌面,速度超快的高性能内网穿透
  2. 在鸭大的无线校园网下,使用经服务器中转和P2P两种方式均未成功;在服务器及客户端连接手机热点下,仅服务器中转的成功,但P2P方式仍然失败(似乎是运营商限制?);
  3. 据说将远程端口3389暴露在外很危险,我这里没有深究,有兴趣的可自行了解;
  4. 我最终是采用了ipv6的RDP远程控制。

5 参考:

  1. frp文档
  2. 【超详细】使用FRP、阿里云服务器实现内网穿透连接远程桌面
  3. frp教程-小标快跑
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐