旁路由就是歪门邪道

进入这篇文章进行阅读的朋友,我必须默认各位起码知道什么叫做旁路由,哪怕只是听说过也可以,如果一定要从定义开始讲,那这篇文章就太过冗长了。好了,既然你知道或者听说过旁路由这三个字那就意味着你也知道软路由是个什么东西,或者说你希望自己搭建一个软路由玩一玩,然后不知道从哪里听到了旁路由这个词,甚至你发现大部分博主都会告诉你,旁路由是不二法门,是绝对正确的选择。这就是我写这篇文章的意义了,揭露真相:旁路由就是歪门邪道,事实上网友分析的旁路由的优点都是虚假且不客观的

下面我就我能够收集到的主流论点进行逐一反驳,你要相信真理是越辩越明的。如果某个东西在面上都没有被广泛讨论过,而是一帮人跑出来就站队说这就是最好的选择,那么你就要小心了。因为软路由不是什么不可名状的东西,他只是一个技术发展的点而已,或者是某个想法的技术实现。对于这种技术上的东西,那就是明确的,不存在说什么玄学问题,或者什么一加一等于二还是三的争论,所以对其相关的决策应该是完全逻辑完备且可以证明的。我再把话说明白一点,如果一个博主给你推荐旁路由,只有两种可能:

  • 第一是道听途说人云亦云,没有独立思考,单纯是搭建好了能用,然后开始发视频写文章进行卖弄;
  • 第二是被一两个看似美好的场景蒙蔽,而没有看到背后的代价;

辩经论证旁路由的优点其实是假象

论点1:旁路由是避免折腾时影响网络整体的可用性

这个是最经典的一个论据,我大概说一下这伙人的逻辑。他们认为主路由是给整个家庭使用的,而旁路由就是自己的玩具,如果自己瞎配置主路由导致断网,则家里所有人都没法正常上网了。比如说儿子在玩王者时突然间没有网了,或者老婆正在刷剧突然没有网了就会很麻烦。所以如果自己折腾的是旁路由,哪怕它被自己玩爆炸了,网还在。是这个意思对吧?别急我们来看看这里面的逻辑陷阱,首先就是为什么你需要去折腾软路由?

无论是硬件路由器还是软件路由器,究其本质都是网络路由设备,无论形态如何其功能都是一致的,那就是创建路由表将不同的请求交给不同的路由地址,除此之外,路由器不应该再负责任何事情!在说简单一点,路由器仅负责对上NAT、对下DHCP,其他任何事情都不是路由的核心功能。就NAT和DHCP两个事项来说,你会发现没有任何折腾的必要,因为NAT可以简单认为就是路由器的WAN口配置,而DHCP可以简单认为是LAN口配置,所以说实话,如果你都需要动这两个东西了(VLAN配置,MUTE,多拨,链路聚合等),那这个网也应该断了。然后我再点一下无论是NAT还是DHCP,作为家庭网络情况下,你是真的需要多套吗?我这么讲吧,家庭网络几乎不可能出现需要多网关的情况,如果你真有这个需求,那你肯定也具备较高的网络知识了,你也不会用旁路由这种不伦不类的东西来处理。

我知道马上有朋友要说了:“如果你都已经搞软路由了,自然是希望它能够做一些硬件路由做不到的事情,那就肯定会折腾呀?”,的确话是这么说没有错,所以是不是咱们应该分清楚折腾路由功能和其他功能的区别,或者说我们应该将折腾路由和折腾附加功能给区分开呀。在我们折腾附加功能的时候,无论是安装还是卸载亦或者说是配置,都不应该对网络本身有什么影响,这就是理论上应该具备的能力对不对?就像下图一样:

我知道即使我论证到这里,很多朋友都会说:“你这是站着说话不腰疼,理论上是这样但是我没有这个技术能力呀”。诶,对咯,你有这个疑问是完全正常的,我相信大部分初学者都会这么想,为啥有人能够做到只有一个主路由随便折腾都没有问题,但是我这个旁路由稍微一折腾就会崩掉?我告诉你,但凡是个人在操作,事实上就会出现失误,无非就是时间长度够不够的事,所以这个问题,这个其实不是你技术能力的问题,而是你需要系统提供给你一个恢复的方案!给大家推荐一个相对合理的架构:

上面这个架构图,你这么一看是不是就合理多了?首先你可以区分哪些功能是必须再路由上运行的,比如说NAS共享这种就应该单独创建虚拟机,而NAT穿透就应该直接在软路由实现,我们可以在虚拟机层面进行一次分离;然后只能运行在软路由里面的访问实质上路由的核心功能关系不大,并且是不会平凡折腾的,况且哪怕你失误操作导致灾难级别的后果,依靠定期的虚拟机快照可以随时恢复之前的运行状态;对于不一定需要在软路由上运行的服务,那就新建独立的虚拟机去实现功能,随便搞都不会影响软路由;如果想要实验,也可以单独创建独立的软路由虚拟机去实验你的配置,最后确定没有问题再迁移到主路由虚拟机;再极端一点的情况,如果你的硬件设备出现问题,比如说爆炸了,那么依靠虚拟机的快照的备份,你也可以再别的硬件设备上恢复主路由虚拟机(没错哪怕是windows也能跑KVM虚拟机),这种框架你说安全还是不安全?这里恐怕还有人会说什么虚拟化存在的性能问题,各位可以放心,KVM的CPU性能可以保持99%以上的性能,并且你都运行软路由了,起码对于软路由能干的事情而言你怕是不可能遇到性能瓶颈,要是真有性能问题那也不是虚拟化这点损失可以弥补的。

所以核心的意义在于:软路由功能越简单越好,保证其可恢复性即可,其他功能交给其他虚拟机去实现!

所以如果你要的是在你的网络环境中具备容灾能力,其实正确的道路是提高自己的专业水平同时通过具备容灾能力的架构实现备份、恢复、迁移能力这样才能实现真正的高可用;如果你需要的是一个试验场那更加不应该使用旁路由方案,因为旁路由挂掉或者被你玩坏了,实际上你还需要从零将它搭建一次,它事实上起不到实验场的功能。所以你无论怎么看,最终都会走向我说的容灾架构方案,而不是搞个旁路由,看似旁路由限制了故障的范围,实际上真正出现故障的时候,还是一样的手忙脚乱。所以旁路由是避免折腾时影响网络整体的可用性这个论点本身都不成立!

论点2:旁路由对于魔法应用可以简化分流

众多我看到的论点之中,这个是最可笑的说法,很明显说出这样话的人甚至连分流的基本原理都不知道。不过这个点稍微有一点点敏感,我就不说细了,大体意思两种方案:

  • 路由方案:无论是iptables还是说nettable的劫持方案可多了,一行命令就可以使不同的子网进入不同的规则,比如说子网下的米家设备可以划分一个独立WIFI的SSID形成一个子网段,其他设备可以划其他的子网段,特定设备甚至可以设置内网固定的IP,然后在iptables或者nettable对不同子网的IP进行分流,实现仅让其中一部分进入魔法内核,这样无论魔法内核内部是如何分流的,部分设备根本进不了魔法内核,不久完美符合你旁路由的场景吗?是不是很简单?
  • 分流规则方案:其实所有流量全部进入魔法内核也不是什么大问题,一方面现在的内核很强大,DNS嗅探、GeoIP Data无论是源地址、目标地址、目标域名等等一系列参数都可以配置规则,所以哪怕是进入到魔法内核里面也没有分不了的流!!这个点有的朋友会不理解,为啥要选择所谓的Hard Way,我的观点是,你都已经在用软路由了,你就应该有个折腾的心,这点强度都不上,那么出了任何问题你都没有能力恢复,与其这样还不如一开始就老老实实的用客户端用什么软路由?

论点3:旁路由可以分担网络压力

来来来,这个论点也是让人哭笑不得的存在,说出这话的人怕是家里面有几十个员工和佣人,但是没钱请网络工程师,槽点过多。首先网络压力分为内网压力和外网NAT压力,如果是内网压力的话,旁路由无法解决你的问题,你需要的是高性能交换机好吧;如果是外网压力的话,核心问题就是你路由的带机量了,你都已经运行软路由了,这些设备计算能力已经是很强大的存在了,如果连下级100个终端的NAT转发带不起,那是弱到什么级别呀?

而且,如果你没有运维过大规模子网,你肯定不知道的一个事实,无论是电信、联通还是移动,他们提供的家庭宽带上级设备的NAT也是存在限制的(不是光猫,桥接拨号也是这样),这个不是硬件设备的性能问题,而是他就是这么设计的,差不多也就100多而已。意思是哪怕你路由器带机量足够,上级的运营商的设备也不支持你实现子网大规模的带机量,你知道为什么企业专线会有那么多办公室买了吧?100M的专线可比1000M的家庭宽带贵了10倍不止,而且哪怕是企业专线,还不允许你拿固定IP自建IDC,如果你搞PCDN或者流量异常也照样被封,运营商就是猛。

细数旁路由的罪恶

这个点就怕是没有什么博主会告诉你,实际上你搞旁路由,不仅仅它的优点是忽悠你的,甚至的它还有一系列你可能没有意识到的缺点。当然这些缺点也很好理解,我就简单描述一下,大家应该都清楚了。

实际上路由器的作用我文章的一开始便已经说明了,外部提供NAT,他才能上网或者被访问。简单一点说就是上图的一级子网设备需要主路由提供的NAT才能上公网;二级设备需要旁路由提供NAT,然后旁路由由需要主路由再提供一次NAT才能上网,这个好理解吧?这样势必性能会比直接一级NAT差,这没有什么好说的。但是比起下面的问题而言,性能什么的都完全无所谓了:

  • 一级设备无法访问二级设备:比如说二级子网设备A是我家里的电脑,这台电脑开了一个SMB共享,而一级子网设备A是家里的摄像头,我希望摄像头可以将视频存储到电脑的SMB共享里面,不好意思,出发单独在旁路由上配置NAT设备,否则摄像头无法访问电脑;同理如果是DDNS希望通过公网IP访问子网设备的端口,如果是旁路由你就需要做两层端口转发,简直神经病;
  • 二级设备访问一级设备需要旁路由转发:这就有点炫酷了是吧,无论一级子网还是二级子网实际上都是你的内网,内网相互访问本来就不应该经过网关设备处理的,但是由于旁路由的存在内网流量也必须要旁路由转发,也就是无缘无故的将交换机能够搞定的事情交给你的软路由去实现,而且软路由交换数据的性能可比交换机差了一个数量级;
  • WIFI接入等AP设备进一步提高了网络复杂度:如果你搞了旁路由很有可能你的移动设备或者笔记本需要接入旁路由,这样一来他们只能是二级子网的设备,请问这个时候你的智能家居怎么办?再来一个AP做WIFI吗?

除开上述的显性问题之外,还有后续拓展的隐形问题,有人用过防火墙吗?如果你希望在家里搞homelab,那么迟早你会在家里面搞一个防火墙以保证网络安全,或者说未来你可以在家里拓展出这套东西(其实不贵)。一般来说防火墙都会在网络架构的最上层,防火墙虽然现在也分第二代防火墙和第一代防火墙,但是无论怎么样都是根据内网地址进行安全区域划分,实现不同网段的隔离或者限制,本来直接使用防火墙应该是轻松愉悦的存在,因为毕竟它是一个商用设备,不像开源的东西,它天然就应该具备易用性,但是如果你的防火墙发现你旁路由加二级子网所有设备全部都是同是一个IP地址时,事情就复杂了起来。。。。但是记住,我这里不是说没法解决,事实上这些问题都有专门的方案处理,但是就为了旁路由那虚假的优点怎么搞,它不值得呀!

总结

旁路由就是歪门邪道,我看不到哪怕一个优点,反倒是放眼望去全是问题。

留下回复