私はマシンに openvpn を設定しようとしています。2 つの異なるタップ インターフェイス (tap0 と tap1) があり、それらのインターフェイスを接続するブリッジがあります。openvpn は、各 TAP インターフェイスのサーバー ブリッジ構成で設定されています。tap0 のクライアントは tap1 のクライアントと通信でき、その逆も同様です。
ブリッジには物理的な NIC は関係しておらず、ブリッジ インターフェイスは IP/ネットマスク/ブロードキャストなしで設定されています。「ifconfig brX up」を 1 回実行するだけで起動します。
2 つのクライアントが両方とも openvpn サーバーに接続され、それぞれが上記の独自のタップ インターフェイスに接続されている場合、2 つのクライアント間で ping を実行できますが、ブリッジ インターフェイスを tcpdump しようとしてもトラフィックが表示されません。
いくつかの点について少し混乱しています:
ブリッジインターフェースにIPを設定する必要はありますか? 仮想インターフェース同士が通信できるようにするだけなので、その理由がよくわかりません。
ブリッジ インターフェイスに割り当てられた IP/ネットマスク/ブロードキャストがないことが、そのインターフェイスを tcpdump したときにブリッジ インターフェイス上の ping トラフィックを確認できない理由ですか?
2 番目の質問の答えが「はい」の場合、iptables を使用してそのインターフェース上のトラフィックをブロック/許可することはできないと思いますが、正しいでしょうか? もしそうなら、そのようなインターフェース上で iptables を使用して実行できる操作を実行する他の方法はありますか?
答え1
ブリッジインターフェースにIPを設定する必要はありますか? 仮想インターフェース同士が通信できるようにするだけなので、その理由がよくわかりません。
いいえ、純粋なブリッジはイーサネット レベルでのみ機能します。IP ヘッダーを参照することすらありません。br0 に IP アドレスを割り当てると、実際にはそのブリッジに接続されているホスト OS に IP アドレスが割り当てられます。
tap
しかし、実際にインターフェースを追加することについては何も言っていません。ブリッジポートブリッジが管理するポートを明示的に伝える必要があります。
brctl addif br0 tap0
ip link set tap0 master br0
ブリッジ インターフェイスに割り当てられた IP/ネットマスク/ブロードキャストがないことが、そのインターフェイスを tcpdump したときにブリッジ インターフェイス上の ping トラフィックを確認できない理由ですか?
いいえ。
ただし、ブリッジがまだ「学習」モードになっている可能性があり、デフォルトは 30 秒のままです。 を使用して確認してくださいbrctl showstp br0
。ポートがブリッジに追加されていない可能性があります (上記を参照)。ポート インターフェイス自体がまだダウンしている可能性があります。
(また、神々よなぜ人々はブロードキャスト アドレスを設定する必要があると考えるのでしょうか。実際、OSはすでにIP | ~ネットマスクからそれを計算できます。ブロードキャストアドレスを手動で設定することはほとんど役に立ちません。誤って取得しやすくなるだけです。間違っている。
2 番目の質問の答えが「はい」の場合、iptables を使用してそのインターフェース上のトラフィックをブロック/許可することはできないと思いますが、正しいでしょうか? もしそうなら、そのようなインターフェース上で iptables を使用して実行できる操作を実行する他の方法はありますか?
はい、ebtables
トラフィックをフィルタリングする必要があります。トラフィックは IP ファイアウォールを通過しません。
(ただし、必ずしもそうとは限りません。たとえば、Untangle ファイアウォールは、ルーターとブリッジの混成モードで動作しているようですが、これはやや混乱を招きます。)