NAS DiskStationの導入 #13 メディアサーバー(DLNAサーバー)

前回の投稿で「メディアサーバー」のセットアップについて紹介しました。その投稿では、DiskStation Manager 7 (DSM 7)で紹介しました。しかし、私がはじめに「メディアサーバー」をセットアップしたのはDiskStation Manager 6 (DSM 6)のときでした。DSM 6からDSM 7へアップグレードしたときに一部のDLNAクライアントからDSM 7のメディアサーバーが見えなくなりました。

DiskStation Manager (DSM)とメディア サーバーのバージョン

DiskStation Manager 6 (DMS 6)のメディア サーバーのときは、私が持っているすべてのDLNAクライアントで、DSM 6のメディアサーバーがDMS (DLNAサーバー)として見えていました。

しかし、DSMをバージョン6からバージョン7にアップグレードしたところ、一部のDLNAクライアントで、サーバー一覧の中にDMSのメディア サーバーが表示されなくなったのです。

メディアサーバーのバージョンは、DSM 6ではバージョン1.8系で、DSM 7ではバージョン2.0系です。

メディアサーバーのバージョンが2.0になったことで、DMSとしての挙動が変わったようです。

DSMのメディアサーバーが見えなくなったDLNAクライアント

一部のDLNAクライアントとは、ソニーのVGF-WA1NAS-C5です。

VGF-WA1

VGF-WA1は、ソニーのPCであるVAIOの商品カテゴリーからWi-Fiオーディオとして2007年2月に発売されていました。

NAS-C5

NAS-C5は、ソニーのシステムステレオの商品カテゴリーからワイヤレス プレーヤーとして2007年11月に発売されていました。

2007年の発売当時は、オーディオのDLNAクライアント機能を持つ専用デバイス(PC以外のもの)はこれくらいしかなかったと思います。2007年といえば、日本でAndroidやiPhoneなどのスマートフォンが発売される前です。

半年ぐらい待ったがアップデートでも直らない

DSM 7.0.0 (2021年7月)は、DSM 7系の初版なのでアップグレードはせずスキップしたのですが、DSM 7.0.1 (2021年10月)は、 それなりにバグフィックスされていると思いアップグレードしました。

DSM 7に上げる前までは、DSM 6.2.4-25556 Update 2を使っていました。このときは、前述のDLNAクライアントからもDSMのメディアサーバーが見えていました。

2021年10月にメールでDSM 7の更新通知が届いたので、2021年10月にDSM 7.0.1-42218 にアップグレードしました。すると、その直後から、前述のDLNAクライアントからDSM 7のメディアサーバーが見えなくなりました。

DSM 7のメディアサーバーが見えなくなったのは困りましたが、しばらくしたら、アップデートで直るだろうと考え、修正されるのを待ち続けていました。何回かアップデートがあり、2022年5月上旬には DSMは、Version: 7.1-42661 Update 1までアップデートされました。しかし、一部のDLNAクライアントからDSM 7のメディアサーバーが見つからない問題は直りませんでした。

「サポート センター」アプリ

あるときDSM 7のメニューを確認したときに「サポート センター」というアプリがあることに気づきました。FAQやナレッジを検索するだけのアプリかと思いましたが、問い合わせる機能もありました。

問い合わせは「サポート センター」アプリから投稿できますが、その後のやり取りは、SynologyのWEBサイト上で行います。SynologyのWEBサイトにはSynology アカウントを使ってログオンします。

ダメもとで「DSM 6からDSM 7にアップグレードしたら一部のDLNAクライアントからDSM 7のメディアサーバーが見えなくなった」旨を「サポートセンター」アプリから伝えました。

サポートセンターとのやり取り

返信は早く、投稿の次の日には返信があります。一回目の返信は、DLNAクライアントからDMS (DLNAサーバー)が見つからないときのFAQ的な対処法の案内とそれで解決しない場合の原因箇所を絞り込むための情報提供の手順でした。

FAQ的な対処法は、

でした。

ナレッジセンターの内容は一度もつながらないときの対処方法であって、つながっていたものがつながらなくなった場合の対処法ではありませんでした。そのため、ナレッジセンターの情報では解決しません。

そこで、原因箇所を絞り込むための情報提供の準備をします。情報の内容としては

  • 実際にDLNAサーバーが見つかっていないことがわかるサーバー一覧画面を含むデバイスの写真
  • メディアサーバーの設定の「DMA互換性」にある「デバイスリスト」のスクリーンショット
  • PCのDLNAクライアント(VLCメディア プレーヤー)からメディアサーバーを検出できるかどうかのスクリーンショット
  • PCのDLNAサーバーが、問題が起きているDLNAクライアントから見つかるかどうか
  • ネットワーク構成
  • NASのシステムログ

でした。たしかに、原因箇所の切り分けとしては、必要な情報と思いましたので提供しました。

提供した情報で、問題の箇所は把握できたようです。しかし、まだ、問題の原因は把握できていません。なぜなら情報が足りないからです。足りないのは、通信パケットデータです。

原因が、DMS 7 のメディアサーバーとDLNAクライアント間に問題があることが明確になったので、問題の解決にはそのデバイス間の通信パケットデータを詳細に解析するのが近道です。

サポートセンターの反応がよいので、原因を突き止めて連絡をすると、もっと早く進むのではないかと考えました。そこで原因を突き止めることにしました。ただ、そのためには、まずは、通信のパケットデータが必要です。

Synology NASでパケットキャプチャー

今回は、Synology NASとDLNAクライアントの間の通信を解析する必要があります。通信パケットを解析するためには、通信パケットをキャプチャーする必要があります。

パケット キャプチャーは、デバイス内でキャプチャーする方法と、デバイス間のネットワークでキャプチャーする方法があります。

通信データのパケット キャプチャーの場所

今回の場合は、

  • SynologyのNASのDiskStation Manager上
  • ネットワーク経路
  • DLNAクライアント

の3か所のいずれかでキャプチャーすることになります。

DLNAクライアントのソニーのVGF-WA1NAS-C5は、リモートログインできるわけでもないので、デバイス内で通信パケットをキャプチャーすることは無理です。

ネットワーク経路でキャプチャーするしかないかと考えていたところ、SynologyのNASのDiskStation Manager (DSM)には、SSHでリモートログインできることがわかりました。SSHでログオンができれば、あとは、コマンドラインでtcpdumpなどでキャプチャーすることが可能です。

Synology NASのSSHの有効化とパケットキャプチャー

Synology NASのSSHは既定では有効化されていません。DSMのコントロールパネルから有効化します。

有効化するには「コントロールパネル → 端末とSNMP → 端末」にある「SSHサービスを有効化する」チェックボックスをチェックして、「適用」ボタンをクリックします。

DiskStation ManagerのSSH設定

その後、PCなどからSSHでSynologyのNASにリモートログインすれば、SynologyのNAS上でコマンドラインが使えます。

Synology NASのIPアドレスがNasIpAddrとした場合、Synology NASが通信したパケット(host NasIpAddr)を300秒間(-G300)キャプチャーする場合は、以下のコマンドを実行します。

# tcpdump host NasIpAddr -G300 -W1 -w %Y%m%d_%H%M.dat

キャプチャーを開始したら、問題が起きているDLNAクライアントからDLNAサーバーの検索をします。検索が完了し、DLNAサーバーが見つからないことを確認したところで、キャプチャーを停止します。作成したパケットファイルはPCに移動してツールを使って解析できます。

キャプチャーした通信パケットを解析する

通信のパケットデータはWiresharkなどを使い解析します。

今回、詳細な解析手順は省略しますが、解析したところサーバーの応答が返っていないことがあることがわかりました。

まず、UDPでDLNAサーバーからDLNAクライアントへ以下のデータが送られていました。

HTTP/1.1 200 OK
CACHE-CONTROL: max-age=120
DATE: Thu, 19 May 2022 14:10:08 GMT
EXT:
LOCATION: http://192.168.3.249:50001/desc/device.xml
OPT: "http://schemas.upnp.org/upnp/1/0/"; ns=01
01-NLS: bc8999cc-d751-11ec-920b-d8f1e05f99a4
SERVER: Linux/4.4.180+, UPnP/1.0, Portable SDK for UPnP devices/1.12.1
X-User-Agent: redsonic
ST: urn:schemas-upnp-org:device:MediaServer:1
USN: uuid:001132e0-e30f-ab89-2301-0123456789ab::urn:schemas-upnp-org:device:MediaServer:1

その後、DLNAクライアントからDLNAサーバーに以下ように、http://192.168.3.249:50001/desc/device.xmlへのHTTPアクセスがありました。

GET /desc/device.xml HTTP/1.0
HOST: 192.168.3.249
X-AV-Client-Info: av = "2.0" cn = "Sony Corporation" ; mn = "NAS-C5" ; mv = "1.000"
X-AV-Physical-Unit-Info: pa = "NAS-C5";

しかし、DLNAサーバー(メディアサーバー)からのHTTPレスポンスが、長さ0のデータでした。

このHTTPレスポンスが空であるのが問題のようです。

そこで、curlコマンドを使って確認しました。

curl http://192.168.3.249:50001/desc/device.xml

と実行した場合は、以下のようにHTTPレスポンスがありました。

<?xml version="1.0" encoding="utf-8"?>
<root xmlns="urn:schemas-upnp-org:device-1-0">
  <specVersion>
    <major>1</major>
    <minor>0</minor>
  </specVersion>
  <device>
    <deviceType>urn:schemas-upnp-org:device:MediaServer:1</deviceType>
    <dlna:X_DLNADOC xmlns:dlna="urn:schemas-dlna-org:device-1-0">DMS-1.50</dlna:X_DLNADOC>
    <friendlyName>synology-nas-1</friendlyName>
    <manufacturer>Synology Inc</manufacturer>
    <manufacturerURL>http://www.synology.com/</manufacturerURL>
    <modelDescription>Synology DLNA/UPnP Media Server</modelDescription>
    <modelName>DS1520+</modelName>
    <modelURL>http://www.synology.com/</modelURL>
    <serialNumber>20B0123456789</serialNumber>
    <UDN>uuid:001132e0-e30f-ab89-2301-0123456789ab</UDN>
    <presentationURL>http://192.168.3.249:5000/</presentationURL>
    <iconList>
      <icon>
        <mimetype>image/jpeg</mimetype>
        <width>120</width>
        <height>120</height>
        <depth>24</depth>
        <url>/tmp_icon/dmsicon120.jpg</url>
      </icon>
      <icon>
        <mimetype>image/jpeg</mimetype>
        <width>48</width>
        <height>48</height>
        <depth>24</depth>
        <url>/tmp_icon/dmsicon48.jpg</url>
      </icon>
      <icon>
        <mimetype>image/png</mimetype>
        <width>120</width>
        <height>120</height>
        <depth>24</depth>
        <url>/tmp_icon/dmsicon120.png</url>
      </icon>
      <icon>
        <mimetype>image/png</mimetype>
        <width>48</width>
        <height>48</height>
        <depth>24</depth>
        <url>/tmp_icon/dmsicon48.png</url>
      </icon>
    </iconList>

    <serviceList>
      <service>
        <serviceType>urn:schemas-upnp-org:service:ConnectionManager:1</serviceType>
        <serviceId>urn:upnp-org:serviceId:ConnectionManager</serviceId>
        <SCPDURL>/connmgrSCPD.xml</SCPDURL>
        <controlURL>/ConnectionManager/control</controlURL>
        <eventSubURL>/ConnectionManager/event</eventSubURL>
      </service>
      <service>
        <serviceType>urn:schemas-upnp-org:service:ContentDirectory:1</serviceType>
        <serviceId>urn:upnp-org:serviceId:ContentDirectory</serviceId>
        <SCPDURL>/cdsSCPD.xml</SCPDURL>
        <controlURL>/ContentDirectory/control</controlURL>
        <eventSubURL>/ContentDirectory/event</eventSubURL>
      </service>
    </serviceList>
  </device>
</root>

HTTPレスポンスは空ではありません。問題はなさそうです。

そこで、次に、HTTP Requestのヘッダーに Host: 192.168.3.249 を追加してみました。具体的には、以下のヘッダーファイル(headers.txt)を用意して

Host: 192.168.3.249

以下のcurlコマンドを実行しました。

curl  -H @headers.txt http://192.168.3.249:50001/desc/device.xml

すると、curlコマンドの結果は以下のように表示されました。

curl: (52) Empty reply from server

HTTPレスポンスが空です。パケット解析の結果と同じ挙動になりました。

次にヘッダーファイル(headers.txt)のHostの値の最後に’:’を付けて、HTTP Requestを発行します。

Host: 192.168.3.249:

すると、HTTPレスポンスが正しく返ってきます。

DSM 6.2とDSM 7.1でのHTTPレスポンスの挙動の違い

まとめると以下のことがわかりました。

http://192.168.3.249:50001/desc/device.xml に対するHTTPリクエストのHTTPレスポンスの挙動が、HTTPリクエストに付与したヘッダーのHostの値によって変わる。

具体的には、DiskStation Manager 7.1と6.2のHTTPレスポンスの挙動は以下の通りです。DSM 7.1にアップグレード済みのためDSM 6.2でテストすることはできず、DSM 6.2の値は実測値ではなく、過去のDLNAクライアントの接続実績からの推定値です。

HTTPリクエストのヘッダのHostHTTP レスポンス
(DSM 7.1, 実測値)
HTTPレスポンス
(DSM 6.2, 推定値)
(Hostを設定しない)正常正常
Host:
Host: 192.168.3.249正常
Host: 192.168.3.249:正常正常
Host: 192.168.3.249:50001正常正常

DLNAサーバーを見つけることができなくなったDLNAクライアントはHTTPヘッダにHost値を設定していますが、値にコロン(:)を含んでいません。そのため、レスポンスが空となります。結果としてDSM 7.1のメディアサーバーのDLNAサーバー情報が取得できないので、サーバーが見つからなかった模様です。

DSM 7.1のメディアサーバーが、HTTPヘッダーのHostの値にコロン(:)が含まれていなくても、レスポンスを返すようしてもらえれば、今まで通り動作するようになりそうです。

サポートセンターへ解析結果を連絡

この解析結果をサポートセンターに伝えました。すると、先方でも通信内容を解析をしたいらしく、通信パケットのキャプチャーなどを依頼されました。現在は、通信パケットデータやメディアサーバーのログを提供して、サポートセンター側での解析待ちの状態です。

なお、問い合わせ内容も「一部の音楽DMR/DMCからDS1520+がDLNAサーバーとして見えなくなった」から、「http://192.168.3.249:50001/desc/device.xml へのリクエストヘッダにHostフィールドが存在し、Hostフィールドの値にコロンが含まれていない場合に、レスポンスがEmptyになる」に変更され、より原因解析に近づいたきがします。

サポートセンターからの返信はまだありません。今回はパケットデータの解析等も必要なので、サポートセンターからの返信には時間がかかっていると思われます。サポートセンター側でもHostの問題であることを確認できたら、次の連絡があると思います。


今回の投稿では、DiskStation Manager 7のメディアサーバー(DLNAサーバー)が特定のDLNAクライアントで見つからなくなった問題報告とその通信パケットの解析結果の投稿でした。

コメントを残す