CS狗一枚,几乎每天都需要携带电脑。最近感觉轻薄本性能不太够用,但是游戏本又太厚太重、散热续航也不太行,于是想到在寝室部署一台台式机,然后远程访问计算资源的方案。考虑到校网拓扑的复杂以及供电等原因,最近先进行了一些理论验证,并成功组建了一个个人网络以及一些个人网络服务。以下是过程的简单记录。


一、路由器的必要性与选购

在ZJU,寝室要想访问外网,只有两个方案——学校的WiFi或者有线网VPN拨号。考虑到ZJUWLAN严重的丢包问题,以及时不时被踢下需要重新验证的问题,我毫不犹豫地选择了有线网。

但是由于学校的另一条规定——每个VPN账号只能在一台电脑上登录,而我手上的需要联网的设备远不止两台,因此路由器的出现就很有必要了。

使用路由器的另一个好处是如果VPN掉线会自动重新拨号,在之后的服务搭建中,虚拟服务器功能也起到了极大的作用。因此路由器是非常必要的。

至于选购的话,其实只要支持L2TP即可,不过最近很多家用路由器都取消了这个功能,所以采购的时候还是留点心为好,至少不要以为所有路由器都支持这玩意。

二、网络拓扑的设计以及IP地址的获取

1. 有线连接与无线连接的选择

寝室需要一直联网的设备:

  • Windows电脑一台
  • 树莓派3b+

这两个设备均采用有线连接,特别是Windows电脑,因为RDP需要传输图像,并且出于鲁棒性考虑同时也连接了无线网,以免出现有线网卡莫名出故障导致无法访问的意外

树莓派连有线是因为需要高带宽,毕竟作为下载机(校内P2P下载)

当我回到寝室时,可能iPhone和小米都要联网,以及我的kindle和Ubuntu笔记本

这些设备直接使用无线网连接好了,毕竟连接外网的带宽也就12Mbps,有线网带宽可谓是绰绰有余

2. 不使用DMZ的原因

  1. 不安全,直接把某一台电脑的所有端口直接暴露在外网中是一件极其危险的事情
  2. DMZ只能转发请求到一台设备,但是我的Windows和Pi都需要跑服务,各自有不同的端口需要转发,这是DMZ不支持的

因此,我选择使用虚拟服务器进行配置

3. 虚拟服务器实现端口转发

目前需要的服务:

服务端口号
Windows上的RDP3389
Windows上WSL中的Jupyter Lab8080
Windows上WSL的SSH22
Pi上的FTP21
Pi上的BT下载监控9091
Pi上的Web服务8080
Pi上的SSH22

将相应端口进行分别转发即可

对于Windows上Lab和Pi上Web等端口相同的问题,直接在外网设置不同的端口,再分别转发即可,甚至出于安全考虑,更加推荐避免内外端口一致,以防闲的没事的人(暗指某室友)突然访问你的各种服务……(当然他要是知道了我的IP还是可以一个端口一个端口逐个扫描……)

好在他并不知道我的IP,甚至如果我在外面的话,自己都不太方便知道自己的IP……

这就引出了下面的重磅话题——

4. 查看IP地址的方法

不要问我为什么不申请固定IP……(手慢无 被申请完了……)

另外申请的固定IP其实是比公网IP低一级的,而对于我这种直接通过VPN拨号访问外网的用户,即使申请到了固定IP也是没法用到L2TP拨号中的,因为我是直接连到学校总对外网关上的,跳过了宿舍网关这一层(这也导致直接通过宿舍有线网是无法ping通我的)

同时,每次路由器掉线重拨后,IP地址都会变。这就令人十分窒息,因为有时候就算早上出门前瞅一眼路由器的IP,中午的时候它可能就又变了……

于是就有了以下几种可能的方案:

1. 在大致的网段范围内逐个扫描

效率多低、多慢就不用说吧……

2. 定时推送最新IP

推送的方式有无数种,如QQ、微信、邮件等,此处不赘述

对于推送的时间,之前设想的是每天早上上电之后推送,但是现在发现IP居然可以一日多变……

半小时一推的话,如果IP变化恰好处在了06:30:19之类的时间,那就干等半小时吧

5min一推怕是跟骚扰信息一样……

比较好的方案应该是5min获取一次IP,然后跟上次的比对,如果不同再推送

但是

如何获取IP呢?

不要以为这个问题很简单,如果你试着ifconfig的话,会发现得到的是自己小网络里面的ip……

如果用网上给出的方法,用爬虫爬一些IP查询网站,会发现给你的是公网IP,而不是学校网关分配给你的那个……

哦豁!

我目前的想法是,直接爬虫登录路由器管理页面,然后找出里面的IP信息……

如果有更好的方案,请让我知道,谢谢

3. 内网穿透

域名我是有的,构建的流程也基本上清楚,但是如果内网的IP总是在变的话,也没法穿透……

3. 直接使用路由器厂商的外网管理服务

最简单粗暴,但是最有效

于是我就选了这个最没有技术含量的方案……(太菜了没办法……)

能找到寝室路由器(或者叫网关更贴切)后,就可以开始下面的各项工作了

三、远程桌面服务的配置

Win10专业版可以直接开启RDP

Win10家庭版可以通过GItHub上的开源工具(https://github.com/stascorp/rdpwrap )开启RDP,但是不太稳定(每次连接前需要使用工具手动开启一下)

server机的缩放最好设为100%,不然client机连接之后可能会出现菜单显示很奇怪的问题

四、Jupyter Lab的配置

跑在Windows主机下的WSL中,因为Windows下开发环境实在是太难配置了

当然,如果之后的使用中发现WSL有明显的性能损失的话,不排除还是会回归纯Linux

四、基于树莓派的下载机

1. Aria2

主要用于普通链接的下载

2. Transmission BT下载机

主要用于HND上面的校内BT资源下载


目前这套方案运作良好,如果之后有改进会在后续文章中介绍