タグ: SSL

  • セルフホストのサーバの大半をSSL化

    昨年10月にこのブログでも使っている独自ドメインをCloudflareに移管したのですが、

    その時にやろうと思っていたことを忘れていました。

    DNSチャレンジを使っての、ローカル環境の各サーバのSSL化です。前にドメイン管理をしていたバリュードメインでは出来なかったのですよね。前にDNSチャレンジという技術を知ってやってみようと思ったら駄目で、それもあってCloudflareに移管したのをすっかり忘れていました。

    当然ですがこのブログを運用しているGhostのサーバと、あとNextcloudとVaultwardenとFreshRSSは既にCloudflareトンネルでSSL化していたので、残りのMemosとJellyfinをDNSチャレンジでSSL化します。

    まず準備として、CloudflareでAPIトークンを作成します。

    Cloudflareの「アカウントの管理」→「アカウントAPIトークン」で「トークンを作成」をクリックし、「ゾーンDNSを編集する テンプレートを使用する」から、
    特定のゾーン : 独自ドメイン
    を選んでから「概要に進む」をクリックして、
    出てきたAPIトークンをコピペしておきます。一回限りしか表示されないそうです。

    次に、Cloudflareでドメインを管理するようになって不要になり、Proxmoxからは削除していたNgnix Proxy Managerを、Proxmox Backup Serverからリストアします。

    リストアしたNPMで、
    「SSL Certificates」から「Add Let’s Encrypt Certificate」を選び、
    ドメインネームはサブドメインをワイルドカードで指定して、「Use a DNS Challenge」でCloudflareを選び、さっきコピペしておいたAPIトークンを貼り付けて保存すると、サブドメイン共通で使い回せるSSL証明書が完成します。

    次に、「Proxy Hosts」で作りたいサブドメインを「Add Proxy Host」から作成します。ドメインネームにサブドメインを入れて、Forward Hostname/IPにプライベートIPアドレスを入れて、必要ならPortも指定して、SSLタブでさっき作ったSSLを選んで完了。

    最後に、OpenWrtで「Network」→「DHCP and DNS」→「DNS Records」タブで、
    必要なサブドメインについてHostnameとIPアドレスを入れます。
    ここで最後に「Save& Apply」を押して適用しないと有効にならないのが落とし穴。今回何度も忘れて、???という状態になってしまいました。

    成功したので気を良くした自分は、ついでにProxmox VEとProxmox Backup ServerもSSL化しようとして、ハマりました。

    他のサーバと同じようにやってもブラウザで開かず、AIに聞いてみると、NPMで
    Websockets Support: ON
    HTTP/2 Support: ON
    にした上で、Advancedタブに

    location / {
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection “upgrade”;
    proxy_set_header Host $host;
    proxy_pass https://192.168.x.x:8006; # ← ここはPVEのIP(PBSの場合は8007ポート)にする
    }

    を書かないといけないらしい。マジでAIに聞かないとわからんわ。

    というか、そもそもProxmoxの場合は、
    「データセンター」→「ACME」
    にある機能で、ここからDNSチャレンジできるやん。まあ、その場合はワイルドカードで作ったSSL証明書の使い回しが出来ないので、それはそれで面倒ですけれど、Proxmox単体でSSL化するならこっちのほうが圧倒的に早いです。

    素人だからこそのアホな悩みでしたけれど、まあこれでProxmox VEもProxmox Backup Serverも、他のローカル環境のサーバもSSL化出来たのでOKです。

    一応、怖くてやっていないですが、
    ・OpenWrt
    ・Pi-hole
    ・Ngnix Proxy Manager
    については、SSL化したらややこしいですよねえ・・・。

  • ブログを固定IPで公開するのを止めてCloudflare Tunnelに切り替えた

    先日まで3連休を費やして、自宅サーバを入れていたCasaOSから、一つずつProxmoxに移行していった面倒な作業は終了しましたが、ブログを入れているサーバが、他のサーバと同じLAN内に同居することになりました。

    今まではブログのあるネットワークと、他のネットワークは分けていて、pfsenseで振り分けていました。

    今回も分けることは可能ではあるのですが、面倒にもなりましたし、独自ドメインの管理先をCloudflareにもしましたので、Cloudflare Tunnelを利用してブログを安全に公開する設定を行います。

    例によって生成AIに教えてもらいつつではありますが、
    ステップ1:Cloudflare Tunnel用LXCの作成
    ステップ2:Tunnelの作成(Cloudflare側での操作)
    ステップ3:ルーティングの設定(公開設定)
    ステップ4:Nginx Proxy Manager (NPM) との連携
    という順序で設定していきます。

    これで完了!と思いきや、元々固定IPで公開していたので、DNSレコードを削除しないといけなかったり、NginxProxyManagerのSSLを削除してCloudflareのSSLをフルで有効化したり、なんやかんやありました。

    外部ネットワーク(スマホのモバイル通信)からでもちゃんとアクセスできる、すなわち自分以外の人がアクセスできることを確認して、やれやれ終わった、と思ったら、自宅ネットワーク内のパソコンからブログにアクセスできない!

    調べたら、外部ネットワークからCloudflare経由でGhostサーバまで、カッチリ経路をSSLで確保しているのに、自宅ネットワーク内から経路に横入りするようなもので、そりゃエラーになりまっせ、ということらしいです。

    ということで、Pi-holeのDNS設定を削り、自宅からでも一旦Cloudflare経由でアクセスするようにしたら、晴れて
    ・自宅ネットワーク内のTailscale無し
    ・自宅ネットワーク内のTailscale有り
    ・外部ネットワークからTailscale無し
    ・外部ネットワークからTailscale有り
    の4パターンで問題なく、アクセスできるようになりました。

    面倒と言えば面倒、しかし設定してしまえばこれほど楽なこともないでしょう。全部Cloudflare任せですし。