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 继续

相关推荐
Johny_Zhao7 小时前
OpenClaw安装部署教程
linux·人工智能·ai·云计算·系统运维·openclaw
chlk1232 天前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
舒一笑2 天前
Ubuntu系统安装CodeX出现问题
linux·后端
改一下配置文件2 天前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux
碳基沙盒2 天前
OpenClaw 多 Agent 配置实战指南
运维
深紫色的三北六号2 天前
Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
linux·扩容·服务迁移
SudosuBash2 天前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)
哈基咪怎么可能是AI3 天前
为什么我就想要「线性历史 + Signed Commits」GitHub 却把我当猴耍 🤬🎙️
linux·github
十日十行4 天前
Linux和window共享文件夹
linux
木心月转码ing4 天前
WSL+Cpp开发环境配置
linux