-------------20220416更新-------------
更高效便捷的远程桌面访问方案:FRP + NoMachine远程桌面开发指南


硬件配置

  • 内网主机:ubuntu20.04 LTS 桌面版
  • 外网设备:windows笔记本
  • 云服务器:ubuntu20.04 server

FRP内网穿透(远程ssh终端+rdp桌面配置)

使用FRP实现内网穿透的流程很简单,就是位于内网的主机将远程ssh终端和远程rdp桌面的端口映射到云服务器的端口,在外网设备上使用云服务器的公网IP+映射的端口即可访问内网的台式主机,如下图:

rustdesk本地部署 rustdesk 内网_服务器


云服务器配置(frp server)

云服务器带宽要尽量大一些,可以使用腾讯云的轻量应用云服务器,8M带宽,一年也就七十多块。

下载frp

https://github.com/fatedier/frp/releases中下载最新的frp,我的云服务器系统为ubuntu20.04,此时相应的最新版本为frp_0.39.1_linux_amd64.tar.gz

解压frp

tar -xzvf frp_0.39.1_linux_amd64.tar.gz

编辑frps.ini

解压后文件夹中有两类文件,一类以frps开头,表示frp服务端(server)相关文件,另一类以frpc开头,表示frp客户端(client)相关文件。要将云服务器配置为frp服务端,所以要修改frps.ini文件

[common]
bind_port = 7000
bind_addr = 0.0.0.0

dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin

编辑云服务器防火墙规则

在防火墙处允许frp服务端、客户端的端口请求,这里的7000、7500端口是服务端端口,5900映射到客户端的远程rdp桌面端口,2222映射到客户端的远程ssh端口。

rustdesk本地部署 rustdesk 内网_内网穿透_02

启动frp服务端

./frps -c ./frps.ini

在该命令后加&即可在后台运行frp

在本地浏览器中输入公网ip:7500即可登陆frp服务端的dashboard,用户名和密码就是frps.ini中配置的admin

内网主机配置

下载frp

与云服务器一致

编辑frpc.ini

[common]
server_addr = 公网IP地址
server_port = 7000

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

[rdp]
type = tcp
local_ip = 127.0.0.1           
local_port = 5900
remote_port = 5900

启动frp客户端

./frpc -c ./frpc.ini

配置ssh服务端

如果想要使用远程终端,或者使用VScode远程连接内网主机,那就需要用到ssh,ubuntu系统上安装openssh-server即可启动ssh服务:

sudo apt-get install openssh-server

此时在外网设备中打开命令行,输入:

ssh 用户名@公网ip:2222

即可打开内网主机的ssh终端

如果外网设备上安装了vscode,则内网主机的ssh远程配置为:

Host 主机名
  HostName 公网ip
  User 用户名
  Port 2222
  ForwardAgent yes

配置远程桌面

参考:搭建Window10 VNC远程访问ubuntu20.04

使用ss -lnt可查看远程桌面是否开始监听,如果出现以下字符即已开始监听:

LISTEN  0        5                0.0.0.0:5900           0.0.0.0:*

在配置frp客户端时,我们将内网主机的5900端口映射到云服务器的5900端口,这样在外网设备上使用公网ip:5900即可访问内网主机的桌面。

报错处理:Ubuntu 20.04 Xrdp 远程桌面黑屏

参考