IGMP, MLDはマルチキャストグループに参加するためのプロトコルです。このメッセージをラストホップルータで制御する事によって、マルチキャストグループに参加するホストを制限する事ができます。
コマンド一覧
このシナリオで重要なコマンド一覧は以下の通りです。
Router(config)# ip access-list standard <std_acl> Router(config-std-nacl)# <seq> permit <group> Router(config)# ip access-list extended <ext_acl> Router(config-ext-nacl)# <seq> permit ip <source> <group> Router(config-if)# ip igmp join-group <addr> Router(config-if)# ip igmp limit <num> Router(config-if)# ip igmp access-group <acl> Router(config)# ipv6 access-list <acl> Router(config-ipv6-acl)# sequence <seq> permit ipv6 <source> <group> Router(config-if)# ipv6 mld join-group <addr> Router(config-if)# ipv6 mld access-group <acl>
構成図
これ以降の動作確認は、以下の環境で行います。
[ip v4 address] +--------+ +--------+ | Host 1 +--------+ R2 | +--------+.1 .2+--------+ e0/0 e0/0 192.168.12.0/24 [ip v6 address] +--------+ +--------+ | Host 1 +--------+ R2 | +--------+:1 :2+--------+ e0/0 e0/0 2001:12::/64
[Host1] interface Ethernet0/0 ip address 192.168.12.1 255.255.255.0 ipv6 address 2001:12::1/64 ipv6 address FE80::1 link-local [R2] interface Ethernet0/0 ip address 192.168.12.2 255.255.255.0 ipv6 address 2001:12::2/64 ipv6 address FE80::2 link-local
設定全文は下記ファイルです。詳細設定は下記を参照ください。
IGMP Filter
仕様説明
ラストホップルータはIGMP joinメッセージを取捨選択し、マルチキャストグループに参加するかどうかを制御する事ができます。
Router(config)# interface <interface> Router(config-if)# ip igmp access-group <acl>
ip igmp access-groupコマンドに指定するACLは標準ACL, 拡張ACLの両方が使用可能です。標準ACLの場合はmulticast groupを指定します。拡張ACLの場合は送信元アドレスにmulticast source、宛先アドレスにmulticast groupを指定します。
なお、送信元を指定しないIGMP (*, G) joinにつきましては、送信元アドレスは0.0.0.0として扱われます。
source | destination | |
---|---|---|
標準ACL | multicast group | |
拡張ACL | multicast source | multicast group |
igmp limit
IGMP gropu数を制限する設定をR2に投入します。
[R2] ip multicast-routing ! interface Ethernet0/0 ip pim sparse-mode ip igmp limit 2
Host1からR2へ、IGMP (*,G) joinを送信します。
[Host1] interface Ethernet0/0 ip igmp join-group 239.0.0.1 ip igmp join-group 239.0.0.2 ip igmp join-group 239.0.0.3
R2はip igmp limitで制限された2つまでしか、IGMP join groupを受け付けていない事が分かります。
[R2] R2#show ip igmp groups IGMP Connected Group Membership Group Address Interface Uptime Expires Last Reporter Group Accounted 239.0.0.1 Ethernet0/0 00:00:06 00:02:53 192.168.12.1 Ac 239.0.0.2 Ethernet0/0 00:00:06 00:02:53 192.168.12.1 Ac 224.0.1.40 Ethernet0/0 00:00:14 00:02:50 192.168.12.2 R2#
access-group
IGMPについて、multicast group addressによる制御設定をR2に投入します。
[R2] ip access-list extended IGMP_FILTER 10 permit ip host 0.0.0.0 239.0.0.0 0.255.255.255 ! interface Ethernet0/0 ip igmp access-group IGMP_FILTER no ip igmp limit 2
Host1からR2へ、IGMP (*,G) joinを送信します。
[Host1] interface Ethernet0/0 ip igmp join-group 238.0.0.1 ip igmp join-group 238.0.0.2 ip igmp join-group 238.0.0.3 ip igmp join-group 239.0.0.1 ip igmp join-group 239.0.0.2 ip igmp join-group 239.0.0.3
R2が受け入れたIGMP groupを確認します。239.0.0.0/8のIGMP joinを受け入れ、238.0.0.0/8を拒否している事が読み取れます。
[R2] R2#show ip igmp groups *Mar 1 00:05:23.555: %SYS-5-CONFIG_I: Configured from console by console IGMP Connected Group Membership Group Address Interface Uptime Expires Last Reporter Group Accounted 239.0.0.1 Ethernet0/0 00:00:18 00:02:48 192.168.12.1 239.0.0.2 Ethernet0/0 00:00:14 00:02:48 192.168.12.1 239.0.0.3 Ethernet0/0 00:00:21 00:02:48 192.168.12.1 224.0.1.40 Ethernet0/0 00:01:57 00:02:08 192.168.12.2 R2#
access-group SSM
IGMP (S, G) joinのsourceが10.22.22.22であるメッセージのみを受信するような設定をR2に投入します。
[R2] no ip access-list extended IGMP_FILTER ip access-list extended IGMP_FILTER 10 permit ip host 0.0.0.0 238.0.0.0 0.255.255.255 20 permit ip host 10.22.22.22 232.0.0.0 0.255.255.255 ! interface Ethernet0/0 ip igmp access-group IGMP_FILTER ip igmp version 3 ! ip pim ssm default
Host1からR2へ、IGMP (S,G) joinを送信します。
interface Ethernet0/0 ip igmp version 3 ip igmp join-group 232.1.1.1 source 10.2.2.2 ip igmp join-group 232.1.1.1 source 10.22.22.22
R2が受け入れたIGMP groupを確認します。multicast sourceが10.2.2.2であるjoin messageを拒否し、10.22.22.22であるjoin messegeは許可している事が分かります。
R2#show ip mroute 232.1.1.1 IP Multicast Routing Table Flags: D - Dense, S - Sparse, B - Bidir Group, s - SSM Group, C - Connected, L - Local, P - Pruned, R - RP-bit set, F - Register flag, T - SPT-bit set, J - Join SPT, M - MSDP created entry, X - Proxy Join Timer Running, A - Candidate for MSDP Advertisement, U - URD, I - Received Source Specific Host Report, Z - Multicast Tunnel, z - MDT-data group sender, Y - Joined MDT-data group, y - Sending to MDT-data group Outgoing interface flags: H - Hardware switched, A - Assert winner Timers: Uptime/Expires Interface state: Interface, Next-Hop or VCD, State/Mode (10.22.22.22, 232.1.1.1), 00:00:48/00:02:12, flags: sTI Incoming interface: Null, RPF nbr 0.0.0.0 Outgoing interface list: Ethernet0/0, Forward/Sparse, 00:00:48/00:02:12 R2# R2# R2#show ip igmp groups IGMP Connected Group Membership Group Address Interface Uptime Expires Last Reporter Group Accounted 238.0.0.1 Ethernet0/0 00:01:16 00:02:20 192.168.12.1 238.0.0.2 Ethernet0/0 00:01:18 00:02:20 192.168.12.1 238.0.0.3 Ethernet0/0 00:01:16 00:02:20 192.168.12.1 239.0.0.1 Ethernet0/0 00:05:37 00:01:21 192.168.12.1 239.0.0.2 Ethernet0/0 00:05:33 00:01:26 192.168.12.1 239.0.0.3 Ethernet0/0 00:05:40 00:01:18 192.168.12.1 232.1.1.1 Ethernet0/0 00:00:39 stopped 192.168.12.1 224.0.1.40 Ethernet0/0 00:07:15 stopped 192.168.12.2 R2#
MLD Filter
仕様説明
IPv6ではマルチキャストグループに参加するには、IGMPではなくMLD(multicast listener discovery)というプロトコルを使用します。細かいな仕様はIPv4とIPv6で異なりますが、コマンドラインはIPv4と殆ど同じ要領でIPv6も操作する事ができます。
MLDをlistenするためには、IPv4と同様にPIMを有効にする必要があります。IPv6ではPIMを明示的に有効にする設定は必要なく、ipv6 multicast-routingを有効にすると自動的にPIMも有効になります。
Router(config)# ipv6 multicast-routing
MLD join messageを制御するには以下のコマンドを使用します。
Router(config-if)# ipv6 mld access-group <acl>
なお、上記コマンドで指定可能なmulticast groupはFF02/16からFF0F/16までの範囲です。FF00/16やFF01/16はmulticast groupとして指定する事ができません。恐らく、この仕様はRFC4291を遵守しようとしたためではないかと推測されます。以下にRFC4291の一部抜粋を転機します。
2.7. Multicast Addresses An IPv6 multicast address is an identifier for a group of interfaces (typically on different nodes). An interface may belong to any number of multicast groups. Multicast addresses have the following format: | 8 | 4 | 4 | 112 bits | +------ -+----+----+---------------------------------------------+ |11111111|flgs|scop| group ID | +--------+----+----+---------------------------------------------+ binary 11111111 at the start of the address identifies the address as being a multicast address. +-+-+-+-+ flgs is a set of 4 flags: |0|R|P|T| +-+-+-+-+ The high-order flag is reserved, and must be initialized to 0. T = 0 indicates a permanently-assigned ("well-known") multicast address, assigned by the Internet Assigned Numbers Authority (IANA). T = 1 indicates a non-permanently-assigned ("transient" or "dynamically" assigned) multicast address. Hinden Standards Track [Page 13] RFC 4291 IPv6 Addressing Architecture February 2006 The P flag's definition and usage can be found in [RFC3306]. The R flag's definition and usage can be found in [RFC3956]. scop is a 4-bit multicast scope value used to limit the scope of the multicast group. The values are as follows: 0 reserved 1 Interface-Local scope 2 Link-Local scope 3 reserved 4 Admin-Local scope 5 Site-Local scope 6 (unassigned) 7 (unassigned) 8 Organization-Local scope 9 (unassigned) A (unassigned) B (unassigned) C (unassigned) D (unassigned) E Global scope F reserved
access-group
IGMPについて、multicast group addressによる制御設定をR2に投入します。
[R2] ipv6 multicast-routing ! ipv6 access-list MLD_FILTER sequence 10 permit ipv6 host :: host FF06::1 sequence 20 permit ipv6 host :: host FF06::3 ! interface Ethernet0/0 ipv6 mld access-group MLD_FILTER
Host1からR2へ、IGMP (*,G) joinを送信します。
[Host1] interface Ethernet0/0 ipv6 mld join-group FF06::1 ipv6 mld join-group FF06::2 ipv6 mld join-group FF06::3 ipv6 mld join-group FF06::4
R2が受け入れたMLD groupを確認します。FF06::1, FF06::3のみを受け入れている事が分かります・
[R2] R2#show ipv6 mld groups MLD Connected Group Membership Group Address Interface Uptime Expires FF06::1 Ethernet0/0 00:00:39 00:04:10 FF06::3 Ethernet0/0 00:00:09 00:04:16 R2#