Linux中跨网段ping问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fzs333/article/details/50699300


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

一个是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,链路是通的



当保持其他配置不变,在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


图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


展开阅读全文

没有更多推荐了,返回首页