OCNバーチャルコネクト環境でも自宅サーバーを外部公開する

IPv6 の OCN バーチャルコネクト環境では well-known ports が利用出来ず Web サーバーを公開するのに支障がありますが、今回はそれを乗り越えるための手法を紹介します。

自宅サーバーに https://service.example.com/ のようにポート指定なしのサブドメインでアクセスできるようにするのがゴールです。

構成

自宅サーバーの手前に CDN を挟み、CDN を経由して接続させるようにします。要するに手前にリバプロを生やしておくわけです。

前提

前準備

DNS レコードに次のドメインを作っておく

用途 ドメイン レコード データ
CDN 用のドメイン cdn.example.com A サーバーの IP
公開用のドメイン service.example.com A サーバーの IP

自宅サーバーを公開可能な状態にする

叩き台程度ならserveを使うのが手っ取り早いですが、Node.js でサーバー立てるのもありだと思います。今回は叩きなので HTTP にしていますが本番運用するときは HTTPS にしましょう。

以下サンプル

const http = require('http');

const port = 12345;

const server = http.createServer((req, res) => {
    res.writeHead(200, { 'Content-Type': 'text/plain' });
    res.end('Hello world!');
    console.log(req.headers.host, req.socket.remoteAddress);
});

server.listen(port, () => {
    console.log(`Running at http://localhost:${port}`);
});

手順

  1. CloudFront を開く
  2. 「ディストリビューションを作成」
  3. 「オリジンドメイン」に cdn.example.com を設定
  4. 「プロトコル」を選ぶ
  5. cdn.example.com の「ポート」を設定する
  6. 設定までスクロール
  7. 「代替ドメイン名 (CNAME) – オプション」で「項目を追加」し service.example.com を入力
  8. 「カスタム SSL 証明書 – オプション」で「証明書をリクエスト」
  9. 「パブリック証明書をリクエスト」
  10. 「完全修飾ドメイン名」に service.example.com を入力し「リクエスト」
  11. 「証明書を表示」
  12. DNS レコードに「CNAME 名」で「CNAME 値」を追加
  13. 「保留中の検証」が終わるのを待つ
  14. 「カスタム SSL 証明書 – オプション」で作成した「ACM 証明書」を選択
  15. 「ディストリビューションを作成」
  16. service.example.com の DNS レコードを CNAME にし、データを「ディストリビューションドメイン名」に変更
  17. https://service.example.com/ にアクセスできれば OK

参考資料

トラブルシュート

ディストリビューションを削除したい

  1. ディストリビューションの一覧で消したいのにチェック入れて無効化
  2. しばらく待つ
  3. 消したいのにチェック入れて削除

参考:ディストリビューションを削除する (docs.aws.amazon.com)

後書き

副次的効果ですが CDN 挟んでキャッシュされてるお陰で連続アクセスしてもサーバーまでリクエスト来ないので感動しました。

CloudFront には他にも様々な機能があるみたいなので活用できれば便利そうです。

コメントを残す

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