Multicast Helper Mapはブロードキャスト, マルチキャスト, ユニキャストを自在に変換する機能です。workbookを見ると、マルチキャストをサポートしない機器に対応するための変換を行うようなシナリオが幾つか見られます。
概要
Multicast Helper Mapについてまとめます。Multicast Helper Mapはマルチキャスト・ブロードキャスト間の変換する技術で、使用例は以下が挙げられます。
- ブロードキャストの転送
- マルチキャスト転送不可セグメントへの対応
コマンド一覧
このシナリオで重要なコマンド一覧は以下の通りです。
Router(config)# [ no ] ip forward-protocol udp <port> Router(config-if)# ip multicast helper-map { <addr> | broadcast } <addr> MULTICAST Router(config-if)# ip directed-broadcast
構成図 1
これ以降の動作確認は、以下の環境で行います。以下のような仮想の問題に対応し、Host1からHost2へのbroadcastが転送可能になるようにします。
- Host1はudp 5000のブロードキャストを用いて、Host2にビデオストリーム配信を行います。
- 最近、Host1は192.168.2.0/24から192.168.1.0/24への移動が行われました。
- しかし、Host1は旧式のメディアサーバなので、マルチキャスト送信に対応しておらずブロードキャストの送信のみが可能です。
- Host2も旧式のクライアントで、マルチキャストの受信ができずブロードキャストのみの受信が可能です。
- R1, R2を設定変更して、Host1からHost2へのブロードキャストが可能になるようにして下さい。
- ブロードキャストの転送には、マルチキャストアドレス239.12.12.12を利用して下さい。
[ip address] +--------+ +--------+ +--------+ +--------+ | Host 1 +--------+ R1 +--------+ R2 +--------+ Host 2| +--------+.101 .1+--------+.1 .2+--------+.2 .202+--------+ e0/0 e0/1 e0/0 e0/1 e0/0 e0/1 192.168.1.0/24 192.168.12.0/24 192.168.2.0/24 R1 Loopback0 R2 Loopback0 10.1.1.1/32 10.2.2.2/32 [multicast domain] +--------+ +--------+ ----+ R1 +--------+ R2 | .1+--------+.1 .2+--------+ e0/1 e0/0 e0/1 192.168.1.0/24 192.168.12.0/24
[R1] interface Loopback0 ip pim dense-mode ! interface Ethernet0/0 ip pim dense-mode ! interface Ethernet0/1 ip pim dense-mode [R2] interface Loopback0 ip pim dense-mode ! interface Ethernet0/1 ip pim dense-mode
設定全文は下記ファイルです。詳細設定は下記を参照ください。
broadcast 転送
仕様説明
ip helper-addressコマンドを使用するとブロードキャストをユニキャストに変換する事ができます。同じようにip multicast helper-mapコマンドを使用するとブロードキャスト・マルチキャスト間の変換が可能です。なお、ブロードキャストに変換する時は、変換後アドレスは255.255.255.255ではなくダイレクトブロードキャストアドレスを指定して下さい。
Router(config-if)# ip multicast helper-map { <addr> | broadcast } <addr> MULTICAST
上記コマンドにより、マルチキャストからブロードキャストへの変換を行う場合は、併せてダイレクトブロードキャストの転送許可を設定する必要があります。
Router(config-if)# ip directed-broadcast
ip helper-addressコマンドやip multicast helper-mapコマンドによって転送が許可されるパケットは、UDP 53(DNS)のように一部の有名なプロトコルのみになっています。転送を許可したいプロトコルを追加したい場合は以下のコマンドを使用します。逆に転送を禁止したい場合も以下のコマンドにnoを付け足す事で可能です。
Router(config)# [ no ] ip forward-protocol udp <port>
multicast helper
受信したブロードキャストをマルチキャストに変換して送信する設定をR1に投入します。
[R1] ip access-list extended MULTICAST 10 permit udp any any ! interface Ethernet0/1 ip multicast helper-map broadcast 239.12.12.12 MULTICAST
受信したマルチキャストをブロードキャストに変換して送信する設定をR2に投入します。
[R2] ip access-list extended MULTICAST 10 permit udp any any ! interface Ethernet0/0 ip directed-broadcast ! interface Ethernet0/1 ip multicast helper-map 239.12.12.12 192.168.2.255 MULTICAST
udp forwarding-protocol
デフォルトではudp 5000はip multicast helper-mapコマンドにより転送されません。udp 5000が設定されるよう、以下のコマンドを入力します。
[R1] ip forward-protocol udp 5000 [R2] ip forward-protocol udp 5000
udp broadcast 送信
udp 5000 broadcastの動作確認はIOSのみでは難しいですが、DNS queryを利用したudp 53 broadcastによる動作確認は可能です。Cisco IOSは”ip name-server”コマンドでDNSサーバを明示的に指定していない場合は、255.255.255.255宛てにDNS queryを送信します。
Host1からbroadcastのDNS queryが送信され、そのパケットがHost2まで届いているかどうかを確認します。Host2で以下デバッグを有効にし、DNS queryの有無を確認できるようにします。
[Host2] access-list 100 permit udp any any eq domain Host2#debug ip packet 100 IP packet debugging is on for access list 100 Host2#
Host1からDNS queryを送信し、そのパケットがHost2まで届いている事を確認します。
[Host1] Host1#AAA Translating "AAA"...domain server (255.255.255.255) (255.255.255.255) Translating "AAA"...domain server (255.255.255.255) [Host2] Host2# *Mar 1 00:35:40.143: IP: s=192.168.1.101 (Ethernet0/1), d=255.255.255.255, len 49, rcvd 2 *Mar 1 00:35:43.099: IP: s=192.168.1.101 (Ethernet0/1), d=255.255.255.255, len 49, rcvd 2 *Mar 1 00:35:46.087: IP: s=192.168.1.101 (Ethernet0/1), d=255.255.255.255, len 49, rcvd 2
IGMP Stub Router(R1)を介した通信が可能な事を確認します。
[R4] R4#ping 239.1.1.1 source Loopback 0 Type escape sequence to abort. Sending 1, 100-byte ICMP Echos to 239.1.1.1, timeout is 2 seconds: Packet sent with a source address of 10.4.4.4 Reply to request 0 from 192.168.1.101, 108 ms Reply to request 0 from 192.168.1.101, 108 ms R4#
構成図 2
これ以降の動作確認は、以下の環境で行います。以下のような仮想の問題に対応し、R1からR4へのマルチキャスト通信が可能になる事を目標とします。
- 192.168.1.0/24のセグメントには動画配信サーバが配置されています。
- このサーバはマルチキャストグループアドレス239.1.1.1とudp port 5000を使用します。
- ある時、192.168.4.0/24のユーザが動画が受信できないとの報告を挙げました。
- 通信経路を調査するとR2に問題がある事が判明しました。ユニキャスト、ブロードキャストはR3に送信できますが、マルチキャストのみR3に送信できないようです。
- この問題をTACに報告しましたが、原因究明には時間がかかりそうです。192.168.1.0/24のユーザはすぐに動画を受信しなければならないようです。
- R2, R3を設定変更し、動画が配信可能なよう設定変更して下さい。
- なお、IPアドレスの追加・変更やtunnel interfaceの追加する事は認められません。
[ip address] +--------+ +--------+ +--------+ +--------+ ----+ R1 +--------+ R2 +--------+ R3 +--------+ R4 +---- .1+--------+.1 .2+--------+.2 .3+--------+.3 .4+--------+.4 e0/1 e0/0 e0/1 e0/0 e0/1 e0/0 e0/1 e0/0 192.168.1.0/24 192.168.12.0/24 192.168.23.0/24 192.168.34.0/24 192.168.4.0/24 non multicast R1 Loopback0 R2 Loopback0 R3 Loopback0 R4 Loopback0 10.1.1.1/32 10.2.2.2/32 10.3.3.3/32 10.4.4.4/32 [multicast domain] +--------+ +--------+ +--------+ +--------+ ----+ R1 +--------+ R2 | ----+ R3 +--------+ R4 +---- .1+--------+.1 .2+--------+.2 .3+--------+.3 .4+--------+.4 e0/1 e0/0 e0/1 e0/0 e0/1 e0/0 e0/1 e0/0 192.168.1.0/24 192.168.12.0/24 192.168.23.0/24 192.168.34.0/24 192.168.4.0/24 non multicast
[R1] interface Loopback0 ip pim dense-mode ! interface Ethernet0/0 ip pim dense-mode ! interface Ethernet0/1 ip pim dense-mode [R2] interface Loopback0 ip pim dense-mode ! interface Ethernet0/1 ip pim dense-mode [R3] interface Loopback0 ip pim dense-mode ! interface Ethernet0/0 ip pim dense-mode ! interface Ethernet0/1 ip pim dense-mode [R4] interface Loopback0 ip pim dense-mode ! interface Ethernet0/0 ip pim dense-mode ! interface Ethernet0/1 ip pim dense-mode
設定全文は下記ファイルです。詳細設定は下記を参照ください。
非マルチキャスト対応
multicast helper
受信したマルチキャストをブロードキャストに変換して送信する設定をR2に投入します。
[R1] ip access-list extended MULTICAST 10 permit udp any any ! interface Ethernet0/0 ip directed-broadcast ! interface Ethernet0/1 ip multicast helper-map 239.1.1.1 192.168.23.255 MULTICAST
受信したブロードキャストをマルチキャストに変換して送信する設定をR3に投入します。
[R3] ip access-list extended MULTICAST 10 permit udp any any ! interface Ethernet0/1 ip multicast helper-map broadcast 239.1.1.1 MULTICAST
udp forwarding-protocol
デフォルトではudp 5000はip multicast helper-mapコマンドにより転送されません。udp 5000が設定されるよう、以下のコマンドを入力します。
[R2] ip forward-protocol udp 5000 [R3] ip forward-protocol udp 5000
udp multicast 送信
先程の動作確認ではDNS queryを利用しましたが、udp unicast, multicastならばIP SLAを利用する事によりテスト用のトラフィックを発生させる事ができます。
以下のIP SLAを実行し、udp 5000のマルチキャストトラフィックを定期的に発生させます。
[R1] ip sla monitor 1 type udpEcho dest-ipaddr 239.1.1.1 dest-port 5000 source-ipaddr 192.168.1.1 control disable frequency 10 ip sla monitor schedule 1 life forever start-time now
R4で以下のデバッグ出力を有効にし、マルチキャストがR1からR4に届いている事を確認します。
[R4] access-list 100 permit udp any any eq 5000 R4#debug ip mpacket list 100 IP multicast packets debugging is on for access list 100 R4# R4# *Mar 1 00:17:01.671: IP(0): s=192.168.1.1 (Ethernet0/1) d=239.1.1.1 (Ethernet0/0) id=0, ttl=252, prot=17, len=44(44), mforward *Mar 1 00:17:11.623: IP(0): s=192.168.1.1 (Ethernet0/1) d=239.1.1.1 (Ethernet0/0) id=0, ttl=252, prot=17, len=44(44), mforward R4#