LoginSignup
35
37

超簡単おうちNextcloudと面倒な設定要らずの外部公開 with Tailscale

Last updated at Posted at 2021-05-05

環境

  • Raspberry Pi 4 Model B
  • Raspbian Bullseye 64bit

2023年12月追加

以下の解説はRaspberry Piを対象にしていますがさすがにRAM 2GBでは重かったので最近安い小型PCに移行しました
しかし手順としてはUbuntu 22.04でも変わらないことを確認しました
また、手順を大幅に簡略化しました
Raspberry Pi 4のほかのRAMのモデルや、Raspberry Pi 5での動作報告などお待ちしております!

2023年5月追記

DNS周りの問題を解決するのにDnsmasqを使うのは結局あんまりうまく動かなかったので推奨しない
その代わりにTailscaleというVPNサービスを使う
VPN内のアクセスだけではなく、VPN外への公開もTailscaleの機能を使う

概要

  1. Raspberry Pi4にsnapを使ってNextcloudの簡単インストールをします
  2. Ubuntuなどと違い少しだけ手順が増えるためつまづきました
  3. Tailscaleの導入
  4. https対応
  5. 外部公開
  6. iOSのホームアプリとの連携(おまけ)

ここまでやります

Nextcloudのセットアップ

USBストレージの準備

外付けHDDなどは/mediaにマウントする必要があるようです
適宜

sudo vi /etc/fstab

で変更しましょう
環境によってそれぞれ対応してください

snapのインストール

canonicalが作ったsnap経由で入れるのが一番楽そうなのでまずはこちらをインストールします

sudo apt update
sudo apt install snapd

これでsnapのインストールができました
snapコマンドが使えるようになるはずなので

sudo snap install core

coreを導入したらこれでsnapのインストールが完了です
おそらくUbuntu以外のディストリビューションを使う場合はcoreのインストールが必須です

Nextcloudのインストール

このステップはsnapのおかげで簡単です

sudo snap install nextcloud

Nextcloud installedと出れば成功です.

とりあえず起動するか確認.
初回起動時に色々な設定ファイルが作られるのでしばし待ちましょう

sudo snap start nextcloud

外付けHDDの有効化

データを外部に保存する場合次のステップが必要です

接続

sudo snap connect nextcloud:removable-media

データのコピー,ターゲット先に気をつけてください

sudo cp -r /var/snap/nextcloud/common/nextcloud/data /media/<Target HDD>/nextcloud_data

設定ファイルの編集

sudo vi /var/snap/nextcloud/current/nextcloud/config/config.php

36行目のdatadirectoryを移動先のものへ

再起動

snap restart nextcloud

もしうまくいかない場合はpiごと

sudo reboot now

初回セットアップ

既にこの時点でブラウザからRaspberryPiのローカルIPをひらけば
下に示したログイン画面のように管理者アカウントを作るよう指示されます.
指示通りやれば無事ローカル内で動作するNextcloudの完成です.
スクリーンショット 2021-05-06 2.55.06.png

外部公開とHTTPS

ローカル運用、つまり家の中からしかアクセスを行わない運用のみの方はもう読まなくて大丈夫です

お酒飲みながら作業してお酒飲みながらこの記事書いておりましたが外部公開となると気を引き締めていかなければなりません
2023年になって書き直している今ももちろんお酒を飲んでいます
最初に書いたときもお酒を飲んでいました

Tailscaleの導入

TailscaleとはVPNのサービスである
詳細とインストール方法については以下の記事を参考にされたい、非常に多機能で便利で素敵
そしてこれを利用してVPNの外までの公開ができる、非常に多機能で便利で素敵

100台まで無料のVPNサービス「tailscale」、リンクだけでマシンのシェアも可能!?【イニシャルB】 - INTERNET Watch

WireguardフルメッシュVPNを「ゼロコンフィグ」で作れるクラウド型の最新VPNサービス

といっても導入はびっくりするほど簡単なので大丈夫だと思われるため、Nextcloudと一緒に使うべき時に必要な手順だけ示す

sudo tailscale up

これだけできてればなんとかなる

HTTPS対応

VPNを使うならhttpsを使う意味なんてないじゃないかと思うが、なんかブラウザで開いた時にカッコ悪いのと、後述するTailscaleの便利機能が使えるようになるのでオススメです

ほぼ以下の記事の簡単な日本語訳となる
Enabling HTTPS · Tailscale

まずはTailscaleの設定のページから次のことを確認する

1.管理コンソールの DNS ページに移動します。
2. MagicDNSを有効にします。
3. HTTPS Certificatesの下にある、Enable HTTPSをクリックします。
DeepLで翻訳しました (https://www.deepl.com/app/?utm_source=ios&utm_medium=app&utm_campaign=share-translation

翻訳しました

そしてNextcloudを動かしているマシンで以下のコマンドを実行する

sudo tailscale serve --bg --https=443 80

そしてTailscaleのリバースプロキシ下でNextcloudを動かすため次のように設定する必要がある

sudo nextcloud.occ config:system:set overwriteprotocol --value 'https'

これでどのようにアクセスできるのか次のように確認できる

tailscale serve status

すると、

https://<hostname>.tail<乱数>.ts.net (tailnet only)
|-- / proxy http://127.0.0.1:80

とあるので、適宜

sudo nextcloud.occ config:system:set trusted_domains 1 --value=<hostname>.tail<乱数>.ts.net

とする。

以上、終わり。https対応終わり!

これによって、先ほどの、https://<hostname>.tail<乱数>.ts.netのURLを開くと4G/5Gなど外部からのVPNを介した通信、およびおうちのWiFiなどでの内部からの通信、どちらもできるはずである

この時点で、Tailscaleによって発行されたhttps://<hostname>.tail<乱数>.ts.netのアドレスでのアクセスは、VPN内からのアクセスであれば100.から始まるVPNのIPアドレスに、おうち内からのアクセスであれば192.168.のようなローカルアドレスに自動的に名前解決・ルーティングされる。

うれしい
しかも安定している

なんならNGN網内折り返しも勝手にやってくれるらしい

フレッツ網内折り返し通信での快適VPN。Wireguardのパフォーマンスを引き出す - Qiita

うれしい

外部公開

大体の人はこの時点でNextcloudにアクセスしたいすべての端末にTailscaleを導入すればそれでいい気もするが、Tailscaleの凄さはこれだけにとどまらないため、このNextcloudをTailscale VPNの外に公開する方法を示す
これによるメリットは以下のようなものがある

  • すべての端末にTailscaleを入れなくてもいい
  • 普段はVPN内のみ、たまに外部公開がみたいなことが簡単にできる
  • そのおかげで、誰かとファイルの受送信をしたいときだけ外部公開、みたいな使い方ができるようになり、安心

ということで、手順です

まずさっきのserveをoffにする

sudo tailscale serve --https=443 off

そして外部公開は次のコマンドでできる。DNSの反映までちょっと時間がかかるかもしれない

sudo tailscale funnel -bg --https=443 80

これでhttps://<hostname>.tail<乱数>.ts.netは外部公開される

どれどれ様子を見てみよう

tailscale serve status

すると、

https://<hostname>.tail<乱数>.ts.net (Funnel on)
|-- / proxy http://127.0.0.1:80

Funnel on

えっまじか、とりあえずセキュリティチェックしてみよう

Nextcloudが外部からセキュリティ設定が正しいかどうか簡易的に確認してくれる機能が用意されている

外部からのアクセスとセキュリティチェックが無事できるはずだ

えっじゃあもしかして...?

sudo tailscale funnel --https=443 off

するとhttps://<hostname>.tail<乱数>.ts.netは外部からアクセスできなくなる

常に外部公開していてもNextcloudのログイン画面やセキュリティの機能があるため問題はない。しかし不必要に公開する意味もないため、場合に応じてservefunnelの切り替えができるのはとても嬉しい。

これで完成!!!!!!!!!!!!!!!!!!!以上!!!!!!!!!!!!!!!!!!!!

おまけ

意味もなくhomebridgeを使ってon/offを切り替える

IMG_5031.jpeg

nakano57/tailscale-funnel_homebridge-cmd4

以前(2023年版)の手順からの移行

証明書の更新が不要になるのでこっちの方がおすすめです

sudo nextcloud.disable-https
sudo snap set nextcloud ports.http=80
sudo nextcloud.occ config:system:set overwriteprotocol --value 'https'

以下外部公開へと続く

35
37
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
37