运营商BiDi SFP在Cisco交换机上能起链路,插在pfSense设备的X710端口上却没有carrier
家庭网络环境。运营商给的光纤接入是一个1G的BiDi模块,我想直接把它插进防火墙本身,而不是仅仅为了转换介质,在设备前面再放一台交换机。
- Protectli Vault 6,运行pfSense,X710端口,ixl驱动
- 运营商提供的1G BiDi模块,型号是EZConn ETB43315-7S34-FR
- 同一个模块插在Cisco交换机上能毫无问题地起链路
- 同一个插槽里插一个Cisco 10G LR的FTLX1474D3BCL-CS也能正常起链路
把BiDi插在ixl1上,端口一直停留在no carrier,日志对原因也毫不吝啬:
ixl1: no carrier
i40e link status timeout, I40E_ERR_TIMEOUT
Link failed because an unqualified module was detected
同一批消息里还有一条获取PHY能力失败的报错。
已经尝试过:
ifconfig ixl1 media 1000baseLX—— 被拒绝,端口不接受这个介质类型sysctl dev.ixl.1.advertise_speed—— 设置了,完全没有效果- 在loader.conf里加
hw.ixl.unsupported_sfp=1并重启 —— 没用,unqualified module那行日志照样出现
所以网卡能看到模块,只是决定不喜欢它,然后就到此为止了。这些端口到底有没有办法跑1G光模块,还是老老实实在防火墙前面放一台交换机才是正解?
Comments 6
你这里其实是两个独立的问题叠在一起,得按顺序拆开处理。
第一,固件。6.1这个版本已经老到网卡根本无法正确呈现模块信息,这就是你的功率读数一片空白的原因。升级到9.40之后,才会显示出真实的RX和TX功率。先做这一步,不然你就是在盲调,后面的一切测试都没意义。
第二,这才是真正让端口起不来的原因:在X710上,模块的资质校验是在网卡固件里做的,不在驱动里,所以你试过的那些旋钮一个都碰不到它。这就是为什么
hw.ixl.unsupported_sfp=1在这里毫无作用,sysctl dev.ixl.1.advertise_speed被悄悄无视,以及为什么ifconfig ixl1 media 1000baseLX会被拒绝——端口不会为一个已经被判定为Link failed because an unqualified module was detected的模块去选择1G介质。对我有效的办法是把光模块重编码成Intel的厂商数据。我用的是FS的SFP-GE-BX模块,用FS Box往里面写入Intel的厂商数据,改完之后它们在autoselect下就直接起来了,完全不用强制介质类型,也不用碰任何sysctl。注意这改的是模块,不是网卡,运营商给的那个EZConn不是你的东西,不该去改它——自己买一对波长匹配的BX模块,改那一对就行。
如果你不想碰EEPROM,那就用网卡本来就认的光模块。你那个Cisco 10G LR就是一个例子,如果运营商能在链路某处给你铜口,FS的RJ45 1G SFP+也是一个选择。
首先要问:那块X710上是什么网卡固件版本?这些网卡出厂时带的版本老到足以从根本上改变模块被呈现的方式,这一点比你摆弄的任何sysctl都更关键。
紧接着的第二个问题:BiDi插在ixl1上时,端口状态里有没有显示RX和TX功率,还是模块只是被列为present而完全没有读数?这两个答案合在一起,能告诉我们网卡是拒绝了一个它能读出来的模块,还是根本还没读到那一步就失败了。
固件是6.1,出厂自带的什么就是什么——我从没碰过它。
是的,没有任何读数。运营商的BiDi插在ixl1上时,模块被列为present,但RX和TX功率都是空的。同一个插槽里的Cisco 10G LR是有功率读数的,我猜这正是你想指出的那个区别。
在为这活儿买一个编程器之前,有件事值得先知道:FS Box只能给FS自己的模块编程。有人往里面塞了别的厂家的模块,结果账号被锁了一周,所以它不是一个通用的重编码工具,它是给一家厂商的光模块用的专用工具。
如果你需要能处理任意模块的工具,Flexoptix和其他一些编程器能做同样的事,只是价格贵不少,Ubiquiti那个wizard则是便宜档里的选择。对于一对BX模块这种小需求,通常最省事的办法就是从你手上这台设备同一个厂商那里买光模块。
症状很像,原因却完全不同,所以那些看起来无聊的检查千万别跳过。
我有一块Supermicro AOC-STGN-i2S,跑在pfSense下,ix1上插着一个1G的Ubiquiti UF-MM-1G,一直是no carrier。
ifconfig -v ix1列出来的介质只有autoselect和10Gbase-SR,ifconfig ix1 media 1000baseTX直接返回device-not-configured的错误,看起来就跟驱动拒绝在10G端口上跑1G一模一样。我把这块网卡挪到一个Ubuntu的live系统里:还是没有链路,无论是DAC还是那个模块都不行。然后我换了第二个完全相同型号的Unifi模块,立刻就起链路了,在Ubuntu和pfSense下都是如此。第一个模块就是坏的。准备一个备用的同型号模块和第二台主机,只需要二十分钟就能排除掉一半的猜测。你这个案例里,unqualified module那条消息已经把嫌疑犯指得相当清楚了,所以你大概率没问题,但在花钱买编程器之前,这也算是廉价的保险。
结果,按发生的顺序说。
先升级固件,从6.1到9.40。模块立刻开始报告RX和TX功率,但运营商那个BiDi依然拒绝起链路,unqualified module那行日志也照样在。所以固件升级只是让你看得见,别的什么都没解决。
然后是一对被重编码成Intel厂商数据的FS SFP-GE-BX。两端都在autoselect下起来了,没有强制介质类型,没有
hw.ixl.unsupported_sfp,loader.conf里什么都没留。我把之前瞎折腾时设置的那些sysctl都回退了,链路照样保持稳定。运营商那个模块放进抽屉当备件了,反正也不是我的东西不该去改它,防火墙前面那台交换机也撤掉了。