家里主路由换成了MikroTik RB5009UG(RouterOS)

为什么要换主路由?

我目前的方案是主路由+旁路由,主路由直连保证网络的基本稳定性,毕竟很多智能家居设备都是在国内,可不能因为分流服务程序挂掉导致整个家庭断网。

那么问题来了,原来我的Oculus Quest 2想要正常使用,一共有几步呢?

  1. 设置手动分配IP地址。最好还得自动分配一次之后,再手动分配,这样才能保证不会改到和其他设备冲突的IP地址。
  2. 设置网关指向Apple TV。
  3. 设置DNS指向Apple TV。

这么一看,三步也不多对吧?但是呢,我家里面有三个PVE宿主机:

  1. Intel冥王峡谷。8核心16线程,24G内存。
  2. 幽灵峡谷。8核16线程,64G内存。
  3. 台式主机。8大核心+4小核心,128G内存。

目前常用的虚拟机就有十来个,还有一些经常拿来测试的虚拟机,经常删掉重建,这个步骤重复个几十上百次之后,我感觉我闭著眼睛都能知道怎么操作了。

更何况我还遇到了一些设备是不让手动分配DHCP地址的。比如我有一台RK3588的开发版,虚拟的Android容器就是不让我手动分配DHCP地址,只能自动分配,之前费了好大的劲才找到一个可以设置http proxy代理的方式,算是折衷解决了。

为什么选择了RouterOS?

所以,我一直都想要找一个稳定的方案,但是我真的是不信任各种工控机软路由,再加上openwrt本身可能也是比较能开源免费的方案,两者都需要大量的时间去调试,我觉得我的时间成本不应该浪费在这些地方,毕竟我又不是做路由器去卖的,整天排查各种不稳定原因,我觉得我会疯掉。

所以我选择了RouterOS的商业方案,因为厂商能赚钱,所以他们会有更多的资源去测试和维护。RouterOS可玩性真的很高,不像TP-LINK所谓的企业路由,同样的硬件,把多WAN口的功能给屏蔽了,硬是分出两种型号不同的价格差来,我觉得这种做法真的是很恶心。可玩性也不高,各种功能配置交互也差。

本来我是打算RouterOS装群晖上面的,因为群晖作为头部的NAS品牌,稳定性也很好,开机4万多个小时了,可能只遇到了那么几次因为自己换内存导致的奇怪关机问题,后面换回原厂的就好了。

其实装在群晖里面也够了对吧?但是呢,RouterOS是存在授权费的,如果要好用,还是得买授权,但是我也不能保证买了授权跑虚拟机就是稳定的,不然岂不是授权费打水漂了?所以一咬牙,买了官方的硬件,这样就能保证硬件和软件的兼容性了。

我买的是RB5009UG,算是中高端产品,但是没拉到最顶级,再往上就是一个POE供电的版本了,我家里面没有POE设备,所以就没必要了。

我也算是在买之前做过了一些功课了,在买RB5009UG之前,我就已经在虚拟机上配置了DHCP Server功能,成功的针对子网设备进行了分流,后续的DNS和网关设置也都是OK的。但是当我硬件路由器真的到货之后,把TP-LINK的傻瓜式企业路由器拿下来,换上RB5009UG之后,我才体会到什么叫做路由界的手动挡,这tmd我硬是把各种网络知识查缺补漏了一遍,再加上GPT4的帮助才把网络搞定。

在RouterOS上面做了什么?

下面我就梳理一下RouterOS作为主路由的艰辛历程:

基础配置

  1. 前面两个网卡,改名成WAN1 + WAN2。 为啥WAN2需要删掉呢?因为我后面发现两条宽带可以走同一个光猫拨号,所以只需要一个WAN口就够了。
  2. 设置MACVLAN, 在WAN1上新建macvlan1和macvlan2。这个是7.12版本才有的功能,我之前的版本是7.8, 在线升级完成之后才有。
  3. 设置PPPoe拨号。还好我早就改了桥接,从TP路由器那边先把配置拷贝下来填上去。这里面出现了一点点插曲,一开始macvlan2在1之后一直无法拨号成功,后面尝试改了macvlan2 mac地址以及改到WAN2插到第二个光猫上成功,然后再换回WAN1,这样就成功了,两条宽带反复拨号也都OK。所以这里面不太清楚是首次要WAN2来激活呢,还是自动生成的mac地址有问题。
  4. 设置内网bridge。这个我真的是第一次遇到需要自己手动设置的,需要把除了WAN口之外的网口都加进去,然后设置一个IP地址作为内网的网关地址,例如:192.168.3.1/24,网关设置成192.168.3.0。
  5. 设置DHCP IP Pool。这个是最简单的,设置一个IP地址池范围就行,我是设置成了192.168.3.111-192.168.3.220。将近一半的IP地址都分配给了DHCP差不多够用了,剩下的可能有一些设备之前手动分配的。
  6. 设置DHCP OPTION。新增选项的时候,类型是手动输入的,例如1代表子网掩码,3代表网关,6代表DNS,这几个都是必须的。我添加完默认的网关和DNS以及Apple TV的网关和DNS之后,就得到了5个选项,因为子网掩码复用的。
  7. 设置DHCP Option Sets。为啥要设置这个呢? 因为如果你直接新建一个DHCP Server,然后设置Option的话,你回发现只能添加一个不能多选,所以这个Option Sets就是用来解决这个问题的。我设置了两个Option Sets,一个是默认的,一个是Apple TV的。这样就能在DHCP Server里面直接选择了Set集合了。
  8. 设置DNS。这个是最简单的,直接在IP里面设置就行了,我设置了两个DNS,一个是阿里的,一个是腾讯的。这样就能保证DNS的稳定性了。

高级配置

  1. 找到DHCP动态分配的记录,给对应的设备命名,特别是比如两盏灯名字一样的,如果不命名后面就不知道哪个是哪个了。然后给设备固定IP,因为现在部分电器设备是通过局域网协议控制,如果漂移会导致homeassistant无法控制。
  2. 针对部分需要走旁路由的设备,先设置静态分配,然后手动将默认DHCP SET改成Apple TV的SET,这样就能保证它能走到旁路由达到自己想要的效果。
  3. 设置防火墙。这个真的得小心,以前玩VPS就听过很多同学因为规则配置错误,把自己也给挡在外面了。虽然我觉得RouterOS就算网络层被挡住了,但是还是可以插Console口进去的,但是保持这个习惯总是好的,万一哪天的一个设备是没有Console口的就尴尬了。
    1. chain=input action=accept protocol=tcp port=80,443 允许内网访问路由器的80和443端口,这样直接浏览器也能访问ROS的管理页面。
    2. chain=input action=accept src-address=192.168.3.0/24 log=no log-prefix="" 允许内网访问ROS的所有端口,这样就能保证内网设备能访问ROS的所有服务。
    3. chain=input action=drop protocol=udp dst-port=53 log=yes log-prefix=" 拒绝外网访问ROS的53端口,这样就能保证DNS服务只能在内网使用。
    4. chain=input action=drop protocol=icmp log=no log-prefix="" 拒绝外网访问ROS的icmp协议,这样就能保证外网无法ping通ROS。
    5. chain=input action=drop in-interface=!bridge-local log=no log-prefix="" 拒绝外网访问ROS的所有端口,这样就能保证外网无法访问ROS的任何服务。
  4. 配置端口转发规则,因为有的端口需要绑定在公网ip上转发过来。我目前使用的方法是新增一条nat规则,然后同时新增一个mangle规则将对应端口的routing mark,再针对routing mark设置默认网关。以公网ip端口3000映射到内网192.168.1.3:3000为例:
    1. 新增nat规则。 chain=dstnat action=dst-nat to-addresses=192.168.1.3 to-ports=3000 protocol=tcp dst-address=223.167.111.111 dst-port=3000 port="" log=none log-prefix="nat-rule_
    2. 新增mangle规则。 chain=prerouting action=mark-routing new-routing-mark=rtab-wan2 passthrough=no protocol=tcp src-address=192.168.1.3 src-port=3000 log=yes log-prefix=""

这么多步下来,我小心翼翼的整两三个小时才搞定,我生怕一步做错整个规划就得重来。这个也真的像极了手动挡,一步一步的慢慢来,不像大部分傻瓜路由器一样,一键配置就OK了。

后记

在配置完所有之后,发现日志窗口有很多来自公网的攻击,在用admin、ubuntu、pi等常见的用户名尝试ssh登录,虽然我已经不会用弱智密码,但是抵不住万一有0day漏洞没来得及修复,整个家庭局域网沦陷会引发更多的麻烦。所以我就继续按照网上的教程,把不该开启的服务统统关闭了,只保留了winbox和www服务,www服务也只限定了内网访问。