Linux中跨网段ping问题


问题是这样的,如图,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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值