红联Linux门户
Linux帮助

Linux中跨网段ping问题

发布时间:2016-02-24 10:46:48来源:linux网站作者:Kevin_Smart

问题是这样的,如图,pc的ip是192.168.1.2,设备是linux内核2.6.35,有两个网卡,一个是带外管理口192.168.1.1

Linux中跨网段ping问题

一个是192.168.2.1。pc与设备的带外口也就是192.168.1.1相连

将pc的gateway设置为192.168.1.1

pc ping 192.168.2.1是通的

因为pc上没有2网段的地址,所以pc会向网管发送2.1mac 的arp请求


1.1收到后会通过路由查找2.1,于是发送arp reply,链路是通的

Linux中跨网段ping问题

当保持其他配置不变,在pc上添加192.168.2.2

此时ping 2.1时,不通

因为pc上存在2网段的ip,因此会发送源地址为2.2的arp请求

当1.1收到来自于2.2的arp时,由于1.1跟2.2不在一个网段中,1.1会丢弃arp(arp不能跨网段)

而实际情况pc收到了带有2.1 ip和1.1 mac 的arp reply

Linux中跨网段ping问题

图ip不准确
因此怀疑linux 2.6.35 arp处理有问题,从抓包来看,iCMP没有回应,应该是1.1丢弃了,因此ICMP处理应该没问题。


不知linux内核中是不是有其他考虑没有丢弃跨网段的arp

将内核中arp处理了一下,将不在一个网段的arp丢弃

在 net/ipv4/arp.c中

arp_process函数中

 if (arp->ar_op == htons(ARPOP_REQUEST) &&
ip_route_input_noref(skb, tip, sip, 0, dev) == 0) {
//add here
if(in_dev->ifa_list)
{
if((sip & in_dev->ifa_list->ifa_mask) != (in_dev->ifa_list->ifa_address & in_dev->ifa_list->ifa_mask))
goto out;
}

//add end


本文永久更新地址:http://www.linuxdiyf.com/linux/18356.html