ストリーミングサーバー(Darwin Streaming Server)を入れてみる

今回はストリーミングサーバーを構築してみます。
とても簡単に動画配信ができるようになります。いつもながら構築しただけで有効に活用できてませんが。。。

インストールといっても以下のコマンドを順に実行するだけです。

[インストール手順]
// DSS用のユーザを作成 
useradd qtss

cd /usr/local/src

// キットとPatchのダウンロード
wget http://dss.macosforge.org/downloads/DarwinStreamingSrvr6.0.3-Source.tar
wget http://www.abrahamsson.com/dss-6.0.3.patch
wget http://dss.macosforge.org/trac/raw-attachment/ticket/6/dss-hh-20080728-1.patch

tar xvf DarwinStreamingSrvr6.0.3-Source.tar

// Patchの適応
patch -p0 < dss-6.0.3.patch
patch -p0 < dss-hh-20080728-1.patch
cd DarwinStreamingSrvr6.0.3-Source

// インストーラの作成
./buildtarball

cd DarwinStreamingSrvr-Linux

// インストール (下記のように聞かれたら任意のユーザ名とパスワードを入力する)
./Install
Please enter a new administrator user name: <DSS_administrator_name>
You must also enter a password for the administrator user [Note: The administrator password cannot contain spaces, or quotes, either single or double, and cannot be more than 80 characters long].
Please enter a new administrator Password:*****
Re-enter the new administrator password:*****

以上でインストールできました。
次にF/Wの例外設定をします。


[F/Wの例外設定]
// /etc/sysconfig/iptables に下記の記述を追加
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 554 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 1220 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 7070 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8000 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8001 -j ACCEPT

// F/Wに設定を反映 
/etc/rc.d/init.d/iptables restart


ここまででサーバーは構築完了です。
後はブラウザから確認してみます。
下記のURLに接続して無事に画面が表示されることを確認してください。


[管理者画面(初めてログインすると設定を聞かれる)]
http://<server_name>:1220

[動画ストリーミング画面]
http://<server_name>:8000/<動画ファイル名>
 

動画が見れるようになったものの、肝心の動画ファイルを何も持ってない管理者。。。
また時間を無駄に使ってしまいましたw

 

OpenVPNを試してみる

今回は外出先から家のサーバに接続することを想定して、安全に通信ができる仕組み「VPN」を導入してみます。使うのはフリーの中で有名な「OpenVPN」です。ではいってみましょう!!

  1. OpenVPNをインストール (サーバ側)
    $ rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
    $ yum -y install openvpn

    ※ 1行目はオプションです。2行目のインストールがうまくいかない場合は1行目を実行してから再度試してみましょう。


  2. OpenVPNを設定 (サーバ側)
    [CA証明書・秘密鍵を作成]
    $ cp -r /usr/share/doc/openvpn-2.0.9/easy-rsa/2.0/ /etc/openvpn/easy-rsa
    $ cd /etc/openvpn/easy-rsa/
    $ chmod +x

    $ vi vars
    /* -------------------------------------------------------------------------------------- */ 
      export KEY_COUNTRY="US"
      export KEY_PROVINCE="CA"
      export KEY_CITY="SanFrancisco"
      export KEY_ORG="Fort-Funston"
      export KEY_EMAIL="me@myhost.mydomain"
             ↓
      export KEY_COUNTRY="<サーバ設置場所(国)> "
      export KEY_PROVINCE="<サーバ設置場所(都道府県)> "
      export KEY_CITY="<サーバ設置場所(市町村)> "
      export KEY_ORG="<サーバ名>"
      export KEY_EMAIL="<管理者メール>"
    /* -------------------------------------------------------------------------------------- */ 

    $ source vars
    $ ./clean-all
    $ ./build-ca
      CA証明書・秘密鍵の作成が開始される。途中パラメータの入力を求められるが上記で「vars」に設定した値が初期値になるので何も入力せずにEnterを押せばよい。

    $ cp keys/ca.crt /etc/openvpn/


    [サーバー証明書・秘密鍵を作成]
    $ ./build-key-server server
      サーバー証明書・秘密鍵の作成が開始される。初めのほうで入力を求められる値は先ほどと同様に「vars」に設定した値が初期値になるので何も入力せずにEnterを押せばよい。
      途中からパスワード等を聞かれるが何も設定していないので同じように何も入力せずにEnterを押せばよい。最後にこれでよいか聞かれるので「y」を入力してEnterを押す。

    $ cp keys/server.crt /etc/openvpn/
    $ cp keys/server.key /etc/openvpn/


    [DHパラメータを設定]
    $ ./build-dh
    $ cp keys/dh1024.pem /etc/openvpn/


    [証明書廃止リストの作成]
    $ ./build-key dmy

    $ vi openssl.cnf
    /* -------------------------------------------------------------------------------------- */ 
      [ pkcs11_section ]
      engine_id = pkcs11
      dynamic_path = /usr/lib/engines/engine_pkcs11.so
      MODULE_PATH = $ENV::PKCS11_MODULE_PATH
      PIN = $ENV::PKCS11_PIN
      init = 0
         ↓
      #[ pkcs11_section ]
      #engine_id = pkcs11
      #dynamic_path = /usr/lib/engines/engine_pkcs11.so
      #MODULE_PATH = $ENV::PKCS11_MODULE_PATH
      #PIN = $ENV::PKCS11_PIN
      #init = 0
    /* -------------------------------------------------------------------------------------- */ 

    ※ 上記をしないとクライアント証明書廃止時にエラーが出る。


    $ ./revoke-full dmy
    $ cp keys/crl.pem /etc/openvpn/
    $ cd


    [OpenVPNの設定]
    $ openvpn --genkey --secret /etc/openvpn/ta.key
    $ cp /usr/share/doc/openvpn-2.0.9/sample-config-files/server.conf /etc/openvpn/
    $ vi /etc/openvpn/server.conf
      ; 初めから設定されているが一応下記を確認。VPN接続時は下記のIPが振り分けられる
    /* -------------------------------------------------------------------------------------- */ 
      dev tun

      server 10.8.0.0 255.255.255.0


      ; Private LANで使用するIPの範囲を書いておく
      ;push "route 192.168.10.0 255.255.255.0"
      ;push "route 192.168.20.0 255.255.255.0"
      push "route 192.168.1.0 255.255.255.0"
      push "route 192.168.0.0 255.255.255.0" 


      ; 先頭の;を消してコメント削除
      tls-auth ta.key 0 # This file is secret

      user nobody
      group nobody

      log-append  /var/log/openvpn.log


      ; 最終行に下記を追加
      management localhost 7505
      crl-verify crl.pem
    /* -------------------------------------------------------------------------------------- */ 


    [起動時にポートを開けるように設定]
    $ vi /etc/openvpn/openvpn-startup
    /* -------------------------------------------------------------------------------------- */ 
      #!/bin/bash

      /etc/openvpn/openvpn-shutdown

      iptables -I OUTPUT -o tun+ -j ACCEPT
      iptables -I FORWARD -o tun+ -j ACCEPT

      iptables -I INPUT -i tun+ -j ACCEPT

      iptables -I FORWARD -i tun+ -d 192.168.1.0/24 -j ACCEPT
      iptables -I FORWARD -i tun+ -d 192.168.0.0/24 -j ACCEPT 


    $ chmod +x /etc/openvpn/openvpn-startup
    /* -------------------------------------------------------------------------------------- */

    [停止時にポートを開けるように設定]
    $ vi /etc/openvpn/openvpn-shutdown
    /* -------------------------------------------------------------------------------------- */ 
      #!/bin/bash

      delete() {
          rule_number=`iptables -L $target --line-numbers -n -v|grep tun.|awk '{print $1}'|sort -r`
          for num in $rule_number
          do
              iptables -D $target $num
          done
      }

      target='INPUT'
      delete

      target='FORWARD'
      delete

      target='OUTPUT'
      delete
    /* -------------------------------------------------------------------------------------- */ 

    $ chmod +x /etc/openvpn/openvpn-shutdown


    [OpenVPNのログローテーションを設定]
    $ vi /etc/logrotate.d/openvpn
    /* -------------------------------------------------------------------------------------- */ 
      /var/log/openvpn.log {
          missingok
          notifempty
          sharedscripts
          postrotate
              /etc/rc.d/init.d/openvpn restart 2>&1 > /dev/null || true
          endscript
      }
    /* -------------------------------------------------------------------------------------- */ 

    [OpenVPNを起動]
    $ vi /etc/rc.d/init.d/openvpn
    /* -------------------------------------------------------------------------------------- */ 
      # echo 1 > /proc/sys/net/ipv4/ip_forward
         ↓
      echo 1 > /proc/sys/net/ipv4/ip_forward

      script_security-"--script-security 2"
         ↓
      script_security="--script-security 2"
    /* -------------------------------------------------------------------------------------- */ 

    $ /etc/rc.d/init.d/openvpn start
    $ chkconfig openvpn on


    [ファイアウォールの設定]
    サーバのUDPの1194番ポートを開放する



  3. OpenVPNをインストール (クライアント側)
    OpenVPNのホームページからWindows Installerをダウンロードして実行する。後は適当にインストールします。


  4. OpenVPNを設定 (クライアント側)
    [クライアント証明書・秘密鍵を作成 (サーバで作成)]
    $ cd /etc/openvpn/easy-rsa/
    $ source vars
    $ ./build-key-pass <重複しないクライアント名>
      クライアント証明書・秘密鍵の作成が開始される。一番初めにパスフレーズの入力を求められる。この値はVPN接続時に必要となる。
      その後に入力を求められる値はサーバの時と同様に「vars」に設定した値が初期値になるので何も入力せずにEnterを押せばよい。
      途中からパスワード等を聞かれるが何も設定していないので同じように何も入力せずにEnterを押せばよい。最後の方でこれでよいか聞かれるので「y」を入力してEnterを押す。


    [必要なファイルをクライアントに移動]
    下記のファイルをクライアントの設定フォルダ『C:\Program Files\OpenVPN\config』へ格納する。

    サーバー側からCA証明書: /etc/openvpn/ca.crt
    クライアント証明書: /etc/openvpn/easy-rsa/keys/client1.crt
    クライアント秘密鍵: /etc/openvpn/easy-rsa/keys/client1.key
    TLS認証鍵: /etc/openvpn/ta.key


    [設定ファイルを編集]
    設定ファイルのサンプル『C:\Program Files\OpenVPN\sample-config\client.ovpn』を設定フォルダ『C:\Program Files\OpenVPN\config』へコピーして編集する。
    ただしWindows7(Vistaも?)の場合はProgram Filesの下でファイルを編集しても反映されないのでデスクトップなどで編集してから設定フォルダにコピーしましょう。
      remote my-server-1 1194
         ↓
      remote <VPNサーバー名> 1194 ← VPNサーバー名を指定

      cert client.crt
         ↓
      cert <クライアント証明書ファイル名>

      key client.key
         ↓
      key <クライアント秘密鍵ファイル名>

      ;ns-cert-type server
         ↓
      ns-cert-type server

      ;tls-auth ta.key 1
         ↓
      tls-auth ta.key 1


    [接続確認]
    OpenVPNを起動してパスフレーズを入力する。接続が成功したかは「ipconfig」コマンドで確認できる。
    もし接続できていればVPN用のIPアドレスが振られているはずです。


  5. ルータのポートフォアリングを設定
    UDPの1194番ポートへのアクセスはVPNサーバへ向ける。

CentOSのRun Levelを変更する

今回はCentOSのRun Levelを変更してCUIのみで管理するようにしようと思います。
別に今まで通りでも問題ないと思うのですが何かその方がサーバっぽいと思ってる古い人間なのもので。。。
その前にRun Level をおさらいします。

[Run Levelとは]
 OSのどこまでの機能を起動させるかを決定する値。数が大きくなるほどに様々な機能が利用できるが、それだけリソースが必要となる。

[CentOSでのRun Level]
 CentOSではRun Levelが0~6まで用意されており、初期値は「5」に設定されている。 
それぞれの説明は以下になる。今回はGUIの機能を封印するので「3」に設定しなおします。
 0 シャットダウン(システムの停止) 
 1 シングルユーザーモード(rootのみ) 
 2 ネットワークなしのマルチユーザーモード 
 3 通常のマルチユーザーモード(テキストログイン) 
 4 未使用 
 5 グラフィカルログインによるマルチユーザーモード 
 6 システムの再起動


[Run Levelの変更方法]
 1. VNCが起動している場合は停止する (Option)
  ※ VNCが起動しているとXwindowsが起動する。グラフィックボードのドライバインストール時にRun Levelを下げる必要があるのだが、その時にエラーとなった原因がVNCだった。今回も念のため止めておく。
  $ /etc/rc.d/init.d/vncserver status     ← 確認
  $ su -                   ← Super Userになる
  $ /etc/rc.d/init.d/vncserver stop
  $ chkconfig vncserver off
  $ vi /etc/sysconfig/iptables

  VNC用に開放したポート設定の行を削除して保存する。デフォルトなら5900か5901番。


 2. /etc/inittabを編集
  $ vi /etc/inittab

  id:5:initdefault: ⇒ id:3:initdefault:


 3. 再起動、確認
  $ su -
  $ shutdown -r 0
   :
   :
  $ /sbin/runlevel
  > N 3


  ※ 上記のように表示されれば成功。


[追記事項: SAMBAの設定]
しばらくしてファイルサーバに接続できないことに気が付きました。サーバに入って下記コマンドを実行すると分かるようにSAMBAはRun Level 3では起動しないようになっている。

$ chkconfig --list smb
> smb             0:off   1:off   2:off   3:off    4:off    5:on    6:off

Run Level 3でも起動するように下記コマンドを実行する。再起動して起動していることを確認してみましょう!

$ chkconfig --level 345 smb on
$ chkconfig --list smb
> smb             0:off   1:off   2:off   3:on    4:on    5:on    6:off


今回は以上となります。お疲れ様でした。