内网穿透(校园网)¶
内网穿透方案比较多,我知道的有cpolar、ngrok、frp。cpolar和ngrok都是基于服务商云服务器的内网穿透方案,免费计划一般都没有固定域名,并且受限于官方服务器带宽和延迟,适合临时开放公网服务;而frp需要自己有一台云服务器/VPS,可以通过cloudflare等服务商的DNS实现动态域名解析,比较适合长期使用。Tailscale属于私有局域网建网方案,一般不涉及到公网穿透。
利用tailscale实现内网隔离下的ssh连接¶
Tailscale和ZeroTier类似,应该没有必要同时安装,否则可能造成不必要的资源消耗和潜在的路由冲突问题。
tailscale原理¶
我的理解是,在校园网内另外搭建了一个私有局域网,并打破了正常校园网内的内网隔离(直接ssh/ping均不成功,但tailscale可以)。同一tailscale账户下的设备可以互相访问,而校园网内其他设备无法访问。
原理:通过 协调服务器(Coordination Server) 进行同一账号下的身份验证、公钥分发(屏蔽外界)、IP地址管理,通过 STUN、ICE 等NAT 穿透 (NAT Traversal)技术帮助单一用户的两个设备“打洞”(UDP hole punching),尝试建立 点对点 (Peer-to-Peer, P2P) 的直接 WireGuard(现代高性能VPN) 连接。最理想的情况是P2P连接建立成功,这样数据就直接在两设备间传输而无需中继;但如果由于严格的防火墙或对称 NAT 等原因,NAT 穿透失败,Tailscale 会使用其全球分布的 DERP (Designated Encrypted Relay for Packets) 服务器作为后备中继。数据流量会通过加密的方式经由最近的 DERP 服务器转发。这确保了连接总是可用,但速度会比 P2P 连接慢。
SSH连接及SFTP协议¶
SSH(Secure Shell)是一种网络协议,用于在不安全的网络上安全地访问计算机。它提供了强大的身份验证和加密功能,确保数据在传输过程中不被窃听或篡改。SSH 通常用于远程登录到服务器、执行命令和管理系统。
SFTP(SSH File Transfer Protocol,安全文件传输协议),运行在 SSH 协议之上,通常也使用SSH TCP端口22。与不加密的FTP(File Transfer Protocol)、加密但需要额外端口(如990)的FTPS(FTP over SSL/TLS)相比,SFTP提供了更高的安全性和灵活性。
不过,SFTP 客户端提供的是一个受限的文件传输环境,而不是一个完整的远程 Shell。它只支持 SFTP 协议定义的命令(如 ls
, cd
, get
, put
, mkdir
, rm
等),用于文件操作,不能执行服务器上的任意 Shell 命令(如 sudo
, apt
等)。
tailscale在校园网内的问题¶
被迫中转导致网速慢¶
tailscale局域网搭建成功后,直接正常ssh user@ip
连接即可。但是今天我在尝试xshell-xftp-通过sftp传文件时,发现速度只有200-300kb/s,与连接autodl能达到的10-20MB/s差距很大。速度慢应该是网络问题,而不是服务器的CPU(SFTP,tailscale均需要加密解密)或者磁盘IO的性能问题。在本地服务器上运行tailscale status
,发现使用了DERP中继:
❯ tailscale status
100.80.173.74 chesszyh-thinkpad-x270 Chesszyh@ linux -
100.125.197.43 ipad-9th-gen-wifi Chesszyh@ iOS offline
100.94.212.104 zyh-1 Chesszyh@ linux offline
100.92.91.90 zyh Chesszyh@ windows active; relay "hkg", tx 3591760 rx 41387216 # 不是直接的点对点连接,而是通过Tailscale位于香港 (hkg) 的 DERP 中继服务器进行转发
# Health check:
# - Tailscale can't reach the configured DNS servers. Internet connectivity may be affected.
# 可能无法通过 Tailscale 的 MagicDNS 名称(如 zyh)解析其他 Tailscale 设备,原因可能是校园网阻止了特定的DNS查询。不过,这不会影响直接的 IP 连接。
被迫使用中介服务器而非直连的原因,最有可能是校园网环境限制了 UDP 通信,导致 NAT 穿透失败。校园网网络策略问题除了联系管理员基本无法解决,大文件传输可以考虑用google drive、云服务器,或者干脆用U盘(当然,我并不想带着俩电脑到处跑)。
利用frp实现内网穿透¶
frp client(本地服务器) <-> frp server(云服务器) <-> user client(校园网外设备)
利用Cpolar和ngrok实现内网穿透¶
利用Cloudflare Tunnel实现内网穿透¶
不得不说,Cloudflare真的是赛博菩萨,有那么多免费服务可供白嫖,可惜我探索过的还是冰山一角。
Cloudflare Tunnel是一种无需开放任何端口的较为安全的内网穿透方案,通过Cloudflare的全球网络进行加密和转发。
Cloudflare DNS¶
DNS(Domain Name System) 是互联网的电话簿,将域名转换为IP地址。Cloudflare DNS 是一个公共DNS解析器,提供快速、安全和隐私保护的DNS服务。
仅DNS而不代理,则DNS查询会直接返回IP地址,浏览器会直接连接到目标服务器。
如果启用代理,则Cloudflare会充当中介,所有流量都会经过Cloudflare的服务器进行处理和加密。CF能够隐藏IP,优化、缓存和保护请求,
如果在同一域名上有多个 A/AAAA 记录,并且其中至少有一个是代理的,Cloudflare 将把此名称上的所有 A/AAAA 记录都视为代理的。
但注意,CF代理主要针对Web流量,并不是万能的。比如frp,frp 协议本身不是标准的 HTTP/HTTPS 流量,那么直接通过 Cloudflare 代理这种非标准 TCP/UDP 流量可能会遇到问题,或者需要使用 Cloudflare Spectrum (付费服务) 才能正常工作。
远程桌面连接¶
通常不需要,但毕竟本地服务器是Ubuntu24.04而不是Ubuntu Server,可能有些服务就必须用到图形化界面(ipad也能连接图形化的那种),比如clash-verge需要切换节点的时候。
RealVNC¶
付费软件,效果还可以,全平台通用,但我没钱,所以不考虑
Rustdesk¶
开源免费,官网
原理其实和Tailscal类似,ts的协调服务器(Coordination Server)类似于rustdesk的ID服务器(管理每个rustdesk客户端的ID),不能直连时同样采用中转,但rustdesk允许自定义中转服务器(不知道ts可不可以)。
主要区别是,ts用于创建虚拟的、扁平化的网络(Overlay Network),是多对多模型;rustdesk可以在tailscale已经打好洞的基础上,建立点对点连接。问题是,如果ts用到中继服务器,网速限制可能会显著影响rustdesk远程连接的效果。