概要
私は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 -XX
pingパケットとそのリンク層ヘッダーの16進ダンプを確認しました。なぜ最新のLinuxボックスのpingを好むが、古いBSDボックスは好まないのか理解できません。自分で見ながら比較してみることができます。貼り付け(これはサポート)。
fastdリンクは問題ではないかもしれません。上記のように、そうでなければ、AWS システムと最新の Linux システム間の Ping は機能しません。
「一般的な容疑者」は責任がないようです。 このページ多くのStackOverflow/ServerFaultページには良いアドバイスがありますが、ここには適用されないようです。 Piでは、転送モードになっていて、関係するすべての人に正しいEthernetアドレスが表示されることがbrctl show
正常に見えます。 「filter」テーブルと「nat」テーブルの両方が空で、ACCEPTポリシーがあります。テーブル「フィルタ」も同様に動作します。実行すると何も提供されません(項目なし)。brctl showstp br0
eth0
lance0
brctl showmacs br0
ebtables
arptables
iptables-save
ブリッジはイーサネットブロードキャストフレームを配信します!場合によっては、BSDシステムの古いNTPデーモンがブロードキャストUDPメッセージを送信します。これは、ff:ff:ff:ff:ff:ffとしてアドレス指定されたイーサネットブロードキャストフレームに圧縮されます。このフレームするフレームがブロードキャストアドレスではなくアドレスに送信されても、AWSホストに到達するようにします。いいえ効果があったようです。
これらすべては数ヶ月前に行われました。2月初めに壊れていたようです。
質問
それでは、PiのLinux用イーサネットタブブリッジが、IPペイロードを含むいくつかの古い(非ブロードキャスト)イーサネットフレームを配信したくないのはなぜですか?知っている人がいる場合、これらのフレームワークの違いを識別するために使用できる他のツールはありますか?