無線LANコンバータにしたRaspberry Pi3を介してDLNAサーバに接続する

前回の時点で書くことが決まっていたのに、3週間も放置しているこの体たらくに我ながら呆れている るーふぁす ですw

さて、前回でRaspberry Pi3を無線LANコンバータ(イーサネットコンバータ)にすることが出来たわけですが、マルチキャストのルーティングを行っていないので、そのままでは無線APまたは無線LANルータの先のネットワーク上のDLNAサーバにアクセスすることが出来ません。そこで、今回はRaspberry Pi3にマルチキャストのルーティング設定を施してRaspberry Piに有線接続したTV等のDLNAクライアントからRaspberry Piを介してDLNAサーバへのアクセスを可能にしてみたいと思います。

環境と前提条件

こちらが実際に設定を行った環境の構成は以下の通りです。

ハード Raspberry Pi3 ModelB
OS raspbian jessie lite
(2016-05-27)
無線LANアダプタ BUFFALO WLI-UC-GNM2

なお、前提として、Raspberry PiはProxy ARPブリッジによる無線LANコンバータ(イーサネットコンバータ)として機能しているものとします。

Raspberry Pi3を無線LANコンバータ(イーサネットコンバータ)にする方法については前回の記事を参考にしてください。

目的

raspberryPi3_WC_DLNA.jpg

図の様なネットワークにおいて、Raspberry Piの有線インターフェースに接続したTV等のDLNAクライアントをRaspberry Piと無線LANで接続されているAPまたはルータのネットワーク上のDLNAサーバに接続してサーバ内の動画や音楽を視聴出来るようにRaspberry Piの設定を行うことが今回の目的です。

概要

DLNAがサーバとクライアントの接続に利用するマルチキャストパケットを有線,無線インターフェース間で転送出来る様にマルチキャストルーティングの設定を行う。

DLNAに用いるマルチキャストパケットの有線/無線インターフェース間の転送

DLNAはサーバとクライアントの接続にUPnPのDA(Device Architecture)を利用しており、このUPnP DAではネットワーク上の機器の検出をSSDP(Simply Discovery Protocol)というプロトコルを用いて239.255.255.250にUDP 1900ポートのマルチキャストパケットを送信し、その返答の有無によって行うとされているので、とりあえずこの239.255.255.250に対して有線/無線インターフェース間でマルチキャストルーティングを設定すればアクセスが可能となるはずです。

smcrouteのインストール

マルチキャストのルーティングにsmcrouteパッケージを使うので、まずはインストールします。

# apt-get -y install smcroute

マルチキャストルーティング

起動時に実行して貰いたいので、/etc/rc.localに4行追記して次の様にします。
注意:この設定は有線側と無線側が共に同じネットワークセグメントであることを前提としています。

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

echo 1 > /proc/sys/net/ipv4/ip_forward
ip addr add 192.168.1.203 dev eth0
parprouted wlan1 eth0
smcroute -j eth0 239.255.255.250
smcroute -a eth0 0.0.0.0 239.255.255.250 wlan1
smcroute -j wlan1 239.255.255.250
smcroute -a wlan1 0.0.0.0 239.255.255.250 eth0
exit 0

23行目並びに25行目でeth0 , wlan1 のそれぞれを239.255.255.250のグループに所属させ、それぞれの行に続く行でマルチキャストグループ239.255.255.250宛てのパケットをeth0からwlan1及びその逆の転送処理を設定しています。

以上で、Raspberry Piの有線インターフェースに接続したDLNAクライアントから無線APまたは無線LANルータのネットワーク上のDLNAサーバが検出出来ると思います。お疲れ様でした~

ちなみに、マルチキャストフォワードに関してカーネルの設定を一部追加して設定を行ったのですが、追加したのはIPv6の部分だけというか他の設定項目が無いもしくは既に設定済みだったのでraspbian jessie lite(2016-05-27)に関してはカーネルの設定変更とビルドは必要ないのかもしれません。もし、smcrouteのインストールで躓く場合はカーネルのビルド/更新を試してみて下さい。Raspberry Pi3であれば(オプションコマンドを忘れなければ)2~3時間程度で済むので、ラズパイを使用してのビルド/更新の方がクロスコンパイルより楽でオススメです。それでは~(;^^)/