Synology NASの外部アクセスをCloudflare Tunnelで構築する手順(ポート開放不要)

どうも、ガジェット系ランナーのIPPEIです。暖かくなってきてランニングが楽しい季節になってきましたね。さっきも12km走ってきて絶好調です。

今回は、Synology NASに外部からアクセスする方法として、Cloudflare Tunnelを使う構成を紹介します。

QuickConnectよりも高速かつ安定したリモートアクセス環境を構築できるので、ポート開放ができない環境の方には特におすすめです。

検証した環境は自宅で使っているSynology DS923+です。ありがとう、いいNASです。

QuickConnectは悪くないんだけど…

Synology NASには、外部アクセス機能としてQuickConnectが用意されている。

これは、ポート開放ができない環境でもアクセスできるように、Synologyのリレーサーバーを経由して通信を中継する仕組みだ。

ブラウザから自身のQuickConnect URL[https://****.quickconnect.to]を叩くと、直接アクセスできる場合は[https://****.synology.me:ルーターで設定したポート番号]にリダイレクトしてくれる。一方で、直接アクセスできない場合は[https://****.**.quickconnect.to]みたいなURLにリダイレクトされる。

このリレーサーバーは無料で利用できる便利な機能だが、通信速度やレスポンスの面ではやや不満が残る。可能であれば、直接接続できる構成の方が快適なのだが、MAP-EなどのIPv4 over IPv6環境では、ポート開放自体ができない場合がある。

というわけで、先日、自宅とは別の環境で、ルーターがショボくてポート転送などができず、なんとかならんかと試行錯誤したので、その備忘録。

Cloudflare Tunnelが無料なのに結構速い

いろいろ調べるなかでCloudflare Tunnelという機能があることがわかった。

Cloudflare Tunnelは、NASとCloudflare間に安全なトンネルを確立し、外部からのアクセスをCloudflare経由で中継する仕組み。これにより、ポート開放なしで任意のドメインからNASへアクセスできるようになるというわけだ。

ドメインの登録

まずは、ドメイン購入サイトで適当なドメインを入手する。安いヤツでいい。持っている人はサブドメインを使ってCloudflare用に割り当てたりもできるだろうけど、ネームサーバーをCloudflareに設定してしまった方が楽だと思う。

Cloudflareで購入したドメインを登録して、ドメイン購入サイト側でネームサーバーをCloudflareに指定する。なお、この段階では、レコードは特に作成しなくていい。

Tunnelの作成

ここは重要なポイント。開くべき設定画面は、ダッシュボード → Network → Tunnels ではなく、
ダッシュボード → Zero Trust → ネットワーク → コネクタ
である。Tunnelの作成自体は同じなのだが、細かく設定できる内容が異なり、後者を選んでおかないとあとでややこしいことになる。

[トンネルを作成]を開いて、トンネルタイプは[Cloudflared]を選択、オペレーティングシステムは[Docker]を選択する。NASに設定するためのトークンが表示されるのでコピペしておく。

Cloudflare Tunnel 設定画面 コネクターのインストールと実行

ちなみに、トークンの赤線部分は不要なので、後ほどペーストしたあとで削除する。

さて、この画面のままにしておき、別のタブを開いてNASでの作業に移ろう。

Container Managerをインストールして、Cloudflaredを実行する

Synology DSMの「パッケージセンター」から「Container Manager」をインストールする。

インストール後、レジストリから「cloudflare/cloudflared」を検索してダウンロードする。

[コンテナ]→[作成]を開いてウィザードを進めていく。イメージは先程ダウンロードしたヤツを選ぶ。NASが再起動した場合にも実行されるように[自動再起動を有効にする]をオンにしておく。

Synology DSM Cloudflare Tunnelの作成画面

ネットワークは[host]を選択する。これは、NAS上のサービス(DSMなど)に直接アクセスさせるためだ。

コマンドは先程Cloudflare Tunnelの作成画面でコピペしたトークンを入れる。赤線部分のコマンドは不要なので削除する。

Synology DSM Cloudflare Tunnelの作成画面

これで次へをクリックするとコンテナが起動するはずだ。次に、Cloudflare Tunnelの作成ページに戻ると、トンネルが作成されたことが表示されるので、次のページへ進む。

Tunnelの詳細設定

[公開アプリケーションルートを追加]の画面が出てくる。

ホスト名のところで先程追加したドメインを選ぶ。必要ならサブドメインを追加する。これによって[nas.*******.com]みたいなURLで、DSM管理画面や各種アプリにアクセスできるようになる。

サービスのところで、HTTPSを選び、URLには[localhost:5001]と入力する。ちなみに、ポート5001はDSMで設定しているポートにする。

最後に、下の方にある[TLS検証なし]をオンにしておくことを忘れてはいけない。これは、NAS側の証明書とCloudflare側の証明書が一致しないために発生するエラーを回避するため。

Cloudflare Tunnel 設定画面 公開アプリケーションルートを追加

特定のアプリケーションでTunnelを使用したい場合

基本的にはポート5001に接続してやれば、すべてのアプリケーションが使えるはずだ。実務的には、DSMの[ログインポータル]の設定からいろいろカスタマイズしておくのがいいと思う。

例えば、Synology Chatのみを利用したい場合は、DSMの「ログインポータル」から以下のようにポートを分けて設定する。もちろん、Tunnelのアプリケーションルート設定には[https://localhost:20001]を指定する。

Synology DSM ログインポータル 設定画面

これによって、ブラウザからは[https://chat.*****.com]でSynology Chatが開けるし、ネイティブアプリではサーバー欄には通常はQuickConnect IDを入れるのだが、代わりに[chat.*****.com]を入れればいいというわけだ。

ちなみに、1つのTunnelに複数のアプリケーションルートを設定できるので、上記と同じ要領で、Synology Driveも[drive.*****.com]などを設定して利用することができるというわけだ。

もしくは、上の画像のようにエイリアスを設定しておけば、[https://nas.*****.com/chat]というアドレスで運用もできるはずだ。個人的には、DSM管理画面をアクセス可能にしたくなかったので、今のところはchatだけで使っている(いやいや、QuickConnectで管理画面に入れるんだから同じじゃないか)

Zero Trustの利用に法人カードが必要?

ちなみに、CloudflareのZero Trustをセットアップするときに、法人名義のクレジットカードの登録が必要だという情報がある。これを回避する方法があって、PayPalを選択すれば個人名義のクレジットカードでもOKだ。なお、無料なので請求されることは基本的にない。

あと、別アカウントでも検証したのだが、Zero Trustの支払い登録画面まで行って、いったん閉じて開き直したら、カード情報を登録せずにTunnelの作成ができた(スクショなど撮ってなくて申し訳ない)

最後に

Cloudflare Tunnelを使えば、ポート開放ができない環境でも安全かつ高速にNASへアクセスできる。特に、MAP-E環境やルーターの制約がある場合には、有力な選択肢になるはずだ。

一方で、可能であればポート開放による直接アクセスの方がシンプルで高速なので、環境に応じて最適な方法を選択していただきたい。

試してみたわけではないけど、Synology上でApacheなどのWebサーバーを実行すれば、オンプレミスでウェブサイト公開とかできるはずだ。WordPressも動かせるのではないだろうか。そこまで速くはないだろうけど。

買い物しようよ!

コメントを書き込む

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


コメント

おや、コメントがまだありません。