web-dev-qa-db-ja.com

トラフィックを転送しないGREを介した透過イーサネット

Linux 2.6.30.9で実行していて、GREトンネルを介して透過イーサネットをセットアップしようとしています。使用されるネットワークトポロジは次のとおりです。

enter image description here

トランスペアレントイーサネットオーバーGREを使用してPC1とPC2をブリッジしたい。 RouterAは、RouterBとしてppp0を介してインターネットに接続されています。両方のインターネット接続はPPPOE(PPPoEoA PVC)です。

私もです:

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

次に、PC1からPC2にPINGリクエストを実行します。

ping 192.168.1.33

RouterAでtcpdumpを実行すると、ppp0(Wireharkで開かれたpcapファイル)上にARP要求フレームが表示されます。

enter image description here

Ppp1に接続されたRouterBでtcpdumpを実行すると、ARP要求が到着したのに、L2でPC2に転送されていないことがわかります。 PC2にARPリクエストが表示されません。

静的ARPエントリを試してみましたが、ICMP要求にも同じ問題があり、PC2に転送されません。

Ebtablesルールはありません。 iptablesルールもありません(デフォルトのアクションはebtablesとiptablesのACCEPTです)。ブリッジインターフェイスなどにppp0を追加する必要がありますか?どんな提案も歓迎します。

1
MABC

この問題は、サーバー障害についてここで尋ねた質問に関連していました IP/GREはカーネルでコンパイルされましたが、gre0インターフェイスは存在しません

gre.cのGREデマルチプレクサドライバーにGREプロトコルハンドラーをカーネルに登録させることで、最初の質問を解決しました。しかし、GREパケットが到着したとき、GREハンドラーはip_gre.c関数を指していないことがわかりました(GREデマルチプレクサードライバーはパケット内のGREバージョンをチェックし、バケットを正しいプロトコルハンドラーに渡すと思われますが、私の場合はそれが指していますヌル)。

gre.cがGREプロトコルハンドラーを登録するコードの一部にコメントを付け、ip_gre.cがGREプロトコルハンドラーを登録するコードの一部のコメントを外しました。これで、GREパケットが到着すると、カプセル化が解除されて次のレイヤーにコミットされます。これで、PC1からPC2に問題なくpingを実行できます。この問題は、Googleでエラーメッセージを検索したため、組み込みデバイスの多くの人に発生していると思います https://www.google.com/search?q=ipgre+init%3A+can%27t+ add + protocol GREデマルチプレクサドライバーがまだGREハンドラーを登録していて、このエラーのあるデバイスがいくつか見つかったためにIPGREドライバーを起動できない場合。

0
MABC