Raspberry PiでのVPNサーバ構築

[個人用のホームページ](https://tkyonezu.com/)を作成しました。今後は、そちらの方に整理していきたいと思いますので、よろしくお願いします。

# VPNサーバ構築

ラズパイに[SoftEther](http://ja.softether.org/)を利用してVPNサーバを構築する方法です。

## 1. ラズパイの用意

最初に[RASPBIAN](https://www.raspberrypi.org/downloads/)をダウンロードしてMicroSDにコピーして、必要な設定を実施しておきます。最低限、タイムゾーンを日本標準時（Asia/Tokyo）にしておくのが良いでしょう。

## 2. SoftEtherのダウンロード

[SoftEtherダウンロードセンター](http://www.softether-download.com/ja.aspx)から、ファイルをダウンロードします。

| 項目 | 選択 |
| --- | --- |
| ダウンロードするソフトウェア | SoftEther VPN (Freeware) |
| コンポーネントを選択 | SoftEther VPN Server  |
| プラットフォームを選択 | Linux  |
| CPUを選択 | ARM EABI (32bit) |

`ダウンロード可能なファイル`から[SoftEther VPN Server (Ver 4.21, Build 9613, beta)](http://jp.softether-download.com/files/softether/v4.21-9613-beta-2016.04.24-tree/Linux/SoftEther_VPN_Server/32bit_-_ARM_EABI/softether-vpnserver-v4.21-9613-beta-2016.04.24-linux-arm_eabi-32bit.tar.gz)を選択してダウンロードします。

*企業環境で利用される際には、RTM 版ビルドを使用されることをお勧めします。*とされていますが、直近のRTM版ビルドの直後に`SoftEther VPN Server Manager for Mac OS X`がサポートされていることから、このビルドを選択しています。

## 3. SoftEtherの展開とインストール

ダウンロードしたファイルを展開して`make`します。

```
tar zxvf softether-vpnserver-v4.21-9613-beta-2016.04.24-linux-arm_eabi-32bit.tar.gz
cd vpnserver
make
```

`make`の最後で実行される`vpncmd`での確認結果が、全て`Pass`していることを確認しておきます。

```
VPN Tools>check
Check command - Check whether SoftEther VPN Operation is Possible
---------------------------------------------------
SoftEther VPN Operation Environment Check Tool

Copyright (c) SoftEther VPN Project.
All Rights Reserved.

If this operation environment check tool is run on a system and that system passes, it is most likely that SoftEther VPN software can operate on that system. This check may take a while. Please wait...

Checking 'Kernel System'... 
              Pass
Checking 'Memory Operation System'... 
              Pass
Checking 'ANSI / Unicode string processing system'... 
              Pass
Checking 'File system'... 
              Pass
Checking 'Thread processing system'... 
              Pass
Checking 'Network system'... 
              Pass

All checks passed. It is most likely that SoftEther VPN Server / Bridge can operate normally on this system.

The command completed successfully.
```

## 4. vpnserverのインストール

出来上がった`vpnserver`を`/usr/local`ディレクトリにコピーします。

```
rsync -av vpnserver /usr/local
```

ファイルのパミッションを整えておきます。

```
cd /usr/local
chmod 700 vpnserver
cd vpnserver
find . -type d -exec chmod 755 {} ¥;
find . -type f -exec chmod 644 {} ¥;
chmod 700 vpncmd vpnserver
```

## 5. vpnserverの起動設定

`/usr/lib/systemd/system`ディレクトリに`vpnserver.service`ファイルを作成します。

```
[Unit]
Description=SoftEther VPN Server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/vpnserver/vpnserver start
ExecStop=/usr/local/vpnserver/vpnserver stop
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target
```

作成したファイルを使用してvpnserverを起動・登録します。

```
systemctl start vpnserver.service
systemctl enable vpnserver.service
```

vpnserverの起動状況を確認します。

```
systemctl status vpnserver.service
```
ここで `Active: active (running)`となっていることを確認します。

```
# systemctl status vpnserver.service
● vpnserver.service - SoftEther VPN Server
   Loaded: loaded (/etc/systemd/system/vpnserver.service; enabled)
   Active: active (running) since Thr 2017-06-15 13:42:54 JST; 53min ago
```

## 6. VPN Server Managerのインストール

vpnserverの設定には、`VPN Server Manager`を利用します。ここで、MacまたはWindowsに`VPN Server Manager`をダウンロードしてインストールします。

[SoftEtherダウンロードセンター](http://www.softether-download.com/ja.aspx)から、ファイルをダウンロードします。

| 項目 | 選択 |
| --- | --- |
| ダウンロードするソフトウェア | SoftEther VPN (Freeware) |
| コンポーネントを選択 | SoftEther VPN Server Manager  |
| プラットフォームを選択 | Mac OS X  |
| CPUを選択 | Intel (x86 and x64) |

Macの場合、ダウンロード可能なファイルから[SoftEther VPN Server Manager for Mac OS X (Ver 4.21, Build 9613, beta)](http://jp.softether-download.com/files/softether/v4.21-9613-beta-2016.04.24-tree/Mac_OS_X/Admin_Tools/VPN_Server_Manager_Package/softether-vpnserver_manager-v4.21-9613-beta-2016.04.24-macos-x86-32bit.pkg)を選択してダウンロードします。

## 7. vpnserverの設定

インストールした`VPN Server Manager`を使用して、vpnserverを設定します。

### 7.1 新しい接続設定の作成

| 項目名 | 入力値 |
| --- | --- |
| 接続設定名 | xxxxxxxx |
| ホスト名 | 192.168.xxx.xxx |
| 管理パスワード | xxxxxxxx |

`接続設定名`を任意に入力、`ホスト名`に、インストールするラズパイの`eth0`に設定する固定IPアドレスを入力、`管理パスワード`を任意に入力して`OK` ボタンをクリックする。

### 7.2 管理接続用パスワードの設定

`VPN Server Manager` のメイン画面から、作成した接続設定名を選択して`接続`ボタンをクリックする。

表示された`管理接続用パスワード`設定画面では、パスワードが空のままで`OK`ボタンをクリックする。

次に表示される`管理者パスワードの設定`画面で、パスワードを入力して`OK`ボタンをクリックする。

| 項目名 | 入力値 |
| --- | --- |
| 新しいパスワード | xxxxxxxx |
| 確認入力 | xxxxxxxx |

`パスワードを変更しました。`画面で`OK`ボタンをクリックする。

### 7.3 SoftEther VPN Server / Bridge 簡易セットアップ

`SoftEther VPN Server / Bridge 簡易セットアップ`画面で、`リモートアクセス VPN サーバー`にチェックを入れて`次へ`をクリックする。

` 続行すると、この VPN Server または VPN Bridge の現在の設定内容は、簡易セットアップで指定した内容に初期化されます。よろしいですか？`の確認画面で`はい`をクリックする。

### 7.4 仮想HUB名の設定

`仮想HUB名`の設定でHUB名を入力して`OK`ボタンをクリックする。

| 項目名 | 入力値 |
| --- | --- |
| 仮想HUB名 | VPN |

### 7.5 ダイナミックDNS機能

`ダイナミックDNS機能`の設定画面に表示されている`ダイナミックDNSホスト名`を控えて、`閉じる`ボタンをクリックする。

| 項目名 | 入力値 |
| --- | --- |
| ダイナミックDNSホスト名 | vpnxxxxxxxxx.softether.net |

### 7.6 IPsec / L2TP / EtherIP / L2TPv3 サーバー機能の設定

`IPsec / L2TP / EtherIP / L2TPv3 サーバー機能の設定`画面で、`L2TP サーバー機能を有効にする (L2TP over IPsec)`にチェックを入れて、`IPsec 事前共有鍵` にシークレットを入力してから`OK`ボタンをクリックする。

| 項目名 | 入力値 |
| --- | --- |
| IPsec 事前共有鍵 | xxxxxxxx |

### 7.7 VPN Azure サービスの設定

`VPN Azure サービスの設定`画面では、`VPN Azure を無効にする`にチェックを入れて、`OK`ボタンをクリックする。

### 7.8 ユーザーの作成

`簡易セットアップの実行`画面で`1. ユーザーを作成する`をクリックする。

`ユーザーのプロパティ`画面で、必要な項目を入力して`OK`ボタンをクリックする。

| 項目名 | 入力値 |
| --- | --- |
| ユーザー名 | xxxxxxxx |
| パスワード | xxxxxxxx  |
| パスワードの確認入力 | xxxxxxxx  |

`ユーザーの作成確認`画面で`OK`ボタンをクリックする。

`ユーザーの管理` 画面で、`閉じる`ボタンをクリックする。

### 7.9 ローカルブリッジの設定

上記の内容で`vpnserver`を使用可能ではあるが、vpnserverの稼働しているサーバに`ssh`したりして、直接使用するためには`ローカルブリッジ`を設定する必要があるため、ここで設定をする。

`3. ローカルブリッジの設定`をクリックする。

`新しいローカルブリッジの定義`で` 仮想HUB`を選択して、` 新しい tap デバイスとのブリッジ接続`にチェックを入れ、`LAN カード`で`eth0`を選択する。`新しい tap デバイス名`に`vlan`を入力して、`ローカルブリッジを追加`ボタンをクリックする。

| 項目名 | 入力値 |
| --- | --- |
| 仮想 HUB | VPN |
| 新しい tap デバイスとのブリッジ接続 | <チェック>  |
| LAN カード | eth0  |
| 新しい tap デバイス名 | vlan |

`ローカルブリッジ接続の定義を追加しました。` の画面で`OK`ボタンをクリックする。

以上で、設定が終了したので`VPN Server Manager`を閉じる。

`ifconfig`コマンドで`tapデバイス`が作成されていることを確認する。

```
ifconfig
```

この例では、`tap_vlan`　が表示されている。

## 8. 固定 IP アドレスの設定

ラズパイで固定 IP アドレスを設定するには、`/etc/dhcpcd.conf`ファイルに以下のような内容を追加する。

```
interface eth0
static ip_address=192.168.xxx.xxx/24
static routers=192.168.xxx.xxx
static domain_name_servers=192.168.xxx.xxx
```

ただし、今回は`ローカルブリッジ`設定をするため、上記の設定がある場合にはコメントアウトしておく。

## 9. bridge-utils のインストール

ブリッジを使用するために、`bridge-utils` をインストールする。

```
apt install -y bridge-utils
```

## 10. ブリッジ接続の設定

ブリッジを構成するため、`/etc/network/interfaces`に以下の設定を追加する。

```
auto eth0
iface eth0 inet manual　　　　　　# eth0 には IP アドレスを設定しない

# SoftEther VPN
auto br0
iface br0 inet static
address 192.168.xxx.xxx    # 固定 IP アドレスを設定
netmask 255.255.255.0
network 192.168.xxx.0
broadcast 192.168.xxx.255
gateway 192.168.xxx.xxx　　　　　　　# 使用するルータの IP アドレスを設定

bridge_ports eth0
bridge_maxwait 10
```

ここで、設定を反映させるためシステムを再起動する。

## 11. ブリッジ接続の確認

再起動したシステムで、ブリッジ接続を確認する。

```
ifconfig
```

デバイスとして `br0`、`eth0`、`tap_vlan`が表示されて、`br0` に固定IPアドレスが設定されていることを確認する。`tap_vlan`は、`169.254.188.223`のようなアドレスが設定されている。

正しくブリッジが構成されて入れば、以下のような内容が表示される。

```
# brctl show br0
bridge name	bridge id		STP enabled	interfaces
br0		8000.00ac10acd354	no		eth0
							tap_vlan
```

## 12. ブリッジ用の起動ファイル

ローカルブリッジを有効にするため、起動ファイルを修正します。

```
[Unit]
Description=SoftEther VPN Server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/vpnserver/vpnserver_start
ExecStop=/usr/local/vpnserver/vpnserver stop
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target
```

ここでは、`/usr/local/vpnserver/vpnserver`を`start`するのではなく、`/usr/local/vpnserver/vpnserver_start` スクリプトを実行しています。

この`/usr/local/vpnserver/vpnserver_start`スクリプトは、以下の内容となります。

```
#!/bin/bash

/usr/local/vpnserver/vpnserver start

tap=$(/sbin/ifconfig -a| awk '$1 ~ /^tap/ {print $1}')
/sbin/brctl addif br0 $tap
```

ここで設定ファイルを修正していますから、変更を反映して`vpnserver`を再起動します。

```
systemctl daemon-reload

systemctl restart vpnserver.service
```

## 13. ルータの設定

ルータで NAT している場合には、グローバルIPアドレスに届いたパケットを VPN サーバに転送します。

| タイプ | ポート | 
| --- | --- |
| UDP | 500  |
| UDP | 4500 |

ルータが1段構成の場合、グローバル IP を VPN サーバに転送します。ルータが 2段構成の場合には、1段目でグローバル IP を 2段目のルータに転送し、2段目のルータから VPN サーバに転送します。

詳細は、[VPN Server 側での L2TP/IPsec 機能の有効化方法](https://ja.softether.org/4-docs/2-howto/L2TP_IPsec_Setup_Guide/1)を参照して下さい。

以上で設定を終了です。VPNライフを満喫して行きましょう！