PINE64にArmbian(Linux)をインストールしてSoftetherVPN Server化
■Armbianとは
ArmbianはSBC向けのDebian/Ubuntuベースのディストリビューションです。DebianやUbuntuが公式に対応していないSBC向けのディスクイメージが配布されています。
イメージファイルは各SBC毎のページからダウンロードできます。
PINE A64用は以下のURLにあります。
https://www.armbian.com/pine64/
サーバ用にCLI版のArmbian_23.5.1_Pine64_jammy_current_6.1.30.img)
をダウンロード
■ArmbianのイメージファイルをSDカードに書き込み
Windows:Win32DiskImagerで書き込みを実施
Mac:下記コマンドで書き込みを実施
SDカードのパスを確認
$ diskutil list
(SDカードのパスが「/dev/disk4」だった場合。以下のコマンドで書き込み)
$ diskutil unmountDisk /dev/disk4
$ xzcat Armbian_22.02.2_Pine64_bullseye_current_5.15.26.img.xz | sudo dd of=/dev/rdisk4 bs=16m
(書き込みが完了すると、アンマウントするか尋ねられるためアンマウント)
■PINE A64の起動
PINE A64にmicroSDカードを差し込み、USBから電源を供給。
パーティションの拡大処理などが行われるためしばらく放置。
(HDMIを接続していると画面に表示される)
DHCPアドレスが取得されるため、arp -aなどでIPアドレスを確認
(画面にも表示されるため、それで確認することも可能)
別途作業用PCからSSH ログイン
※デフォルトユーザー:root、パスワード:1234
ログイン後、rootパスワード変更と一般ユーザー新規作成の指示に従い実施
■PINE A64の基本設定
ユーザーの切り替え
$ su <user_name>
aptの更新
$ sudo apt update
$ sudo apt upgrade
cmakeのインストール #cmake v3.7以上必要
$ sudo apt-get install libssl-dev
$ sudo apt-get install libncurses5-dev
$ wget https://github.com/Kitware/CMake/releases/download/v3.16.0/cmake-3.16.0.tar.gz
$ tar xvf cmake-3.16.0.tar.gz
$ cd cmake-3.16.0/
$ ./configure
$ make
$ sudo make install
$ export PATH="/usr/local/bin:$PATH"
$ cmake
ネットワーク設定ツールのインストール
$ sudo apt install net-tools
■SoftetherVPN Serverのインストール
GitからソースコードをClone
$ sudo apt install git
$ git clone https://github.com/SoftEtherVPN/SoftEtherVPN.git
$ git submodule update --init --recursive
必要パッケージのインストール
$ cd SoftEtherVPN
$ sudo apt install pkg-config
$ sudo apt install libncurses5-dev libreadline-dev libssl-dev zlib1g-dev
$ sudo apt install libsodium-dev
ソースビルド&インストール
$ ./configure
$ sudo make -C build
$ sudo make -C build install
■VPN Server の配置
ディレクトリやファイルの権限を変更
(vpnserver ディレクトリ内のファイルを、「root 権限」でなければ読み書きすることができないように、パーミッションを変更して保護)
$ cd build
$ sudo chmod 600 *
$ sudo chmod 700 vpncmd
$ sudo chmod 700 vpnserver
SoftEther VPNの起動スクリプトを作成し登録
$ sudo apt install vim
$ sudo vim /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 RTM
# Description: Start vpnserver daemon SoftEther VPN Server
### END INIT INFO
DAEMON=/usr/local/vpnserver/vpnserver
LOCK=/var/lock/vpnserver
# tun/tapモジュールのロード
sudo modprobe tun
. /lib/lsb/init-functions
test -x $DAEMON || exit 0
case "$1" in
start)
sleep 3
log_daemon_msg "Starting SoftEther VPN Server" "vpnserver"
$DAEMON start >/dev/null 2>&1
touch $LOCK
log_end_msg 0
sleep 3
# SoftEther VPNで追加した仮想tapデバイス名を調べる
#tap=`/sbin/ifconfig -a| awk '$1 ~ /^tap/ {print $1}'`
tap_dev=`/sbin/ip tuntap | awk -F: '{print $1}'`
#/sbin/brctl addif br0 $tap
if [ -n "$tap_dev" ]; then
/sbin/brctl addif br0 $tap_dev
fi
;;
stop)
log_daemon_msg "Stopping SoftEther VPN Server" "vpnserver"
$DAEMON stop >/dev/null 2>&1
rm $LOCK
log_end_msg 0
sleep 2
;;
restart)
$DAEMON stop
sleep 2
$DAEMON start
sleep 5
# SoftEther VPNで追加した仮想tapデバイス名を調べる
tap=`/sbin/ifconfig -a| awk '$1 ~ /^tap/ {print $1}'`
/sbin/brctl addif br0 $tap
;;
status)
if [ -e $LOCK ]
then
echo "vpnserver is running."
else
echo "vpnserver is not running."
fi
;;
*)
echo "Usage:$0 {start|stop|restart|status}"
exit 1
esac
exit 0
/etc/init.d/vpnserver スタートアップスクリプトを作成した後、
このスクリプトのパーミッションを変更して、root 権限を持たないユーザーによって書き換えられないようにします。
$ sudo chmod 755 /etc/init.d/vpnserver
「chkconfig」コマンドを使用して、上記のスタートアップスクリプトが Linux カーネル起動時に、自動的にバックグラウンド起動するようにする
#古いけど備忘録として残す⇒ $ /sbin/chkconfig --add vpnserver
$ sudo systemctl enable vpnserver
VPN Server サービスを開始
※開始後はWindowsのSoftetherVPN管理アプリからセットアップするとラク
$ sudo /etc/init.d/vpnserver start
※そのほかのサービス操作コマンド
停止する場合: $ sudo /etc/init.d/vpnserver stop
再起動する場合:$ sudo /etc/init.d/vpnserver restart
■ローカルブリッジの設定
※Linuxサーバーの場合:本設定を行わないとVPNクライアントからVPNサーバーのサービス(Webサーバー、ファイルサーバー等)にアクセスできない。
※VPNサーバーがVPN接続サービスのみ提供する用途であれば実施不要
参考:Linux におけるローカルブリッジの注意事項
https://www.softether.jp/1-product/11-vpn/31-overview/11
物理インタフェース名確認
$ nmcli device
DEVICE TYPE STATE CONNECTION
eth0 ethernet connected Wired connection 1
lo loopback unmanaged --
ブリッジインタフェースbr0作成
$ nmcli c add type bridge ifname br0
Connection 'bridge-br0' (6af7792e-e648-4550-89e5-3fc8491ef59a) successfully added.
ブリッジインタフェースbr0のSTPを無効
$ nmcli con modify bridge-br0 bridge.stp no
$ nmcli device
DEVICE TYPE STATE CONNECTION
eth0 ethernet connected Wired connection 1
br0 bridge connecting (getting IP configuration) bridge-br0
lo loopback unmanaged --
ブリッジインタフェースbr0ネットワーク設定
※IPアドレスが192.168.1.100、Gatewayが192.168.1.1 の場合は下記のように指示
$ nmcli con modify bridge-br0 ipv4.method manual ipv4.addresses 192.168.1.100/24 ipv4.gateway 192.168.1.1 ipv4.dns "8.8.8.8 8.8.4.4"
物理インタフェースeth0をブリッジインタフェースbr0に接続
$ nmcli con add type bridge-slave ifname eth0 master bridge-br0
$ nmcli c del eth0 ← 物理インタフェースeth0削除 ※失敗しても成立してたから良し?
$ reboot ← システム再起動
$ brctl show ← ブリッジ接続状態照会
bridge name bridge id STP enabled interfaces br0 8000.3abd0efca26c no eth0
※eth0とブリッジインタフェースbr0がブリッジ接続されていることが確認できる
IPアドレス照会
$ ip addr show
※物理インタフェースeth0にはIPアドレスは設定されていない
※ブリッジインタフェースbr0にIPアドレスが設定されている
下記のような応答が出てくる(一部マスク)
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP group default qlen 1000
link/ether **:**:**:**:**:** brd ff:ff:ff:ff:ff:ff
3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether **:**:**:**:**:** brd ff:ff:ff:ff:ff:ff
inet 192.168.1.100/24 brd 192.168.1.255 scope global noprefixroute br0
valid_lft forever preferred_lft forever
inet6 ****:****:****:****:****:****:****:****/64 scope global temporary dynamic
valid_lft 278sec preferred_lft 278sec
inet6 ****:****:****:****:****:****:****:****/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 278sec preferred_lft 278sec
inet6 ****::****:****:****:***/64 scope link noprefixroute
valid_lft forever preferred_lft forever
■補足:vpncmd ⇒ check コマンドによるチェック
$ cd /usr/local/vpnserver
$ sudo ./vpncmd
vpncmd コマンド - SoftEther VPN Developer Edition コマンドライン管理ユーティリティ
SoftEther VPN コマンドライン管理ユーティリティ (vpncmd コマンド)
Developer Edition
Version 5.02 Build 5180 (Japanese)
Compiled 2023/08/11 18:38:54 by root at pine64
Copyright (c) all contributors on SoftEther VPN project in GitHub.
Copyright (c) Daiyuu Nobori, SoftEther Project at University of Tsukuba, and SoftEther Corporation.
All rights reserved.
vpncmd プログラムを使って以下のことができます。
1. VPN Server または VPN Bridge の管理
2. VPN Client の管理
3. VPN Tools コマンドの使用 (証明書作成や通信速度測定)
1 - 3 を選択: 3
VPN Tools を起動しました。HELP と入力すると、使用できるコマンド一覧が表示できます。
Copyright (c) all contributors on SoftEther VPN project in GitHub.
Copyright (c) Daiyuu Nobori, SoftEther Project at University of Tsukuba, and SoftEther Corporation.
All Rights Reserved.
この動作環境チェックツールを実行したシステムがテストに合格した場合は、SoftEther VPN ソフトウェアが動作する可能性が高いです。チェックにはしばらく時間がかかる場合があります 。そのままお待ちください...
'カーネル系' のチェック中...
[合格] ○
'メモリ操作系' のチェック中...
[合格] ○
'ANSI / Unicode 文字列処理系' のチェック中...
[合格] ○
'ファイルシステム' のチェック中...
[合格] ○
'スレッド処理システム' のチェック中...
[合格] ○
'ネットワークシステム' のチェック中...
[合格] ○
すべてのチェックに合格しました。このシステム上で SoftEther VPN Server / Bridge が正しく動作する可能性が高いと思われます。
コマンドは正常に終了しました。
VPN Tools>exit
■補足:vpncmd ⇒ Hublist コマンドにより
Virtual HUBとのローカルブリッジ接続に使用できる物理NICを確認
$ cd /usr/local/vpnserver
$ sudo ./vpncmd
1. VPN Server または VPN Bridge の管理
2. VPN Client の管理
3. VPN Tools コマンドの使用 (証明書作成や通信速度測定)
1 - 3 を選択: 1
サーバーに仮想 HUB 管理モードで接続する場合は、仮想 HUB 名を入力してください。
サーバー管理モードで接続する場合は、何も入力せずに Enter を押してください。
接続先の仮想 HUB 名を入力: VPN
VPN Server "localhost" (ポート 443) に接続しました。
VPN Server 内の仮想 HUB 'VPN' に対する管理権限があります。
VPN Server/VPN>Hublist
HubList コマンド - 仮想 HUB の一覧の取得
項目 |値
----------------+-------------------
仮想 HUB 名 |VPN
状態 |オンライン
種類 |スタンドアロン
ユーザー |1
グループ |0
セッション |1
MAC テーブル |14
IP テーブル |20
ログイン回数 |0
最終ログイン日時|2023-08-12 12:13:11
最終通信日時 |2023-08-30 13:02:10
転送バイト数 |2,857,535,139
転送パケット数 |20,780,104
コマンドは正常に終了しました。
参考情報
この記事が気に入ったらサポートをしてみませんか?