ラズベリーパイでのVPNサーバー構築

こんにちは。Ryoです。
今回はRaspberry Pi 3を使用してVPNサーバーを構築します。

##なぜやるのか
先日、上海に行きました。その際に香港SIMを使用してネットサーフィンをしていたのですが、一部の国内サイトよりアクセスを弾かれてしまいました。(*ローソンIDのログインページにアクセスできませんでした。)
次回渡航時にアクセスできるように、自宅にVPNサーバーを構築します。

##環境
Raspberry Pi 3
Raspbian GNU/Linux 9.6 (stretch)
MacBook Pro 13インチ 2015
ソフトバンク光 BBユニット
Buffalo WCR-1166DS ルーター
Pixel 3a via ソフトバンク4G

##補足
RasbianとSSHの導入は割愛します。
*1~*3はクライアントの設定で使用するので、メモしといてください。

##1.SoftEtherの導入
[SoftEtherのファイル](https://www.softether-download.com/ja.aspx?product=softether)をダウンロードします。
![スクリーンショット 2019-12-17 17.09.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297926/1166138b-f874-0623-3991-5d8f2d1b7f73.png)

Raspberry PiのIPアドレスをルーターで確認し、SCPコマンドでDLしたファイルを転送します

```terminal:terminal
scp softether-vpnserver-v4.31-9727-beta-2019.11.18-linux-arm_eabi-32bit.tar.gz pi@"ラズパイのIPアドレス":~
```

転送したファイルをRaspberry Pi上で解凍します。

```Rasbian:Rasbian
pi@raspberrypi:~ $ tar xf softether-vpnserver-v4.31-9727-beta-2019.11.18-linux-arm_eabi-32bit.tar.gz
```

解凍したディレクトリに入り、更に展開します。

```Rasbian:Rasbian
pi@raspberrypi:~ $ cd vpnserver
pi@raspberrypi:~/vpnserver $ make
```

makeコマンドを打つといくつか質問を受けるので全て1を選択します。

展開が終わったらvpnserverディレクトリをusr/localに移動します。
rootユーザーでログインしていないため、sudoコマンドを使用します。

```Rasbian:Rasbian
pi@raspberrypi:~ $ sudo mv vpnserver /usr/local
```

移動先に行き、パーミッションを設定します。

```Rasbian:Rasbian
pi@raspberrypi:/usr/local/vpnserver $ chmod 600 *
pi@raspberrypi:/usr/local/vpnserver $ chmod 700 vpncmd vpnserver
```

権限設定ができたかどうかチェックします。

```Rasbian:Rasbian
pi@raspberrypi:/usr/local/vpnserver $ ls -la
```

また、vpnserverがインストールできたか動作確認します。

```Rasbian:Rasbian
pi@raspberrypi:/usr/local/vpnserver $ /usr/local/vpnserver/vpncmd
```

以下の3択を迫られるので3を選びます。

```Rasbian:Rasbian

By using vpncmd program, the following can be achieved. 

1. Management of VPN Server or VPN Bridge 
2. Management of VPN Client
3. Use of VPN Tools (certificate creation and Network Traffic Speed Test Tool)

Select 1, 2 or 3: 3
```

checkコマンドを打ちます。

```
VPN Tools>check
```

以下のように、全てPassしていればインストールは上手くいっています。

```

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.

```

ctrl + cでVPN Toolsを終了します。

vpnserverの自動起動設定をします。

<B>作成ディレクトリ</B>
/etc/systemd/system/
<B>ファイル名</B>
vpnserver.service

スクリプトを作成します。

```Rasbian:Rasbian
pi@raspberrypi:/usr/local/vpnserver $ sudo nano /etc/systemd/system/vpnserver.service
```


```:vpnserver.service
[Unit]
Description=SoftEther VPN Server
After=network.target network-online.target

[Service]
User=root
ExecStart=/usr/local/vpnserver/vpnserver start
ExecStop=/usr/local/vpnserver/vpnserver stop
Type=forking
RestartSec=3s
WorkingDirectory=/usr/local/vpnserver/
ExecStartPre=/sbin/ip link set dev eth0 promisc on

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

サービスを起動し、動作確認します。

```Rasbian:Rasbian
pi@raspberrypi:/usr/local/vpnserver $ sudo systemctl start vpnserver
pi@raspberrypi:/usr/local/vpnserver $ systemctl status vpnserver.service
```

activeと表示されれば、動作しています。

```Rasbian:Rasbian
Active: active (running) since Wed 2019-12-18 03:13:34 JST; 19s ago
```

サービスを自動起動します。

```Rasbian:Rasbian
pi@raspberrypi:/usr/local/vpnserver $ sudo systemctl enable vpnserver.service
```

サービスが起動しているか確認。

```Rasbian:Rasbian
pi@raspberrypi:~ $ systemctl status vpnserver.service
Active: active (running)
```

## 2.VPN Server Managerの設定


[VPN Server Manager](https://www.softether-download.com/ja.aspx?product=softether)をMacに導入し、VPN Serverの設定をします。
![スクリーンショット 2019-12-18 3.21.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297926/d489b96b-fbb3-b1ea-7e2b-cdde0a56c999.png)


SoftEther VPN Server Managerを起動します。
New Settingをクリック。
![スクリーンショット 2019-12-18 13.15.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297926/635afa99-8d8b-4a0c-88e7-7d82c2a38674.png)


administratorのパスワードを作成します。
![スクリーンショット 2019-12-18 13.17.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297926/37cdb559-1dbd-665e-00ff-538d2745e37c.png)



Bridge Easy Setupで
Remote Access VPN Serverにチェックを入れNextをクリック。
![スクリーンショット 2019-12-18 13.24.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297926/bd8432b8-b4b7-ca22-76db-287d3f061ec3.png)


VPN Server、VPN Bridgeの設定を初期化していいか聞かれるが、はいをクリック。
![スクリーンショット 2019-12-18 13.24.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297926/fd33504f-51ea-b6e3-8085-3b8c6ba24db6.png)


Virtual Hub Nameに任意の名前を入れ、OKをクリック。
![スクリーンショット 2019-12-18 13.25.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297926/88860444-2991-470a-6c03-06ef8a4bdac7.png)


IPsec L2TPサーバーセッティングで、Enable L2TP Server Function(L2TP over IPsec)にチェック。
IPsec Common SettingsのIPsec Pre-Shared Key(*1)に任意のパスワードを入れる。
この時に、10文字以上のパスワードを設定するとAndroid端末でエラーの発生ありと警告を受けるので、9文字以下のパスワードを設定する。
![スクリーンショット 2019-12-18 13.33.15_xu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297926/f82f46c7-8c5e-cf4c-f856-4b17ce3e9171.png)


Azureの設定はDisable。
![スクリーンショット 2019-12-18 13.34.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297926/e030b31b-c3cf-6432-6134-0c6da5fea35e.png)


Userを作成する。
![スクリーンショット 2019-12-18 13.35.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297926/a46dcd80-6116-a417-e9e7-854b78028c4a.png)

User Name(*2)、Password(*3)、Confirm Passwordに任意のものを設定する。
![スクリーンショット 2019-12-18 13.36.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297926/0cc64dad-661d-ad31-6a64-9044612f310a.png)



Local Bridge Settingをします。
Vitual Hubに仮想HUB名に任意の名前を記入します。
Bridge with New Tap Deviceにチェックを入れます。
LANアダプターはeth0を選択します。
New Tap Device Nameは任意の名前を記入します。
![スクリーンショット 2019-12-18 23.11.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297926/f20f4a23-e0dd-adcd-e40a-6686d407bce3.png)


以上でVPN Server Managerの設定は終了。
ターミナルでraspberry piにSSHで接続し、ifconfigを叩く。
tap_ + New Tap Device Nameで設定した名前があればOK。

```Rasbian:Rasbian
tap_softether: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
```

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

Raspberry Piでローカルブリッジの設定をする。

```Rasbian:Rasbian
pi@raspberrypi:~ $ sudo apt install -y bridge-utils
```

Raspberry Piのネットワーク構成を編集します。

```Rasbian:Rasbian
pi@raspberrypi:~ $ sudo nano /etc/network/interfaces
```

```Rasbian:interfaces
auto eth0
iface eth0 inet manual

# SoftEther VPN
auto br0
iface br0 inet static
address 192.168.11.64
netmask 255.255.255.0
gateway 192.168.11.1

bridge_ports eth0 tap_softether
bridge_maxwait 10
```

Rasbpberry Piを再起動します。
以上で、ローカルブリッジの設定は終了です。

~~残りのルーターとクライアント(Pixel 3a)の設定は検証が終わり次第、加筆します。~~
接続を確認したので追記します。(2020/03/19)

## 4.ルーターの設定

![IMG_20200318_233232_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297926/afb8f9bc-80cf-2a1d-0559-6ce726ff3e22.jpeg)
WCR-1166DSのモードのトグルをAPモードに合わせる。
*WCR-1166DS上ではルーターの設定はしません。

![softbank-top.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297926/87e49c28-b0db-6718-f5fe-0ff3889bae55.png)
ブラウザから172.16.255.254にアクセスし、ソフトバンク光 BBユニットの設定画面にログイン。
(設定を変更していなければ、ID: user, PASS: userでログイン可能です。)

![softbank-wlan-unable_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297926/93b8e4f2-fcac-4d14-b203-8a65264402dc.png)
無線LANの設定-無線LAN機能停止設定より、ソフトバンク光 BBユニットの無線LAN機能を止めておく。

![softbank-ip-dhcp-setting_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297926/37ef4b4c-e046-acd3-c69f-e293fa4ccc5c.png)
次に、ルーター機能の設定-IPアドレス/DHCPサーバの設定より、IPアドレスの割り当て範囲をラズパイのIPアドレスに合わせる。ソフトバンク光 BBルーターは初期設定で"192.168.3.1"より始まるが、Buffaloルーターは"192.168.11.1"から始まっていたため、本機器IPアドレス/サブネットマスクを"192.168.3.1"から"192.168.11.1"に変更。


同ページの固定割当でラズパイのIPアドレスを固定する。

```Rasbian:Rasbian
pi@raspberrypi:~ $ ifconfig
中略
ether Macアドレス  txqueuelen 1000  (Ethernet)
```
![softbank-ip-dhcp-setting_4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297926/62ed6224-7da2-0104-f12e-9debedb21858.png)

ether以下のMacアドレスを確認し、固定割当にIPアドレスとMACアドレスを入力する。

ポート転送の設定をする。
![softbank-router-port-forwarding_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297926/af75b952-b87d-7bcc-978a-d070d78c6d02.png)
有効、プロトコルUDP、ポートを500,4500、転送先IPアドレスを192.168.11.64で2ケ設定をする。

以上でルーターの設定は終わりです。

##5.クライアント(Pixel3a)の設定

![Screenshot_20200319-020436_2 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297926/f27a1787-6505-df47-7d01-50a697b5b277.png)
設定-ネットワークとインターネット-詳細設定-VPNをタップし、VPNの設定ページを開く。

右上の+ボタンをタップ。プロファイルの編集が出来るので、以下の項目に入力する。

- 名前: 任意
- タイプ: L2TP/IPSec PSK
- サーバーアドレス: SoftEther Dynamic DNS FunctionのGlobal IPv4 Address
- IPSec事前共有鍵: SoftEtherで設定したIPsec Common SettingsのIPsec Pre-Shared Key(*1)
- 転送ルート: 0.0.0.0/0
- ユーザー名: SoftEtherで設定したユーザー(*2)
- パスワード: SoftEtherで設定したパスワード(*3)

![Screenshot_20200319-020517_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297926/6e38c710-c2b9-9518-7770-dc52bc4714da.png)
![Screenshot_20200319-020523_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297926/feb31544-073c-96c7-ced4-7dcef5f6ec83.png)

以上を設定し、保存する。

![Screenshot_20200319-020549_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297926/783758ee-8227-6314-dd91-a28cc9e1910d.png)
設定後に、設定したプロファイルをタップし、接続できれば完了です。
お疲れさまでした。

---
今回のハマりどころはルーターの設定でした。無線ルーターを単なるAPにして、ソフトバンク光 BBユニットの設定を引き継がすという考えが無かったので、気が付くまでに時間がかかりました。

コロナウィルスの騒動が落ち着いたら、中国で接続出来るか確認します。

##参考URL
[Raspberry Piで作るSoftEther VPNの環境](https://chibashi.me/development/softether-vpn-server-201902/)
[Raspberry PiでのVPNサーバ構築](https://qiita.com/tkyonezu/items/00311e2285366984891c)
[RaspberryPiとsoftetherでVPN](https://uda2.com/blog/raspberrypi_softether_vpn/)
[ポート開放のブリッジモードとは](https://www.akakagemaru.info/port/faq-bridge.html)