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,但又觉得风险太大了,大家有没有什么好的建议,非常感谢。。
自己先顶一下,占个二楼,自己比较二,呵呵 呵呵,可以让arp报文也让桥处理
页:
[1]