Chinaunix首页 | 论坛 | 博客

pwp

  • 博客访问: 194980
  • 博文数量: 12
  • 博客积分: 1411
  • 博客等级: 上尉
  • 技术积分: 321
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-06 13:52
个人简介

不需要什么介绍

文章分类

全部博文(12)

文章存档

2013年(1)

2012年(1)

2011年(2)

2010年(6)

2008年(2)

分类: LINUX

2012-01-05 14:43:04

看个例子:
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的作用是,只有通过了反向路由检查的包才会发出去。


阅读(5416) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~