Linux ブリッジは以前の BSD システムの IP パケットを転送しませんが、他の Linux システムのパケットは問題ありません。

Linux ブリッジは以前の BSD システムの IP パケットを転送しませんが、他の Linux システムのパケットは問題ありません。

概要

私はLinuxシングルボードコンピュータをAWSホストとして使用しています。非常に古い、非常にまれなUnixコンピュータ。この設定は、sudo apt upgrade図のようにシングルボードコンピュータでいくつかの問題が発生した最近まで機能しました。この写真ではブリッジは、もはや既存のUnixボックスのいくつかのイーサネットフレームを転送しないようです。〜する最新のLinuxコンピュータのイーサネットフレームに対してこれを行います!何が変わったのか、どうやって解決するのか知りたいです。

設定

上記のリンクチャートにアクセスできない場合、回路図は次のようになります。

                     +----------------------------+            +----------------+
                     |  Raspberry Pi              |            |  AWS host      |
                     |                +--------+  |            | +---------+    |
+---------+          |                | fastd   \....internet.....\  fastd |    |
| Vintage |--10bT--[eth0]===[br0]===[lance0]    / |            |  /   [lance0]  |
| BSD 4.2 |          |                +--------+  |            | +---------+    |
+---------+          |                            |            |                |
                     +----------------------------+            +----------------+

この設定では、インスタンスはクイック(TAPモードでは)PiとAWSホストは、2つのシステム間で仮想イーサネットケーブルとして機能します。私はそれが動作するかどうかをテストしました。エーテルPiからAWSへ、またはその逆にリンクを介して生のイーサネットフレームを双方向に送信します。イーサネットインターフェイスの名前が必要なlance0ため歴史的な貢献

これで、Piで仮想イーサネットケーブルと物理イーサネットインターフェイスをeth0仮想イーサネットハブに接続したいと思いますbr0。これはあなたの標準的なTAPブリッジです。

ip link add name br0 type bridge
ip link set dev br0 up

ip link set dev lance0 master br0
ip link set dev eth0 master br0

これは、従来のBSDボックスと[lance0].......[lance0]「イーサネットケーブル」を同じイーサネットハブに接続したのと同じです。 BSDとAWSは、2台のコンピュータのイーサネットを介して互いに通信できる必要があります。

質問

私がAWSホストにログインしたと想像してください。 IPが割り当てられています(もちろんv4)lance0。既存のBSDボックスにpingを送りたいです。作業を簡素化するために、BSDシステム(自己IPを含む)とAWSホストでARPテーブルを手動で設定しました。ただトラフィックはICMPパケットになります(コンピュータはARP交換をスキップできます)。 pingがうまくいかなかったので調査のためにtcpdump -i [interface]。我々は以下を観察した。

  • よさそうだeth0。 AWS ボックスのエコーリクエストと BSD ボックスのエコー応答を表示できます。
  • br0同じ物語:よさそうだ。
  • ただし、lance0エコーリクエストのみ表示できます。エコ返信が削除されます!

eth0それでは、ケーブルの終わりに36年前のBSDシステムを最新のLinuxシステムに置き換えることを想像してみてください。驚くべきことに:Pingはクリアされ、すべてが正常です!

観察結果

イーサネットとTCP / IPは古いBSDシステムでうまく機能します。すべてのブリッジングを削除し、PiにIPを接続し、eth0一日中PiからBSDボックスをping/telnet/ftpできます。

ICMPパケットはBSDとLinuxで同じように見えます。ブリッジを使用して、tcpdump -i br0 -XXpingパケットとそのリンク層ヘッダーの16進ダンプを確認しました。なぜ最新のLinuxボックスのpingを好むが、古いBSDボックスは好まないのか理解できません。自分で見ながら比較してみることができます。貼り付け(これはサポート)。

fastdリンクは問題ではないかもしれません。上記のように、そうでなければ、AWS システムと最新の Linux システム間の Ping は機能しません。

「一般的な容疑者」は責任がないようです。 このページ多くのStackOverflow/ServerFaultページには良いアドバイスがありますが、ここには適用されないようです。 Piでは、転送モードになっていて、関係するすべての人に正しいEthernetアドレスが表示されることがbrctl show正常に見えます。 「filter」テーブルと「nat」テーブルの両方が空で、ACCEPTポリシーがあります。テーブル「フィルタ」も同様に動作します。実行すると何も提供されません(項目なし)。brctl showstp br0eth0lance0brctl showmacs br0ebtablesarptablesiptables-save

ブリッジはイーサネットブロードキャストフレームを配信します!場合によっては、BSDシステムの古いNTPデーモンがブロードキャストUDPメッセージを送信します。これは、ff:ff:ff:ff:ff:ffとしてアドレス指定されたイーサネットブロードキャストフレームに圧縮されます。このフレームするフレームがブロードキャストアドレスではなくアドレスに送信されても​​、AWSホストに到達するようにします。いいえ効果があったようです。

これらすべては数ヶ月前に行われました。2月初めに壊れていたようです。

質問

それでは、PiのLinux用イーサネットタブブリッジが、IPペイロードを含むいくつかの古い(非ブロードキャスト)イーサネットフレームを配信したくないのはなぜですか?知っている人がいる場合、これらのフレームワークの違いを識別するために使用できる他のツールはありますか?

ベストアンサー1

おすすめ記事