19、【Ubuntu】【远程开发】技术方案分析:远程桌面

【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除

背景

上篇 blog
【Ubuntu】【远程开发】技术方案分析:私网ip掩码

局域网 IP 中掩码的相关概念,下面继续

远程开发

之前 blog 【Ubuntu】【远程开发】技术方案分析:公私网ip 说了,想要远程连接办公,得有个公网 IP ,相当于寄快递时,快递上得有收货的街道地址,基于这个点,下面来对比一些技术方案:远程桌面,VPN,内网穿透

远程桌面

一种应用层协议(如 Windows 的远程桌面,开源的 VNC、向日葵,RustDesk 等),允许在一个设备上直接操作另一台设备的图形化桌面,就像坐在那台电脑前一样

远程桌面的操作一般如下

  • 目标电脑先开启 远程桌面服务,或者远程控制软件需要先点击接受远程 之类的设置选项

  • 控制端通过 IP + 端口连接(对于 Windows 的远程桌面)

    或者对于一些远程控制软件,点击发起远程 之类的设置选项

  • 然后就可以使用了,传输的直接是屏幕画面,用的是鼠标键盘指令,就像在家里操作电脑一样

前提是目标电脑必须有公网 IP(共享的也行,不需要独立 IP,只要能上网就行 ) 或在同一局域网 内,否则无法直接连接,核心目的是远程操作电脑的桌面

下面说下这类工具的基本原理,这类工具的连接过程大致可以分为下面三个步骤

一、被控端(目标电脑)主动连接中继服务器

  • 当在目标电脑上打开远程桌面控制软件并登录账号时(点击发起远程),软件会主动向远程服务提供商的公网服务器发起一个出站连接
  • 这个连接从内网到外网,不受网络地址转换 NAT 限制(内网设备访问外网服务器是允许的)
  • 连接建立后,远程服务器就知道,用户 A 的设备(比如 ID: ABC123)已上线,可通过这个连接与其通信

这里的关键点在于连接是由内网设备主动发起的,绕过了外网无法访问内网的限制

二、控制端也连接同一中继服务器

当在外地用电脑打开同样的远程桌面软件,点击远程连接 ABC123 时,电脑也会连接到同一个远程中继服务器,这里服务器就知道用户 A 想要控制设备 ABC123,而且 ABC123 也已经在线

三、中继服务器牵线搭桥

远程中继服务器不会直接发送操作指令设备 ABC123,而是处理中继转发,将远端的控制请求通过已建立的连接转发给内网的被控端,被控端收到指令后执行操作,并将屏幕画面压缩后,通过同一个连接发回给中继服务器,服务器再将画面数据转发回本地电脑

一些高级工具,比如 RustDesk,会尝试进行 P2P 打洞直连 ,这种方式需要 NAT 类型允许,双方设备会协商出一个直接通信的路径,绕过中继服务器,获得更低延迟的连接,如果打洞失败(比如在对称型 NAT 下),则退回到中继模式

可以看到,在公网环境下 ,远程桌面采用的是类似内网穿透的技术

内网穿透的几个核心要素:

  • 内网设备无法被外网直接访问
  • 需要一个公网服务器作为中介
  • 内网设备主动连接公网服务器
  • 外部用户通过服务器间接访问内网
  • 实现外网对内网服务的访问

远程桌面这里是:

  • 目标电脑在 NAT 后,共享公网 IP,ping 不通,端口无法被扫描
  • 远程桌面的中继服务器,有固定公网 IP
  • 被控端开机后可以远程连接中继服务器,建立长连接隧道
  • 控制端通过中继服务器找到并连接被控端,数据经服务器中继
  • 最终实现从外网远程操作内网电脑的桌面

内网穿透是一种技术类别或目标:让外网能访问内网服务,SSH 反向隧道,frp,向日葵、RustDesk、远程桌面等都是实现内网穿透的具体工具或方案,区别在于:

  • 使用的协议(SSH、自定义 TCP/UDP、WebRTC 等)
  • 是否支持 P2P 直连
  • 是否开源,是否免费
  • 用户体验,是图形化,还是命令行

其底层思想基本一致:内网主动连接,借助公网跳板,实现反向访问

ok,先到这里,下篇 blog 继续

相关推荐
A小辣椒9 小时前
TShark:Wireshark CLI 功能
linux
A小辣椒13 小时前
TShark:基础知识
linux
AlfredZhao15 小时前
OCI 明明分配了 200G 系统盘,为什么 df 只看到 30G?
linux·oci
AlfredZhao1 天前
vi 删除指定范围的行,不用再反复按 dd
linux·vi
用户9718356334661 天前
银河麒麟 KY10 申威(SW64) 安装 nginx-1.16.1-2.p01.ky10.sw_64.rpm 详细步骤
linux
猪脚踏浪2 天前
linux 拷贝文件或目录到指定的位置
linux
大树882 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠2 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质2 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush42 天前
嵌入式linux学习记录十四、术语
linux·嵌入式