在昨天的一文中,我吐槽了Linux各种虚拟网卡设计的不完备,也只是吐槽,其实我并没有别的意思,我也懒得去做一些hack型的配置去规避这些不完备,我只是吐槽而已。

昨晚,有网友要求我给出一些解法,因为他也遇到了这个问题:

他希望被bonding的eth0可以独立工作,是的,作为管理口。

于是,这位朋友要求我给出一个解法,我意识到这个需求的普遍性,而且不是每个人都想去配置什么macvlan,ipvlan的,于是,我就想再写点。

在我的环境中:

enp0s9被bonding到bond0。

我希望bond0处理2.0.0.0/8的流量。

我希望enp0s9处理1.0.0.0/8的流量。

我不希望以上通信受制于bonding的mode。

那么开始吧。

先看下为什么在enp0s9被bonding之后不通,stap一下子就看出来了,先看下现象:

[root@localhost bond]# arp -n

Address HWtype HWaddress Flags Mask Iface

192.168.56.1 ether 0a:00:27:00:00:00 C enp0s8

[root@localhost bond]# ping 1.1.1.2

PING 1.1.1.2 (1.1.1.2) 56(84) bytes of data.

From 1.1.1.1 icmp_seq=1 Destination Host Unreachable

From 1.1.1.1 icmp_seq=2 Destination Host Unreachable

From 1.1.1.1 icmp_seq=3 Destination Host Unreachable

From 1.1.1.1 icmp_seq=4 Destination Host Unreachable

^C

--- 1.1.1.2 ping statistics ---

4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 2999ms

pipe 4

[root@localhost bond]# arp -n

Address HWtype HWaddress Flags Mask Iface

1.1.1.2 (incomplete) enp0s9

192.168.56.1 ether 0a:00:27:00:00:00 C enp0s8

很清晰是不是?

再看下stap的输出:

[root@localhost bond]# stap -e 'probe kernel.function("arp_process"){name = kernel_string($skb->dev->name); printf("%s\n", name);}'

bond0

bond0

bond0

Oh,yes!arp被bond0接管了,enp0s9作为slave不再呈现独立的网卡。

怎么办?改了便是!

这里我觉得就是bonding本身以及其rx_handler实现有问题!!用MAC地址区分一下不就得了??

master把slave屏蔽本身就不合理!!

好,我就按照我的使用场景,改了它,首先,我把作为master的bond0和作为slave的enp0s9的MAC地址区分开,分别设置,然后再修改arp_process的处理逻辑:

%{

#include

#include

%}

function change_indev:long(skb:long)

%{

struct sk_buff *_skb = (struct sk_buff *)STAP_ARG_skb;

STAP_PRINTF(" aa :%s\n", _skb->dev->name);

if (!strcmp(_skb->dev->name, "bond0")) {

struct bonding *bond = netdev_priv(_skb->dev);

struct slave *curr = bond->curr_active_slave;

STAP_PRINTF(" aa :%s\n", curr->dev->name);

// 更换一下接收device即可

_skb->dev = curr->dev;

}

%}

probe kernel.function("arp_process")

{

change_indev($skb);

}

probe begin

{

}

OK,再来一次:

[root@localhost bond]# stap -g ./probe.stp

WARNING: side-effect-free probe: keyword at ./probe.stp:27:1

source: probe begin

^

aa :bond0

aa :enp0s9

^C^[[A[

开始ping吧:

[root@localhost bond]# ping 1.1.1.2

PING 1.1.1.2 (1.1.1.2) 56(84) bytes of data.

64 bytes from 1.1.1.2: icmp_seq=1 ttl=64 time=0.480 ms

64 bytes from 1.1.1.2: icmp_seq=2 ttl=64 time=0.417 ms

^C

--- 1.1.1.2 ping statistics ---

2 packets transmitted, 2 received, 0% packet loss, time 1001ms

rtt min/avg/max/mdev = 0.417/0.448/0.480/0.037 ms

通了。

这种问题都是小问题,很容易就能解决,有人可能会说,配置一个macvlan不香吗?呵呵,我觉得这根本就不是一个问题。

我只管痛则不通,通则不痛,不通的给整通了就行,别的什么,我才不关心。

你能说出1000个理由证明这么做不合理,你也能说出1000个理由维护这么做的合理性,怎么说呢?都归于皮鞋吧。

浙江温州皮鞋湿,下雨进水不会胖!

linux删除slave网卡,Linux bonding网卡与其slave共同使用相关推荐

  1. linux删除多余日志,linux 删除日志

    https://jingyan.baidu.com/album/c1a3101e73129ade656deb9d.html?picindex=2 里面的 ls -s 可以看到目录 https://zh ...

  2. 如何linux删除文件夹,linux删除文件夹,教您电脑的linux怎么样删除文件夹

    有些爱学习的用户会去操弄linux软件程序,在操作linux的过程中,有时候要删除一个文件夹,往往会提示次此文件非空,没法删除,这对于刚接触的用户来说无疑是一个巨大的困难,为此,小编这就来跟大家分享l ...

  3. linux删除相同用户,Linux 批量添加和删除用户

    Linux批量添加和删除用户 一,工具作用Linux批量添加和删除用户 在Linux用户管理中,经常需要用到批量添加或删除用户:如果用 useradd或adduser来添加大量用户,对系统管理员的体力 ...

  4. linux删除网卡信息,重新设置网卡

    centos系统删除多余网卡的方法 一.删除系统中中多余的ifcfg-eth0.bak Centos系统更改网卡或网卡MAC地址后会出现个eth0.bak配置备份文件 解决方法: /etc/sysco ...

  5. linux删除配置信息,linux 配置信息

    # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # 查看CPU信息 # hostn ...

  6. linux删除配置信息,Linux LVM逻辑卷配置过程详解(创建、扩展、缩减、删除、卸载、快照创建)...

    一.预备知识 LVM全称为Logical Volume Manager逻辑卷管理器,LVM是Linux环境中对磁盘分区进行管理的一种机制,是建立在硬盘和分区之上.文件系统之下的一个逻辑层,可提高磁盘分 ...

  7. php linux 删除文件夹,linux下如何删除文件夹

    linux下删除文件夹的方法:可以使用[rm -rf 目录名]命令进行删除,如[rm -rf /var/log/httpd/access],表示删除/var/log/httpd/access目录及其下 ...

  8. linux 删除sysadm用户,linux 用户和组命令整理及详细介绍

    1.列出当前系统上所有已经登录的用户名,注意:同一个用户登录多次,则只显示一次即可. [root@node2 ~]# who root pts/0 2016-10-08 13:28 (10.106.6 ...

  9. Linux 删除权限 umask,linux中的umask控制文件或目录的默认权限

    umask命令可以控制着创建文件或目录时指定给文件或目录的默认权限.它使用八进制表示法表示从文件模式属性中删除一个位掩码.使用不带任何参数的umask命令,查看当前掩码值.一般都是0002或0022. ...

  10. linux 删除模块命令,Linux系统中的Modprobe命令:添加和删除Linux内核模块的方法

    在本文中,我们将说明如何使用modprobe命令在Linux内核中添加和删除Linux内核模块.modprobe是kmod的一部分,kmod是一种二进制文件,可实现用于管理Linux内核模块的多个程序 ...

最新文章

  1. ajax请求中的reponseType和withCredetials分别是啥?
  2. 最大全0/1子矩阵的探究
  3. linux 使用paho C库实现mqtt客户端
  4. 智商145!比利时神童9岁读完大学,成史上最年轻大学毕业生
  5. Android 系统(78)--应用安装时间长
  6. 计算机上无线网络开关在哪里,笔记本电脑无线网开关在哪_笔记本电脑如何打开无线网-win7之家...
  7. overflow c语言_C语言表结构(一)
  8. AtCoder Beginner Contest 132 解题报告
  9. 新版淘宝宽屏轮播代码带缩略图
  10. Vue中用到jeDate日期控件,Vue对象中的值滞后,总是滞后当前选择的值
  11. 微信小程序开发页面无法显示,未注册报错
  12. 沙盘游戏让我变成“诗人”
  13. VScode插件(自用)
  14. 测试阶段划分为哪几个阶段?
  15. 使用自然语言处工具HanLP获取人名
  16. IT行业中的互联网领域和软件领域工作方向有什么区别?
  17. 淘宝新开店铺没有生意该如何推广和运营
  18. Web前端从入门到精通自学之路
  19. opencv3+python3.5成语填字游戏(二)填字图片汉字提取和识别
  20. Wi-Fi的 8-stream sounding 和 8x8 MU-MIMO之间有什么关系?

热门文章

  1. js获取字符串的字节长度
  2. 使用YOLOX进行物体检测
  3. 常用sql语句(备忘)
  4. Attention注意力机制——ECANet以及加入到1DCNN网络方法
  5. php gbk转utf8
  6. 计算机清理软件,想要清理你的 Windows 电脑?用这 4 款清理软件就对了
  7. 韩顺平--IO流专题
  8. 南京大学机器学习与数据挖掘所ECCV16视频性格分析竞赛冠军技术分享
  9. GreenDao封装使用
  10. UDP的主要特点、首部格式及功能