CaddyでSSLホスティングしたサービスに高速にアクセスするには

先日、Raspberry Pi 4にて、SSL証明書の自動更新に対応した、Caddyリバースプロキシサーバを構築しました。

WordPressやNextcloud、Vaultwarden等のサービスをホスティングすることで、外出先から各種サービスをSSL暗号化して使用できるようになりました。

PPPoE接続したRaspberry PiでSSL証明書自動更新付きWebサーバを構築するには
先日、Raspbery Pi 4にRed Hat Enterprise Linux 9互換のLinuxをインストールしまして。 PPP...

しかし、欠点が1つありました。

これらのサービスに、おうちLAN内のPCからアクセスしたいとき、わざわさ外部のインターネットを経由してアクセスします。このため転送速度は遅く(=帯域が狭い)、遅延(=遅れ、もっさり感)も発生していました。

Nextcloudで大量のファイルをアップロードしたい場合など、時間がかかってしまいます。インターネット回線が無駄に消費され、他のサービスへの影響も出ます。困ったものです。

設定を調整して、このあたりの問題を、なんとか改善しようと思います。


Caddyリバースプロキシへイントラネットから直接アクセスする設定手順

同じおうちLANからアクセスするPCのルーティングを改善

外出先=インターネットからCaddyリバースプロキシサーバ(以下、Caddyホスティングサーバ/Caddyサーバ)へアクセスする場合は、現状の設定で問題ありません。

問題は、同じ部屋にある、同じネットワークセグメントにある機器から、Caddyサーバにアクセスした場合に発生します。

SSL証明書のドメイン名を使用することから、直接アクセスしているのではなく、ぐるーっと遠回りが問題です。


速度が遅く遅延がある現状のルーティング

おうちLANのPCから、SSLホスティング用のRaspberry Pi(機器として見たときはRaspberry Pi、サーバとして見たときはCaddyサーバと表記します)への応答速度とルートを確認してみました。IPアドレス末尾58.9は、Raspberry Piに割り当てられたグローバルIPアドレスになります。

SSLのドメイン名でアクセスすると、応答に32~57msの時間がかかっています。(遅延

経路上に9個のルータが存在し、それぞれのルータで、8~59msの遅延が発生しています。

ホスティング用のRaspberry PiはIPv4 PPPoEでインターネットへ接続しています。

また自宅PCはtransix IPv6 IPoEでインターネットへ接続しています。

通信パケットは、Raspberry Piからいちどインターネットへ入り、そこから別の出口を経由して、自宅PCへアクセスしている状況⇒ルータを9個通って通信しています。

遅延が発生するほかに、アクセス帯域も細く、ファイルの転送に時間がかかっていると思います。

PCとRaspberry Piは、同じお部屋にありますが!

改善策は、インターネット経由している、その無駄をなくそう、という考え方になります。


速度が早く遅延がない理想のルーティング

こちらは、遠回りしないように設定を変更した場合のルーティングになります。

Raspberry Pi(Caddyサーバ)のIPアドレスが、192から始まる末尾18のアドレスになります。

遅延は1ms以下、ルータは通らず、直接同じセグメント内のホストと通信しています。

同じネットワークセグメントのためルータは経由せずに直接接続するため、帯域も最大限、フルスピードでファイルの転送が可能です。

こうなるように、Caddyリバースプロキシ+ファイアウォールの設定と、アクセスする側のPCの設定を変更します。


Caddyホスティングサーバの同一セグメントアクセス許可設定

Caddyfile変更

まずは、Caddyfileを編集して、SSLドメイン名以外に、おうちLAN内のIPアドレスでアクセスが可能なように設定を変更します。

# Caddyホスティングサーバにて
sudo vi /etc/caddy/Caddyfile

1行目、SSLドメイン名の隣に、Raspberry PiのIPアドレスを追加しました。

<Raspberry PiのIPアドレス>, <SSLドメイン名> {

これでIPアドレスでCaddyにアクセスできるようになります。

設定変更を反映します。

sudo systemctl reload caddy.service

次にRocky Linuxのファイアウォール設定を変更します。


ファイアウォール設定変更

使用しているゾーンを確認しました。

sudo firewall-cmd --list-all-zones |grep active

使用しているゾーンは2つ。

externalゾーンは、Raspberry PiでIPv4 PPPoE接続したときに、ppp0に割り当てたゾーンで、外部のインターネット側からのファイアウォール設定になります。

IPv6 IPoE環境からNetworkManagerでIPv4 PPPoE接続するには
IPv6 IPoE接続した環境の中から、PPPoEパススルー機能を使用して、IPv4 PPPoE接続したい場合。 NetworkMan...

今回設定を変更するのは、おうちLAN側からのアクセスのため、publicゾーンになります。

httpsによる通信を許可しました。

sudo firewall-cmd --zone=public --add-service="https"
sudo firewall-cmd --zone=public --add-service="https" --permanent
sudo firewall-cmd --reload

以上で、SSLホスティングサーバ側の設定変更は完了ですが。


おうちLAN機器側の設定変更

SSL通信はIPアドレスでは不可

先ほど、CaddyfileにIPアドレスを設定しましたが。

IPアドレスでは、SSL通信はできません。

理由は、証明書がドメイン名のため、URL(http://~)は必ずドメイン名である必要があるからです。

このような感じで「保護されていない通信」と表示され、SSLが無効になってしまいます。

その解決策ですが。

URLは「https://<ドメイン名>」を使用して、実際の接続先はおうちLAN内のCaddyサーバのIPアドレスにする必要があります。


アクセスする機器側のhostsファイル編集 Windows PCの場合

Windows PCの場合、hostsファイルを編集することで、「https://<ドメイン名>」の接続先のIPアドレスを指定することが可能です。

次の手順になります。

  1. 管理者権限でコマンドプロンプトを開きます。
  2. メモ帳でhostsファイルを開きます。
    notepad c:\windows\system32\drivers\etc\hosts
    

  3. 末尾に1行追加します。
    <CaddyサーバのIPアドレス> <sslドメイン名>

以上でCaddyサーバにインターネット経由ではなく、直接アクセスできるようになりました。

ping, tracertコマンドは、IPアドレスではなく、SSLドメイン名を指定しましょう。

ping <CaddyサーバのSSLドメイン名>
tracert <CaddyサーバのSSLドメイン名>

この結果が、冒頭のこちらと同じになれば設定完了です。


機器ごとではなくまとめて設定する場合はDNSが必要

機器ごとにhostsファイルを設定せずに、おうちLAN内の機器を、まとめて設定変更したい場合は。

おうちLAN専用のDNSサーバが必要になります。

わたしの自宅では、家庭用のWi-Fiルータを使用しています。

そして通常、Wi-Fiルータの中で動いている、下記のサービスを利用していると思います。

  1. ISP(インターネット・サービス・プロバイダ)への接続 IPv6 IPoEやIPv4 PPPoE
  2. DHCPサーバ(IPアドレス等、ネットワーク設定の配布機能)
  3. DNS(ドメイン・ネーム・サービス)

このうち、3番のDNSを、Wi-Fiルータではなく、別途構築する必要があると思います。

IPv4のみでしたら、それほど大変ではなく、構築が可能かもしれません。Caddyサーバとして使用しているRaspberry Pi 4でサービスをインストールし、設定を調整して起動が可能です。

一方、前述の通り、私のおうちLANは、transixによるIPV6 IPoEサービスを利用してインターネットに接続しています。この場合、IPv6対応のDNSサーバを構築しないと、IPv6サービスが使用できなくなってしまいます。

さらに、NDプロキシを使用している場合は、そちらも考慮する必要があり、少し面倒です。

ここではDNSサーバの構築は保留致します。


以上で、おうちLANの機器から、SSLホスティングしているCaddyサーバへ直接接続できるようになりました。

一方、URL(https://<SSLドメイン名>)とIPアドレスの整合をとるために、機器ごとにhostsファイル等の設定が必要です。

まとめて設定変更したい場合は、DNS用のサーバが必要ですが、IPv6対応やNDプロキシを使用している場合、注意が必要です。

このあたりは、機会があれば挑戦してみたいと思います。(必要に迫られたら

さて。あと何台か、hostsファイルを設定しましょうか。

それではまた!

スポンサーリンク

フォローする

スポンサーリンク