Raspberry Pi 2にSoftEther VPN Serverを導入

準備

Raspberry PiのためにmicroSDにOSを焼きます。LinuxマシンにmicroSDを刺してから dmesg を実行すると...

[118926.860993] scsi 6:0:0:0: Direct-Access     Generic- Multi-Card       1.00 PQ: 0 ANSI: 0 CCS
[118926.861895] sd 6:0:0:0: Attached scsi generic sg2 type 0
[118927.528729] sd 6:0:0:0: [sdb] 30199808 512-byte logical blocks: (15.5 GB/14.4 GiB)
[118927.529769] sd 6:0:0:0: [sdb] Write Protect is off
[118927.529774] sd 6:0:0:0: [sdb] Mode Sense: 03 00 00 00
[118927.532208] sd 6:0:0:0: [sdb] No Caching mode page found
[118927.532217] sd 6:0:0:0: [sdb] Assuming drive cache: write through
[118927.554698]  sdb: sdb1
[118927.558385] sd 6:0:0:0: [sdb] Attached SCSI removable disk

と表示されたのでデバイスは/dev/sdbとなります。ここにRaspberry Pi OSを焼きます。

# unzip -p 2021-05-07-raspios-buster-armhf-lite.zip 2021-05-07-raspios-buster-armhf-lite.img | dd of=/dev/sdb bs=65536 conv=sync oflag=direct status=progress
1873543168 bytes (1.9 GB, 1.7 GiB) copied, 144 s, 13.0 MB/s
28608+0 レコード入力
28608+0 レコード出力
1874853888 bytes (1.9 GB, 1.7 GiB) copied, 144.126 s, 13.0 MB/s

次にmicroSDのブートパーティションにsshという空のファイルを作成します。

# mount /dev/sdb1 /mnt
# touch /mnt/ssh
# umount /mnt

準備は以上です。

Raspberry Piの初期設定

先ほど焼いたmicroSDカードをRaspberry Piに差し込んでブートします。しばらく待つとsshサーバーが起動するので接続します。

ホスト名はrasbperrypi.localで、ユーザーとパスワードはraspberrypiです。

いくつか設定します。

swapの無効化

$ sudo systemctl stop dphys-swapfile
$ sudo systemctl disable dphys-swapfile
$ sudo swapoff -a

raspi-configの実行

$ sudo raspi-config

を実行して

  • Localisation Options/TimezoneをAsia/Tokyo
  • Advanced Options/Network Interface NamesをYes

します。

ホスト名の変更

ここではホスト名をvpnserverpiにします。二つのファイルを編集します。

  • /etc/hostname内のraspberrypivpnserverpiに変更
  • /etc/hosts内のraspberrypivpnserverpiに変更

ソフトウェアのアップデート

$ sudo apt update
$ sudo apt upgrade
$ sudo apt autoremove

できたら再起動しておきます。

$ sudo reboot

SoftEther VPN Serverの導入

再度Raspberry Piにログインします。先ほどホスト名を変更したのでログイン先はvpnserverpi.localになります。

SoftEther ダウンロード センターからSoftEther VPN ServerのLinux/ARM EABI(32bit)をダウンロードしインストールします。

今回はVer 4.34, Build 9745, rtmを使用しています。 インストール先は/opt/vpnserverです。

$ sudo bash
# wget -O- https://jp.softether-download.com/files/softether/v4.34-9745-rtm-2020.04.05-tree/Linux/SoftEther_VPN_Server/32bit_-_ARM_EABI/softether-vpnserver-v4.34-9745-rtm-2020.04.05-linux-arm_eabi-32bit.tar.gz | tar xzvf -
# cd vpnserver/
# make
...
# cd ..
# mv vpnserver /opt
# cd /opt/vpnserver/
# chmod 600 *
# chmod 700 vpncmd
# chmod 700 vpnserver

ネットワークインターフェイス名の確認

Raspberry PiのネットワークI/Fの名前を確認します。

# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enxb827eb764381: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
    link/ether ca:fe:de:ad:be:ef brd ff:ff:ff:ff:ff:ff

名前はenxb827eb764381のようです。

起動用ファイルを用意

以下の内容で/etc/systemd/system/vpnserver.serviceを作成します。 リモートワーク実現のためSoftEther VPNを利用したVPNサーバを作ってみた を参考にさせてもらいました。

環境に合わせてネットワークI/F名を変更する部分があります。

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

[Service]
Type=forking
ExecStart=/opt/vpnserver/vpnserver start
ExecStop=/opt/vpnserver/vpnserver stop
WorkingDirectory=/opt/vpnserver
ExecStartPre=/bin/ip link set dev enxb827eb764381 promisc on
KillMode=process
Restart=on-abort

[Install]
WantedBy=multi-user.target

それでは起動させてみましょう。

# systemctl start vpnserver
# systemctl status vpnserver.service
...
Active: active (running) since Thu 2021-08-12 11:24:02 JST; 5s ago
...
# systemctl enable vpnserver.service
Created symlink /etc/systemd/system/multi-user.target.wants/vpnserver.service → /etc/systemd/system/vpnserver.service.

うまく動いているようです。

SoftEther VPN Serverの設定

設定です。次のコマンドを発行します。

  • ブリッジ用TAPデバイスの作成
  • ユーザーvpnserの作成
  • ユーザーvpnserのパスワードをvpnuser-passwordに設定
  • VpnAzureの使用を開始
  • 動作ステータスの表示

一括で実行しましょう。

# cat <<EOF | ./vpncmd localhost: /server
BridgeCreate DEFAULT /DEVICE:enxb827eb764381 /TAP:yes
Hub DEFAULT
UserCreate vpnuser /group:none /realname:none /note:none
UserPasswordSet vpnuser /password:vpnuser-password
SecureNatEnable
VpnAzureSetEnable yes
ServerStatusGet
DynamicDnsGetStatus
VpnAzureGetStatus
EOF

コマンドを実行すると以下のようなステータスが表示されます。

ServerStatusGet command - Get Current Server Status
Item                                          |Value
----------------------------------------------+-------------------------
Server Type                                   |Standalone Server
Number of Active Sockets                      |23
Number of Virtual Hubs                        |1
Number of Sessions                            |0
Number of MAC Address Tables                  |1
Number of IP Address Tables                   |1
Number of Users                               |1
Number of Groups                              |0
Using Client Connection Licenses (This Server)|0
Using Bridge Connection Licenses (This Server)|0
Outgoing Unicast Packets                      |282 packets
Outgoing Unicast Total Size                   |11,844 bytes
Outgoing Broadcast Packets                    |2 packets
Outgoing Broadcast Total Size                 |122 bytes
Incoming Unicast Packets                      |282 packets
Incoming Unicast Total Size                   |11,844 bytes
Incoming Broadcast Packets                    |566 packets
Incoming Broadcast Total Size                 |34,526 bytes
Server Started at                             |2021-08-12 (Thu) 11:36:51
Current Time                                  |2021-08-12 12:09:49.035
64 bit High-Precision Logical System Clock    |1978014
The command completed successfully.

DynamicDnsGetStatus command - Show the Current Status of Dynamic DNS Function
Item                                    |Value
----------------------------------------+--------------------------------------
Assigned Dynamic DNS Hostname (Full)    |vpn▒▒▒▒▒.softether.net
Assigned Dynamic DNS Hostname (Hostname)|vpn▒▒▒▒▒
DNS Suffix                              |.softether.net
Global IPv4 Address                     |▒▒.▒▒.▒▒.▒▒
Global IPv6 Address                     |▒▒:▒▒:▒▒:▒▒:▒▒:▒▒:▒▒:▒▒
The command completed successfully.

VpnAzureGetStatus command - Show the current status of VPN Azure function
Item                                               |Value
---------------------------------------------------+-------------------------
VPN Azure Function is Enabled                      |Yes
Connection to VPN Azure Cloud Server is Established|Yes
Hostname of this VPN Server on VPN Azure Service   |vpn▒▒▒▒▒.vpnazure.net
The command completed successfully.

接続するために必要なホスト名などが確認できます。

良さそうなのでVPNサーバーの管理者アカウントにパスワードを設定しましょう。

# ./vpncmd localhost: /server /cmd ServerPasswordSet <admin-password>

その他おすすめの設定

RaspberryPi のユーザー名とパスワードを変更しておきましょう。

参考サイト: [Raspbian]ユーザ名変更の個人的に「正しい」と思うやり方

[おわり]