GRE上的透明以太网不转发stream量

我在Linux 2.6.30.9上运行,一直试图在GRE隧道上build立一个透明的以太网。 使用的networking拓扑结构如下所示:

在这里输入图像说明

我想通过GRE使用透明以太网桥接PC1和PC2。 RouterA作为RouterB通过ppp0连接到Internet。 两个互联网连接都是PPPOE(PPPoEoA PVCs)。

所以我做:

在RouterA(linux 2.6.30.9)中:

ip link add testgre type gretap remote 193.152.243.206 local 95.121.205.77 ttl 255 brctl addif br0 testgre ip link set testgre up 

在RouterB(linux 2.6.30.9)中:

 ip link add testgre type gretap remote 95.121.205.77 local 193.152.243.206 ttl 255 brctl addif br0 testgre ip link set testgre up 

一些命令输出:

在RouterA(RouterB类似的输出)中:

 # ip link show testgre 36: testgre: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1442 qdisc pfifo_fast state UNKNOWN qlen 1000 link/ether 5f:79:cd:4d:c6:57 brd c1:98:f3:ce:ff:ff # brctl show bridge name bridge id STP enabled interfaces br0 8000.5f79cd4dc657 no eth0.5 eth0.4 eth0.3 eth0.2 wlan0 testgre 

然后我做PING请求从PC1到PC2:

 ping 192.168.1.33 

我在RouterA中运行tcpdump,并通过ppp0(Wireshark打开的pcap文件)看到ARP请求帧:

在这里输入图像说明

我在连接到ppp1的RouterB上运行tcpdump,发现ARP请求已经到达,但是不会在L2转发给PC2。 我没有看到PC2中的ARP请求。

我尝试使用静态ARP条目,但ICMP请求具有相同的问题,不会将其转发给PC2。

没有ebtables规则。 也没有iptables规则(默认行动是接受ebtables和iptables)。 我应该添加ppp0桥接接口或类似的东西? 任何build议都欢迎。

这个问题和我在内核编译的服务器故障IP / GRE问题有关, 但是gre0接口不存在 。

我通过让gre.c GRE多路分解器驱动程序在内核中注册GRE协议处理程序来解决第一个问题。 但是我发现,当GRE数据包到达时,GRE处理程序没有指向任何ip_gre.c函数(GRE解复用器驱动程序用于检查数据包中的GRE版本,并将数据包传递给正确的协议处理程序,但在本例中指向NULL) 。

我评论了gre.c注册GRE协议处理程序的代码片段,并且我已经取消了ip_gre.c注册GRE协议处理程序的一段代码。 现在,当一个GRE数据包到达时,它被很好的解封装,并提交到下一层,现在我可以ping PC1到PC2没有任何问题。 我认为这个问题是发生在他们的embedded式设备的许多人,因为我search谷歌的错误消息https://www.google.com/search?q=ipgre+init%3A+can%27t+add+protocol当IP GRE驱动程序无法启动,因为GRE多路分解器驱动程序尚未注册GRE处理程序,并且发现有几个设备出现此错误。