ipv4 路由,ipv6桥接时arp的问题,求大神指教
hi,最近做开发遇到 了一个问题,我们在做一款路由器产品,要支持ipv4和ipv6,对于ipv4我们就是用nat和route,而对于ipv6,我们想做成一个桥 ,linux的桥负责转发etherype为ipv6的所有报文 ,不会交到上层的ipv6协议栈当中。我们有两个网卡,一个是wan口usb0,一个是lan口eth0和wlan0,我们把usb0, eth0和wlan0都放在linux下的一个桥br0下面,然后用ebtable,在ebtables的broute中指定所有非ipv6的报文都必须交给linux协议栈处理,桥 只处理ipv6的报方,规则 是ebtables -t broute -A BROUTING -p ! ipv6 -j DROP ,然后我们发现了一个问题 ,这样做了以后,对于lan侧发住br0的报文由于在桥接的时候就直接 返加到协议栈里了,这样skb->dev还是原始设备(eth0和wlan0),由于 eth0和wlan0本身是没有ip的,这样对于收到的lan侧的arp报文就不会产生回应了(我把eth0上收到的包都dump出来了),于是lan侧就不通了。我把br0的地址干掉,然后给eth0配置上一个192.168.1.1,发现eth0上的报文 就没问题了,但是wlan0上的有问题了。
所以我觉得根本原因是桥接处理时由于对非ipv6的报文就直接丢到上层去了,并没有改变相应的skb->dev导致了不能正确deliver,不知道大家有没有什么好的解决方案?非常感谢大家。
我最初是想直接在__netif_receive_skb当中直接硬编码指定skb->dev,但又觉得风险太大了,大家有没有什么好的建议,非常感谢。。 顶一下吧,求指教 在来顶一下,求帅哥哥,美女们指导一下呀,跪求呀 LZ的问题听下来就是lan 和 wlan 口放在一个bridge, 对于ipv6 的packet 完全桥接, 对于ipv4 交给协议栈处理, 所以连同ARP packet 也一同交给协议栈了, 协议栈因为这个ARP自己没有兴趣, 即这个ARP和自己无关,所以丢弃掉了, 造成真正感兴趣的destination 无法接收到这个ARP, 是这样吗?
你可以这样做: 对于ARP(ethertype 0x0806)复制两份, 一份交给协议栈,一份和IPv6 一样的处理方式, 即桥接.
楼上的一语惊醒梦中人啊,你说得太对了,让arp报文直接交给桥处理就完了,呵呵,没我想得那么复杂,牛x呀 路过了~~~~~~~·· 最后还是摒弃了这种 方案,
页:
[1]