【Cloudflare】ポート開放不要!Cloudflare Tunnelで安全・簡単に自宅サーバー(AlmaLinux)を公開する方法

CloudFlar
  • 自宅サーバー公開の悩み:
     「自宅サーバーでブログを公開したいけど、ルーターのポート開放(80/443)が怖い…」「固定IPじゃないからDDNSの設定が面倒…」「ApacheのSSL(Let’s Encrypt)設定で躓いた…」
  • この記事で解決すること:
     Cloudflare Tunnelを使えば、ポート開放「ゼロ」、SSL設定「ゼロ」で、安全かつ一瞬で自宅サーバーを世界中に公開できます!
  • 自宅サーバー側の環境:
     AlmaLinux 9 / Apache (HTTPのままでOK)

 ※CloudFlareの登録済み前提で記載しています。
  CloudFlareの基本はこちら⇒「【Cloudflare】基本概要と仕組み

ステップ①:Cloudflareダッシュボードでの設定手順

ブラウザでCloudflareにログインし、以下の手順で設定を進めます。

1.左側メニューの [Zero Trust] をクリックします。

2.Zero Trustダッシュボードの左側メニューから [ネットワーク][コネクタ] を選択します。

3.[トンネルを作成] をクリックします。

4.トンネルの種類で [Cloudflared] を選択し、[次へ] をクリックします。

5.トンネル名(例: home-server-link)を入力し、[トンネルを保存] をクリックします。

ステップ②:AlmaLinuxへのインストールと起動

トンネルを保存すると環境選択画面が表示されます。[Red Hat][64-bit] を選択し、画面に表示されるコマンドをコピーしてAlmaLinuxのターミナルで実行します。

Bash
# cloudflaredのダウンロード、インストール、自動起動サービス化を一括実行
[root@almalinux ~]# curl -L --output cloudflared.rpm https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-x86_64.rpm && \
[root@almalinux ~]# sudo dnf localinstall -y cloudflared.rpm && \
[root@almalinux ~]# sudo cloudflared service install <画面に表示された固有のトークン文字列>

実行後、Cloudflareの画面側でコネクタのステータスが 「正常(Healthy)」 に変わったことを確認し、[次へ] をクリックします。

ステップ③:公開するドメイン(ルーティング)の設定

 CloudflareのWeb画面でそのままドメインの紐付けを行います。

1.コネクタ(トンネル)が正常(Healthy)になったことを確認し、[次へ](またはトンネル編集画面)に進みます。

2.[公開されたアプリケーションルート]をクリック。

3.[公開されたアプリケーションルートを追加する] をクリックし。

4.公開アプリケーションルートの設定

  • サブドメイン: (空欄のままでOKです。https://softdev-learn.cc のようにルートドメインのまま公開する場合、ここには何も入力しません)
  • ドメイン: ドロップダウンから softdev-learn.cc を選択します。
  • パス: (空欄のままでOKです)
  • タイプ: HTTP を選択します。
  • URL: localhost:80 (または 127.0.0.1:80)を入力します。

入力内容を確認し、画面右下の [保存] をクリックします。

💡 これを保存した瞬間、Cloudflareの通常のDNS設定(AレコードやCNAME)には自動的にTunnel用のレコードが生成されるため、手動でDNSレコードを追加する必要はありません。

ステップ④:WordPress特有の干渉対策(必須設定)

Cloudflare Tunnelを経由してWordPressを正常に動作させるため、サーバー側の設定を確認・調整します。

1. 無限リダイレクトを防止するスマートな設定

通常、Cloudflare Tunnel(HTTPS)から自宅内のApache(HTTP)へ通信が渡ると、WordPressは「安全ではない接続」と誤認して無限リダイレクトを起こしてしまいます。

これを防ぐための最もスマートな解決策が、WordPressのURLをHTTPSで固定化し、強制的に制御することです。

/var/www/html/wp-config.php の先頭(<?php の直後)に、以下の記述が正しく設定されているか確認してください。

Bash
[root@almalinux ~]# vi /var/www/html/wp-config.php
<?php

/** サイトのURLをHTTPSで完全に固定化(リダイレクトループ防止) */
define('WP_HOME', 'https://softdev-learn.cc');
define('WP_SITEURL', 'https://softdev-learn.cc');

/** ドメインの変更や不整合時の一時的な救済設定(有効化) */
define('RELOCATE', true);

// ※注意:上記URL固定化が完了しているため、以下の「プロキシ指示コード」はコメントアウトのままでOKです。
// if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
//     $_SERVER['HTTPS'] = 'on';
// }

2. 訪問者のリアルタイムIPアドレスの復元について

Cloudflare Tunnelを経由すると、WordPressのコメント欄やアクセスログに記録されるIPアドレスがすべて「CloudflareのサーバーIP」になってしまいます。

これをもともとの訪問者のIPアドレス(リアルタイムIP)に復元するためのApache(mod_remoteip)の設定手順については、以下の別記事で詳しく解説していますので、合わせて設定を行ってください。

🔗 関連記事リンク:【Cloudflare】 Tunnel経由のApacheで、アクセスログを生IPアドレスに書き換える方法(mod_remoteip)

ステップ⑤:自宅サーバー運用のアドバイス(まとめ)

  • ファイアウォール(firewalld)のセキュリティ: 外部からの直接アクセスはCloudflareがすべて遮断するため、AlmaLinuxの firewalld で外部向けに80番や443番ポートを開放する必要はありません。完全に閉じた状態で運用可能です。
  • 宅内LANからのアクセス: 公開したURL(https://blog.yourdomain.com)には、宅内LANからでもルーターの制限(ヘアピンNAT等)を受けずにそのままアクセス可能です
接続、保護、構築をどこででも
場所を問わず従業員、アプリケーション、ネットワークの速度と安全性を高め、簡略化とコスト削減を実現しましょう。

コメント