親しい友人たちは私がNASをいじるのが好きだと知っていて、自宅のNASでも多くのサービスを動かしています。オタクである私は、ほとんどの場合ルーター側の内部ネットワークアドレスを経由して利用しており、外部ネットワークからのアクセス状況には注意を払っていませんでした。ところが最近、ある日突然外出中に、NAS上のこれらのサービスが外部ネットワークからアクセスできなくなっていることに気づいたのです。
調べてみると、原因はIPv6の443ポートがブロックされていたためでした。以前私が住んでいた都市ではIPv6の443ポートはブロックされていませんでした。一時的なポートブロックで、しばらくすれば解除されるだろうと思っていましたが、一ヶ月以上経ってもまだ解除されていません。おそらくかなり長い間、解除されることはないでしょう。
Lucky大吉
これまでNAS上のサービスはDDNS-Go+Nginx Proxy Managerで実現していました。先日、ラボのマシンでiStoreOSをいじっている際にLuckyを体験しました。今回は正式にNAS上でLuckyを導入する予定です。自宅のネットワークは私だけが使用しているわけではなく、以前オールインワン端末に問題が発生した際、家族全員から批判されたという前歴があります。そのため、現在のサービスは全てNAS上で運用し、ルーターは純粋なルーティング機能のみに限定しています。
Lucky大吉はDDNSベースの統合型リバースプロキシソリューションであり、多くのドメインサービスプロバイダプラットフォームをサポートしています。同様にAPIとキーによる管理が行われます(ここまでご覧になっている方なら、APIとキーの申請方法はお分かりでしょう)。ただし、管理バックエンドはよりユーザーフレンドリーに設計されており、各種プロセスも直感的に把握できます。SSL証明書も個別管理が可能で、私自身はCloudFlareの15年有効証明書を利用していますが、これほど長い有効期間だと本当に安心です。

もちろん最大の問題はポートの問題です。私はどちらかというと怠け者なので、大吉でポートをマッピングする際、外部に公開するリスニングポートは1つだけ設定し、各種サービスはサブドメインで区別しています。NAS上のリバースプロキシサービスのアドレスには全て「nasx」プレフィックスを付けています。

ソースルール
ポート番号一つの方が覚えやすいとはいえ、ドメイン名にポート番号を付けても利用可能です。しかし、軽度の強迫性障害を持つ私としては、どうしても違和感を覚えるため、ずっとパブリックポート転送を実現する方法を探し続けてきました。以前、大妈でも他のユーザーがリダイレクトルールとソースルールで実現する方法を紹介しているのを見かけましたが、無料版ではリダイレクトルールとソースルールがそれぞれ10件しか設定できないのが残念です。

試行錯誤する中で、ソースルールに「SSL/HTTPS」に一致するオプションがあり、デフォルトの443ポートをサービスホストの指定ポートにリダイレクトできることを発見しました。これはまさに私の現在の状況にぴったりの機能です。

CloudFlareのソースルールは非常に柔軟で、「And」と「Ro」を用いて様々な複雑な判断条件を組み合わせることが可能であり、あらゆる状況に対応できます。単一のネットワークセグメントにホストが1つしかない場合、IPv6のネットワークセグメントで判断すれば、プレフィックスが不要で覚えやすいです。しかし私の「2408」には他のホストも存在するため、プレフィックス方式で判断することを選択しました。NAS上のサービスはすべてサブドメインに「nasx」をプレフィックスとして追加しており、この設定によりこのメインドメイン下の他のサブドメインで競合が発生しないことが保証されています。

もちろんDNS設定の「小黄云」は必ず有効にしてください。そうしないと機能しません。
使用効果
これらの設定が完了すると、ドメイン名だけでプライベートサービスに直接アクセスできるようになります。ブラウザでもクライアントでも問題ありません。ただし、ドメイン経由でアクセスする実際のポートは443であり、カスタムポートではない点に注意してください。リモートAriaダウンロードやリモートデータベースアクセス時にも、ポートには443を入力する必要があります。リモートデスクトップの場合は、ポートを指定せずにドメイン名だけで直接接続できます。
実際に体験してみると、CloudFlare経由のDNSアクセスはアリDNSのポート付き解決よりも速度がやや遅いものの、安定性に優れています。出張中に、一部の都市ではアリDNS経由のアクセスが失敗するケースがあったものの、CloudFlareでは問題ありませんでした。テンセントのDNSPodや火山DNSは試したことがなく、国内の他のプラットフォームがこのようなソースルールをサポートしているかは不明です。ご存知の方がいらっしゃいましたら、ぜひご意見をお聞かせください。