如何随时随地访问你的“进程”?

引言

你有没有经历过这样的场景------

凌晨一点,你的模型终于跑起来了,预计还要训练六个小时。你心满意足地合上实验室的电脑,骑车回了宿舍。躺在床上刷手机的时候,突然一个念头涌上来:"万一程序崩了呢?"

再或者,你的模型挂在实验室服务器上跑着,终端里 loss 稳步下降,一切看起来岁月静好。你寻思着,难得进度不错,趁导师没找你,偷偷买了张高铁票,和朋友来了一场说走就走的旅行。你在海边吹着风,举起手机拍了张夕阳,心想:"生活,本该如此。"

然后,导师的电话来了。

"在吗?最近进度怎么样了?把最新的工作进展发我看看。"

你的笑容瞬间凝固。

此时你需要做的就是要远程访问到服务器上正在运行的"进程"

这些场景的本质其实是同一个问题:如何随时随地访问你正在运行的"进程"?

本文,我们从最"傻瓜式"的方案聊起,逐步深入到需要一点动手能力的方案。

远程桌面软件方案

用你的轻薄笔记本操作服务器,远程桌面软件是门槛最低的选择------两台设备各装一个客户端,扫码或输入连接码,搞定。

但远程桌面软件这么多,到底该选哪个?它们背后又是怎么工作的?

主流远程软件介绍

csdn说我广告营销,不予通过,这地方就不介绍了

远程软件背后的技术原理

用了这么多远程软件,你有没有想过一个问题:我的电脑明明在家,远程软件是怎么找到它的? 这就涉及到远程软件背后的网络原理了。目前主流的远程连接方式主要有三种:

中继服务器模式(Relay)

这是最常见、也是最"保底"的方式。

工作流程

  1. 电脑 A 和电脑 B 都连接到远程软件厂商的云服务器,保持一条长连接
  2. 当 A 想控制 B 时,A 发送请求到云服务器
  3. 云服务器通知 B:"有人要连你"
  4. B 同意后,A 的键鼠操作通过云服务器转发给 B,B 的画面也通过云服务器回传给 A

本质上,云服务器充当了一个"中间人",帮两台无法直接通信的设备搭了一座桥。这也解释了为什么远程软件需要你注册账号、为什么免费版会限速------因为所有流量都经过厂商的服务器,带宽是要花钱的。

优点

  • 几乎在任何网络环境下都能用(只要能上网就行)
  • 不需要任何网络配置

缺点

  • 延迟较高(数据要绕一圈)
  • 带宽受限于服务器(免费版通常会限速)
  • 隐私依赖厂商(理论上厂商可以看到你的传输内容)
局域网直连模式(P2P / LAN)

如果两台设备在同一个局域网内(比如连着同一个路由器),聪明的远程软件会自动切换到直连模式:

工作流程

  1. A 和 B 仍然先连接到云服务器,交换彼此的局域网 IP 地址
  2. 云服务器告诉 A:"B 的局域网地址是 192.168.1.100"
  3. A 直接通过局域网 IP 连接 B,后续数据不再经过云服务器

这个过程有点像"相亲"------媒人(云服务器)负责介绍,但约会(数据传输)是两个人自己的事。

更进一步,即使两台设备不在同一个局域网,一些软件也会尝试 NAT 打洞(NAT Hole Punching) 来建立 P2P 连接。简单来说,就是让两台设备同时向对方"打招呼",利用 NAT 设备的特性"骗"过路由器,建立直接连接。但 NAT 打洞不是每次都能成功,取决于双方的 NAT 类型。

优点

  • 延迟极低(数据不绕路)
  • 带宽取决于局域网速度(千兆局域网下体验极佳)
  • 不占用厂商服务器资源

缺点

  • 需要两台设备在同一网络,或 NAT 类型允许打洞
  • NAT 打洞有一定失败率

💡 这就是为什么 Parsec 在局域网内体验好------它会优先使用 P2P 直连,把延迟压到最低。

虚拟VPN模式

少数远程软件(以及一些新兴工具如 Tailscale、ZeroTier)采用了另一种思路:不转发流量,而是把两台设备组成一个虚拟局域网

工作流程

  1. 两台设备都安装 VPN 客户端,登录同一个账号
  2. VPN 服务为每台设备分配一个虚拟 IP(如 10.0.0.1、10.0.0.2)
  3. 两台设备之间的通信通过加密隧道传输,就像它们插在同一个路由器上一样

这种模式的好处是不仅仅能远程桌面------你可以通过这个虚拟网络访问对方的任何服务(SSH、HTTP、文件共享等),就像在局域网里一样自由。

优点

  • 不仅限于远程桌面,可以访问任意端口和服务
  • 通常采用端到端加密,安全性较高
  • 配合 NAT 打洞,大部分情况下可以实现 P2P 直连

缺点

  • 配置比传统远程软件稍复杂
  • 需要理解基本的网络概念

实际上,大多数远程软件会同时使用多种模式:优先尝试 P2P 直连,失败了再回退到中继服务器。这就是为什么同一个软件,有时候连接很流畅,有时候又卡得像 PPT------很可能是因为一次走了直连,另一次走了中继。

了解了这些原理之后,你可能会想:远程桌面软件虽然方便,但它本质上是在"操作屏幕"。如果我只是想访问某台机器上的某个服务(比如一个网页、一个 API、 SSH、系统自带远程桌面(RDP) ),有没有更轻量的方式?

接下来我们聊聊内网穿透

内网穿透方案

为什么需要内网穿透?

远程桌面软件很方便,但它有个问题:太重了

想象一下,你只是想在外面访问家里 NAS 上的一个网页管理界面,或者连一下实验室服务器的某个进程,结果你得:

  1. 打开远程桌面软件
  2. 等待连接建立
  3. 看着压缩过的画面
  4. 在"画面里的浏览器"里打开网页
  5. 忍受双重延迟(你的鼠标 → 远程桌面 → 远程浏览器 → 网页)

内网穿透的核心思想很简单:把内网设备的某个端口,映射到一个公网可以访问的地址上

这样你就可以直接在浏览器里访问家里电脑,服务器上的服务,不需要远程桌面,不需要看"画中画"。


托管内网穿透服务

如果你不想折腾服务器,有一些现成的内网穿透服务可以用------它们帮你搭好了公网服务器,你只需要在本地运行一个客户端,就能把端口映射出去。

csdn说我广告营销,不予通过,这地方就不介绍了

自建内网穿透

托管服务虽然方便,但有几个问题:

  1. 带宽受限:免费版通常只有 1-2Mbps,传个文件都慢
  2. 域名不稳定:免费版的域名经常变,不适合长期使用
  3. 隐私顾虑:流量经过第三方服务器,理论上可以被监控
  4. 费用不低:如果要高带宽 + 固定域名,付费版一年要几百块

如果你有一定的动手能力,自己买个云服务器搭建内网穿透是更好的选择------一台最便宜的云服务器一年也就几十块,带宽完全由你掌控,域名也是你自己的。

目前最流行的自建内网穿透工具是 frp(fast reverse proxy)

为什么选择 frp?
  • 开源免费:GitHub 上 8 万+ star,社区活跃
  • 功能强大:支持 TCP、UDP、HTTP、HTTPS 等多种协议
  • 配置简单:两个配置文件就能跑起来
  • 性能优秀:Go 语言编写,资源占用低

frp 的架构很简单:

  • frps(server):运行在有公网 IP 的云服务器上,负责接收外网请求
  • frpc(client):运行在内网设备上,负责把本地端口的流量转发给 frps

购买云服务器

首先你需要一台有公网 IP 的云服务器。国内主流的云服务商有:阿里云,腾讯云,华为云等等,找一个便宜有优惠的购买即可,系统可以选择linux或windows。

部署 frps(服务端)

假设你买了一台云服务器,IP 是 123.45.67.89,系统是 Ubuntu。

1. 下载 frp

bash 复制代码
# SSH 登录到云服务器
ssh root@123.45.67.89

# 下载 frp(以 0.52.3 版本为例,去 GitHub 查看最新版本)
wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz

# 解压
tar -zxvf frp_0.52.3_linux_amd64.tar.gz
cd frp_0.52.3_linux_amd64

2. 配置 frps

编辑 frps.toml(新版本使用 TOML 格式):

toml 复制代码
# frps.toml
bindPort = 7000  # frp 服务监听端口
auth.token = "your_secret_token"  # 认证密钥,客户端需要用这个连接

# HTTP 穿透配置
vhostHTTPPort = 8080  # HTTP 服务监听端口

# HTTPS 穿透配置(可选)
vhostHTTPSPort = 8443

# Dashboard(可选,用于查看连接状态)
webServer.addr = "0.0.0.0"
webServer.port = 7500
webServer.user = "admin"
webServer.password = "admin123"

⚠️ 安全提示

  • auth.token 一定要改成一个复杂的随机字符串,不要用默认值
  • Dashboard 的密码也要改掉
  • 如果不需要 Dashboard,可以不配置

3. 启动 frps

bash 复制代码
# 前台运行(测试用)
./frps -c frps.toml

# 后台运行(推荐)
nohup ./frps -c frps.toml > frps.log 2>&1 &

4. 配置防火墙

确保云服务器的安全组/防火墙开放了以下端口:

  • 7000(frp 通信端口)
  • 8080(HTTP 穿透端口)
  • 7500(Dashboard 端口,可选)

在阿里云/腾讯云的控制台 → 安全组规则 → 添加入站规则。


部署 frpc(客户端)

现在回到你的内网设备(比如实验室的电脑),假设你想把本地的服务(8888 端口)穿透出去。

1. 下载 frp

bash 复制代码
# 下载(版本要和服务端一致)
wget https://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz
tar -zxvf frp_0.52.3_linux_amd64.tar.gz
cd frp_0.52.3_linux_amd64

2. 配置 frpc

编辑 frpc.toml

toml 复制代码
# frpc.toml
serverAddr = "123.45.67.89"  # 你的云服务器 IP
serverPort = 7000
auth.token = "your_secret_token"  # 和服务端一致


# 穿透服务
[[proxies]]
name = "jupyter"
type = "http"
localIP = "127.0.0.1"
localPort = 8888
customDomains = ["jupyter.yourdomain.com"]  # 你的域名,或者用 IP 访问

# 如果没有域名,可以用 subdomain(会自动生成 subdomain.服务器IP.nip.io)
# subdomain = "jupyter"

# 也可以穿透 SSH(可选)
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000  # 外网通过 123.45.67.89:6000 访问你的 SSH

3. 启动 frpc

bash 复制代码
# 前台运行(测试用)
./frpc -c frpc.toml

# 后台运行
nohup ./frpc -c frpc.toml > frpc.log 2>&1 &

配置域名(可选但推荐)

如果你有自己的域名(比如 yourdomain.com),可以配置一个子域名指向你的云服务器:

  1. 在域名服务商(阿里云、腾讯云、Cloudflare 等)添加 DNS 记录:

    复制代码
    类型: A
    主机记录: jupyter
    记录值: 123.45.67.89
  2. 等待 DNS 生效(通常几分钟)

  3. 现在访问 http://jupyter.yourdomain.com:8080,就能访问到内网的 Jupyter Lab 了

💡 如果没有域名怎么办?

可以直接用 IP + 端口访问:http://123.45.67.89:8080

或者使用 nip.io 这样的通配符 DNS 服务:

toml 复制代码
customDomains = ["jupyter.123.45.67.89.nip.io"]

访问 http://jupyter.123.45.67.89.nip.io:8080 即可。


完整的访问流程

现在整个链路是这样的:

复制代码
外网的你
    ↓
http://jupyter.yourdomain.com:8080
    ↓
云服务器 123.45.67.89:8080 (frps)
    ↓
内网设备的 frpc
    ↓
localhost:8888 (Jupyter Lab)

你在外面访问 http://jupyter.yourdomain.com:8080,实际上访问的是内网设备的 localhost:8888


3.4 其他自建方案

除了 frp,还有一些其他的自建内网穿透工具:

工具 特点 适合场景
nps 国产,有 Web 管理界面 需要图形化管理多个客户端
rathole Rust 编写,性能极高 追求极致性能
Cloudflare Tunnel Cloudflare 官方,免费 已经在用 Cloudflare

到这里,内网穿透的方案就讲完了。你可能会问:这些方案都挺通用的,但对于大学生和研究生来说,有没有更简单的办法?

有的。如果你在校园网环境下,其实有一个天然的优势------接下来我们聊聊如何用好你的校园网

下面是第四部分的扩写版本,语气偏技术博客成稿,可直接接到你前面的文章里。


四、用好你的校园网:大学生/研究生专题

如果说家庭宽带的典型形态是"一个公网出口 + 一个家庭路由器 + 一组私有内网设备",那么校园网更像是一个规模巨大的、由学校统一管理的"园区级局域网"。

对大学生和研究生来说,这一点非常重要:很多时候,你并不需要一开始就上内网穿透,也不一定需要把服务暴露到公网。只要你的设备处在校园网内部,或者你能通过校园 VPN 回到校园网内部,就可能直接访问实验室服务器、宿舍电脑、NAS、Jupyter Lab、SSH、code 服务、Web 服务等。

这也是"用好校园网"的核心:不要把校园网只理解成上网入口,而要把它理解成一个可被利用的受控内网环境。

校园网的网络特性

校园网不是简单的 Wi-Fi,而是一个大型受控网络

很多人第一次接触校园网时,只把它当作"学校的 Wi-Fi"。但从网络结构上看,校园网通常包括有线网络、无线网络、认证系统、核心交换机、出口网关、防火墙、VPN 网关、DNS/DHCP 服务以及不同院系、宿舍、实验室之间的子网划分。

在这种结构下,连接到校园网的设备通常会获得一个由学校分配的 IP 地址。这个地址可能是:

地址类型 常见形式 含义 是否能被公网直接访问
私有 IPv4 地址 10.x.x.x172.16.x.x---172.31.x.x192.168.x.x 只在内部网络中有意义 通常不能
共享地址/运营商级 NAT 地址 100.64.x.x---100.127.x.x 常用于运营商或大规模 NAT 场景 通常不能
公网 IPv4 地址 非上述私有/共享段 理论上可被公网路由 还取决于学校防火墙
IPv6 地址 2001:240e:2408: 等开头 可能具有端到端可达性 取决于防火墙和策略

这里要特别注意两个地址段。RFC 1918 明确定义了三类 IPv4 私有地址空间:10.0.0.0/8172.16.0.0/12192.168.0.0/16;这些地址可以在一个组织内部重复使用,私有主机可以与同一组织内部的其他主机通信,但不能直接作为公网地址在互联网中路由。(IETF Datatracker) 另外,100.64.0.0/10 是 RFC 6598 为 Shared Address Space 保留的地址段,常用于运营商级 NAT 或类似大规模地址转换场景,也不是普通意义上的公网地址。(IETF Datatracker)

所以,当你在校园网中看到自己的设备 IP 是 10.x.x.x172.16.x.x 时,不应该立刻认为"这个地址没用"。恰恰相反,这个地址在校园网内部可能非常有用:它可能允许你从另一台校内设备直接访问当前设备的 SSH、Jupyter Lab、Web 服务或文件共享服务。

校园网内部访问为什么经常比家庭网络更方便?

在家庭网络中,常见结构是:

text 复制代码
公网互联网
   ↓
家庭光猫/路由器
   ↓
192.168.x.x 内网设备

家庭内网设备通常藏在 NAT 后面。外部设备想访问家里的电脑,必须经过公网 IP、端口转发、内网穿透或 VPN 等机制。

而校园网中的很多设备并不是藏在个人路由器后面,而是直接接入学校统一管理的网络。典型结构可能是:

text 复制代码
校园网核心网络
   ├── 实验室服务器:10.12.3.21
   ├── 你的笔记本:10.12.8.55
   ├── 宿舍台式机:10.18.6.30
   └── 院系工作站:10.20.1.88

如果学校网络策略允许这些网段互访,那么你在图书馆、实验室、宿舍连接校园网时,就可以像访问局域网设备一样访问这些机器。例如:

bash 复制代码
ssh user@10.12.3.21

或者访问某个 Web 服务:

text 复制代码
http://10.12.3.21:8888

关键不是"它有没有公网 IP",而是 "访问者和被访问者是否都处在校园网的可路由范围内"


校内访问:把校园网当作"研究基础设施"

校内访问的基本条件

想要在校内直接访问某台设备,通常需要同时满足四个条件:

条件 说明 常见问题
目标设备有校园网 IP 例如 10.x.x.x172.16.x.x、公网 IPv4 或 IPv6 设备接在了二级路由器后面,只拿到 192.168.x.x
目标服务正在运行 如 SSH、Jupyter、HTTP、RDP、VNC 服务没有启动,或端口不对
服务监听在可访问地址上 不能只监听 127.0.0.1 本机能访问,别人访问不了
防火墙/校园策略允许访问 操作系统防火墙、实验室网关、学校 ACL 都可能拦截 ping 不通、端口不通、连接超时

这里最容易被忽视的是第三点:服务监听地址

很多服务默认只监听本机回环地址:

text 复制代码
127.0.0.1

这意味着它只允许本机访问。即使你的电脑有校园网 IP,其他设备也无法访问这个服务。

如果你希望校内其他设备访问它,就需要让服务监听在:

text 复制代码
0.0.0.0

或者明确绑定到你的校园网 IP,例如:

text 复制代码
10.12.8.55

以 Jupyter Lab 为例,如果它只运行在:

text 复制代码
http://localhost:8888

那么只有这台机器自己能访问。若要让同一校园网内的其他设备访问,后续可以配置为:

bash 复制代码
jupyter lab --ip=0.0.0.0 --port=8888

然后在另一台校内设备上访问:

text 复制代码
http://10.12.8.55:8888

当然,这样做之前必须设置密码或 token,并确认防火墙策略,否则会带来安全风险。

很多人都用anaconda管理python环境及版本,此处我用jupyter lab举一个简单的例子,演示如何用校园网服务:

首先,在一个大电脑(比如服务器,或者你宿舍的台式机),打开你的anaconda navigator,启动jupyter服务(注意,在此之前,尽量将你的jupyter服务改成密码访问并配置成局域网内可访问)

jupyter服务一般在8888端口,然后,拿到你的校园网IP,macos,windows,linux均可在网络详情中找到IP地址(ipv4地址):

假设你的ip是10.111.11.111,此时开放设备8888端口的防火墙,那么,你另一个校园网设备(比如你带到图书馆的ipad或者华为笔记本)就可以通过在网页输入:http://10.111.11.111:8888,访问到设备上的jupyter服务:

如何查看自己的校园网 IP?

在不同系统中,可以用下面的方法查看当前设备的 IP。

Windows:

powershell 复制代码
ipconfig

重点查看类似下面的字段:

text 复制代码
IPv4 地址 . . . . . . . . . . . . : 10.12.8.55
默认网关 . . . . . . . . . . . . : 10.12.8.1

macOS:

bash 复制代码
ifconfig

或者更简洁地查看 Wi-Fi IP:

bash 复制代码
ipconfig getifaddr en0

Linux:

bash 复制代码
ip addr

或者:

bash 复制代码
hostname -I

如果看到的地址是 10.x.x.x172.16.x.x 或学校分配的其他内网地址,那么它很可能只在校园网内有效。如果你在另一台也连接校园网的设备上访问这个 IP,就有可能直接连通。

校外访问:通过校园 VPN 回到"校内"

VPN 的本质:不是"加速器",而是"虚拟接入校园网"

很多同学习惯把 VPN 理解成"翻墙工具"或"加速器",但在校园网场景中,VPN 更准确的含义是:让你的校外设备通过加密隧道接入学校内部网络

从网络路径上看,它大致是这样:

text 复制代码
你在校外的电脑
   ↓ 加密 VPN 隧道
校园 VPN 网关
   ↓ 校园内部路由
实验室服务器 / 校内资源 / 图书馆数据库 / Jupyter 服务

Cisco 对远程访问 VPN 的解释是:远程设备通过互联网建立加密隧道,从而访问组织内部网络资源;Microsoft 也将 VPN 描述为利用互联网连接,并结合隧道和数据加密技术来连接远程客户端与内部网络。(Cisco)

因此,校园 VPN 的关键作用不是"把你的服务发布到公网",而是"把你的访问设备临时放回校园网里"。

校园 VPN 的常见形式

不同学校的 VPN 系统不完全相同,但常见形式包括:

类型 典型表现 特点
SSL VPN / Web VPN 浏览器登录后访问校内网站资源 使用方便,适合图书馆数据库、校内系统
客户端 VPN 安装 EasyConnect、AnyConnect、OpenVPN、WireGuard 等客户端 能访问更多内网服务,如 SSH、Jupyter、远程桌面
分应用代理 只代理指定校内系统 安全边界更细,但不适合访问自建服务
全局隧道 VPN 所有流量都经过学校 VPN 管理简单,但可能影响网速
分流隧道 VPN 只有校内网段走 VPN,普通互联网流量仍走本地网络 更高效,但路由配置更复杂

国内高校中较常见的一类是基于 SSL VPN 的远程接入方案,例如深信服的 EasyConnect/SSL VPN。深信服官方将 EasyConnect 描述为一种安全远程访问方案,用于从不同设备访问 Windows 桌面和应用;其 SSL VPN 方案则通过 SSL VPN 网关,让远程用户建立 VPN 隧道并访问企业内部 Web 资源和应用。(Sangfor Technologies)

在高校环境中,这类系统通常会和统一身份认证系统绑定,例如学号、工号、统一身份认证密码、短信验证码、动态口令或多因素认证。具体入口和权限范围需要以学校网络中心或信息化办公室的说明为准。

特殊情况:你的设备接在"子局域网"里

很多宿舍或实验室会自己接一个路由器。此时网络结构可能变成:

text 复制代码
校园网
   ↓
宿舍/实验室路由器
   ↓
你的电脑:192.168.1.100

这种情况下,你的电脑并没有直接获得校园网 IP,而是获得了路由器分配的家庭式私有 IP。它访问校园网通常没有问题,因为访问方向是:

text 复制代码
你的电脑 → 路由器 NAT → 校园网

但反过来,校园网中的其他设备想访问你的电脑就会困难,因为它们只能看到你的路由器,而看不到路由器后面的 192.168.1.100

这和家庭网络非常类似。解决办法通常有几种:

方案 说明 适合程度
把设备直接接入校园网 让设备获得校园网 IP 最简单、最推荐
路由器设置端口转发 (最常见,最简单的解决办法) 将路由器某端口转发到内网设备 可行,但需要路由器管理权限
使用桥接/AP 模式 让设备直接从校园网获取 IP 适合宿舍路由器

如果你的目标是让校园网内其他设备访问你的电脑,那么"设备是否直接获得校园网 IP"非常关键。一个简单判断方法是:查看电脑 IP。如果是学校网段,如 10.x.x.x 或学校分配的公网/IPv6 地址,通常更容易被校内访问;如果是 192.168.0.x192.168.1.x 这类地址,则大概率在二级路由器后面,需要额外配置。

看到这里,想必你已经成了一个网络高手,下次再也不用担心出去玩被导师找喽~

相关推荐
ting94520001 小时前
告别无效学习:Scholé 如何用 AI 重构职场学习,让学习直接嵌入工作流
人工智能·学习·重构
格林威1 小时前
3D相机视觉检测:环境光太强,结构光点云全是噪点怎么办?
开发语言·人工智能·数码相机·计算机视觉·3d·视觉检测·工业相机
医工交叉实验工坊1 小时前
GPT生成WB条带效果,真假难辨
人工智能
xrui581 小时前
2026实测:让 Gemini 3.1镜像站抓取邮箱并智能分类,GTD 效率提升 3 倍
人工智能·分类·数据挖掘
yyuuuzz1 小时前
aws 基础认知与实践注意点
运维·服务器·网络·云计算·github·aws
wuxinyan1231 小时前
大模型学习之路004:RAG 零基础入门教程(第一篇):基础理论与文档处理流水线
人工智能·学习·rag
小何code1 小时前
人工智能【第10篇】支持向量机SVM:寻找最优分类超平面(长文+代码实现)
人工智能·机器学习·支持向量机
晨启AI2 小时前
GPT-5.5 来了!OpenAI 最新提示词指南深度解读
大数据·人工智能·ai·提示词
wayz112 小时前
Day 18 编程实战:Keras搭建MLP神经网络
人工智能·神经网络·keras