Introduction
固定 IP を取得しようと思ったら ISP が固定 IP サービスを数年前に廃止していたので困っていたところ、 cloudflared を使えば自宅サーバを公開できるらしい、とのことで試してみた。
ドメインの取得は必要だが、格安ドメインで対処。
GitLab、Snipe-IT があるので nginx をリバースプロキシにして公開。
Description
環境は
- OS: Debian: 12
- nginx: 1,22
- ドメイン: xxxxxx.com
1. Nginx のインストール
| 1 | $ sudo apt install -y nginx | 
2. /etc/hosts の編集
DNS が諸事情で動いていないので名前解決は手動
| 1 | 192.168.11.107 snipeit.xxxxxx.local | 
3. nginx の設定
リバースプロキシとして使用するための設定を実施。/etc/nginx/sites-available/lan-proxy.conf を作成していく。
| 1 | map $http_upgrade $connection_upgrade { default upgrade; '' close; } | 
| 設定 | 概要 | 
|---|---|
| proxy_pass | 転送する先の url | 
| proxy_redirect | プロキシ先のサーバが nginx に返すレスポンスのLocation, Refreshヘッダの書き換えルール | 
| subsub_filter_types_filter | リクエストを書き換える対象。デフォルトは text/html | 
| sub_filter | リクエストに含まれる文字を書き換える正規表現ルール | 
| proxy_ssl_verify | 転送先のサーバの証明書を検証するか。自己署名証明書が配置されているが面倒なので off | 
リンク先の url が古い url のままだったりしたので、 sub_filter を使って書き換えることで対処。
設定後は下記で nginx に反映して起動。
| 1 | # デフォルト設定のシンボリックリンクを削除 | 
4. cloudflared をインストール
| 1 | $ curl -LO https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb | 
Cloudflare のアカウントにログインし、認証情報を配置。
url をコピーして任意の端末上のブラウザから認証すれば OK。
| 1 | $ cloudflared tunnel login | 
続いてトンネルを作成。
| 1 | $ cloudflared tunnel create mytunnel | 
次にトンネルの設定ファイルを作成。
/etc/cloudflared/config.yml を編集。
最後の - service: http_status:404 は必須なので注意。
| 1 | tunnel: mytunnel | 
作成した設定ファイルを検証。- service: http_status:404 がないとエラーになります (戒め)
| 1 | $ cloudflared tunnel ingress validate /etc/cloudflared/config.yml | 
サブドメインとトンネルのルーティングを実施。
| 1 | $ cloudflared tunnel route dns mytunnel snipeit.xxxxxx.com | 
次に cloudflared を自動起動するように設定。
何故か systemctl enable --now cloudflared がエラーになったので、手動で unit ファイルを作成。/etc/systemd/system/cloudflared.service を編集。
| 1 | [Unit] | 
後は念のため cloudflared を再起動。
| 1 | $ systemctl restart cloudflared | 
5. ファイアウォール設定
別にサーバを直接公開しているわけでもないが、 cloudflared が動いているサーバのファイアーウォールを強化しておく。
管理は必要なので SSH 以外は拒否。cloudflared はアウトバウンドを使ってトンネルをしているので、SSH 以外のインバウンドは拒否しても問題なし。
| 1 | $ apt install ufw -y | 
