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 |