网络服务器搭建
随着手机的对性能极度渴求,现在高端ARM架构的芯片早就在性能上完成了对X86的反超,苹果的M1就是一个典型例子。因为大小核的设计以及ARM架构多年在低功耗领域的深耕,M1的轻载待机功耗比你牙膏厂的芯片低,峰值性能还高。在服务器领域,华为的鲲鹏ECS也在华为云商用了,超多核心设计非常适合一些倚重IO性能和吞吐量的场景。现在的ARM架构CPU在生态方面相对比较成熟,很多必要的软件和工具都有ARM64编译的版本。这让ARM服务器可以提供和X86一样丰富的玩法。
树莓派是由树莓派基金会推出的低功耗ARM架构开发板,可以运行完整的Linux发行版系统。我最近买了一个树莓派4b 2G内存的乞丐版来玩,想着先做一个网络存储服务器,带个硬盘,用来下载东西以及提供家庭多媒体串流。价格只要250元,不过在ARM开发板里不算便宜,比如说很多人买的斐讯N1盒子,刷机之后也可以做软路由啊,NAS啊,问题都不大。树莓派强在生态比较完善,不需要太折腾就有着大把最新的Linux发行版可供选择,成熟的社区也可以解决很多问题。而且4b的性能也强于N1,树莓派4b使用的是四核A72架构的CPU,这个架构也就是几年前手机芯片麒麟950上用的大核架构。而斐讯这类的电视盒子用的都是A55架构,这是目前ARM公司的公版小核架构,性能和A72差了一倍左右。
预备用于存储的硬盘
我首先选择了海康威视代理的希捷酷鹰st400vx000,这个硬盘比希捷零售的酷鹰便宜100元左右,但是参数差不多,都是三碟六头,5900转的监控盘,CMR非叠瓦。拼多多叠加黑卡到手价格428,真香。监控盘设计长时间运行,转速低噪音也低,稳定性强。我觉得非常适合拿来作为仓库盘,价格也没得说了。到手先用 hdtune 工具检测,没有坏道,全绿;通电0小时。希捷官网系列号验证也能通过。
硬盘盒我买了了优越者的Y-ST03004双盘位硬盘座,京东124元到手,特意选了type c接口,相比于常见的type b接口更耐用一点。
这里我要特意说一下,因为考虑到主要用于Linux下面的访问,所以我将硬盘分区格式化成了ext4文件系统,具体在Linux终端里通过fdisk命令创建分区,再通过mkfs命令格式化分区,这里不再赘述。这个文件系统是Linux的默认文件系统,NTFS文件系统在Linux内核下默认只读。现在Windows也可以做到原生访问ext4分区了。需要Windows 10开启WSL2,通过虚拟化加载完整的Linux内核,在此之后Windows可以原生读取Linux所支持的文件系统。这可能是Windows下最好的支持ext4文件系统的方案,其他方案我试了问题不少。具体方法的链接我放在这里:https://docs.microsoft.com/zh-cn/windows/wsl/wsl2-mount-disk 。
Linux下面有非常好的查看硬盘S.M.A.R.T.信息的软件,用于监控硬盘的运行情况,Debian系的发行版只需要输入以下命令:
sudo apt install smartmontools
完成安装,再通过以下命令:
sudo lsblk #这一步为了查找到自己的硬盘名称
sudo smartctl -a /dev/sda #这里的sda需要替换成前文找到的名称
就可以轻松查看自己的硬盘健康程度了。下面是我这块硬盘的信息,可见Linux下挂载硬盘设备的维护真的很简单,都是开源免费的方案。


刷写启动树莓派的TF卡
树莓派到手后就可以着手开始刷写系统固件了。我用的是树莓派官方的刷写工具,还需要一张TF卡以及一个TF卡读卡器。TF卡我就用多年前老手机剩下的8G卡,C10速度。因为树莓派官方的限制,C10到U1的速度就已经够了,再快没有区别。
除了树莓派官方的系统外,还可以刷写Ubuntu这样的发行版
随便选一个吧,因为我的内存卡比较小,所以我刷了不带桌面的64位服务器版本20.10,桌面可以后面再来装。可以刷后面的LTS版本,这个版本的官方维护时间会长一点,可以长时间不升级。

登录
固件刷写好后就可以插进树莓派的TF卡槽,然后上电启动,再连上网线。啰嗦一句,我用的是家里多余的USB PD充电头,树莓派 4b通过type c口供电,支持PD供电协议。
现在Winddows 10已经支持了SSH,所以可以直接打开PowerShell,然后输入以下命令,再设置好密码,
ssh ubuntu@192.168.50.81 #后面的地址改成你树莓派的内网地址,可在路由器的相关页面查看,最好把DHCP设成固定IP
你就登上去了。

换源
APT是Ubuntu自带的包管理软件,简单来说就是可以通过一些简单的命令就可以完成Linux软件包的安装、更新和卸载。但是Ubuntu默认服务器在中国大陆的访问速度过于感人,所以最好换成国内的镜像地址。这里我选择了清华大学的源,网上换源的教程很多,这里不再赘述。但是要注意一点,因为树莓派是ARM架构,所以应该用ubuntu-ports这个源,ubuntu源不支持ARM64,会有问题。

挂载硬盘
Linux文件系统不用DOS的盘符系统,也就是大家熟悉的什么C盘D盘,而是有一个根文件系统,名叫”/“。所有其他的文件和文件系统都挂载在根文件系统之下,比如”/dev“指的就是根文件系统下的dev目录,dev是device的缩写,一般用于表示此计算机上的硬件设备。”~“表示当前用户的用户目录,等价于”/home/用户名“。首先把硬盘盒插入树莓派的USB 3.0口,再在系统里挂载到挂载点,就可以访问了。一般挂载点需要是一个空的目录文件(可以理解为Windows上的文件夹)。如果硬盘没有格式化,那么参照我前文的两个命令,先分区和格式化。首先在自己的用户目录创建一个目录文件,用如下命令:
mkdir ~/cangku #cangku是我给挂载点起的名字,这个可以根据自身喜好随意
然后使用lsblk命令,查看树莓派上的块设备。
看容量,4T的sda就是我挂载的硬盘
如上图,sda就是我的4T海康威视代理的希捷硬盘,而底下的sda1就是这个硬盘上唯一的分区。下面通过命令将sda1分区挂载到前文所述挂载点上,这一步就完成了。
sudo mount /dev/sda1 ~/cangku
安装并配置网络存储服务器相关软件
我安装了Samba和MiniDLNA两个软件。Samba是一个开源免费的支持SMB共享协议的软件,这个共享协议就是Windows在网络(网上邻居)里分享文件的协议。另外因为我家的LG电视是Web OS系统,所以不能安装安卓软件,然后LG的播放器只支持DLNA的媒体服务器,为了可以在电视上用原生播放器串流,我多装了一个MiniDLNA。从网络开销上来说,DLNA也比SMB性能高。
两个软件安装非常简单,只需要如下命令:
sudo apt install samba
sudo apt install minidlna
然后各自配置好两个软件的设置文件。
Samba的配置输入如下指令:
sudo vim /etc/samba/smb.conf
需要配置的参数比较多,我也没搞得太懂,网上也是五花八门,我的参数配置拿出来如下。反正能用。
[Global]
netbios name = 树莓派
#用于在 Windows 网上邻居上显示的主机名
security = user
#定义安全级别
map to guest = bad user
#将所有samba系统主机所不能正确识别的用户都映射成guest用户
dns proxy = no
#是否开启dns代理服务
wins support = yes
# Windows Internet Name Serving Support Section:
# WINS Support - Tells the NMBD component of Samba to enable it's WINS Server
[ubuntu]
#共享显示的目录名
path = /home/ubuntu/cangku
#实际共享路径
browsable = yes
#共享的目录是否让所有人可见
writable = yes
#是否可写
guest ok = no
#是否允许匿名(guest)访问,等同于public
create mask = 0777
#客户端上传文件的默认权限
directory mask = 0777
#客户端创建目录的默认权限
之后需要设置以下SMB分享的账户名和密码。账户名要和参数中的[ubuntu]一致,也叫ubuntu,你可以换成自己喜欢的名字。输入:
smbpasswd -a ubuntu #ubuntu就是添加的用户名,应该与配置中的一致,最好也与当前Linux用户一致
然后设置好密码,就完成了。
MiniDLNA的配置我就改了一处,输入命令:
sudo vim /etc/minidlna.conf
然后改动如下的一处,指定共享的目录地址就可以了。

在配置好两个软件之后需要重启服务以生效,使用如下命令:
sudo systemctl restart smbd.service
sudo systemctl restart minidlna.service
如果对命令行模式下修改配置文本感到麻烦和困难,可以安装桌面环境后,在图形界面下修改。
安装桌面环境
我之前说了,我安装的是不带桌面的系统,其实在后期我们完全可以自己装桌面环境。Ubuntu可选的桌面环境有很多,比如Ubuntu自己的基于Gnome的桌面,这个桌面功能比较多,自带了很多工具软件,还有基于Xfce的轻量版本桌面。树莓派有两个小型的HDMI接口,我没买这个线,所以准备远程桌面上去。远程桌面软件我选的是xrdp,简单来说就是Windows上的远程桌面协议,好处是电脑上不用单独装客户端。
sudo apt install ubuntu-desktop #Gnome桌面
sudo apt install xubuntu-desktop #Xfce轻量桌面,以上二选一就行
sudo apt install xrdp #远程桌面软件
然后需要配置以下xrdp:
echo "gnome-session" > ~/.xsession #Gnome桌面
echo "xfce4-session" > ~/.xsession #Xfce桌面,以上根据安装的桌面选择
重启一下服务
sudo systemctl restart xrdp
然后在Windows里搜索远程桌面,输入IP地址登录即可。可能会遇到问题,要碰一点运气,具体的一些可能会遇到问题的解决步骤见以下链接。相对来说Xfce对xrdp的兼容性较好。
我用的是Gnome桌面,成功之后效果就是这样的。讲真因为我内存只有2G所以挺卡,我的电脑原生分辨率是3000x2000,Ubuntu的Gnome桌面可以开启缩放,我觉得效果还不错。

总结
这次折腾我觉得还挺值的,二百多块钱,就可以得到一个待机功耗3瓦的网络服务器。因为是Linux系统,所以树莓派的玩法实在太多太多了。这次也只是随便搞了一下。


网络服务器
网络服务器配置与管理
追加修改(2015-07-01 09:41:57):
今天仔细去panabit官网上看了一下说明,发现标准版并不支持“策略管理->流量控制策略中的优先级”,原文中对大家有些误导,抱歉了。
回头我去研究一下有没有其他解决方案。
前前言
本来上一篇《高性能冗余存储服务器的安装配置及性能测试》发表的时候,本篇已经写了七七八八。但是上篇引发的讨论让我有些茫然,很多同学说写的太难,对家用用户完全没有意义。也有说功耗高的,有说闲的**的,还有吐槽**的。
这么多负面的反馈,让我反思还有没有继续写下去的必要。后来我想明白了,他人的天堂,往往是自己的地狱。大多数人,喜欢拿自己的想法去要求别人,又反过来拿别人的想法要求自己,最后都忘记了初衷。坚持把一件自己觉得有意义的事做好才是最重要的。如果与此同时,哪怕只能让一个人有所收获,也是再好不过的了。
前言
这一篇主要讲如何利用All in One Home Server实现企业级路由需求。相信本篇一定会比上一篇招来更多的吐槽,善哉善哉!
其实,家用路由器在中国家庭中已经相当普及了。家用路由器的牌子很多,从销量最大的TP-LINK,到洋品牌的NetGear,Cisco,再到新进的小米(最近小米的404门也是够热闹的),360(一提360路由,不由得不想起孕妇模式....)等。价格呢,从几十元到几百元乃至上千,不一而足。从京东路由器的销量上可以看出,大多数家庭用的是150元以下较为低端的路由器。
还有一小部分有一定追求的同学(我估计这部分中很多都潜伏在张大妈),会去研究路由器的规格,比如主芯片的CPU性能,内存大小,天线多少,以及能否刷各种第三方固件(TOMATO,DD-WRT,Open-WRT....)。其实,家用路由器的处理器速度在500Mhz左右,内存不小于128M,应该就能够满足99%的家庭需要。比如我用了一年多的Netgear WNDR3700 V4(刷DD-WRT),就是不错的选择。

而*级的家用路由器,如Netgear R8000(处理器ARMv7双核1GHz),或是Buffalo WXR-1900DHP(内存512M),简直可以说是Bigger爆表,是小众中的小众了。
然而我下面要介绍的,那可是比小众中的小众还要小众的玩法:利用虚拟化,几乎无成本的(应该算是利用闲置资源)构建正版且免费的企业级路由器,同时以满足各种可(奇)能(葩)的要求。
家里有各家宽带N路,要用到同时支持多个WAN口的路由器。
家中人口众多,或者经营一个小公司,有几十个终端设备同时使用宽带。大家相互影响以至于无法正常提供网络服务。需要路由器具备很强的QoS(网络服务质量)处理能力。
统一的科学上网方式,不需要单个终端进行配置。
强大的防火墙功能。(家里有用吗?)
各种VPN功能。
利用dnsmasq做域名劫持,帮助Apple TV链接国内源。
......只有想不到,没有做不到??......
类似的方案有很多,我选择的是pfSense+panabit。
pfSense是一个基于FreeBSD,专为防火墙和路由器功能定制的开源版本,并以可靠性著称。在软路由中,pfSense的性能可能算不上顶尖(但绝对够用了),最大的优点是防火墙功能非常给力。
panabit同样基于FreeBSD,是一个流处理能力超强(据说可以到双向40G转发能力)的流控系统,有很全的应用匹配规则。
pfSense和panabit分工协作:pfSense负责路由和防火墙功能,panabit负责做业务流识别,整形和优先级调度。最给力的是两者都有免费版本,没有侵权风险,还不用焦虑升级问题!!!功能强大不花钱,相当于科学家会武术,流氓都挡不住!肯定会有不少同学推荐RouteOS,海蜘蛛,Wayos等,这些软路由都非常不错,不过这些要么没有官方的免费版本,要么偶尔才会有免费license提供,这里就不推荐了。
方案简介
网络大致的连接方案如下:

如果不使用虚拟化,改为在一台物理机上安装pfSense+panabit。需要系统提供6个网口,结构如下:

但是如果用ESXi做虚拟化,只需要两个物理网口就可以了。而且可以把两套系统完美分隔开,结构如下:

利用存储服务器的硬件,几乎可以无成本的就可以搭建这套企业级的路由服务器。
ESXi真乃神器也!!
第一步、更改ESXi虚拟交换机的配置
为了pfSense虚拟机可以工作在网桥模式,需要先使能vSwitch0和vSwitch1的混杂模式。

第二步、panabit 的安装和配置
由于方案限制,在没有安装好panabit之前,从内网是无法连接到pfSense的内网口的。所以,为了简单起见,我们先安装panabit,再安装pfSense。
pfSense路由器其实带了很强的队列调度和流量整形的功能,不过相比panabit就是小巫见大巫了。专业的事,应该交给更专业的选手来做。
panabit有一键安装版下载,下载地址。但是由于这个版本是超精简版本,导致安装VMWareTools会非常麻烦。怕折腾的同学请选择这个,可以跳过第一至第三步(不过我建议,既然你已经开始折腾了,就再坚持一下下吧)。对于不折腾不舒服斯基,推荐先安装一个标准的FreeBSD(一定要安装32位版本,panabit还不支持64位系统),再安装panabit。FreeBSD9.3 32位下载地址,panabit升级包下载地址。
A. 安装FreeBSD9.3
安装FreeBSD虚拟机的方法和安装其他虚拟机是相似的,就不一一说了。磁盘分配3G,内存1G,网卡分配3个。
此外在选择FreeBSD组件时,一定要选上ports,为后期安装Perl语言以及VMWareTools做准备。
为第一个网口(panabit的管理口)配置一个静态IP地址

使能SSHD(随后需要用SSHD上传panabit升级包)。

安装完系统需要重启虚拟机。
B. 安装VMWareTools(对于ESXi,每个虚拟机总是推荐要安装VMWareTools的)
安装perl和compat6x库(此时虚拟机需要联网,由于这个时候pfSense还没有配置好,请保持原来的路由器处于工作状态)
cd /usr/ports/lang/perl5.18
make install clean
cd /usr/ports/misc/compat6x
make install clean
FreeBSD系统安装VMWareTools

mkdir -p /cdrom
mount -t cd9660 /dev/cd0 /cdrom
cd /tmp
tar zxf /cdrom/vmware-freebsd-tools.tar.gz
umount /cdrom
cd vmware-tools-distrib
./vmware-install.pl
判断VMWareTools是否安装好了

C. 安装最新的panabit升级包
先修改FreeBSD的ssh配置,使得可以使用root用户登录。编辑/etc/ssh/sshd_config文件,将一行“#PermitRootLogin no”修改为“PermitRootLogin yes”。然后下发命令“/etc/rc.d/sshd reload”重启sshd服务。
通过WinScp(使用root的帐号和密码)将最新的panabit升级包(目前是PanabitFREE_SANGUOr9_20150325_FreeBSD9.2_dev.tar.gz)上传到虚拟机的/tmp目录。
执行下面的黑体命令,安装panabit升级包。
编辑/etc/rc.local文件,添加一行“/usr/panabit/bin/ipectrl start”。
cd /tmp
tar zxf PanabitFREE_SANGUOr9_20150325_FreeBSD9.2_dev.tar.gz
cd PanabitFREE_SANGUOr9_20150325_FreeBSD9.2_dev
./ipeinstall

D. panabit的配置
管理接口分配IP,然后就可以通过“https://ip/” 来配置panabit了。默认的用户名为:admin,和密码为:panabit。
配置上行和下行数据接口,选择“网桥1”,同时注意不要把内网口和外网口配反了。

panabit关于网络服务质量的配置非常多。下面先讲一个非常简单的用法,更多的用法大家自己去研究吧。针对不同的网络应用,配置不同的优先级。
panabit支持非常多种网络应用的识别,多到我感觉有点多余的地步,试着摘了一部分。

首先添加一个高优先级的应用协议组“上网”,应用识别->自定义协议组->创建协议组,给协议组起个名字,然后点击提交。

为该协议组添加应用,有各种你想得到想不到的应用可选。我添加的应用有:DNS,电子邮件,其他HTTPS,WWW,Flash,Web音乐,HTTP代理和网络支付。

再添加一个低优先级的应用协议组“受限协议”,添加如下应用。

在策略管理中增加一个数据通道“NetWork”,按照办理的宽带带宽,配置通道带宽。

为该通道编辑每个优先级调度的保证带宽。按照我的理解,最高优先级调度不需要配置保证带宽,只需要为低优先级调度配置一个较小的保证带宽即可(为了低优先级调度不至于被饿死)。我的配置里,只用了1和6两个优先级,家里是50M光纤,所以就为优先级6配置10M的保证带宽。

在策略管理里创建一个策略组“优先级调度”。

为这个策略组添加策略,将下行的“上网”协议的优先级设置为1,放到数据通道“Network”中。

将下行的“受限协议”协议的优先级设置为6,放到数据通道“Network”中。配置完,如下图。

最后在策略调度中,将“优先级调度”设置为缺省策略组。

这样,一个最简单的调度规则就可以使用了。
第三步,pfSense
A. 下载和安装
下载地址,对于64位CPU,请下载AMD64(64-bit)的Live CD with installer,目前最新版本为2.2.3。将下载的ISO文件上传到加载到ESXi的数据存储器上。
通过vSphere Client创建新的虚拟机。配置:选择“自定义”;虚拟机版本:选择“版本:8”;客户机操作系统,选择“其他->FreeBSB(32位)”;CPU分配1个;内存分配1G;网卡分配3个(全部选E1000模式,pfSense系统默认第一个口是WAN口,第二个口是LAN口,为了简单起见,就按照这样配);磁盘分配1G;


将上传的ISO加载到虚拟机的CD驱动器。

启动虚拟机,等待若干分钟后,会提示安装系统到硬盘,输入99。后面的步骤就不赘述了(一页一页截屏太辛苦了),安装好会提重启。
重启后系统默认WAN1用动态DHCP IP,LAN口IP是192.168.1.1。选择Option2,把LAN口的默认IP改为自己想要的地址,比如我用的是192.168.18.1,同时启动LAN口的DHCP和webConfigurator。

B. 配置
通过web登录到“IP:80”来管理pfSense路由器,默认的登录用户是admin,密码是pfsense。第一次登陆,会有一个用户指引,帮助你完成最初的配置。
Hostname随便配。

设置时间同步服务器和时区,这一步还是比较重要的,不配对有可能造成无法升级或安装扩展包。

配置WAN口,根据自家运营商的情况配。一般ADSL是PPPoE,光纤接入很多都是DHCP了。

配置LAN口IP和掩码

更改pfSense的密码

点击Reload,路由器就可以使用了。

此时,请一定要安装VMWareTools。方法是:通过web登录路由器,点击 System>Packages。然后在“Available Packages”中选择“Open-VM-Tools”,并点击安装。(有可能需要disble WAN口的IPv6才行)。


关于其他配置和应用,有详细的教程,请看这篇(中文)~~以及这篇(英文,官方)。
补充说明:
注1:关于多WAN的配置,请看这篇。由于我家里只有电信宽带,而且不支持多拨。没有实践没有发言权,所以这一块就不说了。
注3:关于如何解决DNS污染,这个正好也是搞虚拟机的长项,不过讲讲也要一篇文章了。个人感觉目前这个问题还不算是大家的痛点,那就有空再写吧。
总结
写了半天,怎么才能体现出pfSense+panabit的优越性呢?想了半天,还真不好写。
最后还是举个例子吧。本人目前在某公司的杭州分部工作。一共十来个人,一共有二三十个终端设备(电脑+手机)的上网需求。由于人数比较少,所以总部一直没有给我们配专用的企业路由器,而是拿一个家用路由器凑合着用(屌丝公司......)。于是时不时就会发生网络没响应,或者路由器死机的情况,民怨极大。
自从我上个月引入了ESXi+pfSense+panabit的组合(硬件是7年前的Q35+E8400),十几个人挤一个4M的小水管,居然再也没有发生过网络不可用的故障。即使有多个人同时下载,也不会影响上网查询资料。好评率爆棚啊!!
下面是一些panabit的统计截图:




老实说,这篇文章只讲到了一些皮毛,仅供入门而已。网上有各路大神对pfSense和panabit的各种玩法,建议大家上网搜搜,保证能够大开眼界。
下篇预告,All in One Server添加HTPC功能。

已收藏
去我的收藏夹