VM libvirt
を使用してx86ホストで実行しています。VMのインターフェースは次のように作成されます:
<interface type='bridge'>
<mac address='52:54:00:d0:18:eb'/>
<source bridge='intfe2'/>
<target dev='vnet4'/>
<model type='virtio'/>
<alias name='net4'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x09' function='0x0'/>
</interface>
intfe2
=次のようにホスト上に存在するLinuxブリッジ:
# brctl show intfe2
bridge name bridge id STP enabled interfaces
intfe2 8000.90e2bab68ff8 no enp2s0f0
vnet4
現在、LACPは、インターフェイスvnet4
上のVM=内に構成されており、ホストマシンのインターフェイスenp2s0f0
を使用する実際のルーター上に構成されています。
ホスト上のこれらの両方のインターフェイスからのマルチキャストフレームを確認できます。
# tcpdump -ni vnet4 -e
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on vnet4, link-type EN10MB (Ethernet), capture size 262144 bytes
15:56:48.160017 34:30:b4:59:06:00 > 01:80:c2:00:00:02, ethertype Slow Protocols (0x8809), length 124: LACPv1, length 110
15:56:49.162163 34:30:b4:59:06:00 > 01:80:c2:00:00:02, ethertype Slow Protocols (0x8809), length 124: LACPv1, length 110
# tcpdump -ni enp2s0f0 -e
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on enp2s0f0, link-type EN10MB (Ethernet), capture size 262144 bytes
15:57:46.173002 ac:4b:c8:89:d7:c1 > 01:80:c2:00:00:02, ethertype Slow Protocols (0x8809), length 124: LACPv1, length 110
15:57:47.171282 ac:4b:c8:89:d7:c1 > 01:80:c2:00:00:02, ethertype Slow Protocols (0x8809), length 124: LACPv1, length 110
15:57:48.171252 ac:4b:c8:89:d7:c1 > 01:80:c2:00:00:02, ethertype Slow Protocols (0x8809), length 124: LACPv1, length 110
私はUbuntu Xenialを実行しています:
# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.2 LTS
Release: 16.04
Codename: xenial
私の質問は:
Linux virtual-switchのマルチキャストフレーム のようないくつかのリンクから、次のようにIGMPスヌーピングを無効にしました。
echo "0" > /sys/devices/virtual/net/intfe2/bridge/multicast_snooping
/sys/devices/virtual/net/intfe2/bridge/multicast_querier
の値も切り替える
ポインタはありますか?
あなたが直面している問題は、デフォルトでは、Linuxブリッジがフレームを01:80:c2:00:00:00から01:80:c2:00:00の範囲の宛先MACアドレスに転送しないことだと思います:ff。 IEEEは、MACブリッジによって転送されてはならないプロトコル用にこのアドレスブロックを予約しました。 LLDP、LACP、xSTPなどのプロトコルはすべてこの範囲にあります。
素敵なIEEEの記事 here があります。私はあなたがそれを望んでいる、これらのフレームの転送を許可するためにブリッジカーネルモジュールを再コンパイルすることは可能ですが、あなた自身の危険でそうしてください! /net/bridge/br_private.hを編集して、BR_GROUPFWD_RESTRICTEDの#defineを0x0uに設定する必要があります。ドライバーをコンパイルして再ロードし、実行します。
echo 255 > /sys/class/net/<bridge_name>/bridge/group_fwd_mask
上記のコマンドは、LLDPだけでなく、スパニングツリーフレームも通過させることに注意してください。したがって、ブリッジングループを導入しないようにしてください。
利用可能な情報であなたの設定を正確に理解するのは少し難しいです。しかし、私はあなたが私の見た目を比較できるように私のセットアップを提供します。ブリッジでのマルチキャストに不可欠なのはマルチキャストスヌーピングです。そのため、ブリッジはどのポートがマルチキャストグループに参加しているかを認識し、このポートにのみマルチキャストストリームを転送できます。 multicast_snoopingのデフォルト設定はオンです。だから私はそれを無効にしないでください。
ブリッジのインターフェースの設定を見ると、次のことがわかります。
Host ~$ Sudo bridge -d link show
3: enp1s0 state UP : <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master br0 state forwarding priority 32 cost 4
hairpin off guard off root_block off fastleave on learning on flood on mcast_flood on
5: vnet0 state UNKNOWN : <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master br0 state forwarding priority 32 cost 100
hairpin off guard off root_block off fastleave on learning on flood off mcast_flood on
重要なのはmcast_flood on
これはデフォルト設定です。 fastleave on
は便利ですが、マルチキャストには必要ありません。これは、ゲストがグループを離れた場合に、ブリッジでタイムアウトなしにマルチキャストグループを離れるためのものです。 flood on/off
はユニキャストに属しており、ここでは関係ありません。
ゲストがマルチキャストグループに参加すると(マルチキャストクライアントプログラムを開始)、ブリッジはそれをスヌーピングし、マルチキャストデータベース(mdb)に追加します。私はそれをチェックします:
Host ~$ Sudo bridge -d -s mdb show
dev br0 port vnet0 grp 239.255.255.250 temp vid 10 257.14
router ports on br0: enp1s0 238.17 temp
私はupnpクライアント(grp 239.255.255.250)を実行しているだけで、VLAN 10を使用します。ゲストは、IGMP REPORTを送信しないと、257.14秒間マルチキャストグループに残ります。 。ブリッジは、次のマルチキャストルーター(ソース)がポートenp1sにあることを確認し、ソースが以前にigmpクエリを送信しなかった場合、238.17秒後にそれをキックアウトします。
実行中のマルチキャストストリームで、次のigmpメッセージが表示されます。
Host ~$ Sudo tcpdump -i vnet0 -n igmp
18:38:59.628249 IP 192.168.10.2 > 224.0.0.1: igmp query v3
18:39:02.502110 IP 192.168.10.106 > 224.0.0.22: igmp v3 report, 2 group record(s)
18:41:04.647731 IP 192.168.10.2 > 224.0.0.1: igmp query v3
18:41:13.061858 IP 192.168.10.106 > 224.0.0.22: igmp v3 report, 2 group record(s)
18:43:09.637111 IP 192.168.10.2 > 224.0.0.1: igmp query v3
18:43:19.525836 IP 192.168.10.106 > 224.0.0.22: igmp v3 report, 2 group record(s)
...
192.168.10.2は私のインターネットルーター(マルチキャストソース)で、192.168.10.106はストリーミングクライアントを持つゲストです。