foobar2000 @ Mac で DLNA over SSH する

X. 結論

DLNA サーバが HTTP で建つので単純にポートフォワードしてクライアントにサーバの情報を追加するだけ。
UPnP は LAN 内でのサーバの相互確認に使われるだけなので端折れる)

0. 概要

foo_upnp には DLNA をインターネットに公開する為の設定があるが、わざわざその為にポートを開けるのは面倒だし、セキュリティ的にもユーザ・パスワード認証があるとは言えなんか心許ない。また、なによりもユーザ・パスワードの管理の手間を無闇に増やしたくない。

なので、できるなら SSH のトンネリングでセキュリティ・認証共に賄って楽をしたい。

けど UPnP とか絡んできてるし複雑そう…もぅマヂ無理。。…と思いきや UPnPDLNA は切り離せると分かったので DLNA over SSH しょ。。。

1. 必要なもの

2. セットアップ

※ Wine, foobar2000, foo_upnp のインストール・設定などは割愛
※ Server には直接 SSH できるか、他のマシン経由で SSH するなどして、該当ネットワークにトンネリングできる必要がある

  • Server
    1. foo_upnp の設定で Media Server のポートを任意のもの(ここでは 33333)にする
      • ※デフォルト (56923) 以外が望ましい
        →デフォルトだと Client 側の設定を変えない限りポートがバッティングする為
  • Client
    1. ssh でローカルフォワードを行う
      $ ssh -fN -Llocalhost:33333:localhost:33333 HOST_TO_SERVER
      • ※フォワード元/先のポートの番号は揃える必要がある
        DLNA が返す URI のポートが Server 画面で設定した値のものになる為
    2. foobar2000 にて UPnP Browser を立ち上げる
      • メニューViewUPnP Browser
    3. 右クリックメニューの Add remote Internet UPnP Server を選択
    4. 出現したダイアログの Host に以下を入力して OK を押下
      http://127.0.0.1:33333
      • 127.0.0.1 ではなく localhost にしてしまうと Client 側の OS の設定で IPv6 を無効にしていなかったり、hosts に IPv6localhost の記載があったりする限り IPv6 で繋ぎに行ったり IPv4 で繋ぎに行ったりして挙動が変になるので注意
        → 具体的にはトラックのローディングが延々と終わらなかったりする
    5. enjoy!

3. その他

  • 簡略化のために Mac に限定したが、もちろん Server, Client 共に Windows でも Linux(w/ Wine) でも代替可能
  • IPv6 の問題で割とはまった…。悩んだら tcpdump