先看一个比较典型的网络结构:

这种结构是绝大多数家庭网络的拓扑,很多公司没有复杂网络管理需求的时候也会用这种简单结构。根据不同的终端数量,交换机可以扩展为核心 -> 接入结构,同时接入层兼具汇聚层的功能(或者说接入和汇聚的界限已经模糊)。

从趋势上可以看得出来,家用路由器一直在努力减少LAN接口数量。这就使得我们比以往更容易遇到接口数量不够的问题,甚至为了一两个设备额外添加一个交换机。无论5口也好,8口也罢,即使硬件价格不贵,成本并没有增加多少,但家里的网络却被搞得乱七八糟,接来接去的设备也显得无比累赘。* 而在企业中,由于终端数量较多,所以会使用16口、24口,甚至48口的交换机,完全不会碰到这个问题。

软路由的扩展能力

由于软路由本身就是一台PC,所以接口不够时,完全可以通过添加网卡来作为交换机的替代方案。下面我们先算一笔账:

ITX主板一般只有一个PCIE 16X插槽(大多数主板还具有mini-PCIE插槽,可以将它看成是一个PCIE 1X);如果是普通的ATX主板,它会有1个PCIE 16X插槽,1个PCIE 8X插槽(很多低端主板没有),两个PCIE 1X(极少有mini PCIE),较老的主板有可能还会有1~2个PCI插槽。算下来,如果是较新的PCIE 3.0,CPU具有核显的时候,至少可以扩展出8个网口,乍一算好像完全能取代掉一个8口的千兆交换机。

条件有限时,可以考虑PCI千兆网卡,不过由于接口速率限制,只能选择单口千兆版本;此外,USB网卡一定不能用在软路由上,本身稳定性堪忧,USB这种接口方式在物理上也不够稳固。

然而,我们应该最先考虑的并不是这些,而是另一个问题:这是必要的吗?或者说,什么情况下,我们可以/必须通过这种手段来解决问题,而非使用一个交换机。

软路由扩展和硬件交换机对比

硬件交换机的专长在于三点:稳定、交换能力、大量设备的接入能力。

稳定性,软路由似乎也不差,不过对环境适应能力会比交换机要差一点,毕竟PC的环境要求更为严苛。当然,这并不是问题,既然用了软路由,说明使用场景并不会恶劣到影响正常运行。

交换能力是软路由致命的弱点,软路由桥接出来的网卡接口会工作在软件层面,这种层级的数据交换比硬件交换效率要低得多,而且不同硬件(CPU)之间的性能也有天壤之别。可以粗略地这么对能力高低进行排序:硬件交换机 ≫ 高配CPU的软件桥接 ≫ 低配CPU的软件桥接。毕竟,专业的设备做专业的事。

设备接入能力方面,正如之前分析的,一般情况下软路由可以扩充出8个网口,这是在无显卡的情况下,如果主机需要显卡,这个数字直接砍半。而交换机则不同,从5口,8口,16口,24口,甚至48口都有很多合适的选择,接入能力是软路由根本无法相提并论的。

不同场景如何选择

通过上面的对比可知,软路由在同时满足:1. 带机量极少(5台以内);2. 内网传输要求不高,或者不频繁这两个条件的时候可以选择扩展网口的方案,如果交换机是完全不可接受的,那就必须选择扩展网口的方案,其它场景应当考虑使用硬件交换机。

另外,为了做这个方案而去做这个方案并不是理智的选择,预算超过200的时候还用这个方案,很容易把网络规划得畸形,建议使用硬件交换机,性价比更高,整体规划也更均衡。

其实我们也可以看出,这个场景和家用场景非常相似,本质是通过可接受的性能牺牲来减少网络复杂度。
相对的,外网的带宽要求反而不需要太关注,需要注意的有两点:

  1. 如果要用到虚拟专网之类的隧道技术,一旦连接数过大,加密运算的需求将给CPU带来非常严竣的考验,CPU具不具备相应指令集会让硬件在性能方面表现出巨大差异;
  2. 在带宽大于100MB时需要选择千兆光猫,软路由也需要使用千兆网口做为WAN口,否则只能跑满百兆。当然,相反地,如果只有百兆或者更小的带宽,使用百兆网口当WAN口足矣。 

如何选择网卡

选择网卡时可以考虑Broadcom, Intel等大厂的产品,不过由于网卡市场水特别深(尤其是拆机芯片焊出来的假网卡),低出正常价格太多的产品尽量别碰。服务器拆机网卡是个不错的选择,但是有些服务器网卡会在接口做一些非标改动,直插到普通PC上无法工作,需要一个转接卡才能正常使用,所以一定要看好是否为标准接口,以及非标接口的网卡是否带转接卡。当然,如果预算充足,可以直接买全新的,不用踩这个雷。附上网卡价格对比:

  • 全新Intel4口千兆PCIE,根据芯片不同,价格在¥700-¥2000之间。
  • 全新Intel双口千兆PCIE,¥300-¥900;
  • 拆机Intel千兆4口,¥200-¥500;
  • 拆机Intel双口,¥100-¥200;
  • 其它品牌拆机或者山寨4口,¥100-¥200;
  • 其它品牌拆机或者山寨2口,¥50左右;
  • 一口完全没有性价比,直接无视。

这中间需要特别注意的是,一定要确定主板接口所支持的设备,PCIE接口常见x1, x4, x8, x16,网卡接口也经常可以看到PCI、PCI-X。设备接口和主板插槽必须严格对应,无法混用(PCIE更小通道数的设备,可以接入更大通道数的插槽,比如x1的设备可以安装在x16插槽)。

另外一个容易被忽视的地方是驱动,操作系统不一定原生支持所安装的网卡,选择一块驱动支持的网卡会省事得多。

如何安装

安装过程并不复杂,只有两步:为主板安装网卡,系统中将接口桥接到指定网络。

硬件安装没有什么值得多说的地方,只要接口一致或者兼容,插入网卡并固定即可。

做软路由的系统一般都会有虚拟交换机的概念,它是一个软件层面的二层网络。我们可以通过将网口桥接到相同/不同的虚拟网络,从逻辑上将它们接到相同/不同的交换机,实现网口的互通/隔离。当前场景的需求是扩展内网网络,只需要将新网卡按需桥接到内网上即可。


#/etc/network/interfaces
auto lo
iface lo inet loopback

iface enp8s0 inet manual

iface enp7s0 inet manual
iface enp4s4f0 inet manual
iface enp4s4f1 inet manual
iface enp6s4f0 inet manual
iface enp6s4f1 inet manual

auto vmbr0
auto vmbr1
iface vmbr0 inet static
        address 192.168.3.4/24
        gateway 192.168.3.1
        bridge_ports enp7s0 enp4s4f0 enp4s4f1 enp6s4f0 enp6s4f1
        bridge_stp off
        bridge_fd 0

iface vmbr1 inet static
        address 192.168.1.4/24
        gateway 192.168.1.1
        bridge_ports enp8s0
        bridge_stp off
        bridge_fd 0