看个例子:
1.on server
ifconfig eth4 192.168.1.10/24 up
ifconfig eth5 192.168.1.11/24 up
2.on client
ifconfig eth4 192.168.1.20/24 up

3.on client
ping 192.168.1.10 -c 3
ping 192.168.1.11 -c 3

Actual results:
[root@client ~]# arp
Address HWtype HWaddress Flags Mask Iface
192.168.1.11 ether 00:1B:21:4A:FE:98 C eth4 <===== 错了吧?
192.168.1.10 ether 00:1B:21:4A:FE:98 C eth4

Expected results:
[root@client ~]# arp
Address HWtype HWaddress Flags Mask Iface
192.168.1.11 ether 00:1B:21:4A:FE:99 C eth4
192.168.1.10 ether 00:1B:21:4A:FE:98 C eth4

Additional info:
23:28:23.272726 arp reply 192.168.1.10 is-at 00:1b:21:4a:fe:99 (oui Unknown)
23:28:23.272783 arp reply 192.168.1.10 is-at 00:1b:21:4a:fe:98 (oui Unknown)

23:28:46.750823 arp reply 192.168.1.11 is-at 00:1b:21:4a:fe:99 (oui Unknown)
23:28:46.750850 arp reply 192.168.1.11 is-at 00:1b:21:4a:fe:98 (oui Unknown)
这个问题是是由Linux的路由和arp机制造成的,主要是路由。
在Linux中,IP地址是主机的属性,而不是接口的属性。
这就造成在反向路由查找时,可以考虑包进入的接口,也可以不考虑。
此时arp请求包会有两个应答,client会选择后一个。
关键是server会接着发一个arp请求,并且始终从eth4发出来(因为eth4的路由在前边),
这样client在应该该arp请求时,又会更新arp表。
所以我们在client上看到arp表中始终是eth4的mac。

解决方法:
1 echo 1 > /proc/sys/net/ipv4/conf/all/arp_filter 
2 ip route add 192.168.1.20/32 nexthop via 192.168.1.10 weight 1 nexthop via 192.168.1.11 weight 1

这里,添加的新路由的作用是以192.168.1.20作为目标地址进行反向路由检查时,依次循环选择eth4和eth5。
而arp_filter的作用是,只有通过了反向路由检查的包才会发出去。

最新文章

  1. wpf 获取datagrid中模板中控件
  2. iOS- 制作U盘安装Mac OS X 系统
  3. Leetcode: Find Leaves of Binary Tree
  4. InfoCube信息立方体的优化
  5. AC日记——将字符串中的小写字母换成大写字母 openjudge 1.7 13
  6. [Effective JavaScript 笔记]第61条:不要阻塞I/O事件队列
  7. java反射机制详解 及 Method.invoke解释
  8. [大牛翻译系列]Hadoop 翻译文章索引
  9. [置顶] 用Wireshark保存RTP的负载码流
  10. Ural 1046 Geometrical Dreams(解方程+计算几何)
  11. AngularJS的$http服务的应用
  12. Wpf中MediaElement循环播放
  13. Blocks and Variables
  14. iOS开发基础篇-手写控件
  15. 爬虫基础之urllib库(代码演示)
  16. (转)Thread中yield方法
  17. WF的初步学习与创建
  18. (3)什么是函数(函数的定义、形参、实参、默认形参、可变长函数args|kwargs)
  19. 【Spring-AOP-学习笔记-6】@AfterThrowing增强处理简单示例
  20. 解决java获取系统时间差8个小时 专题

热门文章

  1. ZetCode PyQt4 tutorial Drag and Drop
  2. 设置Nginx日志
  3. vue+webpack多个项目共用组件动态打包单个项目
  4. 使用ksync 加速基于k8s 的应用开发
  5. ballerina 学习十八 事务编程
  6. sysbench 测试mysql性能
  7. FT5X06 如何应用在10寸电容屏
  8. 安装wamp 缺少msvcr100.dll
  9. Java 将指定字符串连接到此字符串的结尾 concat()
  10. Java之MD5加密