环境是OVH的物理机器,买了个附加ip,分配给虚拟机使用。
情况是linux没问题一切正常,运行一阵子了,今天换了FreeBSD 14.2则网络怎么配置都不通。
尝试过更换虚拟mac,更换虚拟网卡的类型,等等等等
网络通信需要的几个元素:ip地址、掩码、网关,因为linux虚拟机运行没毛病,所以我觉得这玩了20多年的最基础的配置应该不会出错,但还是耐着性子一个字母一个字符的看,老夫瞪着眼睛反复看了好多遍没问题啊……
但万万想不到啊,纯属无意看了下arp表,网关那个ip找不到mac地址。。。自从arp欺骗这个事绝迹于江湖之后,老夫网络专家出身的人都快忘了还有arp和rarp这回事。。。
手工绑定一下arp,一切正常了,重启又重现问题。搜了一下这系统似乎还没有永久写入静态arp表的原生方案,于是在rc.conf按照官方文档写了这么两行:
static_arp_pairs="gw" static_arp_gw="1.2.3.4 00:f2:03:88:ff:ff"
我tm只换了两个地址,按说没毛病啊,可重启后故障依旧。。。
最后我也不会玩了,写了个rc.local完事:
arp -s 1.2.3.4 00:f2:03:88:ff:ff
本文写完后,忽然想起上个月3个物理机全部在同一时段网络中断,老夫估计是ovh这边做了一些调整导致的,因为同样的环境我记得很清楚,以前是正常使用的。当时追问了一周时间才正面回复我说,他们做了机架调整所致,但也没说细节。
=======================================
随手小科普一下吧。
大体上,网络分为交换网络和路由网络两种。据我所知,网络通信只有这两种情况。当然你要抬杠的话可能会说两个机器的网卡直连算什么网络?那其实依然是交换网络……
注意哦,有些路由设备(可以)具备交换设备的功能,同时某些交换设备(可以)具备路由设备的功能,但并不影响他们之间的区分,就好比厨子会开车,但并不影响他主业是厨子。交换设备的性能会远远高于路由设备,因为他们工作层级不同。我们知道最简单的道理:越简单,越高效。
前面说的ip地址、掩码、网关这些,属于路由网络的范畴,应用于不同网段之间的通信,每个网络中的节点进行数据发送的时候,如果目标节点跟自己没在同一个子网,则把数据丢给网关或者默认路由(一般是路由器),然后路由设备来处理不同网段之间的通信,这中间数据包、数据报、数据帧什么玩意的,我也记不住了。
而交换网络可以理解为同子网内的通信,或者说一个什么名字内的通信,记不住名了,好像是同一个广播域吧。因为交换设备的工作层级比较低,所以效率远远高于路由设备。如果发送数据的时候目标节点跟自己处于同一子网,那么由于同一子网内的通信是不需要进行路由的,所以点对点干起来就完事了。交换环境中的通信实际上是基于mac地址而不是ip地址。而arp协议就是把ip地址翻译成mac地址的协议,反过来rarp就是把mac地址转换为ip地址的协议。
如果不理解的话自己试一下,自己开几个虚拟机,网卡绑定在同一虚拟交换机或者虚拟网桥上,分别试一下相同子网和不同子网之间的通信情况就明白了。
本次的故障就发生于交换网络,而数据中心环境中,交换网络很少出问题,所以连我这20多年前的CCNP都忽视了这方面。而且原因我都没搞明白,因为linux和windows确实都没问题,个人怀疑是ovh的防火墙似乎对freebsd系统的arp包给错误拦截了。