どうも、ガジェット系ランナーのIPPEIです。暖かくなってきてランニングが楽しい季節になってきましたね。さっきも12km走ってきて絶好調です。
今回は、Synology NASに外部からアクセスする方法として、Cloudflare Tunnelを使う構成を紹介します。
QuickConnectよりも高速かつ安定したリモートアクセス環境を構築できるので、ポート開放ができない環境の方には特におすすめです。
検証した環境は自宅で使っているSynology DS923+です。ありがとう、いいNASです。
Loading...
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に設定するためのトークンが表示されるのでコピペしておく。

ちなみに、トークンの赤線部分は不要なので、後ほどペーストしたあとで削除する。
さて、この画面のままにしておき、別のタブを開いてNASでの作業に移ろう。
Container Managerをインストールして、Cloudflaredを実行する
Synology DSMの「パッケージセンター」から「Container Manager」をインストールする。
インストール後、レジストリから「cloudflare/cloudflared」を検索してダウンロードする。
[コンテナ]→[作成]を開いてウィザードを進めていく。イメージは先程ダウンロードしたヤツを選ぶ。NASが再起動した場合にも実行されるように[自動再起動を有効にする]をオンにしておく。

ネットワークは[host]を選択する。これは、NAS上のサービス(DSMなど)に直接アクセスさせるためだ。
コマンドは先程Cloudflare Tunnelの作成画面でコピペしたトークンを入れる。赤線部分のコマンドは不要なので削除する。

これで次へをクリックするとコンテナが起動するはずだ。次に、Cloudflare Tunnelの作成ページに戻ると、トンネルが作成されたことが表示されるので、次のページへ進む。
Tunnelの詳細設定
[公開アプリケーションルートを追加]の画面が出てくる。
ホスト名のところで先程追加したドメインを選ぶ。必要ならサブドメインを追加する。これによって[nas.*******.com]みたいなURLで、DSM管理画面や各種アプリにアクセスできるようになる。
サービスのところで、HTTPSを選び、URLには[localhost:5001]と入力する。ちなみに、ポート5001はDSMで設定しているポートにする。
最後に、下の方にある[TLS検証なし]をオンにしておくことを忘れてはいけない。これは、NAS側の証明書とCloudflare側の証明書が一致しないために発生するエラーを回避するため。

特定のアプリケーションでTunnelを使用したい場合
基本的にはポート5001に接続してやれば、すべてのアプリケーションが使えるはずだ。実務的には、DSMの[ログインポータル]の設定からいろいろカスタマイズしておくのがいいと思う。
例えば、Synology Chatのみを利用したい場合は、DSMの「ログインポータル」から以下のようにポートを分けて設定する。もちろん、Tunnelのアプリケーションルート設定には[https://localhost:20001]を指定する。

これによって、ブラウザからは[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も動かせるのではないだろうか。そこまで速くはないだろうけど。
コメント
おや、コメントがまだありません。