Raspberry Pi 2 Model B で L2TP/IPSec VPNサーバを構築してみた(その1)

2016年1月29日

本記事は、Raspberry Pi 3に対応しています。

Raspberry Piは低消費電力のため、常時稼動させるサーバとしては最適です。
今回は、Raspberry Pi 2 Model B で、L2TP/IPSecのVPNサーバを構築します。

目的

  • 外出先からスマートフォン等で自宅のネットワークに接続し、安全にファイルサーバ上のデータを扱える。
  • VPN接続でRaspberry Piに接続できる。
  • Raspberry Pi上のファイルサーバに接続できる。

課題

  1. どのようにセキュリティを担保するか?
  2. プロバイダから割り当てられているグローバルIPアドレスが変わる可能性がある、どのように自宅のグローバルIPアドレスを知るか?
  3. Linuxの仕様で、VPN接続中は、VPNサーバそのものと通信できないらしい。(Raspberry PiにVPN接続しながらRaspberry Pi上のデータにアクセスできない)

課題に対する解決案

セキュリティの担保

L2TP/IPSec もしくは SSL-VPN を使用してセキュリティを担保する。

⇒ L2TP/IPSecに対応しているSoftEtherVPNを利用する。

IPアドレスの問題

ダイナミックDNSサービスを使う。

⇒ SoftEtherの運営元がDDNSサービスを提供してくれている。

Linuxの仕様の問題

OSのIPアドレスを、物理デバイス(eth0)ではなく、ブリッジデバイス(br0)に割り当てて、br0にeth0とVPN仮想HUBをブリッジさせることで回避可能。

http://www2.softether.jp/jp/vpn3/manual/web/3-6.aspx#vpn_3_6_11

Linux オペレーティングシステム内部での制限事項により、VPN 側 (仮想 HUB 側) からローカルブリッジしている LAN カードに割り当てられる IP アドレスに対して通信を行うことはできません。この制限は PacketiX VPN が原因ではなく、Linux の内部構造に原因があります。もし VPN 側 (仮想 HUB 側) から Linux でローカルブリッジに使用しているコンピュータ本体と、何らかの通信を行いたい場合 (たとえば VPN Server / VPN Bridge サービスと HTTP サーバーサービスを両方動作させており、VPN 側からもサーバーサービスにアクセスさせたい場合) は、ローカルブリッジ用の LAN カードを用意して接続し、その LAN カードと既存の LAN カードの両方を物理的に同じセグメントに接続してください

要するに、OSのIPアドレスをブリッジデバイス(br0)に付与して、接続したい物理(eth0)および仮想HUB(vlan)をブリッジデバイス(br0)に繋げてやる(ブリッジする)ことで回避できるわけですね。

絵で描くとこんな感じです。
bridge

ということで、我が家の低消費電力のVPN Server環境は以下に決まりました。

環境

  • ハードウェア:Raspberry Pi 2 Model B
  • OS:Raspbian jessie
  • VPNサーバソフトウェア:SoftEther VPN

構築手順

SoftEtherはsudoコマンドではなくrootユーザにてインストール作業をすることが推奨のため、rootにスイッチしておきましょう。

以後のコマンドはすべてrootで実行します。

ブリッジデバイスを取り扱うパッケージのインストール

前述のとおり、Linuxの仕様の問題を回避するために、ブリッジデバイスbr0にIPアドレスを付与する必要があるわけですが、デフォルトではブリッジデバイスを扱うパッケージがインストールされていないため、インストールします。

物理デバイスに設定済みの固定IPアドレス設定を解除

ブリッジデバイスbr0にIPアドレスを付与するために、既にeth0等に付与している固定IPアドレス設定を削除します。

参考:Raspbian(jessie)の固定IPアドレス設定方法

削除してもいいですが、以下のように、設定個所を全てコメントアウトするだけでも良いです。

ブリッジデバイスへの固定IPアドレス設定

/etc/network/interface ファイルにブリッジデバイスbr0への固定IPアドレス設定と、物理デバイスeth0のブリッジ接続設定を記載します。

192.168.0.20/24 の固定IPアドレスを付与する例です。"★"は全てコメント

設定が終わったら再起動します。

設定確認

再起動後、br0に固定IPアドレスが設定されていることを確認します。
eth0側は169.254.xx.xx等のAPIPAアドレスで問題なしです。

SoftEtherのLinuxパッケージをダウンロード

公式サイトからLinux ARM EABI 32bit の 最新版をダウンロードします。
http://www.softether-download.com/ja.aspx?product=softether

パッケージの選択は以下の画像を参考にしてください。
softether-download

ダウンロードしたパッケージを /root ディレクトリに配置します。(任意のディレクトリでいいですが、以下、/root に配置したとして解説します)

SoftEtherのパッケージを解凍

makeする

解凍されたvpnserverディレクトリに移動して、makeしましょう。

以下のように聞かれたら、1を入力します。

EURAを読みましょう。

~~中略~~

1を入力して同意しましょう。

もう一度1を入力して同意しましょう。

以下のように、makeが進みます。

makeが完了し、コンパイルされました。

ファイルを確認してみましょう。

適切なディレクトリにmoveする

一つ上のディレクトリに移動し、vpnserverディレクトリを/usr/localにmoveしましょう。

パーミッション設定

基本的に600に、vpncmdとvpnserverは700に、パーミッションを変更します。

起動スクリプトの作成

vpnserver という起動スクリプトを作ります。SoftEtherの仮想HUBを作成した後に、ブリッジデバイスとブリッジする設定を追加しないといけないので、現時点ではとりあえず以下のとおりコピペして作ってください。

起動スクリプトをchkconfrigに登録する。

chkconfigをインストールしていない場合は、apt-get install chkconfig コマンドでインストールしてください。

vpnserver という起動スクリプトをchkconfigに登録します。

vpnserverを起動する

Raspbian jessie を再起動するか、サービスを起動してください。

OSを再起動する場合

vpnserverサービスを起動する場合

 

ここまでで、一旦Linux側(Raspbian jessie)側での操作は終わりです。(最後にまた少し操作しますが…)

次は SoftEther VPN Serverの設定に入ります。

Raspberry Pi 2 Model B で L2TP/IPSec VPNサーバを構築してみた(その2)に続きます。