QNAP NASにTailscaleをインストールしてVPN接続できるようにする

QNAP NASにTailscaleをインストールしてVPN接続できるようにする

February 14, 2021
nas, tailscale, network

先日購入したQNAP NASのTS-453Dですが、やはり外部ネットワークからアクセスする手段を確保しておきたいところです。

一般的にQNAP NASを外部から接続するには、QNAP NASの中でVPNサーバーを立ち上げてVPN接続することが多いと思いますが、我が家では現在Tailscaleを使って、Windowsマシンに接続したりしており、QNAPもできればTailscaleを使ったVPNで接続できればと考えました。

調べたところ、自分でTailscaleをビルドすればインストール可能だということが分かったので早速試してみました。

Tailscaleのqpkgをビルドする #

QNAP NASのQTS OSにアプリをインストールするには、qpkgというパッケージを作成する必要があるらしいのですが、ivokub/tailscale-qpkgというDockerを使ったTailscale QPKG builderがあり、これを利用すれば簡単にビルドできました。

ビルド方法はリポジトリをクローンして、make out/pkgコマンドを実行するだけです。これだけでビルド環境の構築からパッケージのビルドまですべて行ってくれます。

$ make out/pkg # パッケージのビルド(要Docker)
docker build -f build/Dockerfile.qpkg -t qdk:latest build/
Sending build context to Docker daemon   7.68kB
Step 1/6 : FROM ubuntu:18.04
(中略)
Creating archive with data files for arm_64...
Creating archive with control files...
Creating QPKG package...
$ ls -l ./out/pkg # ビルドされたパッケージファイルの確認
.rwxrwxrwx 10M tomoya 13 2  0:01 Tailscale_v0.97.0_arm-x19.qpkg
.rwxrwxrwx  74 tomoya 13 2  0:01 Tailscale_v0.97.0_arm-x19.qpkg.md5
.rwxrwxrwx 10M tomoya 13 2  0:01 Tailscale_v0.97.0_arm-x31.qpkg
.rwxrwxrwx  74 tomoya 13 2  0:01 Tailscale_v0.97.0_arm-x31.qpkg.md5
.rwxrwxrwx 10M tomoya 13 2  0:01 Tailscale_v0.97.0_arm-x41.qpkg
.rwxrwxrwx  74 tomoya 13 2  0:01 Tailscale_v0.97.0_arm-x41.qpkg.md5
.rwxrwxrwx 10M tomoya 13 2  0:01 Tailscale_v0.97.0_arm_64.qpkg
.rwxrwxrwx  73 tomoya 13 2  0:01 Tailscale_v0.97.0_arm_64.qpkg.md5
.rwxrwxrwx 11M tomoya 13 2  0:01 Tailscale_v0.97.0_x86.qpkg
.rwxrwxrwx  70 tomoya 13 2  0:01 Tailscale_v0.97.0_x86.qpkg.md5
.rwxrwxrwx 11M tomoya 13 2  0:01 Tailscale_v0.97.0_x86_64.qpkg
.rwxrwxrwx  73 tomoya 13 2  0:01 Tailscale_v0.97.0_x86_64.qpkg.md5
.rwxrwxrwx 11M tomoya 13 2  0:01 Tailscale_v0.97.0_x86_ce53xx.qpkg
.rwxrwxrwx  77 tomoya 13 2  0:01 Tailscale_v0.97.0_x86_ce53xx.qpkg.md5

ビルドが成功すると、./out/pkgディレクトリにパッケージが作成されます。

Tailscaleのインストール #

TailscaleのインストールはQNAPの管理画面へブラウザでログインして、App Centerから行います。

App Centerの手動インストールダイアログ

右上にある「+」のあるアイコンをクリックすると、手動でパッケージをインストールできるので、ローカルファイルの該当するCPUアーキテクチャのパッケージを選択すればインストールが行われます。

CPUアーキテクチャは、NASにSSH接続してuname -mコマンドを実行するか、製品仕様のページから調べられます。うちのTS-453Dはx86_64なので、「Tailscale_v0.97.0_x86_64.qpkg」を選択してインストールしました。

インストールされたTailscale

インストールすると、自動的にtailscaledプロセスが立ち上がるようになっていました。

SSH接続してログイン認証 #

Tailscaleのインストールと起動が完了しても、ログイン認証をしなくてはVPNで接続できません。MacやWindowsではブラウザでログインページを開いて認証を行いますが、QNAPではブラウザは開けません。

そこで、QNAPでのTailscaleのログイン認証は、SSH接続してtailscaleコマンドを実行してログインURLを発行して、任意のブラウザからログインを行います。

そのため、QNAPのSSH接続を許可なければならないので、コントロールパネル→ネットワークとファイルサービス→Telnet/SShからSSH接続を許可しておきます。

SSH接続が可能になればSSHでNASへログインして、次のようにして認証を行います。

$ ssh admin@<NASのIPアドレス>
admin@<NASのIPアドレス>'s password: <パスワードを入力>
$ cd $(getcfg SHARE_DEF defVolMP -f /etc/config/def_share.info)
$ cd .qpkg/Tailscale/  # Tailscaleのインストール場所へ移動する
$ ps | grep tailscaled # ソケットファイルの場所を調べる
 1771 admin       940 S   grep tailscaled
12914 admin     90660 S   /<インストールパス>/tailscaled --port 41641 --state=/<インストールパス>/var/lib/tailscale/tailscaled.state --socket=/<インストールパス>/var/run/tailscale/tailscaled.sock
$ ./tailscale up -socket /<インストールパス>/var/run/tailscale/tailscaled.sock

ivokub/tailscale-qpkgリポジトリのREADMEに書かれているとおりだと、コマンドの順番とソケットのパスが違っているのかうまく動かなかったので自分で調べてコマンドを実行しました。

これでtailscale upコマンドが問題なく実行されると認証用URLが表示されるので、MacのブラウザでURLを開いていつものようにログインすると、QNAP NAS(ts453d-2021)がTailscaleの管理マシンに追加されました。

Tailscaleに登録されたマシン一覧

VPNからNASへの接続確認 #

これでTailscaleによるVPN接続の準備が整ったので、iPhoneのテザリングを利用して外部ネットワークからVPN経由でSSH接続を試してみます。

$ ssh admin@ts453d-2021.tomoya-ton.gmail.com.beta.tailscale.net
The authenticity of host 'ts453d-2021.<メールアドレス>.beta.tailscale.net (<IPアドレス>)' can't be established.
RSA key fingerprint is SHA256:<フィンガープリント>.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'ts453d-2021.<メールアドレス>.beta.tailscale.net,<IPアドレス>)' (RSA) to the list of known hosts.
admin@ts453d-2021.<メールアドレス>.beta.tailscale.net's password:
[~] # exit
logout
Connection to ts453d-2021.<メールアドレス>.beta.tailscale.net closed.

TailscaleのMagic DNSを利用しているので、このようにドメイン名を利用してVPN経由でNASへのSSH接続ができました。

なお、SSH接続は現在はパスワードログインになっていることもあり、セキュリティリスクがあるため、ひとまず許可しない設定に戻しました。

まとめ #

Tailscaleは最近、とても便利だと感じているサービスのひとつで、幅広いクライアントをサポートしていることも売りにしていますが、まさかQNAPでも利用できるとは思っていなかったので、より一層便利さを実感しました。

2000年代にも自宅サーバーやら、何やらと遊んでいた時期があったのですが、そのときは、お金も時間もかかって、それでいてやれることも限られていましたが、2020年のいまでは便利なデバイス、便利なサービスが豊富にあり、簡単に安く遊べるようになっていて技術の進歩をあらためて知りました。

自分もそういったサービスを生みだせるよう、今後も色々と遊んで学び努力していきたいです。