Raspberry PI をVPN サーバーにしてみる

現在 Raspberry PI をバージョン違いで三台所有していますが(1B, 1B+, 2B) 1B+ を起動せず放置してたので
試しに VPN サーバーにしてみようかと思ってやってみました。
VPN 立てた後の用途は特に考えてません(適当)

  • 前提条件
    • Raspberry PI
      サーバー用途なので有線LANで固定IPアドレス設定にしておいた方がよいです
    • WindowsPC (VPN管理用)
      管理クライアントソフトをインストールする必要があります
  • SoftEther のダウンロード&ビルド
    • SoftEther ダウンロード センター からダウンロード
    • SoftEther VPN (Freeware) > SoftEther VPN Server > Linux > ARM EABI(32bit) を選択して最新ビルドを入手
    • SoftEther VPN (Freeware) > SoftEther VPN Server Manager for Windows から管理クライアントも入手しておく
wget http://jp.softether-download.com/files/softether/v4.19-9599-beta-2015.10.19-tree/Linux/SoftEther_VPN_Server/32bit_-_ARM_EABI/softether-vpnserver-v4.19-9599-beta-2015.10.19-linux-arm_eabi-32bit.tar.gz
tar -xvf softether-vpnserver-v4.19-9599-beta-2015.10.19-linux-arm_eabi-32bit.tar.gz
cd vpnserver
make

ビルドした後に /usr/local/vpnserver に一式配置してパーミッションを設定。

cd ../
mv vpnserver /usr/local
cd /usr/local/vpnserver
sudo chmod 600 *
sudo chmod 700 vpncmd
sudo chmod 700 vpnserver
  • サービス登録
    • vpnserver の起動スクリプトを書いてサービス登録。
      sudo vi /etc/init.d/vpnserver
      sudo chmod 755 /etc/init.d/vpnserver/
      sudo apt-get install chkconfig
      sudo chkconfig vpnserver on
  • /etc/init.d/vpnserver ※行頭「*」の部分は半角アスタリスク「*」です
    #!/bin/sh
    ### BEGIN INIT INFO
    # Provides:                     vpnserver
    # Required-Start:               $local_fs $network
    # Required-Stop:                $local_fs $network
    # Default-Start:                2 3 4 5
    # Default-Stop:                 0 1 6
    # Short-Description:            SoftEther VPN Server
    # Description:                  Start vpnserver daemon SoftEther VPN erver
    ### END INIT INFO
    DAEMON=/usr/local/vpnserver/vpnserver
    LOCK=/var/lock/subsys/vpnserver
    test -x $DAEMON || exit 0
    case "$1" in
    start)
    $DAEMON start
    touch $LOCK
    ;;
    stop)
    $DAEMON stop
    rm $LOCK
    ;;
    restart)
    $DAEMON stop
    sleep 3
    $DAEMON start
    ;;
    *)
    echo "Usage: $0 {start|stop|restart}"
    exit 1
    esac
    exit 0
  • ルータのポート開放設定/ファイアウォール設定
    • 以下ポートを通過するように設定が必要です。
      TCP50ESP
      TCP443HTTPS ※管理クライアント操作用のため、ルータを通過する必要はない
      UDP500, 4500-
  • 管理クライアント側設定 (Windows)
    • SoftEther VPN Server Manager for Windows をインストールして起動
    • 新しい接続設定を追加
      接続設定名は任意、ホスト名にRaspberry PIサーバーのIPアドレスを入力
    • 管理パスワードを設定して接続
    • 「リモートアクセスVPNサーバー」にチェック
    • 「仮想HUB」の名前を入力して追加
    • DDNS名を設定
      (私はドメインを持っているので使う必要がなかったのでここは適当に設定しました)
    • 「L2TPサーバー機能を有効にする(L2TP over IPsec)」にチェック
      「IPsec事前共有鍵」を設定 ※VPNクライアント接続時に必要
    • 「VPN Azureを無効にする」をチェック
    • ユーザーを作成 ※VPNクライアント接続時に必要
    • ローカルブリッジ設定で仮想HUBと「eth0」を選択して追加
  • 接続テスト
    • とりあえず Android で WiFiを切って LTE経由で VPN 接続設定して繋がるか確認
      (確認端末: Nexus 5 - Android 6.0)
  • 設定 > もっと見る > VPN から VPN設定追加

    名前: 任意
    タイプ: L2TP/IPSec PSK を選択
    サーバーアドレス: DDNS名を入力
    IPSec事前共有鍵: 設定した共有鍵を入力

  • 追加した設定をタップすると接続開始(このときに追加したユーザー名、パスワードを入力)
  • 「接続中」から「接続しました」になればOK

証明書を使った認証とかもできそうな感じですし
安全に通信するならそこまでやった方が良さそうな気がしますがとりあえずここまで。