クリーンインストールし直すたびにやり方を忘れるので手順を自分用にメモ。
発売当初はRaspberry Pi 3より高性能で実用的だったTinker Board。後継機も出て久しい2023年にもなるとサーバー用途のSBCとしてはやや見劣りするけど、まだまだ使えると信じる。
TODO 参考文献の整理
Tinker BoardにOSをインストールする
インストールはWindowsで、最新のOSのzipをダウンロードしてEtcherでmicroSDカードに書き込むだけ。Tinker Board SはeMMC搭載でこちらにもOSをインストール出来るけど、めんどいのでSDカードで。
執筆時点でのTinker Board Sの最新Linux OSはTinker Board S Debian 10 V3.0.11
。
初期セットアップ
ディスプレイとキーボードを繋いで直接操作する。
TinkerOSにはssh
がインストール済みなので最初からSSH接続でもいいはず。ちなみにデフォルトのホスト名はlinaro-alip
(Debian 10の場合。Debian 9はtinkerboard
)
前準備
アップデートチェック
おまじない
$ sudo apt upadate
$ sudo apt upgrade
CLI化
サーバー用途なのでGUI→CLIモードで起動するように変更。
lightdm
とかGUI関連の不要なパッケージも削除したほうがいいと思うけどとりあえずこれだけ。
$ sudo systemctl set-default multi-user.target
タイムゾーン設定(任意)
$ timedatectl set-timezone Asia/Tokyo
IPアドレスの固定、ブリッジ設定
/etc/network/interfaces
を編集し、IPアドレスを固定する。
ブリッジを使いたいので先にbridge-utils
をインストールする。
$ sudo apt install bridge-utils
br0
の設定を行い、IPアドレスを固定する。
$ sudo vi /etc/network/interfaces
# interfaces(5) file used by ifup(8) and ifdown(8)
# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d
#ここから追記
# loopback
auto lo
iface lo inet loopback
# Ethernet port
auto eth0
iface eth0 inet manual
# Bridge interface
auto br0
iface br0 inet static
address 192.168.10.3 #IPアドレス
netmask 255.255.255.0 #ネットマスク
gateway 192.168.10.1 #デフォルトゲートウェイ
bridge_ports eth0
#その他
allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp
※ IPアドレスは環境によって適時合わせる。
(「その他」はなんで設定したのか忘れた……要らんかも)
再起動してIPアドレスが固定されているか確認
$ sudo reboot
$ sudo ifconfig
ポートフォワード(ルーターの設定)
UDPの500, 4500, 1194(OpenVPNを使う場合)を固定したTinker BoardのIPアドレスに対しマッピングし、外部から接続できるようにしておく。
SoftEther VPN ServerをTinker Boardにインストールする
ダウンロードからインストールまで
Linux ARM EABI (32bit)のtar.gzをダウンロードする(※Tinker BoardのRockchip RK3288はARMv7-Aの32bit CPU)
アーカイブを展開するとvpnserver
というディレクトリができるので中に入ってmake
する。vpnserver
ディレクトリごと/usr/local
に配置してパーミッションを設定する。このとき、所有権をroot
にしてrootで実行するようにしておかないとローカルブリッジ機能が使えないらしい。
SoftEther VPN Serverをアップデートするときも同じ操作で上書きインストールでOK。
公式ドキュメント通りだけど、一応コマンドだけ。URLは適時変更。
$ cd Downloads
$ wget https://github.com/SoftEtherVPN/SoftEtherVPN_Stable/releases/download/v4.41-9782-beta/softether-vpnserver-v4.41-9782-beta-2022.11.17-linux-arm_eabi-32bit.tar.gz
$ tar xzvf softether-vpnserver-v4.41-9782-beta-2022.11.17-linux-arm_eabi-32bit.tar.gz
$ cd vpnserver/
$ make
$ cd ..
$ sudo mv vpnserver /usr/local
$ sudo su -
# chown -R root:root /usr/local/vpnserver/
# cd /usr/local/vpnserver/
# chmod 600 *
# chmod 700 vpncmd
# chmod 700 vpnserver
サービスの登録
起動スクリプトを作成してvpnserverがTinker Board起動時に自動起動するようにする。
起動スクリプト/etc/init.d/vpnserver
の内容は公式ドキュメントではなく下記のブログからコピってきたほうが良さげ
# vi /etc/init.d/vpnserver
※ 公式ドキュメントの起動スクリプトはchkconfig
を使うことを前提としている。 まずこの部分をinsserv
で設定出来るようにLSB記法にする。ローカルブリッジの利用に必要な処理も記述。SoftEther VPN側で作ったtun/tapモジュールを認識できるようになっているらしい。よく分からん。
スクリプトファイルを作成して権限を設定したら以下の通りに登録する。
rkisp_3A.shがどうとかいくつか警告が出るけどvpnserverには関係ないので無視。
# chmod 755 /etc/init.d/vpnserver
# insserv -d vpnserver
登録できたことを確認する
# systemctl is-enabled vpnserver.service
vpnserver.service is not a native service, redirecting to systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install is-enabled vpnserver
enabled
Tinker Boardを再起動してサービスが自動起動することを確認する
# sudo reboot
$ systemctl status vpnserver.service | cat
● vpnserver.service - LSB: SoftEther VPN RTM
Loaded: loaded (/etc/init.d/vpnserver; generated)
Active: active (running) since Mon 2023-01-09 16:49:37 JST; 27s ago
Active: active (running)... となるはず。
SoftEther VPNのインストール(Windows)
VPNサーバーの管理はWindowsやMac OS向けの管理ツールを使ったほうが圧倒的に楽なのでインストールする。
説明省略
VPNサーバーの設定(管理ツール経由)
説明省略
ローカルブリッジの設定
ローカルブリッジが最初からある場合は「ローカルブリッジの削除(D)」で削除する。
「新しい tap デバイスとのブリッジ接続(T)」を選択し、「新しい tap デバイス名(V)」に適当な名前を入力し、「ローカルブリッジを追加(A)」を押下する。
Tinker Boardを再起動し、ifconfig
でローカルブリッジ(tap_vlan)が一覧に出てくることを確認する。
$ sudo ifconfig
ユーザーの追加とか
サーバー管理画面にて「仮想HUBの管理(A)」を押下。
「新規作成」でユーザーを追加する。ユーザーはパスワード認証にする(証明書認証と外部サーバー認証はオープンソース版SoftEther VPNでは使用不可)
L2TP/IPsec
L2TP/IPsec接続を使いたい場合、「L2TP サーバー機能を有効にする (L2TP over IPsec)」にチェックする。事前共有鍵に任意の文字列を設定しておく。
Android 12以降はL2TP/IPsecが使えないので、Android 12以降でしか使わないのであればこの設定は不要。
OpenVPN設定
Android 12以降で使いたい場合、こちらを使う(2023年1月現在。IKEv2がSoftEther VPNで使えるようになればまた変わってくるかもね)
サーバー管理画面から「OpenVPN / MS-SSTP 設定」ボタンを押下して設定画面を開き「OpenVPN サーバー機能を有効にする」をチェック。
OpenVPNクライアント用 設定ファイルの作成
「OpenVPN クライアント用のサンプル設定ファイルを生成(C)」をクリックし、zipファイルを保存する。
zipファイル内にある「~access_l3.ovpn」がOpenVPNの設定ファイルになるので、Androidで使えるようにGoogleドライブなどに保存しておく。
OpenVPNインストール・設定(Android)
Playストアからクライアントアプリをダウンロードしてインストール
作成した設定ファイルを読み込ませる
ユーザー名を入力。Save passwordでパスワードを保存しておくとパスワード入力の手間が省ける。
接続を試みるとクライアント証明書を要求するダイアログが出るが、気にせず「CONTINUE」を押す。
無事接続できたら成功。お疲れ様でした、未来の自分
クライアント証明書を要求される件について
ただのパスワード認証で証明書は不要だが、そんなのお構いなしに接続するたびクライアント証明書を要求してくる。設定ファイルのどこかが間違っているのだろうか。この辺りはおいおい調べていく。
証明書無しのまま「CONTINUE」を押しても普通に接続できるので特に問題はないが、接続時にいちいちメッセージが出てきて鬱陶しい。
仮の対策として、適当にルート証明書を発行して設定ファイルの中に書いておくことで抑制することにした。他に方法があるなら知りたい。
ルート証明書の発行
管理マネージャのトップ画面から「証明書作成ツール(R)」をクリック。
名前を入力して「OK」で次へ進む。
「X509証明書ファイル(.CER)と秘密鍵ファイル(.KEY)の組み合わせとして保存する(X)」をクリックして「OK」
.cerファイルと.keyファイルを保存する。
先程の「~access_l3.ovpn」ファイルの末尾に記述欄があるので、コメントアウト;
を削除した上で、.cerファイルの中身と.keyファイルの中身をコピペしてきて.ovpnファイルを保存する。
###############################################################################
# Client certificate and key.
#
# A pair of client certificate and private key is required in case you want to
# use the certificate authentication.
#
# To enable it, uncomment the lines below.
# Paste your certificate in the <cert> block and the key in the <key> one.
<cert>
-----BEGIN CERTIFICATE-----
(cerファイルの中身)
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN RSA PRIVATE KEY-----
(keyファイルの中身)
-----END RSA PRIVATE KEY-----
</key>
OpenVPNクライアントでプロファイルを設定し直して再接続。
その他
TODO Tinker BoardのSSHを公開鍵認証するように変更するとかやっておいたほうがいいかもね