如何随时随地访问你的“进程”?
引言你有没有经历过这样的场景——凌晨一点你的模型终于跑起来了预计还要训练六个小时。你心满意足地合上实验室的电脑骑车回了宿舍。躺在床上刷手机的时候突然一个念头涌上来“万一程序崩了呢”再或者你的模型挂在实验室服务器上跑着终端里 loss 稳步下降一切看起来岁月静好。你寻思着难得进度不错趁导师没找你偷偷买了张高铁票和朋友来了一场说走就走的旅行。你在海边吹着风举起手机拍了张夕阳心想“生活本该如此。”然后导师的电话来了。“在吗最近进度怎么样了把最新的工作进展发我看看。”你的笑容瞬间凝固。此时你需要做的就是要远程访问到服务器上正在运行的进程这些场景的本质其实是同一个问题如何随时随地访问你正在运行的进程本文我们从最傻瓜式的方案聊起逐步深入到需要一点动手能力的方案。远程桌面软件方案用你的轻薄笔记本操作服务器远程桌面软件是门槛最低的选择——两台设备各装一个客户端扫码或输入连接码搞定。但远程桌面软件这么多到底该选哪个它们背后又是怎么工作的主流远程软件介绍csdn说我广告营销不予通过这地方就不介绍了远程软件背后的技术原理用了这么多远程软件你有没有想过一个问题我的电脑明明在家远程软件是怎么找到它的这就涉及到远程软件背后的网络原理了。目前主流的远程连接方式主要有三种中继服务器模式Relay这是最常见、也是最保底的方式。工作流程电脑 A 和电脑 B 都连接到远程软件厂商的云服务器保持一条长连接当 A 想控制 B 时A 发送请求到云服务器云服务器通知 B“有人要连你”B 同意后A 的键鼠操作通过云服务器转发给 BB 的画面也通过云服务器回传给 A本质上云服务器充当了一个中间人帮两台无法直接通信的设备搭了一座桥。这也解释了为什么远程软件需要你注册账号、为什么免费版会限速——因为所有流量都经过厂商的服务器带宽是要花钱的。优点几乎在任何网络环境下都能用只要能上网就行不需要任何网络配置缺点延迟较高数据要绕一圈带宽受限于服务器免费版通常会限速隐私依赖厂商理论上厂商可以看到你的传输内容局域网直连模式P2P / LAN如果两台设备在同一个局域网内比如连着同一个路由器聪明的远程软件会自动切换到直连模式工作流程A 和 B 仍然先连接到云服务器交换彼此的局域网 IP 地址云服务器告诉 A“B 的局域网地址是 192.168.1.100”A 直接通过局域网 IP 连接 B后续数据不再经过云服务器这个过程有点像相亲——媒人云服务器负责介绍但约会数据传输是两个人自己的事。更进一步即使两台设备不在同一个局域网一些软件也会尝试NAT 打洞NAT Hole Punching来建立 P2P 连接。简单来说就是让两台设备同时向对方打招呼利用 NAT 设备的特性骗过路由器建立直接连接。但 NAT 打洞不是每次都能成功取决于双方的 NAT 类型。优点延迟极低数据不绕路带宽取决于局域网速度千兆局域网下体验极佳不占用厂商服务器资源缺点需要两台设备在同一网络或 NAT 类型允许打洞NAT 打洞有一定失败率这就是为什么 Parsec 在局域网内体验好——它会优先使用 P2P 直连把延迟压到最低。虚拟VPN模式少数远程软件以及一些新兴工具如 Tailscale、ZeroTier采用了另一种思路不转发流量而是把两台设备组成一个虚拟局域网。工作流程两台设备都安装 VPN 客户端登录同一个账号VPN 服务为每台设备分配一个虚拟 IP如 10.0.0.1、10.0.0.2两台设备之间的通信通过加密隧道传输就像它们插在同一个路由器上一样这种模式的好处是不仅仅能远程桌面——你可以通过这个虚拟网络访问对方的任何服务SSH、HTTP、文件共享等就像在局域网里一样自由。优点不仅限于远程桌面可以访问任意端口和服务通常采用端到端加密安全性较高配合 NAT 打洞大部分情况下可以实现 P2P 直连缺点配置比传统远程软件稍复杂需要理解基本的网络概念实际上大多数远程软件会同时使用多种模式优先尝试 P2P 直连失败了再回退到中继服务器。这就是为什么同一个软件有时候连接很流畅有时候又卡得像 PPT——很可能是因为一次走了直连另一次走了中继。了解了这些原理之后你可能会想远程桌面软件虽然方便但它本质上是在操作屏幕。如果我只是想访问某台机器上的某个服务比如一个网页、一个 API、 SSH、系统自带远程桌面RDP 有没有更轻量的方式接下来我们聊聊内网穿透。内网穿透方案为什么需要内网穿透远程桌面软件很方便但它有个问题太重了。想象一下你只是想在外面访问家里 NAS 上的一个网页管理界面或者连一下实验室服务器的某个进程结果你得打开远程桌面软件等待连接建立看着压缩过的画面在画面里的浏览器里打开网页忍受双重延迟你的鼠标 → 远程桌面 → 远程浏览器 → 网页内网穿透的核心思想很简单把内网设备的某个端口映射到一个公网可以访问的地址上。这样你就可以直接在浏览器里访问家里电脑服务器上的服务不需要远程桌面不需要看画中画。托管内网穿透服务如果你不想折腾服务器有一些现成的内网穿透服务可以用——它们帮你搭好了公网服务器你只需要在本地运行一个客户端就能把端口映射出去。csdn说我广告营销不予通过这地方就不介绍了自建内网穿透托管服务虽然方便但有几个问题带宽受限免费版通常只有 1-2Mbps传个文件都慢域名不稳定免费版的域名经常变不适合长期使用隐私顾虑流量经过第三方服务器理论上可以被监控费用不低如果要高带宽 固定域名付费版一年要几百块如果你有一定的动手能力自己买个云服务器搭建内网穿透是更好的选择——一台最便宜的云服务器一年也就几十块带宽完全由你掌控域名也是你自己的。目前最流行的自建内网穿透工具是frpfast reverse proxy。为什么选择 frp开源免费GitHub 上 8 万 star社区活跃功能强大支持 TCP、UDP、HTTP、HTTPS 等多种协议配置简单两个配置文件就能跑起来性能优秀Go 语言编写资源占用低frp 的架构很简单frpsserver运行在有公网 IP 的云服务器上负责接收外网请求frpcclient运行在内网设备上负责把本地端口的流量转发给 frps购买云服务器首先你需要一台有公网 IP 的云服务器。国内主流的云服务商有阿里云腾讯云华为云等等找一个便宜有优惠的购买即可系统可以选择linux或windows。部署 frps服务端假设你买了一台云服务器IP 是123.45.67.89系统是 Ubuntu。1. 下载 frp# SSH 登录到云服务器sshroot123.45.67.89# 下载 frp以 0.52.3 版本为例去 GitHub 查看最新版本wgethttps://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gz# 解压tar-zxvffrp_0.52.3_linux_amd64.tar.gzcdfrp_0.52.3_linux_amd642. 配置 frps编辑frps.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# 前台运行测试用./frps-cfrps.toml# 后台运行推荐nohup./frps-cfrps.tomlfrps.log214. 配置防火墙确保云服务器的安全组/防火墙开放了以下端口7000frp 通信端口8080HTTP 穿透端口7500Dashboard 端口可选在阿里云/腾讯云的控制台 → 安全组规则 → 添加入站规则。部署 frpc客户端现在回到你的内网设备比如实验室的电脑假设你想把本地的服务8888 端口穿透出去。1. 下载 frp# 下载版本要和服务端一致wgethttps://github.com/fatedier/frp/releases/download/v0.52.3/frp_0.52.3_linux_amd64.tar.gztar-zxvffrp_0.52.3_linux_amd64.tar.gzcdfrp_0.52.3_linux_amd642. 配置 frpc编辑frpc.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 访问你的 SSH3. 启动 frpc# 前台运行测试用./frpc-cfrpc.toml# 后台运行nohup./frpc-cfrpc.tomlfrpc.log21配置域名可选但推荐如果你有自己的域名比如yourdomain.com可以配置一个子域名指向你的云服务器在域名服务商阿里云、腾讯云、Cloudflare 等添加 DNS 记录类型: A 主机记录: jupyter 记录值: 123.45.67.89等待 DNS 生效通常几分钟现在访问http://jupyter.yourdomain.com:8080就能访问到内网的 Jupyter Lab 了如果没有域名怎么办可以直接用 IP 端口访问http://123.45.67.89:8080或者使用 nip.io 这样的通配符 DNS 服务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 管理界面需要图形化管理多个客户端ratholeRust 编写性能极高追求极致性能Cloudflare TunnelCloudflare 官方免费已经在用 Cloudflare到这里内网穿透的方案就讲完了。你可能会问这些方案都挺通用的但对于大学生和研究生来说有没有更简单的办法有的。如果你在校园网环境下其实有一个天然的优势——接下来我们聊聊如何用好你的校园网。下面是第四部分的扩写版本语气偏技术博客成稿可直接接到你前面的文章里。四、用好你的校园网大学生/研究生专题如果说家庭宽带的典型形态是“一个公网出口 一个家庭路由器 一组私有内网设备”那么校园网更像是一个规模巨大的、由学校统一管理的“园区级局域网”。对大学生和研究生来说这一点非常重要很多时候你并不需要一开始就上内网穿透也不一定需要把服务暴露到公网。只要你的设备处在校园网内部或者你能通过校园 VPN 回到校园网内部就可能直接访问实验室服务器、宿舍电脑、NAS、Jupyter Lab、SSH、code 服务、Web 服务等。这也是“用好校园网”的核心不要把校园网只理解成上网入口而要把它理解成一个可被利用的受控内网环境。校园网的网络特性校园网不是简单的 Wi-Fi而是一个大型受控网络很多人第一次接触校园网时只把它当作“学校的 Wi-Fi”。但从网络结构上看校园网通常包括有线网络、无线网络、认证系统、核心交换机、出口网关、防火墙、VPN 网关、DNS/DHCP 服务以及不同院系、宿舍、实验室之间的子网划分。在这种结构下连接到校园网的设备通常会获得一个由学校分配的 IP 地址。这个地址可能是地址类型常见形式含义是否能被公网直接访问私有 IPv4 地址10.x.x.x、172.16.x.x—172.31.x.x、192.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/8、172.16.0.0/12和192.168.0.0/16这些地址可以在一个组织内部重复使用私有主机可以与同一组织内部的其他主机通信但不能直接作为公网地址在互联网中路由。(IETF Datatracker) 另外100.64.0.0/10是 RFC 6598 为 Shared Address Space 保留的地址段常用于运营商级 NAT 或类似大规模地址转换场景也不是普通意义上的公网地址。(IETF Datatracker)所以当你在校园网中看到自己的设备 IP 是10.x.x.x或172.16.x.x时不应该立刻认为“这个地址没用”。恰恰相反这个地址在校园网内部可能非常有用它可能允许你从另一台校内设备直接访问当前设备的 SSH、Jupyter Lab、Web 服务或文件共享服务。校园网内部访问为什么经常比家庭网络更方便在家庭网络中常见结构是公网互联网 ↓ 家庭光猫/路由器 ↓ 192.168.x.x 内网设备家庭内网设备通常藏在 NAT 后面。外部设备想访问家里的电脑必须经过公网 IP、端口转发、内网穿透或 VPN 等机制。而校园网中的很多设备并不是藏在个人路由器后面而是直接接入学校统一管理的网络。典型结构可能是校园网核心网络 ├── 实验室服务器10.12.3.21 ├── 你的笔记本10.12.8.55 ├── 宿舍台式机10.18.6.30 └── 院系工作站10.20.1.88如果学校网络策略允许这些网段互访那么你在图书馆、实验室、宿舍连接校园网时就可以像访问局域网设备一样访问这些机器。例如sshuser10.12.3.21或者访问某个 Web 服务http://10.12.3.21:8888关键不是“它有没有公网 IP”而是“访问者和被访问者是否都处在校园网的可路由范围内”。校内访问把校园网当作“研究基础设施”校内访问的基本条件想要在校内直接访问某台设备通常需要同时满足四个条件条件说明常见问题目标设备有校园网 IP例如10.x.x.x、172.16.x.x、公网 IPv4 或 IPv6设备接在了二级路由器后面只拿到192.168.x.x目标服务正在运行如 SSH、Jupyter、HTTP、RDP、VNC服务没有启动或端口不对服务监听在可访问地址上不能只监听127.0.0.1本机能访问别人访问不了防火墙/校园策略允许访问操作系统防火墙、实验室网关、学校 ACL 都可能拦截ping 不通、端口不通、连接超时这里最容易被忽视的是第三点服务监听地址。很多服务默认只监听本机回环地址127.0.0.1这意味着它只允许本机访问。即使你的电脑有校园网 IP其他设备也无法访问这个服务。如果你希望校内其他设备访问它就需要让服务监听在0.0.0.0或者明确绑定到你的校园网 IP例如10.12.8.55以 Jupyter Lab 为例如果它只运行在http://localhost:8888那么只有这台机器自己能访问。若要让同一校园网内的其他设备访问后续可以配置为jupyter lab--ip0.0.0.0--port8888然后在另一台校内设备上访问http://10.12.8.55:8888当然这样做之前必须设置密码或 token并确认防火墙策略否则会带来安全风险。很多人都用anaconda管理python环境及版本此处我用jupyter lab举一个简单的例子演示如何用校园网服务首先在一个大电脑比如服务器或者你宿舍的台式机打开你的anaconda navigator启动jupyter服务注意在此之前尽量将你的jupyter服务改成密码访问并配置成局域网内可访问jupyter服务一般在8888端口然后拿到你的校园网IPmacoswindowslinux均可在网络详情中找到IP地址ipv4地址假设你的ip是10.111.11.111此时开放设备8888端口的防火墙那么你另一个校园网设备比如你带到图书馆的ipad或者华为笔记本就可以通过在网页输入http://10.111.11.111:8888访问到设备上的jupyter服务如何查看自己的校园网 IP在不同系统中可以用下面的方法查看当前设备的 IP。Windowsipconfig重点查看类似下面的字段IPv4 地址 . . . . . . . . . . . . : 10.12.8.55 默认网关 . . . . . . . . . . . . : 10.12.8.1macOSifconfig或者更简洁地查看 Wi-Fi IPipconfig getifaddr en0Linuxipaddr或者hostname-I如果看到的地址是10.x.x.x、172.16.x.x或学校分配的其他内网地址那么它很可能只在校园网内有效。如果你在另一台也连接校园网的设备上访问这个 IP就有可能直接连通。校外访问通过校园 VPN 回到“校内”VPN 的本质不是“加速器”而是“虚拟接入校园网”很多同学习惯把 VPN 理解成“翻墙工具”或“加速器”但在校园网场景中VPN 更准确的含义是让你的校外设备通过加密隧道接入学校内部网络。从网络路径上看它大致是这样你在校外的电脑 ↓ 加密 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)在高校环境中这类系统通常会和统一身份认证系统绑定例如学号、工号、统一身份认证密码、短信验证码、动态口令或多因素认证。具体入口和权限范围需要以学校网络中心或信息化办公室的说明为准。特殊情况你的设备接在“子局域网”里很多宿舍或实验室会自己接一个路由器。此时网络结构可能变成校园网 ↓ 宿舍/实验室路由器 ↓ 你的电脑192.168.1.100这种情况下你的电脑并没有直接获得校园网 IP而是获得了路由器分配的家庭式私有 IP。它访问校园网通常没有问题因为访问方向是你的电脑 → 路由器 NAT → 校园网但反过来校园网中的其他设备想访问你的电脑就会困难因为它们只能看到你的路由器而看不到路由器后面的192.168.1.100。这和家庭网络非常类似。解决办法通常有几种方案说明适合程度把设备直接接入校园网让设备获得校园网 IP最简单、最推荐路由器设置端口转发最常见最简单的解决办法将路由器某端口转发到内网设备可行但需要路由器管理权限使用桥接/AP 模式让设备直接从校园网获取 IP适合宿舍路由器如果你的目标是让校园网内其他设备访问你的电脑那么“设备是否直接获得校园网 IP”非常关键。一个简单判断方法是查看电脑 IP。如果是学校网段如10.x.x.x或学校分配的公网/IPv6 地址通常更容易被校内访问如果是192.168.0.x、192.168.1.x这类地址则大概率在二级路由器后面需要额外配置。看到这里想必你已经成了一个网络高手下次再也不用担心出去玩被导师找喽
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2583154.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!