[实用工具] 如何优雅实现校园网远程访问
写在前面
注意!Windows远程访问向来是高频网络攻击对象,如需使用远程访问请务必根据自己网络环境来配置方案,设置强口令,变更端口,并做好网络防护。数据无价!
背景
经常有时候我们需要远程访问电脑来处理事务,常规的网络中可以通过一些简单的手段即可实现远程访问,但在校园网的特殊环境下远程访问较为困难,而使用ToDesk等软件画质延迟都不尽人意。在经过几番摸索后,形成了这套较为完善的校园网远程访问方案,可以较为优雅的实现校园网下的远程访问。下面正式开始!
异地组网
一般情况来说,直接使用Windows远程访问需要被访问主机和当前主机在同一网络下,或者被访问主机有公网地址。然而在远程情况下加上公网地址的申请难度都不太现实,因此就需要一种技术能够将两台异地的电脑拉到同一个网络中,这就是异地组网技术。
异地组网软件本质上是使用服务提供商的服务器对客户端进行内网穿透,再将终端的网络地址广播给其他设备,并与分配给客户端的虚拟地址做映射,实现异地的设备如同处在同一个网络中可以任意通信。常见的异地组网软件有蒲公英、zerotier、tailscale等,经测试对比,tailscale使用体验较好且免费套餐完全足够使用。
对于Windows客户端:
- 首先到tailscale官网下载客户端对应的安装包。
- 安装好后在Windows右下角右键图标登录账号。
- 在网页登录页面选择账号的种类,建议选择Microsoft账号登录,这样设备无需额外配置即可直接进行组网。
- 网页登录账号后加入网络即可,此时在客户端右键即可看到当前设备以及网络设备的信息。
对于Linux客户端则按照官方教程即可。此处注意,在使用命令sudo tailscale up
启动tailscale之后会在命令行中显示一个url,可以复制该url在浏览器中打开登录相同账号进行组网。设备的认证只与该url有关,这就意味着可以通过ssh远程连接的方式为Linux服务器配置异地组网,只需要复制链接在任意主机的浏览器中打开认证即可。
在终端安装客户端并认证之后即可通过客户端或者管理网页查看其他设备的虚拟ip地址。如果当前主机和目标主机在同一网络中则可以通过该虚拟ip地址来进行远程访问了。
至此,还远没有结束。为什么上面需要强调“同一网络”呢?异地组网技术不就是为了将不同网络的设备拉到一个虚拟局域网中吗?是但不完全是,虽然在软件里,不同设备逻辑上已经处于同一个网络中,但是设备之间访问是P2P方式的,如果两个设备网络并不互通依然无法访问~例如当前主机在校园网外,目标主机在校园网内(这也是远程访问的主要场景之一),由于校园网防火墙存在,即便组网也无法直接P2P通信。这时候可以启用校园网VPN软件,稍等片刻两台主机大概率便能互通了。即,异地组网软件实现了逻辑上的组网,而VPN承当了实际的通信。
使用校园VPN+异地组网软件已经能实现90%以上时间的互通了。但是!由于异地组网软件的穿透能力各不相同,开启VPN后实际穿透成功时间长短不一,甚至同一款软件在不同时间的测试中穿透时间都不同,短则几分钟,长则几十分钟。经测试,zerotier穿透能力较tailscale更强,tailscale大概率会出现校外不可用的情况。在这套方案下,处在校外时,能否穿透成功就只能完全交给软件了,你什么都做不了~那么有没有其他办法能补足这点呢?有的!这就需要端口映射了。
端口映射
由于IPv4地址资源较为稀缺,如果IP地址分完了,新来的设备没有IP就完全不能上网,为了解决这个问题,NAT(网络地址转换)技术应运而生。NAT即是将IP报文头中的IP地址通过一定的规则转换为其他的地址。我们的电脑一般是连接到路由器上,分配的地址一般为192.168.x.x
的保留地址,而路由器的WAN口为上一级网络分配的IP地址,路由器内部的设备想把数据发出去就需要路由器对内部数据包中的地址转换为上一级网络的地址,经过层层转换最终到达目标主机实现上传,而下载则是相反的过程。由于NAT技术我们很难更改,而我们又想要访问子网中的设备的某项服务,此时就可以通过端口映射的方式将子网的服务端口A映射到上一级网络的端口B,这样我们直接访问上一级网络的端口B即可映射到子网设备中的端口A,此即端口映射。
以我校的网络情况来说,终端设备通过网络接入校园网即可分配到校园网网段的IP地址。因此设备通过路由器接入网络只需要在路由器设置端口映射即可实现校园网IP访问子网设备。配置方法如下:
- 进入路由器后台(需要搞到路由器的后台IP及密码)
- 在路由器设置中配置IP与MAC绑定(端口映射是映射的IP地址,因此需要内网IP固定)
- 在端口映射(有些路由器叫虚拟服务器)中配置外部端口(随便)和内部端口(3389是Windows远程桌面协议的默认端口)以及IP地址,协议选ALL。
至此端口映射配置完成。现在通过校园网分配给路由器的IP地址和自己设置的端口即可实现远程访问了。
但此时又出现了新的问题,怎么获取路由器的WAN口地址呢?WAN口地址变了怎么办呢?别慌,有办法!此时就需要DDNS(动态域名解析)技术了。
动态域名解析
DDNS(动态域名解析)服务和DNS服务基本一样,都是用于解析域名为IP地址,区别在与DDNS可以实现实时更新与域名关联的IP地址,说人话就是比DNS解析更快,更适合IP频繁变的场景。这里我们的需求是用一个固定的域名来替换频繁变更的路由器IP地址,并用DDNS服务将两者关联起来。具体操作如下:
- 找一个网站搞一个最好是免费的DDNS域名,这里我使用的是dynv6不仅可以解析IPv4地址,对IPv6地址的支持也比较好。
- 注册好之后选一个心仪的域名即可,记下该域名,假设是
my_domain
- 现在需要将路由器IP绑定到这个域名上,这里可以在路由器下的设备上安装DDNS-GO软件实现,这是一款开源的域名解析客户端,同时可以获取IPv4IPv6地址,此处贴上仓库地址。
- 下载并按照教程安装后,通过浏览器打开
127.0.0.1:9876
地址进行配置。 - DNS服务商选择Callback,其中URL栏根据dynv6官方文档进行配置。例如我的配置URL为
https://dynv6.com/api/update?hostname=#{domain}&token=my_token&ipv4=#{ip}
其中my_token
字段换为你自己的token即可。 - 下方勾选IPv4,选择通过接口获取,并在Domains栏填入你申请的域名。
配置完后打开终端,Ping你申请的域名,如果IP地址和路由器IP对应则配置成功。
至此配置完成,此时在校外访问校内的主机就可以通过校园VPN+域名的方式直接连接而无需使用异地组网了。此时你或许会有疑问,那为什么还需要异地组网呢?因为很多设备路由器上一级并不能直接分配到校园网IP地址,那么直接端口映射也没用了,因为上一级网络依然在内网中~,此时就不得不用异地组网方案了。
因此整套方案用VPN+异地组网保障基本的远程访问,针对一层NAT的设备用端口映射+DDNS的方式作为补充提升连接稳定性。
远程访问工作流及一站式管理
- 首先,所有需要远程访问的设备需要通过异地组网软件完成异地组网。
- 对于校外主机访问校内主机的场景需要启动校园网VPN来实现通信。
- 对于单层NAT的主机可以通过开启VPN并使用域名:端口的方式直接访问,作为异地组网的补充。
异地组网软件在完成组网操作后,每个设备分配的IP地址是不会变的,同时对于单层NAT的设备还可以使用域名:端口的方式直接访问,虽然这些IP或域名都可以通过管理面板直接获取,但在设备数量较多时如果管理远程连接依然较为繁琐。这里可以使用1Remote
软件来对所有远程访问设备进行管理,可以对RDP、SSH、VNC、Telnet、FTP、Serial、SFTP几乎所有远程访问协议进行统一管理。
同时,针对设备,软件还可以添加备用地址。对于单层NAT设备,我们除了使用域名:端口访问外还可以将异地组网的虚拟IP作为备选地址,在域名解析失效的情况下保障连接。
一些注意事项
- 校园网环境下,异地组网软件有概率会穿透失败,其中tailscale大概率会失败,zerotier有概率成功,但整体使用体验tailscale更好。
- DDNS域名解析可能会不太稳定,有时候会解析不到IP,推荐使用大厂稳定的DDNS服务。
- 异地组网之后用法不限于远程桌面,诸如挂载网络磁盘、P2P文件同步备份、游戏串流效果都不错~
- 校园网分配的IP地址虽然是公网IP,但受限于防火墙,基本是个虚假的公网IP,出了校园网并没有什么用~
- 如果没有IPv4地址可以尝试使用IPv6地址,现在运营商基本上都支持动态IPv6,但同第4点,有些虽然有IP,但依然只是摆设,具体可用性需要自己探究。
- 以上方案仅对个人网络环境有效,具体方案需要依据网络情况灵活调整~