homebridgeをSSL化のトラブル
homebridge-config-ui-x の更新をかけたときに homebridge が動かなくなった。
https://….:8581 で起動していたけどページが表示できず、http://…:8581 ならページが見れる。
以前、homebridgeのSSL化を行っていたけど、Let’s encrypt の SSL の更新が行われていて、homebridge の再起動時に SSL の鍵が読めなくなったのが原因。ということで、Let’s encrypt の更新スクリプトに、以下の処理を追加
# homebridge に SSLキーのアクセス権を与え、再起動 /usr/bin/setfacl -m u:homebridge:r 証明書へのPATH/fullchain.pem /usr/bin/setfacl -m u:homebridge:r 証明書へのPATH/privkey.pem /usr/bin/hb-service restart # homeassistant の再起動 /usr/bin/docker restart homeassistant > /dev/null
openDMARCの設定
gemini cli で設定確認
最近の自宅サーバでの暇つぶしは、gemini-cli を使って設定の見直し。
gemini が確認する際には、sudo 付きで systemctl restart やら LOGファイルにエラーが記録されていないか見たうえで、次々と問題点の提案&改善&実行してくれる。
openDMARCが動かなかった原因
んで、自サバで動かしているメールサーバで、メール受信時の確認として、openDMARC を導入しようとしてたけど、うまくいってなかった。そこで、「”/etc/postfix”を確認して、”/etc/opendmarc.conf”を確認して」を連発してみた。
openDMARC については、opendmarc のグループに postfix ユーザが含まれていなかったのが原因。
これで、受信メールの正当性チェックで spam が減らせるかな。
homeassistant を watchtower で更新
先日 DHCP の設定で、Docker 環境が DHCPREQUEST を出しているかもとの勘違いで、HomeAssistant をアンインストールしていたけど、改めて HomeAssistant を運用再開。
HomeAssistant の運用再開(HTTPSに変更)
HomeAssistant のイメージダウンロードして、設定を最初から…と思ったけど、前回インストールしてあったものが残ってて、一発で環境が復活。
でも、homeassistant の更新方法を確認すると、docker image をダウンロード, stop, remove ,新しいイメージを run させるとかの手順が出てきて面倒。Gemini に聞いたら、Watchtower を勧めてくれた。
また、HomeAssistant を https で起動するように設定を見直す。
$ sudo docker stop homeassistant
$ sudo docker rm homeassistant
$ sudo docker run -d \
--name homeassistant \
--privileged \
--restart=unless-stopped \
-v /var/lib/homeassistant:/config \
-v 証明書へのPATH:/certs:ro \
--network=host \
ghcr.io/home-assistant/home-assistant:stable
$ sudo /var/lib/homeassistant/configuration.yaml # 以下を追記
http:
ssl_certificate: /certs/fullchain.pem
ssl_key: /certs/privkey.pem
$ sudo docker restart homeassistant
Watchtower で HomeAssistant の更新
HomeAssistant を自動更新させる Watchtower をインストールする手順は、Gemini に出てきた設定方法をそのまま実行。
$ sudo docker run -d \ --name watchtower \ --restart=unless-stopped \ -v /var/run/docker.sock:/var/run/docker.sock \ containrrr/watchtower --interval 86400 homeassistant $ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e94a5eea7468 containrrr/watchtower "/watchtower --inter…" 4 seconds ago Up 1 second (health: starting) 8080/tcp watchtower 94c7a25097d4 ghcr.io/home-assistant/home-assistant:stable "/init" 6 minutes ago Up 6 minutes homeassistant
でも、現状のバージョンが 2025.9 だったので、最新の 2025.12 に早々に上げたいので、確認したら、以下のように、 –run-once を指定して実行すればいいらしい。
$ sudo docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--run-once \
homeassistant
エラーが出たので、Gemini の協力もあり、バージョン指定で更新。
$ sudo docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
-e DOCKER_API_VERSION=1.44 \
containrrr/watchtower \
--run-once \
homeassistant
無事に、2025.12.5 に更新ができた。
んん? –run-once で更新ができるのなら、watchtower を起動させっぱなしなのは、プロセス資源がもったいない。/etc/cron.monthly で “docker run … watchtower –run-once …” を実行した方がいいじゃん。docker stop/rm watchtower して cron 管理に移行させた。
Docker管理の Portainer のインストール
Docker 絡みで Gemini にお勧めを聞いたら、Docker を Web の GUI で管理ができる Portainer をすすめられた。
ということで、おすすめ設定を実行。
https 通信を使うので、オレオレ証明書のエラー画面で継続をすると、自宅サーバのアクセスで信用できない通信が表示されるようになる。そこで自宅サーバの証明書を使うように設定を追加。(Gemini に聞くと証明書の設定方法を提案してくれる。便利。)
((( 設定データ保存用のボリューム作成 )))
$ sudo docker volume create portainer_data
((( Portainer コンテナの起動 )))
$ sudo docker run -d \
-p 8000:8000 \ # Edge Agent通信用の HTTPポートの割り当て
-p 9443:9443 \ # HTTPSポートの割り当て
--name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
-v 証明書へのPATH:/certs \
portainer/portainer-ce:latest \
--sslcert /certs/fullchain.pem \
--sslkey /certs/privkey.pem
Homebridge を https に変更
Dockerの https の設定がうまくできたし、Homebridge も https で使えないか確認。ただし、homebridge は user=homebridge で起動しているので、アクセス権を与えないと、秘密鍵が読めない。かといって 証明書のアクセス権をユルユルにするのも避けたいので、Geminiに設定を提案してもらうと ACL でアクセス権を与える方法を示してくれた。(Linux での ACL の使い方、参考になる。Geminiに感謝。)
((( ACL で 読み込み権限を与える )))
$ sudo setfacl -m u:homebridge:r 証明書へのPATH/fullchain.pem
$ sudo setfacl -m u:homebridge:r 証明書へのPATH/privkey.pem
((( /var/lib/homebridge/config.json )))
"platforms": [
{ "name": "Config",
"port": 8581,
"lang": "ja",
"theme": "purple",
"menuMode": "default",
"lightingMode": "light", "sessionTimeout": 100000,
"platform": "config",
"ssl": {
"cert": "証明書へのPATH/fullchain.pem",
"key": "証明書へのPATH/privkey.pem"
}
},
((( homebridge 再起動 )))
$ sudo systemctl restart homebridge
ということで、homebridge, HomeAssistant, DockerのPortainer などの Web サービスを https 化することができ、ブラウザの「保護されていない通信」の表示を消すことができた。
Ubuntu 25.10 へのアップグレード
Ubuntu 25.10 も公開されたので、do-release-upgrade を実行。X.org が使えなくなり Wayland だけになるとのことであったが、ssh x-forward で使うのがほとんどだし影響も少ないだろうと更新を行ってみた。
dovecot が動かない
最初のトラブルは、dovecot 。設定ファイルの変更が原因。dovecot って、設定ファイルの基本的な書式で動かなくなることが多い。
メールボックスを Maildir 形式 に変更と、SSL の設定ファイルを変更
((( /etc/dovecot/conf.d/10-mail.conf )))
#mail_driver = mbox
#mail_home = /home/%{user|username}
#mail_path = %{home}/mail
#mail_inbox_path = /var/mail/%{user}
mail_driver = maildir
mail_path = ~/Maildir
## mail_inbox_path = ~/Maildir/.INBOX -- 設定ミス(自宅サーバでは.INBOXはナシ)
mail_inbox_path = ~/Maildir
((( /etc/dovecot/conf.d/10-ssl.conf )))
# Preferred permissions: root:root 0444
ssl_server_cert_file = /var/lib/dehydrated/certs/tsaitoh.net/fullchain.pem
# Preferred permissions: root:root 0400
ssl_server_key_file = /var/lib/dehydrated/certs/tsaitoh.net/privkey.pem
sudo-rs で CIDR記法が使えない
Ubuntu 25.10 での大きな特徴では、sudo が Rust で書かれた sudo-rs に移行したことらしい。んで、Host_Alias で の文法やセキュリティが厳格になったようだ。
Host_Alias LOCAL = 127.0.0.1 , 192.168.11.0/24
といった書き方で記載してあったが、コンマ空白区切りが、厳密にコンマか空白で区切るようになり ” , ” のような前後空白コンマなどがエラーになる。また、自宅内ネットワークからという意味で、CIDR 記法を使っていたが、Host_Alias では CIDR 記法が使えなくなった。自宅ネットワークなら OK といった雑な指定はセキュリティ的にまずいということらしく、CIDR 記法が使える部分に制限が加わった様子。今回は、localhost だけに変更しておいた。
LEDバッジが動かない(11/16追記)
自宅でスケジュール表示などに活用していた LED バッジが動かなくなった。
Perl で書いてあるし、今までの OS のアップグレードでは、ほぼ問題なく移行できていたのに…
Kernel が Linux 6.14.x から 6.17 に更新された影響かと思い grub メニューで 6.14 で起動したけど改善せず。Kernel が原因ではないのかな。
Raspberry-Pi で再起動後に vcgencmd のエラー
Debian/GNU/Linux bullseye で運用している Raspberry-Pi が 再起動後に vcgencmd がエラーをだす。通常 vcgencmd を実行するには、/dev/vcio のアクセスが root にしか許可されていない。そこで root 以外が使えるようにするには video グループで読み込みできるようにすればいいけど、再起動すると設定が消えてしまう。
このために udev のルールを作成して、起動時にアクセス権を変更させる。
$ sudo vi /etc/udev/rules.d/99-vcio.rules KERNEL=="vcio", GROUP="video", MODE="0660" $ sudo udevadm control --reload-rules # 新しいルールを読み込み $ sudo udevadm trigger # ルールを即時摘要
nextr 2G を活用するには
nextr 2G を活かせていない
我が家のネットワーク契約は、こしの都ネットワーク(丹南ケーブル) nextr 2G の契約だけど、自宅の端末の管理をきめ細かくしたいので nextr 2G のルータ(G-240W-B GPON) の配下に Buffalo のルータを設置。すべてのネットワーク機器は Buffalo ルータ配下に設置している。このためすべてのトラヒックは、Buffalo ルータ経由となり、ルータの WAN 側は 1G bps なので、2Gbps の最大性能の半分しか使っていない。
改善前の性能
自宅サーバで動かしたブラウザと、Windows で動かしたブラウザで、それぞれを別タイミングで動かすと以下の性能で 1Gbps に近い性能が出る。

しかし、サーバのブラウザとWindowsのブラウザで同時に計測すると、全部が Buffalo のWAN側を通るので、1Gbps の性能になってしまう。(speedtest のリロードボタンの同時押しがなかなかできないので、微妙にタイミングがずれるので500Mbpsを若干越えてるけど)

nextr 2G で WiFi と2つのLANポートに分散
そこで、nextr 2G のルータで活用していなかった WiFi と 2つのLANポート(各1Gbps)で分散を目指した。
nextr 2Gの WiFi は、CATVSTB の インターネット側を 設定。また、自宅サーバに USB 接続の 1Gbps の有線LANを追加し、未使用だった nextr 2G ルータの2つ目の LAN ポートに接続。
これで、サーバのトラヒック(max 1Gbps)と端末のトラヒック(max 1Gbps)に分散して 2Gbps を目指した。

この結果、サーバと端末で同時に speedtest を起動しても 1Gbps に近い性能がでるようになった。
とはいっても、ブラウザで動画を家族それぞれが見たとしても、3人で 100Mbps のトラヒックでさえも出ないけど。
外から自宅サーバが見えない
分散はできるようになったものの、自宅サーバ宛てのメールが届かない。確認したら、Web サーバも外から見えない。外から、Buffalo ルータ経由でアクセスできると思ってたけど。抜き差しする可能性のある USB 有線LANだし、できればnextr 2G ルータの DMZ 設定変更したくないんだけど。もう少し、設定チューニング必要だな。ひとまず USB 有線 LANを抜いておく。
原因としては、パケットが出る際の経路(サーバ⇒nextr 2Gルータ⇒インターネット)、パケットが入る際の経路(インターネット⇒nextr 2Gルータ⇒Buffaloルータ⇒サーバ)の不一致のせい。Gemini に対応案を提案してもらうと、3つの対策を提案してくれた。
- ルータのインターネット接続を Buffalo ルータ経由にする案を提案してくれるが、これじゃトラヒック分散にならない。
- nextr 2Gルータの DMZ の宛先を直接サーバ: 抜き差しする可能性のある 有線LAN だしなぁ。
- PBR(ポリシーベースルーティング)を提案してくれるが、設定は複雑化するとな。
エアコンをスライドバーで操作
エアコンの温度設定を赤外線リモコン制御できるようにしておいたけど、リモコンのボタンに割り当てていると、設定できる温度の幅に限界。ということで、スライドバーで温度設定できるようにしてみた。

DNSセカンダリサーバを動かす
UPSの移行などの際に、自宅内ネットワークが止まってしまう問題もあり、raspberry-pi サーバ上にセカンダリDNSを設定してみた。
$ sudo apt install bind9 bind9utils
((( /etc/bind/named.conf.options )))
acl internal-network {
192.168.11.0/24;
};
options {
directory "/var/cache/bind";
forwarders {
192.168.11.<プライマリ>; // internal DNS
};
allow-query { any; };
recursion yes ;
dnssec-validation auto;
listen-on { any; };
listen-on-v6 { none; };
};
((( /etc/bind/named.conf.local )))
zone "<自宅ドメイン>" {
type slave ;
file "db.<自宅ドメイン>.slave";
masters {
192.168.11.<プライマリ>;
};
};
DHCPサーバ側では、出来上がった セカンダリ情報を流すように追加設定。
option domain-name-servers 192.168.11.<プライマリ>, 192.168.11.<セカンダリ>;
ntpsec を chrony に移行
Ubuntu 25.10 への移行の記事をみていたら、ntp サーバ ntpsec が chrony になるとのことなので、先んじて chrony に移行しておく。chrony の設定記事を探すと、/etc/chrony/chrony.conf に設定を記載する話になっているけど、Debian だと設定ファイルを細かく分けて、デフォルト設定ファイルは触らないで、個人設定は別に記載するのが流儀。
$ sudo apt install chrony ### ntpsec がアンインストールされる。 $ sudo vi /etc/chrony/sources.d/local-ntp-server.sources # 自宅ネットワーク環境にあわせて server を追加 server ntp.ttn.ne.jp iburst ipv4 server ntp.nict.jp iburst ipv4 prefer pool jp.pool.ntp.org iburst ipv4 $ sudo vi /etc/chrony/conf.d/allow.conf # 自宅ネットワークからntpを参照できるように allow 127.0.0.1 allow 192.168.11.0/24 $ sudo systemctl restart chrony $ chronyc sources MS Name/IP address Stratum Poll Reach LastRx Last sample =============================================================================== ^+ ntp-nts-2.ps5.canonical.> 2 6 17 22 +5775us[+5775us] +/- 124ms ^- ntp-nts-3.ps5.canonical.> 2 6 17 23 +5795us[+5795us] +/- 124ms ^* ntp-nts-2.ps6.canonical.> 2 6 17 24 -8694us[-9701us] +/- 88ms ^+ ntp-nts-3.ps6.canonical.> 2 6 17 23 +6458us[+6458us] +/- 104ms ^- 103.131.151.30 3 6 17 24 -8991us[-8991us] +/- 35ms ^- ntp-nts-1.ps6.canonical.> 2 6 17 24 -21ms[ -21ms] +/- 103ms ^- ntp-k1.nict.jp 1 6 17 23 -7807us[-7807us] +/- 13ms ^- ntp.ttn.ne.jp 2 6 17 24 -7393us[-7393us] +/- 40ms
これにあわせて、自宅内の raspberry-pi の端末の確認をしていたら、サーバ1台の ntp しか参照していない。せめて 直の上位のプロバイダの ntp.ttn.ne.jp も参照してほしい。確認すると、DHCP で接続したサーバだけに問い合わせるようになっている。/etc/default/ntpsec を修正して DHCP サーバではなく /etc/ntpsec/ntp.conf を見るように設定する。
((( /etc/default/ntpsec ))) IGNORE_DHCP="yes"
((( 追記 2026/04/26 )))
chronyc sources を実行した結果を Gemini にかけたら、国内の nict.jp が優先されていないとのアドバイス。
server ntp.nict.jp iburst ipv4 prefer
~~~~~~ 追記


