見出し画像

SHOUTcastDNASをSSLに対応させる

どーも。SHOUTcastのロゴはNULL soft時代の方が好きな宮﨑です。今日は長年悩んでいたSHOUTcastDNASのSSL化に成功したのでそのメモです。たぶんIcecastでもいけます。ここではubuntu20.04にSHOUTcastDNASがインストールされている前提で述べていきます。

そもそもSHOUTcastとは?

その昔、インターネットラジオといえばSHOUTcastによる音声配信がメインだった時代がありまして、NULLsoftがまだ元気だった頃に、プレーヤーのWinampとともにインストールしてはラジオ局ごっこをしていたものです。詳しくはWikipediaの解説をご覧いただくのが手っ取り早いかと。

https://ja.wikipedia.org/wiki/SHOUTcast

SHOUTcastDNASやIcecast2を起動する

ここではすでにSHOUTcastDNASやIcecast2がインストールされていることを前提にするので、インストール方法については割愛する。Icecat2ならyumやaptで一発インストールできる上、aacにも対応しているので、これから立ち上げるなら断然おすすめ。ただし、SHOUTcastのポータルサイトに自分のネットラジオ局を掲載したいのであれば、SHOUTcastの方を選ぶべきだろう。

http://directory.shoutcast.com/

通常は8000/tcpポートを利用してhttpによるストリーミングが実施される。コレでも構わないが、昨今は一部のブラウザ(Chromeとか)ではプレーヤーを埋め込んでの再生ができない。

そこで、なんとかしてSSLでの接続をしてやらないといけないのだけど、SHOUTcastDNASは(そしてたぶんIcecast2も)SSLには対応していない。

SSL証明書を用意

SSL化するのであるから、当然SSL証明書が必要。ついでなのでSHOUTcastDNASを動かすサーバにwebサーバーも立ち上げて、SSL化させる。その際、「ドメイン名の取得」が必要になる。オレオレ証明書でも動作はするけど、たぶんそれではなんの解決にもならない。テキトーなドメインを取得して、Let's Encryptあたりで取得しておこう。

stunnelのインストール

サーバーにstunnelをインストールする。ubuntuではstunnel4というパッケージ名だった。ubuntuにインストールするには、

sudo apt install stunnel4

を実行すれば良い。インストールが完了すると、systemdにも登録されるので、起動した状態となる。ただし、このままでは動作しない。

stunnelの設定

stunnelを「動作する」状態に変更する。具体的には、/etc/default/stunnel4 をエディタで開き、

sudo nano /etc/default/stunnel4

この中にある ENABLED=0 という行を次のように変更する。

ENABLED=1

この状態で保存する。

続いて、/etc/stunnel/stunnel.conf を編集する。

sudo nano /etc/stunnel/stunnel.conf

インストール直後はこのファイルが存在しないか、もしくは以下のような内容となっている。ファイルが存在していない場合、とりあえず下記内容を記述すれば動くはず。

pid = /var/run/stunnel4/stunnel.pid
output = /var/log/stunnel4/stunnel.log

setuid = stunnel4
setgid = stunnel4

# https://www.stunnel.org/faq.html
socket = r:TCP_NODELAY=1
socket = l:TCP_NODELAY=1

debug = 4

続けて、SSL証明書を指定する。

上記設定ファイルに次の行を追加する。

cert = /path/to/fullchain.pem
key = /path/to/privkey.pem

おわかりとは思うのだけど、/path/to/の部分は各々の環境に合わせて指定してほしい。

さらに、SSL転送の記述をする。stunnelは、決められたポートへの着信をssl化して別の接続先へ転送するという機能を持っていて、接続先は自分自身でも他のサーバーでも構わない。今回は自分地震で完結する。たとえばデフォルトの8000番ポートで配信を実施していて、SSL化ポートを8443番に指定する場合は、次のような記述となる。

[SHOUTcast]
client = no
accept = 8443
connect = 8000

これで、8443番ポートに受信した接続要求をSSL化した上で、8000番ポートにブリッジすることができ、晴れてhttps化が完成した。ということになります。ためしに、ブラウザで8443番ポートにアクセスすると、管理画面がSSL化されて表示されます。

画像1

こんな感じで、無事にSSL化できました。


この記事が気に入ったらサポートをしてみませんか?