DiscourseをプライベートVPNで使用する際、メールはどうなるか?

こんにちは!

Discourse を特別な設定で使いたいと考えています。Web サーバーは VPN 内の一部の非公開のユーザーのみがアクセス可能です。サーバーの IP アドレスは 10.0.0.1 のようなものになるため、有効なパブリックドメイン名を持つことはできません。

メール送信を正しく設定することが強く推奨されていると読みました。また、いくつかのハックを使えば、メールなしでも管理者アカウントの生成を完了できるとも読みました。

最適な方法は何か迷っています。

a) メールを完全に設定せずに Discourse を使う方法。これは機能しますか?おそらく、各アカウントを有効化するためにいくつかの手動手順に従う必要があると思いますが、予想されるユーザー数が限られているので問題ありません。これで動作しますか?メール送信が機能しない場合の制限は何でしょうか?もちろん、メール通知を送信できないことは避けられないデメリットですが、それだけでしょうか?

b) サーバーはプライベート IP を使用しつつ、メール専用のパブリックアドレスを持つことも可能です。セットアップが簡単になるよう最適化されていると想定し、インストール手順に従ってサーバーアドレスを一度だけ入力します。その後、そのアドレスは HTTP リダイレクトや SMTP などに使用される可能性があります。これは簡単に区別できますか?プライベート IP アドレスを持つサーバーと、メール専用で一致しないドメインを簡単に設定できますか?

Discourse の経験はまだありませんが、実際に問題に直面した際には自分で調べて対応する用意はあります。しかし、ここでは根本的な選択(a か b か)があるため、間違った道に進まないようアドバイスがいただければ幸いです。

ありがとうございます!

ドメイン名が必要です。Discourse は IP アドレスでは動作しません。

サーバーはインターネットに接続できますか?インターネットなしで Discourse を構築するのは…少し複雑です。

サーバーがインターネットに接続できる場合、メール送信機能の確保は問題ありません。

パブリック接続上で構築し、VPN 内でプライベート IP への DNS エントリを追加してから、パブリックアクセスを無効にしてください。

Lets Encrypt は使用しないでください。証明書更新が失敗する可能性があります。

更新は容易にはできませんが、隔離している場合、それは既に明らかだったはずです。

Discourse においてメールは中核的であり、メールがなければさまざまな機能が動作しません。

ご支援いただきありがとうございます。もう少し詳しく説明させていただきます。

まず、私がよく理解している部分と、そうでない部分についてお話ししますね。ローレベルの部分はかなりよく理解しています。IP アドレスや TCP などです。しかし、複雑な Web アプリケーションが扱うことについては経験がありません。また、メールについても同様です。メール送信者はどのように認証され、不正なスパム送信を防ぐためのチェックはどのように行われるのでしょうか?(すべてを説明していただくことは期待していませんが、私の質問を明確にするためにお聞きしています)

ここでは本格的な企業 VPN インフラは用意されておらず、現在あるのはプライベート VPN サブネットと IP レベルのルールだけです。

設定は以下の通りです。サーバーには公開ドメインがありますが、VPN エントリポイント以外のすべてのポートは閉じられています。VPN に接続するクライアントは 10.0.x.x アドレスを取得します。その後、サーバーは 10.0.0.1:80 でアクセス可能になります。

私の理解(おそらく間違っていると思いますが)では、サーバーは自身のドメインでアクセス可能であることを前提としています。

例えば、xyz.com というドメインがパブリック IP 8.7.6.5 に解決されるとします。クライアントはこのドメイン/IP をトンネルのみに使用します。トンネルが確立されると、ブラウザは 10.0.0.1 に接続します。

前述の通り、Discourse については経験がありません。Discourse が独自のドメインを使用すると想定しているのは、リダイレクト動作です。例えば、10.0.0.1 を開いた新しいクライアントを 10.0.0.1/login.php へ転送するなどです。(または同様の動作、単なる例です)もし Discourse が .xyz Domain Names | Join Generation XYZ へリダイレクトしてしまうと、サーバーは VPN 外部からはアクセスできないため、クライアントは迷子になってしまいます。これが、内部アドレスを設定する必要があると想定する問題のタイプです。

メールに関しては、外部メールサーバーに接続する必要があります。パブリックインターネットにはいつでもアクセス可能です!ただし、このトピックについては詳しくありません。ただ、「ねえ、私は 10.0.0.1 です、メールを送信してください」という形でパブリックメールサーバーに接続しても、プライベート IP アドレスを使用しているため機能しないだろうと予想しています。ここではパブリックアドレスが必要だと考えています。

皆さんの回答を楽観的に読むと、設定されたドメインはクライアントの HTTP セッションには使用されないようです。サーバーがプライベート IP でアクセス可能であり、その IP に接続する場合、すべての自己参照リンクやリダイレクトは相対的になるため、ユーザーはサーバーが接続されていることを想定しているドメインへリダイレクトされません。xyz.com をドメインとして設定したまま、ブラウザで Discourse を 10.0.0.1 で開くだけで、機能しない xyz.com のアドレスへ転送されることなく利用できます。

私の質問が多少なりとも明確であることを願っています。混乱させてしまい申し訳ありません!
あと、HTTPS は必須ではありません。むしろ使用しない方がよいと考えています。トンネル内部にいるため、ユーザーを安全に分離する必要はありません。証明書やホスト名の一致に関する問題をすべてスキップしたいと考えています。

それはメールサーバーによります。MailGun や SendGrid などのメールサービスを使用すると仮定しましょう。これらは通常、API URL とユーザー名/パスワードによる認証を行います。

その場合、サーバーが外部 IP にアクセスできる(受信フィルタリングのみ)のであれば、メールサービスへの接続に問題はないはずです。

特に、ドメインが正しい IP に解決される場合です。

インストールのためにポートを開く必要さえありません。VPN を使用してドメインをプライベート IP に指すように設定し、VPN トンネルを通じて example.com というドメインにアクセスできるからです。

Discourse が相対 URL のみを使用するかどうかは確信がありませんが、おそらくそうではないでしょう。ただし、ドメインの DNS レコードを変更することで、10.0.0.1 アドレスを指す A レコード(最初のもの)と、8.7.6.5 というパブリック IP を指す 2 つ目の A レコードを持つように設定できます。アドレスの解決やキャッシュなどの面で、時々面倒なこともあるかもしれませんが、試してみる価値はあります。

xyz.com を 10.0.0.1 に解決させることができます。

サーバーがインターネットに接続できる場合、唯一の問題は Let’s Encrypt の HTTPS 証明書を作成できないことです。

質問ですが、VPN は SSL では得られない何を実現しているのでしょうか?

SSL 上で動作する招待制の Discourse インスタンスは、すでに認証と暗号化を実現しています。VPN が追加する価値は何でしょうか?

他のサービスも稼働しており、それらを守る必要があります。また、非標準ポートを一つだけ開けておくというアイデアには賛成です。

しかし、ご指摘の通り、その要件を緩和し、SSL を使用して Discourse をパブリックインターフェースで実行することを検討すべきでしょう。

みなさん、ありがとうございます。私の問題は解決したようです。

  • VPN 内で動作する Web サーバーの場合、VPN サーバーが DNS としても機能する必要があります。内部 DNS は、外部 IP に解決される同じドメインを内部 IP に解決する必要があります。そして、サーバーの IP をどこでも使用することをやめ、DNS にこの複雑さを任せるべきです。現在、私の VPN は IP レベルでしか動作しておらず、これらの詳細に気づいていませんでした。
    デメリット: すべてのユーザーの www を台無しにしてしまう可能性があります。
  • また、Web サーバーをパブリックポートで動作させ、SSL で保護することもできます。
    デメリット: 現実世界のあらゆる悪に晒されてしまいます。