150元便携Linux服务器序章:解决无线网络和远程连接问题

上一篇文章中,我们主要介绍了硬件上的选择和组装,服务器已基本搭建完成。在这一篇文章里,我们将再进一步,解决烦人的网络问题和连接问题。

网络连接

虽然847主板自带一个千兆网口,但是由于我们校园网不提供有线宽带,只能用无线网,且有线连接不利于便携,故选择无线连接。该主板不带mini pcie接口,自然得用usb网卡或usb网络共享进行网络连接。于是我开始在各大平台搜索“Linux USB无线网卡”,找到了个性价比还算不错的:

19块能买到双频450M,且支持Linux的usb网卡,这性价比确实没谁了。但是仔细想一想又感觉不对劲,不是说有多贵,只是这网卡都快顶一个u的价格了,这合理吗?不合理。且对于这一个不当NAS和软路由的服务器来说,450M确实有点杀鸡用牛刀的感觉了。作为一名合格的垃圾佬,必须得找到一个价格足够低,性能差不多说得过去的网卡进行替代。

正当我苦苦寻找的时候,我突然想到了我抽屉里那几个还在吃灰的随身WIFI,用这玩意来当无线网卡不正好吗?先别着急否定我的想法,且听我细嗦其优点:

  • 价格实惠。淘宝上的随身WIFI优惠后基本上也就七八块钱(甚至更低),比上面那个网卡便宜了不少,即使没有优惠,也能10块钱拿下。
  • 可刷openwrt系统,可玩性高。
  • 本身就是一个独立的微型手机,后续若不当网卡,还可以刷入debian系统当一台超小型服务器。

说完优点再谈谈一些不足:

  • 发热量大,功耗高。晓龙410处理器的随身WIFI普遍有发热量大的问题,若不做好散热,可能导致WIFI速率下降,断流甚至随身WIFI过热重启的问题。至于功耗高,其实只是相对而言的,实际待机功耗不超过1w,不必过于担心带不动之类的。
  • 网速慢。连接速率只有150M,且实际跑得更低。至于有多低,后面会讲。

(下为原本样貌,上为改散热后的样子)

(背面)

即使是这样,我依然认为这是解决无线网络不错的方法。下面我们进入实际操作环节。

WIFI棒刷入openwrt:本次刷机使用的刷机包为酷安大佬@苏苏小亮亮 提供的openwrt刷机包(链接地址:查看链接),至于随身WIFI刷机的教程,bilibili和酷安上一搜就有,我也会在下篇文章中进行大致描述,这期由于篇幅限制就不说了(才…才不是因为我懒呢!),就从刷完openwrt后开始说起。

将刷好机后的棒子插入电脑,待其启动完成后在浏览器输入192.168.1.1(不同刷机包可能会有不同,按实际来填)。

密码和账户均为root

高级配置

网络-无线,移除原有的配置后,点击“保存并应用”

点击“扫描”,选择对应的wifi

加入网络

在WPA秘钥处填入wifi密码即可。但是!我们校园网使用的是WPA2-Enterprise认证,也就是要输入账号和密码的,没办法,只能硬着头皮随便填几个数上去先。“提交”后,点击“无线安全”,可以选择wifi的加密方式。然鹅,不幸的是,竟然没有WPA2-EAP认证方式(也就是平时校园网的登录方式)!!!

为什么呢?这是因为我们所使用的openwrt固件自带的无线功能不支持企业网。为了连上校园网,就需要下载支持校园网认证的程序包。我们先打开手机热点让棒子连上网(连接热点前记得将刚才添加的网络移除并保存,否则可能会造成棒子重启)

系统-软件包-更新列表,等待更新完成

点击“已安装”,在筛选器中搜索“wpad-basic”,将其移除。(这里搜不到是因为我以前已经移除了)

然后点击“可用”,搜索“wpad”,点击安装,等待安装完成。

之后,我们再添加网络(记得移除已连接的热点),可以发现已经可以选择WPA2-EAP认证了!(若还是没有,可尝试将棒子重启)

之后,EAP类型选择“PEAP”,身份验证选择“EAP-MSCHAPv2”,输入自己的账号密码,点击保存,就可以连上网了!!对了,简单测试下网络速度如何。

root@OpenWrt:~# speedtest
Retrieving speedtest.net configuration...
Testing from China .........
Retrieving speedtest.net server list...
Selecting best server based on ping...
Hosted by China Telecom (Shanghai) [337.12 km]: 34.298 ms
Testing download speed................................................................................
Download: 11.74 Mbit/s
Testing upload speed......................................................................................................
Upload: 12.77 Mbit/s

(这是棒子上测到的速度)

(共享给电脑测到的速度)

10Mbps的下行和13Mbps的上行….可以说拉胯到极致了,也就看看1080p视频的级别,还好不是给主力机用,不然我会疯掉的。补充一下:若是刷入Debian系统也是可以共享网络的,而且速度比openwrt快不少,大约是30Mbps的下行,只不过没法连接企业认证的校园网,于是就刷了openwrt….再补充一点,这速度对于小型服务器来说其实也够用了,答个小网站之类的完全没问题,人家1Mbps上行的小型云服务器还不是用得香饽饽……

(我目前使用的云服务器,只有1Mbps带宽,但是一年只要37块钱可真香)

接下来要做的事,就是把随身WiFi插在847主板上,就可以实现网络共享了。为了美观,我还买了个usb延长线将其安装在盒子内,再用热熔胶简单固定,大功告成!

11月8日补充:其实各平台上那些个位数价钱的usb网卡普遍都是rtl8188的方案,虽然商家为了挣钱不会写上“免驱”,但在Linux下打上驱动后基本上都能正常使用,而且体积超小,很适合放在便携服务器上,也算是一种解决方案。只不过问题还是很明显,一是速率极低,基本上也只能跑到10Mbps;二是稳定性和兼容性堪忧,我前后买了3个rtl8188方案的网卡,其中一个在win下免驱,在linux下死活打不上驱动,还有一个虽然能用,但稳定性极差,时不时就掉网卡,只有一个是能正常使用的。只能说,如果不想像我一样没事找事的话,还是不要整这些花活,毕竟便宜的东西实际上并不便宜。

远程控制

我们都知道,服务器一般是通过ssh进行连接并控制的,而要想使用ssh连接,就必须要知道服务器的ip地址。若是公网ip,则不论在内外网都可直接进行连接;若是内网ip,我们只能在局域网下直接通过ip连接,要想在外网连接则要麻烦得多。自然,校园网是不会给我们的设备分配公网ipv4的,要不然我也不会花那么多时间单独拎出来讲。

那么,在内网连接不就行了吗?あまい。首先,我们并没有学校路由器的权限,无法得知设备的ip地址,要知道ip地址,只能接个显示屏在系统里查看,你总不能为了看个ip地址专门带个显示屏吧;其次,学校不开放静态ip地址!要想设置静态ip地址,还要去申请,关键是只有教职工能申请!什么破逼学校校园网,要不是给到500多Mbps的上下行带宽,我高低专门写个博客来骂6月30日,网速降到了不到200M,愤怒喵!所以,内网直接连接的方法几乎不可行。(除非你买个路由器什么的自己再设个内网,但便携性又成了问题)

因此,内网穿透成了从内/外网连接的最优解。下面我将通过3中不同的方法(准确来说是2种方法3种软件)来实现类似校园网这样的复杂网络下的内网穿透。

一 使用樱花映射进行内网穿透

对于MC玩家来说,樱花映射应该并不陌生。但实际上,除了进行MC连接外,樱花映射还可以用来实现远程连接以及本地建站等,樱花映射实际上是基于frp的内网穿透。对于传统的frp,需要一个具有公网ip的服务器,并在上面搭建frps服务,再在本地客户端上安装frpc服务,才能实现内网穿透。但是一个具有公网ip且带宽足够高的服务器是很贵的,单单为此专门去租一个实在划不来。但是,樱花映射为我们提供了server端,我们只需在需要进行内网穿透的本地设备上安装client端,并进行相应设置就可以了,方便快捷。

这类方法进行内网穿透有个很大的优点,就是只用在需要内网穿透的那一个设备上安装服务端就行,不需要在其他连接设备上安装。比如说,我在本地服务器A上使用了frp进行内网穿透,那么不论是电脑B,手机C还是笔记本D,都可以直接通过同一个地址进行远程连接。当然缺点也很明显,就是连接的速度取决于server端的网络速度。樱花映射免费的带宽只有10Mbps,且流量有限制,用完就只能通过签到获取或者购买;若是自己搭建服务端,以国内这个上行带宽价格来看,将是一笔巨额的开销(不是因为我穷而感到“巨额”,而是真的很贵)若是选用国外vps,虽然带宽便宜不少,但是很容易被墙。好在远程ssh连接几乎不吃流量和带宽,要是想用来传输大文件,估计得用后两种方法。介绍完后,我们接下来进行操作(其实sakurafrp帮助文档里已经写得很详细了,我只是再重复一遍而已)。

进入樱花映射官网,注册一个账号,需要花1块钱进行实名认证。

点击“服务”下的软件下载-Linux系统-amd64-复制连接

在我们的本地服务器上输入以下代码(别忘了可以通过连接键鼠和显示器来进行操作)

#使用下面的命令进入 /usr/local/bin 目录
cd /usr/local/bin

# 一般来说只需要使用这条命令:
wget -O frpc <下载地址>

# 如果上面的命令报错,请尝试这条:
curl -Lo frpc <下载地址>

chmod 755 frpc
#设置权限

frpc -v
#查看版本号

这样,本地客户端就已经安装完成了。接下来我们启用服务。回到主页,点击“服务”下的“隧道列表”,再点击“创建隧道”,选择“普通节点(内地)”,把“满载”反选,然后选择一个适合的隧道。

选择“TCP隧道”,填好隧道名,本地IP默认127.0.0.1,本地端口选择SSH,其他可以不动,然后创建。创建成功后,点击“操作”下的“配置文件”,将”-f xxx”这一串复制下来。

接下来回到本地服务器,输入以下代码(若想开机自启,请查阅链接

frpc -f xxxxx:12345 &
#-f xxxxx:12345为你复制的那一段

然后,我们就可以通过ssh进行远程连接了!以finalshell为例

记住所选隧道的地址(如frp-bag.top)及端口(如12345)。

ssh上新建连接,主机填写所选隧道的地址(如frp-bag.top),填好端口、名称、用户名和密码等,就可以远程连接了!

二 通过Zerotier虚拟局域网进行远程连接

使用Zerotier进行内网穿透是实现远程控制的另一种解决方案。关于其具体原理,请参考bilibili up主@韩风talk 的介绍这么良心的开源、内网穿透工具ZeroTier,为啥到你手就不好用了?,还是非常详细的,比我这种半吊子强多了。我这里主要是分享下搭建过程。

首先,去官网进行注册,官网地址。可直接使用谷歌账号,github账号或微软账号注册,推荐微软账号,不用魔法。免费用户可以同时接入25个节点,对于绝大部分人来说绝对够用了,还是比较良心的。

注册完成后,新建一个network,并记住这个ID。

接下来就是在各个平台下载Zerotier软件。Linux系统可直接使用以下命令进行安装

curl -s https://install.zerotier.com | sudo bash

当出现以下这串代码时,说明安装成功。

*** Enabling and starting ZeroTier service...
Synchronizing state of zerotier-one.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable zerotier-one

*** Waiting for identity generation...

*** Success! You are ZeroTier address [ 402790b865 ].

安装成功后,可以使用以下代码将zerotier设为开机自启。(如果没记错的话,他默认就是开机自启来着)

sudo systemctl enable zerotier-one

Windows系统可直接点击链接下载。Android系统可以直接去google play里下载。其他系统也都能在官网找到下载方法。

运行以下代码加入网络

sudo zerotier-cli join xxxxxxxxxxxxxxxx   #xxx这一串替换成你的network id

加入成功会显示

200 join OK

此时,我们回到zerotier central,进入我们刚创建好的network

来到members下

找到我们对应的设备,在auth那里打个钩表示授权,建议给他按个名字,便于管理。授权成功后,zerotier会给设备分一个虚拟ip(在Managed IPs这一栏),我们后面就可以通过这个虚拟ip连接该设备。

Windows端操作更简单,直接在开始界面搜索zerotier。

运行后在左下角会出现zerotier的图标,点击“join new network”后输入network id即可。同样默认开机自启,无需配置。

加入后同样需要去zerotier central进行授权。Android同理,不多赘述。

当配置完成后,就可以进行远程连接了。在ssh里连接待控制设备的虚拟IP,即可成功连接。下面我们来分别测试内/外网连接的效果。内网测试时,将电脑和服务器连至同一校园网进行互ping测试;外网测试时,将服务器连至校园网,手机连流量进行互ping。

内网下,打洞成功,结果如下:

100 packets transmitted, 100 received, 0% packet loss, time 99136ms
rtt min/avg/max/mdev = 6.899/18.613/57.029/9.186 ms

平均延迟18.6ms,已经是人体几乎察觉不到的水平,也没有出现丢包或较大波动。

上/下行速度也很快,能跑满带宽。(瓶颈在随身wifi,不是zerotier的锅)

外网下,打洞失败,走服务器转发,结果非常难看

101 packets transmitted, 83 received, 17.8218% packet loss, time 100305ms
rtt min/avg/max/mdev = 611.697/664.059/1495.878/98.465 ms, pipe 2

平均延迟664ms,且网络波动非常大,丢包率达到17.8%,输指令时能感到明显的卡顿。

上/下行速度也是同样的烂,速度慢波动大,传文件就别想了。

从结果可以看到,要想用得舒服,就必须在打洞成功的前提下才能实现(当然,也可以通过自己搭建Moon节点来提高转发速率的,但是和内网穿透一样,需要一台有公网ip的服务器,传输速率也取决于服务器的带宽,门槛高,感兴趣可以去@韩风talk 那里看看)。对于内网,几乎是100%打洞成功,而对于外网,在国内复杂的网络环境下,想打洞成功并不是一件容易的事情,但是也并不是完全没有办法。其中一个提高打洞成功概率的方法就是开启ipv6。上述测试我都是在仅有ipv4的条件下测得的,下面我们来看看开启ipv6后从外网连接的情况如何。

101 packets transmitted, 101 packets received, 0% packet loss
round-trip min/avg/max = 31.884/49.535/178.190 ms

平均延迟只有不到50ms,没有丢包的情况,基本上接近内网连接的水平。

测网速时出了点小故障,测不出来,结果应该差不了多少。

总之,ipv6对于zerotier连接质量的提升是巨大的,所以若想使用Zerotier,请务必打开ipv6。幸运的是,我们学校校园网有分配ipv6地址,只需要在我们的设备中打开就行,手机使用流量也是会给个动态ipv6地址的。不幸的是,不知道是我设置的原因还是设备问题,我的随身wifi自身能获取ipv6地址,但嗯是不能让lan口获取ipv6地址(7月29日:原因已找到,是校园网的锅,由于校园网下发的ipv6地址是128位前缀的地址,只能够1个设备使用,要想下游设备能够访问ipv6的话,可以通过设置NAT66方法解决,详见链接,不过这样一来下游设备的ipv6就不是公网ip了……)上面ipv6测试结果也是在随身wifi上完成的,导致我连接随身wifi能成功打洞,但连接下面的服务器却不行,估计只能通过ssh连接随身wifi并在里面ssh连接847服务器这样套娃的方法曲线救国了(7月29日:其实更简单的方法是通过zerotier的异地组网功能,实现仅在opwenwrt路由上安装zerotier便可访问路由的下游设备,这样的话就不需要下游设备拥有公网ipv6,当然下面的tailscale也有类似功能)……其实直接用单独的无线网卡就没那么多屁事了,搞得我现在又想去买那个19块的网卡了…..

三 通过tailscale虚拟局域网进行远程连接

与Zerotier相似,tailscale也是通过搭建虚拟局域网的方法实现内网穿透,且原理几乎相同。既然都是同一种穿透方法,为什么还要单独拿出来讲呢?只使用Zerotier不就行了?这是因为很多时候Zerotier连接质量不是很理想,甚至还经常出现被墙的情况,这时候就可以试试tailscale这款软件,也许会给你带来意外的惊喜。当然,也不是说tailscale比Zerotier更好,具体孰好孰坏,那还要看你自己的网络环境。有些时候Zerotier能连上而tailscale就不行,而有些时候则相反。接下来看看如何搭建。

登录tailscale官网进行注册。我奶奶都会,就不详细展开说了。

与Zerotier类似,需要分别下载对应操作系统的软件。

以Linux为例,下载完后出现以下代码

+ [ false = true ]
+ set +x
Installation complete! Log in to start using Tailscale by running:

tailscale up

按提示输入tailscale up后出现

To authenticate, visit:

        https://login.tailscale.com/a/463b2c6d9398

我们将这个链接复制到浏览器中打开后,点击“connect”

授权成功后,回到tailscale网站界面,此时右边出现了我们的设备名称和对应的虚拟ip地址。

同样的方法,在其他设备安装对应的tailscale版本并授权后,提示成功。此时我们可以通过设备虚拟ip地址直接连接设备了!

为了测试连接效果,下面我将其与Zerotier进行对比测试,由于不同地方网络环境不尽相同,结果仅供参考。

首先是内网下的测试。延迟测试结果如下

#zerotier
100 packets transmitted, 100 received, 0% packet loss, time 99136ms
rtt min/avg/max/mdev = 6.899/18.613/57.029/9.186 ms
#tailscale
100 packets transmitted, 100 received, 0% packet loss, time 99135ms
rtt min/avg/max/mdev = 4.910/16.315/85.149/11.348 ms

tailscale平均延迟略小与zerotier,zerotier波动略小于tailscale,但是相差不大,根本感受不出来。

上图为Zerotier,下图为tailscale。下行速率(也就是847主机的上行速率)两者相同,上行速率(也就是847主机的下行速率)zerotier貌似更好一些,也可能是随身wifi发热掉速导致的。

外网下,延迟测试如下(无ipv6)

#Zerotier
101 packets transmitted, 96 received, 4.9505% packet loss, time 100094ms
rtt min/avg/max/mdev = 628.103/675.441/2223.111/169.140 ms, pipe 3
#tailscale
101 packets transmitted, 99 received, 1.9802% packet loss, time 100237ms
rtt min/avg/max/mdev = 219.339/582.272/3187.754/516.499 ms, pipe 4

tailscale平均延迟比zerotier低了近100ms,丢包率也较低,但仍然不容乐观,仍是影响正常使用的水平。其实这主要还是看当地网络环境,我前几天测得tailscale的延迟只有300多,现在就快600了….

资源占用来看,tailscale占用的硬件资源远大于zerotier,不管是内存还是cpu。windows系统这边也是相同情况,tailscale除去gui总内存占用45m,而zerotier只占用了不到8m。对于windows这边动不动都是16G,32G的内存,这点内存占用简直就是九牛一毛,不必担心;但对于内存和性能都很捉急的小型Linux服务器来说,zerotier要友好得多。

从连接的稳定性来看,至少在我测试的网络环境下,不论是内网还是外网,tailscale连接的速度,稳定性都要比zerotier好得多。特别是在断网重连或换网的情况下,tailscale能够在重连后几乎秒连上,而zerotier则需要缓一段时间才能连上,有时候甚至不得不重启才能连上。

尾声

那么,以上就是我关于847主机的网络问题和远程控制问题提供的解决方案了。有关847这张主板的折腾也将告一段落,当然,若以后又有了什么奇怪的点子,我还会出续集进行分享的。

发表评论

隐藏
变装