Cisco IOS マルチキャスト IGMP filterの設定とMLD filterの設定

スポンサーリンク

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

設定全文は下記ファイルです。詳細設定は下記を参照ください。

Host1
!
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname Host1
!
boot-start-marker
boot-end-marker
!
!
no aaa new-model
memory-size iomem 5
!
!
ip cef
!
!
ipv6 unicast-routing
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
interface Ethernet0/0
 ip address 192.168.12.1 255.255.255.0
 half-duplex
 ipv6 address 2001:12::1/64
 ipv6 address FE80::1 link-local
!
interface Ethernet0/1
 no ip address
 shutdown
 half-duplex
!
interface Ethernet0/2
 no ip address
 shutdown
 half-duplex
!
interface Ethernet0/3
 no ip address
 shutdown
 half-duplex
!
!
ip http server
ip forward-protocol nd
!
!
!
!
!
!
control-plane
!
!
!
!
mgcp behavior g729-variants static-pt
!
!
!
!
!
line con 0
line aux 0
line vty 0 4
 login
!
!
end
R2
!
version 12.4
service timestamps debug datetime msec
service timestamps log datetime msec
no service password-encryption
!
hostname R2
!
boot-start-marker
boot-end-marker
!
!
no aaa new-model
memory-size iomem 5
!
!
ip cef
!
!
ipv6 unicast-routing
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
interface Ethernet0/0
 ip address 192.168.12.2 255.255.255.0
 half-duplex
 ipv6 address 2001:12::2/64
 ipv6 address FE80::2 link-local
!
interface Ethernet0/1
 no ip address
 shutdown
 half-duplex
!
interface Ethernet0/2
 no ip address
 shutdown
 half-duplex
!
interface Ethernet0/3
 no ip address
 shutdown
 half-duplex
!
!
ip http server
ip forward-protocol nd
!
!
!
!
!
!
control-plane
!
!
!
!
mgcp behavior g729-variants static-pt
!
!
!
!
!
line con 0
line aux 0
line vty 0 4
 login
!
!
end

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#
タイトルとURLをコピーしました