很多年前的一个夏日炎热的夜晚,我在一家银行16摄氏度的机房蹲了2小时编写一个功能: 这个问题并没有想象的那么简单,不信你去试一下。 一般而言,当eth0被bridge或者被bonding了之后,它就成了slave,对外就不可见了。但是这真的很合理吗?根本就不合理。 网卡就是一个转发设备,哪来的业务逻辑? Linux虽然实现了bridge,bonding,veth,vlan,macvlan,ipvlan,tun/tap等虚拟网卡,但不要过于神话Linux,有些事它就是做不到,或者非常麻烦。 下面是一个场景: 我的需求如下: 是不是一个很直接的需求?能做到吗? 另外的一台“对端”也一样这么配置。 你会发现,2.2.2.1/2.2.2.2之间的互通是OK的,3.3.3.1/3.3.3.2之间的互通也是OK,然而1.1.1.1/1.1.1.2之间的互通是很有问题的。 这也很容易理解,虽然VLAN 123和bond0在底层都是bond0,但是由于protocol字段可以很容易区分IPv4和802.1Q,所以两个网段不会有任何冲突,然而bond0和enp0s9却会冲突。 所有的问题都出在arp上。 虽然arp_ignore等参数可以按照请求的IP地址区分是否回复ARP,但是 ARP请求的入口是不会变的。统一都是bond0! OK,如果我们承认这一点,姑且就让bond0来处理ARP(但实际上配置enp0s9来响应ARP),那么数据通信则会被rp_filter阻断! 毕竟数据包是enp0s9的master bond0收上去的啊! 于是就是各种没完没了,过了就忘的trick。 我相信很多人都遇到了这类需求,于是才有了macvlan,ipvlan这种主动拆分隔离的虚拟网卡方案: 说白了,本文中enp0s9和bond0的同时并行使用,就是一个纵方向上的macvlan!哈哈。 我相信如果我把本文所遇到问题的解法写出来,又是一篇长篇大论,这是我5,6年前的做法,那个时候经常写这种,全在我这个blog里,能找到很多trick式解决方案。 我不会再写这些了,因为这些方案不可持久,不可维护,除了炫耀 “百无一用的高超技巧” 之外,没有任何意义,我也早已过了那个阶段… 浙江温州皮鞋湿,下雨进水不会胖。
ifconfig enp0s9 down modprobe bonding echo +enp0s9 >/sys/class/net/bond0/bonding/slaves ifconfig bond0 2.2.2.1/8 up ifconfig enp0s9 1.1.1.1/8 up ip link add link bond0 name bond0.123 type vlan id 123 ifconfig bond0.123 3.3.3.1/8 up
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算