はじめに
自宅サーバ上のNextcloudに自宅外からアクセスするため、TailscaleとCaddyを使用して、Tailscaleクライアントからhttpsで接続できるように設定します。
以下のネットワーク構成図だと③の方法です。
①と②の方法については以下の記事を参照ください。
前提として、以下の環境で作業します。
- 自宅サーバ: Ubuntu 22.04
- Nextcloud: snap版を使用して初期設定済
- 接続クライアント: Tailscale導入済のOS(Windows、Androidなど)
Tailscaleのインストール
自宅サーバにTailscaleをインストールします。予めTailscaleのアカウントを作成しておく必要がありますが、ここでは手順を省略します。
Linuxでは以下のコマンドを実行します。
$ curl -fsSL https://tailscale.com/install.sh | sh
実行後、ブラウザで指定のURLを開くように指示されるので、案内に従って認証します。
Caddyのインストール
自宅サーバにCaddyをインストールします。CaddyはGo言語で書かれた軽量なWebサーバで、ApacheやNginxより設定が楽です。あと、Tailscaleとの連携が便利です。
以下のコマンドを実行します。
$ sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https $ curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg $ curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list $ sudo apt update $ sudo apt install caddy
インストール後、Caddyの設定を変更します。
$ sudo nano /etc/caddy/Caddyfile
以下の設定は一例です。
{ auto_https disable_redirects ocsp_stapling off } xxxxx.taildbXXX.ts.net { root * /snap/nextcloud/current encode zstd gzip file_server reverse_proxy localhost:80 { flush_interval -1 } redir /.well-known/carddav /remote.php/dav 301 redir /.well-known/caldav /remote.php/dav 301 tls { get_certificate tailscale } header { Strict-Transport-Security max-age=31536000; } }
いくつか設定のポイントを記載すると…
- 設定のインデントは半角スペースではなくタブを使います
auto_https disable_redirects
で、http→httpsへのリダイレクト機能を無効化します(そうしないとNextcloud(httpd)で使用しているhttpポートをCaddyで使用しようとしてエラーになる)xxxxx.taildbXXX.ts.net
は、自宅サーバのホスト名とTailscaleのDNS(Tailnet name)に従って変更しますget_certificate tailscale
という一文でLet's EncryptのSSL証明書を取得してくれます
設定反映後、以下のコマンドで設定に問題がないか検証します。「ERROR」や「WARN」がなければ基本OKですが、先の設定で無効化したauto_https
はWARNで表示されます。
$ sudo caddy validate --config /etc/caddy/Caddyfile
問題なければサービスを再起動します。
$ sudo systemctl restart caddy
なお、Caddyをrootユーザ以外で実行している場合は、以下のリンク先を参考に、SSL証明書を取得するための権限をcaddyユーザに付与します。
$ sudo nano /etc/default/tailscaled
以下を最下行に追加します。
TS_PERMIT_CERT_UID=caddy
Nextcloudの設定変更
Tailscaleのアドレスを信頼できるドメインとしてNextcloudの設定に追加します。
$ sudo nano /var/snap/nextcloud/current/nextcloud/config/config.php
trusted_domains
の設定項目を見つけて編集します。既にarray内に設定が存在する場合は、番号をカウントアップして追加します。
'trusted_domains' => array ( 0 => 'xxxxx.taildbXXX.ts.net', ),
Nextcloudへの接続確認
Tailscaleをインストールした任意のクライアントで、Tailscaleを起動後、https://xxxxx.taildbXXX.ts.net
にアクセスします。
無事にログインできれば成功です。お疲れさまでした。