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化されて表示されます。
こんな感じで、無事にSSL化できました。