タグ: Proxmox

  • 自宅ラボのBIND 9をCVE対応でアップデート|Docker移行で発生した権限問題とDNS監視

    はじめに

    自宅ラボでは、AdGuard HomeとBIND 9を組み合わせて内部DNSを運用しています。

    先日、Xで「BIND 9を使っている」という内容をポストしたところ、それを見てくださった方からBIND 9の脆弱性についての記事を教えていただきました。

    紹介いただいた情報では、BIND 9に以下の2件の脆弱性が報告されていました。

    • CVE-2026-19666
    • CVE-2026-19667

    調べたところどちらもリゾルバのDoSに関する脆弱性で、CVE-2026-19666はDNS64有効時、CVE-2026-19667はデフォルトで影響するとされています。CVSSはどちらも7.5(High)です。

    自宅ラボのBINDも対象となる可能性があるため、実際の構成を確認したうえでアップデートすることにしました。

    今回は、その対応内容をまとめます。

    1. 更新前のDNS構成

    今回の環境では、DNSの役割をAdGuard HomeとBINDで分けています。

    イメージとしては以下の構成です。

    クライアント
         |
         v
    AdGuard Home
         |
         | 内部ドメイン
         v
       BIND 9
         |
         +-- 内部正引き
         +-- 内部逆引き
         +-- Tailscale用DNS
         |
         v
      PBS Secondary

    AdGuard Homeをクライアントから見えるDNSサーバとして使用し、内部ドメインの問い合わせだけBINDへ渡しています。

    外部ドメインについてはAdGuard Home側で処理する構成です。

    なお、記事では実環境のIPアドレスやドメイン名などは掲載せず、構成が分かる範囲でサンプル値に置き換えています。


    2. BINDの役割を確認

    今回の脆弱性情報をきっかけに、まず現在のBINDの役割を確認しました。

    この環境のBINDは、インターネット向けの再帰DNSとして使用しているのではなく、内部ゾーンを提供するauthoritative DNSとして利用しています。

    そのため、

    recursion no;

    として、BIND自身では再帰問い合わせを行わない構成にしています。

    また、問い合わせ元についても、以前の設定に存在していた

    any;

    を削除しました。

    内部ネットワークからの問い合わせだけを許可する構成に変更しています。


    3. DNS64の利用状況を確認

    今回の脆弱性のうち、CVE-2026-19666はDNS64有効時に影響するとされています。

    そこで、AdGuard Home側の設定を確認しました。

    この環境ではDNS64を使用しておらず、

    use_dns64: false

    となっていることを確認しました。

    一方、CVE-2026-19667についてはデフォルトで影響するとされているため、DNS64を使用していないことだけで対応を終えるのではなく、BIND自体を更新することにしました。


    4. BINDイメージを変更

    更新前はUbuntuベースのBINDイメージを使用していました。

    BINDのバージョンを確認したところ、今回の脆弱性対応として必要な修正版へ確実に更新するため、ISC公式のBINDイメージを利用することにしました。

    変更前:

    ubuntu/bind9:latest

    変更後:

    internetsystemsconsortium/bind9:9.20

    最終的に、

    BIND 9.20.29

    で起動していることを確認しました。


    5. Dockerイメージ変更で発生した権限問題

    今回、一番苦労したのがDockerイメージ変更後の権限問題です。

    ISC公式イメージへ変更したところ、最初はBINDコンテナが起動と停止を繰り返す状態になりました。

    ログを見ると、

    directory '/var/cache/bind' is not writable

    というエラーが出ていました。

    ISC公式イメージのbindユーザーを確認すると、

    uid=53(bind) gid=53(bind)

    でした。

    一方、ホスト側のcacheディレクトリは別のUID/GIDで所有されていました。

    つまり、同じ「bind」という名前のユーザーを使用していても、Dockerイメージが変わればUID/GIDが同じとは限りません。

    そこで、ホスト側のcacheディレクトリをISC公式イメージのbindユーザーに合わせました。

    chown 53:53 /srv/ubn-name-sv/cache

    その後、BIND 9.20.29が正常に起動しました。


    6. 設定とゾーンを確認

    コンテナ起動後、

    named-checkconf -z /etc/bind/named.conf

    を実行しました。

    結果として、以下の3ゾーンが正常にロードされました。

    • 内部正引きゾーン
    • 内部逆引きゾーン
    • Tailscale用DNSゾーン

    設定ファイルの構文だけではなく、実際にゾーンがロードされているところまで確認しました。


    7. DNSの名前解決を順番に確認

    BINDが起動しただけでは、DNS環境が正常に復旧したとは言えません。

    そこで、DNSの経路ごとに確認しました。

    BINDへ直接問い合わせ

    まずBIND自身に問い合わせます。

    dig @127.0.0.1 -p 5353 dns01.home.example A +noall +answer

    期待するIPアドレスが返ることを確認しました。

    AdGuard HomeからBINDへ問い合わせ

    次に、AdGuard HomeからBINDへの名前解決を確認しました。

    docker exec adguardhome nslookup dns01.home.example 172.18.0.2

    こちらも正常に名前解決できました。

    ホストからAdGuard Home経由で問い合わせ

    最後に、普段クライアントが利用する経路を確認しました。

    dig @127.0.0.1 dns01.home.example A +noall +answer

    この結果も正常でした。

    DNSサーバを更新するときは、単純に「サービスが起動した」だけではなく、

    クライアント
      ↓
    AdGuard Home
      ↓
    BIND

    という実際の通信経路を確認することが重要です。


    8. PBSのセカンダリDNSも確認

    BINDでは、別サーバにセカンダリDNSを用意しています。

    今回の対応では、PBS側のセカンダリDNSについても確認しました。

    SOAレコードを取得して、

    dig @192.168.10.20 -p 5353 home.example SOA +noall +answer

    マスターとセカンダリのserialが一致することを確認しました。

    さらにBINDのログから、マスターからセカンダリへNOTIFYが送信されていることも確認しました。

    DNSの冗長化を構成している場合は、マスターだけ正常でも不十分です。

    セカンダリ側まで確認する必要があります。


    9. DNS確認用スクリプトを作成

    今回の確認を毎回手作業で行うのは面倒なので、最後にdns-pipeline.shを作成しました。

    スクリプトでは、

    1. BINDコンテナが起動しているか
    2. BINDのバージョン
    3. BIND設定とゾーン
    4. BINDへの直接問い合わせ
    5. BINDへの逆引き問い合わせ
    6. AdGuard Home経由の名前解決
    7. PBSセカンダリのSOA
    8. マスターとセカンダリのserial一致

    を確認します。

    すべて成功した場合、

    DNS PIPELINE: OK

    として終了コード0を返します。

    どれか1つでも失敗すると、

    DNS PIPELINE: NG

    として終了コード1を返します。

    実際に今回の環境で実行し、すべてのチェックがPASSして正常終了することを確認しました。


    10. 今回の対応で得られたこと

    今回の対応では、単純にBINDをアップデートしただけではありませんでした。

    脆弱性情報をきっかけに、

    脆弱性情報を確認
        ↓
    現在のDNS構成を確認
        ↓
    BINDの役割を確認
        ↓
    DNS64の利用状況を確認
        ↓
    BINDイメージを変更
        ↓
    UID/GID問題を切り分け
        ↓
    BINDをアップデート
        ↓
    ゾーン確認
        ↓
    DNS疎通確認
        ↓
    セカンダリDNS確認
        ↓
    ヘルスチェックを自動化

    という一連の対応を行いました。

    特に、Dockerイメージを変更するときには、アプリケーションの設定だけでなく、コンテナ内ユーザーのUID/GIDやホスト側のボリューム権限まで確認する必要があることを改めて実感しました。

    また、DNSについては「サービスが起動している」だけではなく、実際の問い合わせ経路を確認することが重要だと感じました。


    まとめ

    今回、XでBIND 9を使用していることをポストしたことをきっかけに、BIND 9の脆弱性情報を教えていただきました。

    そこから自宅ラボのDNS構成を確認し、BINDをISC公式イメージへ移行して9.20.29へ更新しました。

    その過程でDockerのUID/GIDによる権限問題も発生しましたが、原因を切り分けて解決し、最終的には、

    • BIND 9.20.29への更新
    • authoritative-onlyとしての運用確認
    • DNS64を使用していないことの確認
    • 内部ネットワークからの問い合わせに限定
    • 3ゾーンの正常ロード
    • AdGuard HomeからBINDへの名前解決
    • PBSセカンダリとの同期
    • DNSパイプラインによる自動チェック

    まで確認できました。

    自宅ラボであっても、脆弱性情報をきっかけに実際の構成を確認し、アップデート、障害対応、疎通確認、監視まで一通り実施してみると、普段の運用では気づきにくい問題を発見できます。

    今回教えていただいたことをきっかけに、DNSまわりの構成を見直す良い機会になりました。

  • 4畳半に作った自宅ラボ環境を紹介|Proxmox・10GbE・NASで構築

    自宅ラボ用に19インチラックをDIYし、サーバーやネットワーク機器の電源を守るためにUPSも導入しました。

    今回は、それらの機器を含めて、現在運用している自宅ラボ環境を紹介したいと思います。

    自作PCが好きで、最初はLinuxを触るところから始まりました。

    その後、Proxmoxを使った仮想化環境を作り、サーバーが増え、ネットワークを10GbE化し、NASやバックアップサーバーも導入。

    気が付けば、4畳半の部屋に自宅ラボができていました。

    そして最終的には、機器を整理するために19インチラックまで自作することになりました。

    この記事では、現在の自宅ラボのハードウェア、ネットワーク、サーバー構成、そして実際に動かしているサービスをまとめて紹介します。


    自宅ラボの全体像

    現在の自宅ラボは、大きく分けると以下のような構成になっています。

    • Proxmox VE 3ノード
    • NAS兼GPUサーバー
    • TrueNAS
    • Proxmox Backup Server
    • 10GbEネットワーク
    • iSCSIを利用したストレージ環境
    • ZFSによる冗長化
    • Dockerを利用した各種サービス

    以前は機器を床や一般的な棚に置いていましたが、サーバーやネットワーク機器が増えるにつれて管理が難しくなってきました。

    そこで、現在はDIYした木製の19インチラックを中心に機器をまとめています。

    ラックについては、以前の記事で製作過程を紹介しています。

    自宅ラボは「最初から大規模な環境を作ろう」と思って始めたものではありませんでした。

    自作PCから始まり、Linux、Proxmox、ネットワーク、ストレージと興味が広がっていった結果、少しずつ現在の環境になりました。


    自宅ラボの主なハードウェア

    現在使用している主な機器はこちらです。

    ネットワーク機器

    • YAMAHA RTX1200
    • Allied Telesis AT-x510L-28GT
    • XikeStor SKS8310-8X
    • XikeStor SKS1200-4GPY2XF-P
    • Buffalo WSR-1166DHPL2

    メインのネットワークにはAllied Telesisのスイッチを使用し、SAN用には別の10GbEネットワークを構築しています。

    家庭用のネットワークと、自宅ラボのネットワークを分けているのも現在の環境の特徴です。


    サーバーはProxmox VEを中心に構築

    自宅ラボの中心になっているのは、Proxmox VEです。

    現在は3台の自作PCでProxmoxクラスターを構成しています。

    Proxmoxノード(2U)

    • pve01
    • pve02
    • pve03

    それぞれAMD Ryzen 3 4100を搭載した自作PCで、10GbE NICを追加しています。

    仮想マシンやコンテナを複数のノードで動かすことで、さまざまなサービスを試せる環境になっています。

    Proxmoxを使い始めたことで、「1台のPCにLinuxをインストールして使う」だけだった環境から、仮想化を利用した本格的な自宅サーバー環境へ発展しました。


    NAS兼GPUサーバー(3U)

    自宅ラボには、NASとGPU処理を担当するサーバーもあります。

    このサーバーには、

    • AMD Ryzen 5 3400G
    • メモリ64GB
    • AMD Radeon RX 9060 XT 16GB
    • 10GbE NIC

    を搭載しています。

    GPUを搭載しているため、通常のNAS用途だけではなく、AI関連の処理にも使用しています。

    現在はProxmox上でAI用の環境も構築しており、OllamaやStyle-Bert-VITS2などをDockerで動かしています。

    自作PCとして使っていた機器を、その後どう活用するか。

    自分の場合は、その答えのひとつが「自宅ラボのサーバーにする」でした。


    TrueNASとストレージ環境

    ストレージ用には、PRIMERGY TX1320 M3を使用してTrueNAS SCALEを動かしています。

    自宅ラボでは、ZFSを利用してストレージを冗長化しています。

    また、SAN用に分離したネットワークを用意し、iSCSIを利用してProxmoxノードへストレージを提供しています。

    ※夏場は室温上昇によるSASディスクの騒音問題が発生し、NAS機能をGPUサーバに移しています。

    現在のネットワークは、大きく以下のように分けています。

    家族用ネットワーク

    192.168.11.0/24

    自宅ラボ用ネットワーク

    192.168.2.0/24

    Proxmoxクラスタ用ネットワーク

    10.1.1.0/24

    SAN用ネットワーク

    10.2.2.0/24

    用途ごとにネットワークを分けることで、管理しやすい環境を目指しています。

    特にProxmoxクラスタやストレージ関連の通信を、普段使っているネットワークと分けているのが特徴です。


    10GbEネットワークを導入

    自宅ラボでは10GbEネットワークも構築しています。

    最初から10GbEが必要だったわけではありません。

    しかし、仮想マシンを複数運用するようになり、ストレージをネットワーク経由で利用するようになると、高速なネットワークにも興味が出てきました。

    現在は10GbEネットワークを利用して、

    • Proxmoxノード間の通信
    • SANへの接続
    • ストレージへのアクセス

    などを行っています。

    自宅で10GbE環境を構築するのは少し大げさにも見えますが、「自宅で試せる環境がある」ということ自体が自宅ラボの面白さだと思っています。

    仕事で触る技術でも、実際に自分で構築してみると理解が深まります。


    バックアップ専用サーバーも用意

    仮想化環境を作ると、次に気になってくるのがバックアップです。

    現在はProxmox Backup Server専用の自作PCを用意しています。

    バックアップサーバーには、

    • Intel Core i3-8100T
    • メモリ16GB ECC
    • NVMe SSD
    • HDD 1TB×2
    • HDD 500GB×1

    を搭載しています。

    Proxmoxの仮想マシンやコンテナを運用するだけではなく、「障害が発生したときにどう復旧するか」まで考えるのも自宅ラボの楽しさのひとつです。

    新しいサービスを作るたびに、バックアップ対象も増えていきます。

    その結果、専用のバックアップサーバーを用意することになりました。

    ディスクはシングル構成でVMデータと、Immich、Sambaなどのデータでディスクを分けています。


    自宅ラボで実際に動かしているサービス

    自宅ラボでは、単純にサーバーを並べているだけではありません。

    Proxmox上で仮想マシンやコンテナを作成し、さまざまなサービスを運用しています。

    DNS・ネットワーク関連

    LAN内の名前解決用として、

    • Bind9
    • AdGuard Home
    • Tailscale

    などを利用しています。Bind9はLPICの資格試験勉強のために構築したものです。


    監視環境

    モニタリング用のサーバーでは、

    • Grafana
    • PostgreSQL
    • Python

    などを使用しています。

    SwitchBotの温湿度計やスマートプラグも利用しており、サーバー室の温度や電力を監視しています。

    異常があった場合には、Discordへ通知が届くようにしています。

    サーバーが増えると、「ちゃんと動いているか」を確認する仕組みも必要になります。

    自宅ラボではありますが、監視の仕組みを作ることで、運用する楽しさも増えました。


    Nextcloud

    Nextcloudも自宅ラボで運用しています。

    Docker上で、

    • Nextcloud
    • MariaDB
    • Nginx
    • Redis
    • Tailscale

    などを組み合わせています。

    スマートフォンからもアクセスできるため、自分の環境やナレッジを保存する用途などに利用しています。


    AIサーバー

    GPUを搭載したサーバーを活用し、AI関連のサービスも動かしています。

    現在は、

    • Ollama
    • Style-Bert-VITS2

    などをDockerで運用しています。

    自宅にGPUサーバーがあることで、クラウドサービスを利用するだけでは分からない部分も実際に試せるようになりました。


    家計簿Webアプリ

    自宅ラボでは、自分で作成した家計簿Webアプリも運用しています。

    FlaskやMariaDBなどを使用し、AIサーバーとも連携しています。

    レシートを読み取り、購入履歴や支出を管理する仕組みを作っています。

    自宅ラボがあると、「こんなものを作ってみたい」と思ったときに、すぐサーバーを用意して試せるのが便利です。


    Immich

    家族の写真や動画の保存にはImmichを使用しています。

    Docker上で、

    • Immich
    • PostgreSQL
    • Redis
    • Nginx
    • Tailscale

    などを運用しています。

    スマートフォンで撮影した写真や動画を保存し、タブレットやテレビから家族で閲覧できる環境を作っています。

    自宅ラボは技術を試す場所というイメージがありますが、実際には家族が使えるサービスを作ることも増えてきました。


    UPSも導入

    サーバーやネットワーク機器が増えてくると、気になるのが停電や瞬断です。

    そこで、サーバー用とネットワーク機器用にUPSを導入しています。

    現在使用しているのは、

    • APC UPS 500:サーバー用
    • APC UPS 400S:ネットワーク用

    です。

    サーバー用のUPSには、

    • Proxmoxノード
    • NAS兼GPUサーバー
    • SAN用スイッチ

    などを接続しています。

    UPSを導入した理由については、別の記事でも詳しく紹介しています。


    自宅ラボを始めて変わったこと

    最初は、自作PCにLinuxをインストールして遊んでいただけでした。

    しかし、Proxmoxを知ったことで仮想化に興味を持ちました。

    仮想マシンを作る。

    ↓

    サービスを増やす。

    ↓

    サーバーが増える。

    ↓

    ネットワークを高速化・冗長化したくなる。

    ↓

    ストレージが必要になる。

    ↓

    バックアップも必要になる。

    ↓

    そして、最終的にはラックまで必要になる。

    こうして振り返ると、自宅ラボは少しずつ大きくなっていったことが分かります。

    最初から現在のような環境を作る予定はありませんでした。

    その時々で「これを試してみたい」と思ったものを追加していった結果です。


    自宅ラボは完成しない

    現在の環境でも、まだまだ改善したい部分があります。

    新しい技術を試したくなれば、新しい仮想マシンやコンテナを作ることもあります。

    機器が増えれば、ラックの使い方も変わります。

    ネットワーク構成を変更したくなることもあります。

    自宅ラボは、一度完成したら終わりではありません。

    むしろ、

    「完成しないこと」そのものが自宅ラボの面白さなのかもしれません。

    既製品や既存の構成で満足できなければ、自分で考えて変更してみる。

    うまくいかなければ、また改善する。

    19インチラックをDIYしたのも、その延長線上にあります。

    自作PCから始まり、LinuxやProxmoxを使うようになり、気が付けば自宅ラボになって、最終的にはラックまで自作していました。

    これからも、自宅ラボで新しい技術を試したり、環境を改善したりしながら、記事として記録していきたいと思います。


    まとめ

    現在の自宅ラボでは、

    • Proxmox VE 3ノード
    • NAS兼GPUサーバー
    • TrueNAS
    • Proxmox Backup Server
    • 10GbEネットワーク
    • ZFS・iSCSIによるストレージ環境
    • UPS
    • Dockerを利用した複数のサービス

    を運用しています。

    ひとつひとつの機器やサービスは、また別の記事で詳しく紹介していく予定です。

    この記事が、自宅ラボをこれから作ってみたい人や、「自宅でサーバーを動かすとどんな環境になるの?」と思っている人の参考になれば嬉しいです。

    そして、これからも自宅ラボは少しずつ変化していくと思います。

    その変化も含めて、楽しんでいきたいと思います。