21天入坑家用光(一):宽带活动快又好 剁起手来不得了

前一阵子我搬到了广州,而众所周知搬家之后,首先要解决的就是宽带问题,毕竟这关系到基本的生存需求。这是我第一次和房东直签整租,从而拥有了比较自由的网络改造条件。既然如此,那不如上个面向未来的光纤内网吧,我这么想。谁知道,就这么一个简单的决定,导致我折腾了21天,才堪堪通网。本是想写个简单的短文分享一下,但这其中经历的事情,足以让我写一篇系列文章了。那么这就是《21天入坑家用光》系列文章之第一篇:「宽带活动快又好 剁起手来不得了」。

宽带办理与安装

既然要组光网,那宽带怎么也得拉千兆的,运营商么自然是三大里面选——然后我去问了一圈广州电信的千兆宽带报价,怎么也得近400一个月了,这个价都够我把联通和移动都拉进来了……看了一下,这边屋子是走的明线光纤,门口有个小洞,进两条光纤是没问题了,于是就决定装联通+移动双千兆。

于是在小黄鱼上分别找到一个联通和移动的宽带业务员,以 139/mo 和 49/mo 的价格,办下来两个融合套餐,都是带 1000M 宽带的。

然后就是约装维师傅上门安装了。考虑到后续的网络使用,首先是要把光猫设置桥接模式,其次还要采集一下光猫密码和认证参数,所以安装的时候要和装维师傅聊聊天打好关系啥的。

我这边联通的安装小哥比较好说话,整个人很热情,我就很顺利地要到了光猫的密码、LOID 啥的,顺便还加了个微信。移动的安装小哥就比较沉默寡言,可能是因为我让他拉了第二条光纤的缘故?只是让改了个桥接,要了一下光猫密码。

装好之后自然是获得了两个光猫,然后此时我用的是一台 MikroTik 家的 hAP ac² 作为主路由和热点。拓扑大概这样:

双线网络拓扑

简单,且朴实无华。

然后在 RouterOS 上设置好默认路由,电脑插上网线测速,显然,慢得离谱,大概只有不到 800Mbps。应该是因为这个路由器的 PPPoE 或者 NAT 性能太差吧……总之,速度是跑不上去了。

升级软路由

于是我决定买个软路由来替换这个性能孱弱的 hAP ac²。一番筛选之后,决定购入 r86s。这款设备采用 N5105 作为 CPU,算是有比较强的性能;两个 2.5G 电口,加上万兆网卡版本增加的一块硬改双口的 CX341a,可以轻松升级万兆网。

软路由拿回来装的是 Proxmox VE,主要是方便管理。在这里我选择了 RouterOS 的 Cloud Hosted Router 作为软路由系统,然后设置将 2.5G 网卡和万兆光卡都直通进去。

2.5G 网卡的 PCI 直通很简单,在 PVE 网页上加进去就可以了;但万兆光卡 CX3 的直通却通不进去,提示一些奇怪的错误:kvm: -device vfio-pci,host=0000:04:00.0,id=hostpci0,bus=ich9-pcie-port-1,addr=0x0: vfio 0000:04:00.0: Failed to set up TRIGGER eventfd signaling for interrupt INTX-0: VFIO_DEVICE_SET_IRQS failure: Device or resource busy。试过一些办法,没有成功;后来发现这个卡支持 SR-IOV,通过创建 VF (Virtual Functions) 的方式可以做虚拟化。于是开始搞 VF:

CX3 的 VF 设置

首先你需要安装 OFED 驱动。在 NVIDIA 的 Linux InfiniBand Drivers 页面可以下载到,注意选 LTS 的 4.9-4.1.7.0 版本。(我一开始没有留意页面上的说明,直接下了个 5.5,还强行给他装上了……)

然后要装一个叫 NVIDIA Firmware Tools (MFT) 的东西。在 MFT – Firmware Tools 处下载就行了。

都装好之后,设置一下 SRIOV 创建 VF 。简单地说,你只需要执行:

mlxconfig -d /dev/mst/mt4099_pciconf0 s SRIOV_EN=1
mlxconfig -d /dev/mst/mt4099_pciconf0 s NUM_OF_VFS=2

然后再把下面这行配置丢进 modprobe.d 里:

options mlx4_core num_vfs=1,1,0 port_type_array=2,2 probe_vf=0,0,0 log_num_mgm_entry_size=-1

更新 initramfs 并重启就行了。具体步骤的话,参考官网 wiki 上的 Single Root IO Virtualization (SR-IOV) 指南。

创建完重启,就能看到我们的 VF 了。嗯,然后把它通过 PCI 设备直通到虚拟机里就可以了。——我本来是这么想的。

virtio

然而,当我启动虚拟机里的 RouterOS 的时候,事情变得微妙了起来。RouterOS 表示,这些网卡,我一个也不认识……

查了下才发现,r86s 用的两款网卡,RouterOS 都没有驱动。行吧,既然如此,那我就都改成 virtio 吧……在 PVE 里新建了一堆 vmbr,把它和物理网卡桥起来,再桥进 RouterOS。这下都能识别了……

至于性能,跑测速的话,大概在 11G 多点的样子,勉强符合需求。

软路由设置

接下来就是 RouterOS 时间。简单地做 PPPoE,然后简单地桥接一下,起一下 DHCP 服务器,做一下 NAT ……大概这样。完成之后,再跑个测速,这回能到 930Mbps 左右了,剩下的就是 PPPoE 本体的开销,千兆是跑不上去了。

升级 AP

之前提到了,我的 hAP ac² 同时是主路由和 AP。那么路由被软路由替代了,可 AP 也是要升级的,不然无线设备就拉垮了。挑挑拣拣,我选中了 TP-LINK 的 TL-XDR3040 易展版,这款路由器有 1 个 2.5G 电口和 3 个 1G 电口,对我来说刚好合适。在 1688 下单,然后配置为桥接就可以了。——我本来是这么想的。

配置为桥接之后,这款路由器表现出了非比寻常的一面:所有的 DHCP 包无法通过。哪怕关闭 DHCP 服务也不行,非常令人生气。不过后来我在 chiphell 上找到了一个帖子:「TL-XDR3040更新固件后,AP模式问题好像解决了」,楼主的问题和我有点类似,他是 DHCP 会抢答,而我的是压根不给 DHCP。抱着试试看的心态,我下载了楼主分享的固件传上去,害,居然解决了。

AP 插上 2.5G 电口,手机用 iperf3 测速,最高能跑到 1.02Gbps 的水平,我还是比较满意的:

手机 iperf3 测速图

那么,光呢

折腾了半天,结果公网网速也就是从 800 Mbps 提升到了 930Mbps,内网也就无线刚到1G,那个千兆的门槛还是没有摸到……而且说了半天光改,结果到现在还全都是电介质,一点光的影子都没有。

说白了,其实是因为小黄鱼的卖家发货太慢,各种配件都没有到手,只能先这样解解馋,就当是介绍我家网络的背景吧。下一部分,就要开始真正的光改之旅了……

文章系列:

评论

li0near

您好,非常感谢您的分享,我最近也在折腾r86s,能请教一下 Linux InfiniBand Drivers 您是怎么装上的吗?我运行./mlnxofedinstall –distro debian10.0不知道有没有问题,安装过程中提示要:
Error: One or more packages depends on MLNX_OFED_LINUX.
Those packages should be removed before uninstalling MLNX_OFED_LINUX:
python3-cephfs pve-ha-manager qemu-server libiscsi7:amd64 libradosstriper1 librados2-perl spiceterm librdmacm1:amd64 pve-manager pve-qemu-kvm libcephfs2 librbd1 proxmox-ve python3-rbd pve-container librgw2 python3-rados librados2 ceph-fuse python3-rgw libpve-guest-common-perl libpve-storage-perl ceph-common

touko

旧版本的 MLNX_OFED 对内核版本有要求,不知道你机器上的内核版本是多少?

三三

版本不对,要下载 cx3 对应的低版本才可以

绒绒

楼主在扯吧 , connetx3 的卡, 你sriov后是不能在linux bridge的,只能通过pci设备直连

三三

后面 bridge 我是把 VF 关掉之后做的。文章里也说了,cx3 的 VF 没法用来做 Linux bridge,不管直通进虚拟机还是在 host 里都一样。

touko

没想到搜索问题的时候搜到这篇,竟然是老熟人了2333

理论上说 SR-IOV 的虚拟化实现是性能最高的,估计 r86s 对虚拟化的支持有问题。我买了一台 HP Elitedesk 800G3 也没法直通和激活 SR-IOV,不管换什么系统都不行。我最开始也打算用 PVE 虚拟化+虚拟机 openwrt 的方式,最后因为虚拟化问题还是选择了在宿主机直接跑 OpenWRT。感觉虚拟化的思路是可行且合理的,但是对硬件要求估计要往上提很多。

三三

cx3 这个卡的 VF 虽然能用,但是没法开 trust 模式,也就没法当网桥来用,这点比较坑爹。

发表评论

发表评论代表你授权本网站存储并在必要情况下使用你输入的邮箱地址、连接本站服务器使用的 IP 地址和用户代理字符串 (User Agent) 用于发送评论回复邮件,以及将上述信息分享给 Libravatar Akismet,用于显示头像和反垃圾。