(1)ルータのポート開放がいらない。欠点としては・・・
(2)ルータにWebサーバーのIPアドレスを書かなくていい。
(3)CloudflareのDNSサーバにルータのグローバルIPアドレスを覚えさせなくてもよい。
(4)Freeプランが無料で使える。(一部有料あり)
(1)接続元IPアドレスによる制限がwebサーバ側でかけられない
a.IPレイヤではlocalhostからの通信に見える
b.HTTP以後のレイヤであればCf-Connecting-Ip
ヘッダを読み込み、処理分岐させる事で対 処可能
WebサーバーのCGIでリモートIPを取得したり、ログでリモートIPを取得する時に使えます。
(1)Cloudflareにアカウントを作成
(2)Zero Trust の登録
(3)Cloudflare Tunnel の設定
(3)ドメイン登録
(4)パブリックホスト名の作成
本当はこうかな!?
(1)Cloudflareにアカウントを作成
(2)ドメイン登録
(3)Cloudflare Tunnel の設定
(4)パブリックホスト名の作成
(1)Cloudflareにアカウントを作成
公式サイト https://www.cloudflare.com/ja-jp/ からサインアップします。
↑
直後の画面です。
↑
「開始する」をクリックします。
↑
「人間であることを確認します」にチェックを入れます。
↑
Email と Password を入力、「人間であることを確認します」にチェックを入れ「Sign up」をクリックします。
この後、既存のドメイン入力か新しくドメイン作成しますか・・・とか聞いてきますが、ここは一旦ログアウトしてログインすればダッシュ ボード画面になります。
自分はドメイン持っていないのでこの画面でドメイン作成しておけばよかったかな!!
(2)Zero Trust の登録
(3)Cloudflare Tunnel の設定
↑
左ペインから「Zero Trust」を選択します。
↑
Zero Trustのチーム名(テナントのようなもの)を適当に入力します。「次へ」をクリックします。
↑
「Free」を選択
↑
「支払いへ進む」をクリックします。
↑
「支払い方法を追加する」をクリックします。
↑
クレジットカードにしました。
カード番号、有効期限、セキュリティコードを入力し国を日本に選択しました。
請求先住所を入力しました。
アカウントの種類は Personal にしました。
「次へ」をクリックしました。
↑
「購入」をクリックします。
↑
Zero Trust のダッシュボードを表示します。
(3)ドメイン登録ネットワーク > Tunnels に遷移します。
↑
「トンネルを追加する」をクリック
↑
「Cloudflared」を選択
↑
「トンネル名」を適宜入力し「トンネルを保存」します。
↑
今回WebサーバーにしようとするPCは「q4os 32bit」なので「Debian」「32bit」を選択します。
Webサーバー Apache + PHP + Perl のインストール・設定は こ こ にあります。
すると「マシンに cloudflared がインストールされていない場合:」の欄にコマンドが記載されますのでそれをコピーしエディタに保存します。
機密トークンが含まれているので大切に保管します。
WebサーバーにしようとするPCにSSHでログインしコマンドを実行します。
[ちょっとハマった]
curl -L --output cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-386.deb &&
sudo dpkg -i cloudflared.deb &&
sudo cloudflared service install トークンが入ります。
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 16.6M 100 16.6M 0 0 6123k 0 0:00:02 0:00:02 --:--:-- 10.7M
[sudo] takaq のパスワード:
dpkg: アーカイブ cloudflared.deb の処理中にエラーが発生しました (--install):
パッケージアーキテクチャ (386) がシステム (i386) と一致しません
処理中にエラーが発生しました:
cloudflared.deb
どうやら、cloudflared.deb のパッケージアーキテクチャが 386、q4os 32bit のパッケージアーキテクチャが i386 なんですね。
諦めかけたのですが、何か策はないか検索
そしたら・・・・
q4osの マ ルチアーキテクチャを有効化すればいいみたい。
takaq@q4os-ins1300:~$ dpkg --print -architecture
i386
takaq@q4os-ins1300:~$ sudo dpkg --add-architecture 386
takaq@q4os-ins1300:~$ dpkg --print-foreign-architectures
386
takaq@q4os-ins1300:~$ curl -L --output cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-386.deb &&
sudo dpkg -i cloudflared.deb &&
sudo cloudflared service install トークンが入ります。
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
100 16.6M 100 16.6M 0 0 5600k 0 0:00:03 0:00:03 --:--:-- 10.3M
以前に未選択のパッケージ cloudflared:386 を選択しています。
(データベースを読み込んでいます ... 現在 191642 個のファイルとディレクトリがインストールされています。)
cloudflared.deb を展開する準備をしています ...
cloudflared:386 (2025.2.1) を展開しています...
cloudflared:386 (2025.2.1) を設定しています ...
man-db (2.11.2-2) のトリガを処理しています ...
2025-03-12T13:09:36Z INF Using Systemd
2025-03-12T13:09:47Z INF Linux service for cloudflared installed successfully
できたぁー、インストールできましたぁー
この直後からHUBのWebサーバー収容ポート、ルータのACTランプがパカパカ点滅してます。トンネルってこんなだっけ!?
インストール後サービスの起動状態がactive(running)になっていることを確認します。
takaq@q4os-ins1300:~$ systemctl status cloudflared
● cloudflared.service - cloudflared
Loaded: loaded (/etc/systemd/system/cloudflared.service; enabled; preset: enabled)
Active: active (running) since Thu 2025-03-13 20:22:16 JST; 2min 51s ago
Main PID: 622 (cloudflared)
Tasks: 7 (limit: 4704)
Memory: 46.0M
CPU: 2.059s
CGroup: /system.slice/cloudflared.service
└─622 /usr/bin/cloudflared --no-autoupdate tunnel run --token ここはトークンが入ります>
3月 13 20:22:15 q4os-ins1300 cloudflared[622]: 2025-03-13T11:22:15Z INF Starting metrics server on 127.0.0.1:20241/metrics
3月 13 20:22:15 q4os-ins1300 cloudflared[622]: 2025-03-13T11:22:15Z INF Using [CurveID(4588) CurveID(25497) CurveP256] as curve preferences connIndex=0 event=0 ip=198.41.19>
3月 13 20:22:16 q4os-ins1300 cloudflared[622]: 2025-03-13T11:22:16Z INF Registered tunnel connection connIndex=0 connection=68fd658f-3323-4f80-bc8b-f8a31e78d6ac event=0 ip=>
3月 13 20:22:16 q4os-ins1300 cloudflared[622]: 2025-03-13T11:22:16Z INF Using [CurveID(4588) CurveID(25497) CurveP256] as curve preferences connIndex=1 event=0 ip=198.41.20>
3月 13 20:22:16 q4os-ins1300 systemd[1]: Started cloudflared.service - cloudflared.
3月 13 20:22:16 q4os-ins1300 cloudflared[622]: 2025-03-13T11:22:16Z INF Registered tunnel connection connIndex=1 connection=44e8a2fb-6631-46d2-ac7d-b52e2516cdc5 event=0 ip=>
3月 13 20:22:17 q4os-ins1300 cloudflared[622]: 2025-03-13T11:22:17Z INF Using [CurveID(4588) CurveID(25497) CurveP256] as curve preferences connIndex=2 event=0 ip=198.41.19>
3月 13 20:22:17 q4os-ins1300 cloudflared[622]: 2025-03-13T11:22:17Z INF Registered tunnel connection connIndex=2 connection=9fb92f6f-5743-43b2-a47d-003e923c8cff event=0 ip=>
3月 13 20:22:18 q4os-ins1300 cloudflared[622]: 2025-03-13T11:22:18Z INF Using [CurveID(4588) CurveID(25497) CurveP256] as curve preferences connIndex=3 event=0 ip=198.41.20>
3月 13 20:22:18 q4os-ins1300 cloudflared[622]: 2025-03-13T11:22:18Z INF Registered tunnel connection connIndex=3 connection=80321e16-24f0-466c-b3a3-ea8f89112a6d event=0 ip=>
前回、cloudflaredのインストールで手間取ったため、ここまででダッシュボードからログアウトしたので、一連の流れと ちょっと違うかもしれません。
ダッシュボードにログインし、Zero Trust -> ネットワーク -> Tunnels とたどります。
↑
右端の選択部分をクリックし「設定」を選択します。
↑
右上の「パブリックホスト名」をクリックします。
↑
「ハブリックホスト名を追加する」をクリックします。
↑
おーっと、ここはドメイン無いといけないかぁー
ここは後にして前に戻って、「プライベートネットワーク」を先にしようか。
↑
「プライベートネットワークを追加する」をクリックします。
↑
CIDR(例えば・・・10.0.0.0/8 とか)、説明を入力し「プライベートネットワークを保存」をクリックします。
↑
右端の点々で編集とか削除できます。
Cloudflareのトップ画面から設定します。(4)パブリックホスト名の作成
↑
「ドメイン登録」をクリックします。
↑
「ドメインの登録」に遷移します。
「ドメイン名を検索する」に希望のドメインを入力し「検索する」をクリックします。
↑
推奨されるドメイン名が表示されます。
.org は、初回購入費用:7.50$、更新料:10.11$ です。
問題なければ「購入」をクリックします。
後で請求メール届きました。8.25$でした。
↑
登録者情報を入力します。
そして、最下部の「お支払い」を選択します。
登録者情報は以下の項目を入力する必要があります。
項目 必須かどうか 名 Yes 苗字 Yes 組織 No メールアドレス Yes 電話番号 Yes 内線 No 番号 Yes 国 Yes 住所1 Yes 住所2 No 市町村 Yes 都道府県 Yes 郵便番号 Yes
カードの詳細を入力します。
先に登録した情報を参照できるとありがたいのに、再入力です。
カード情報入力後、カード情報の一番下にある「住所の確認」を押すと以下表示します。
=============================================================================
この購入を完了することにより、当社の利用規約、プライバシー ポリシーおよびドメイン登録契約に同意したことになります。ドメイン名を含むサブスクリプションは自動的に更新され、キャンセルされるまで、登録 されている支払い方法に請求されます。課金サブスクリプション、またはレジストラのアカウントのドメイン管理ページ から、各更新日の少なくとも 1 日前までいつでもキャンセルできます。
使用量に基づく請求の対象となるサービスについては、Cloudflare が指定する期間中のサービスの使用量に基づいて料金が請求されます。
takaq-mynet.org を登録しようとしています。これが登録したいドメインであることを再確認してください。すべての登録は最終的なもの であり、返金は行われません。
=============================================================================以上を確認したら「購入完 了」をクリックします。
↑
この画面になります。
↑
「ドメインの管理」に行くと取得したドメインが表示されます。
↑
Cloudflare Registrarでドメインを取得するとDNSSECをワンクリックかつ無料で利用す ることができます。
DNSSEC は、公開された DNS レコードの暗号化署名を使用して、偽造された DNS 回答からドメインを保護します。
有効化しておきましょう。
また、WHOIS privacyの機能によりWHOIS上の個人情報にあたるほとんどの部分は 「REDACTED FOR PRIVACY」と表示されるようになります。
国と、県は表示されてしまうようです。ここは無効にしておきましょう。
では、パブリックホスト名を作成しましょう。
Zero Trust -> ネットワーク -> トンネル名の右端から設定を選択 -> パブリックホスト名を選択 -> 「パブリックホスト名を追加する」をクリック
↑
サブドメイン : www (Webサーバーの定番?)
ドメイン : 取得したドメイン名
パス : ドキュメント・ルートにしたいので空白
サービス : HTTP (SSLの方は Cloudflare でやってくれます)
URL : Webサーバーが動いているPCのローカルのIPアドレスを入れてみます。
cloudflaredが動いているPCであれば localhost でもいいです。
そして「ホスト名を保存する」をクリックします。
↑
上のようになります。
takaq@q4os-v200:~$ nslookup
> www.takaq-mynet.org
Server: 192.168.1.2
Address: 192.168.1.2#53
Non-authoritative answer:
Name: www.takaq-mynet.org
Address: 172.67.195.175
Name: www.takaq-mynet.org
Address: 104.21.92.161
Name: www.takaq-mynet.org
Address: 2606:4700:3033::ac43:c3af
Name: www.takaq-mynet.org
Address: 2606:4700:3033::6815:5ca1
おぉ、返ってきますね。
自宅でも自宅外でも先ほど設定したホスト名で https でアクセスできるようになります。ちなみに、サブドメインの部分と対応するURLを変えて、このプロセスを繰り返せば、複数のウェブサイトをホストして公開することも できます。
(1)リモートホストの取得
(2)CGIスクリプトからのメール取得についてCf-Connecting-Ip
ヘッダによるリモートホストの取得について触れてみま す。
Webサーバーは Apache2 です。
Webサーバー Apache + PHP + Perl のインストール・設定は こ こ にあります。
そのままだと、Cloudflare の IP が取得されます。PHPで書いてます。
<?php
var_dump($_SERVER['REMOTE_ADDR']);
?>
オリジナルの IP アドレスを取得するため remoteip モジュールをロードします。
Apache の config ファイルにRemoteIPHeader CF-Connecting-IP
を追加します。
Debian パッケージの場合、/etc/apache2/sites-available/000-default.conf で設定します。
そして・・・
$ sudo service apache2 restart
・・・します。
↑
とれましたね。
この時点で Apache のログにもリモートIPが記録されるようになります。
旧Webサイトでは、CGIスクリプトで管理者へのお便りや、投稿があった時に管理者へメールでお知らせしていまし た。
sendmailを使っていました。
なんか、Cloudflare調べたら方法あるかもしれないですが、スキル不足で「これだ」と思う方法を見つけられませんでした。
今回は、sendmail を Webサーバーへインストールし、ローカルユーザーへ CGIスクリプトから配信し、それを取り出す方法とします。
メールサーバー立てて DNSへSPFとかの条件書いてとかは敷居が高いし、恐らくCloudflare経由で外にメール出すのはできないと思います。
まずは、SSHでログインし、sendmailコマンドでローカルユーザーへ配信できるか見てみます。
takaq@q4os-ins1300:~$ sudo sendmail takaq@q4os-ins1300
TEST
ABCDE
.
takaq@q4os-ins1300:~$ mail
"/var/mail/takaq": 1 message 1 new
>N 1 H T 木 3月 20 16: 13/529
? q
Held 1 message in /var/mail/takaq
うん、できましたね。
次は、メール取り出しソフトの dovecot-pop3d とメーラーで受信してみます。
↑
うん、取り出しできました。
そしたら、次は CGIスクリプトからメール送信してみます。
フォームからメールを出すスクリプトを使ってみます。
スクリプトの実行権(パーミッション)とcgiの実行設定(Ex .htaccess)は適宜行います。
まずは、スクリプト内の以下を設定します。
#!/usr/bin/perl → おまじない。んで、実際にスクリプトから送信してみたら異常に遅い、遅いのでスクリプトの戻り先がおかしい。
$sendmail = '/usr/sbin/sendmail'; #sendmailのパスを指定
$admin_name = 'takaq';
$admin_mail = 'takaq@q4os-ins1300'; #送信先アドレスを指定
SSHでログインしコマンドから実行してみたらこれも遅い。
さっそく検索
結果 /etc/hosts の以下を変更
# 127.0.0.1 localhostそして、sendmailを再起動しコマンド実行したら即実行されました。
127.0.0.1 localhost.localdomain localhost q4os-ins1300
127.0.1.1 q4os-ins1300
では、気を取り直してスクリプト実行です。
↑
受信できましたね。なんか件名が文字化けしてるけどいいかー