AdGuard Home・Kea・Nginx Proxy Managerで自宅NOC基盤を作る

AdGuard Home・Kea・Nginx Proxy Managerで自宅NOC基盤を作る

date: Tue, 29 Sept 2026 author: repunit11
#自宅ネットワーク #DNS #DHCP #リバースプロキシ

自宅NOCを始めたのでその作業の流れを書いておきます。

はじめに

セキュリティ・キャンプ 全国大会 2026に参加しました。CDN自作ゼミに参加しました。そこでCDNを自作して、ネットワーク構築なども行いました。あまりネットワークについてよくわからないまま終わってしまいました。

そこで、ネットワークの勉強をしつつ、せっかくなのでDNSやDHCPも含めて自宅ネットワークを少しずつ自前化してみることにしました。

もともとの自宅サーバー構成は、以下の動画を参考に作りました。今回はその構成を土台に、DNSとDHCPを整えています。

今回使った主なものは次のとおりです。

  • Proxmox
  • Nginx Proxy Manager
  • AdGuard Home
  • Kea DHCP
  • DuckDNS

以上のものはProxmox上に作成しています。
最終的には、LAN内ではAdGuard Homeで名前解決し、Nginx Proxy Managerで各サービスへ振り分け、Kea DHCPからIPアドレスやDNSサーバー情報を配布する構成にしました。

全体構成

全体の流れは次のようになります。

KeaがクライアントにIP・ゲートウェイ・DNSを配布し、クライアントがAdGuard Homeで名前を解決してNginx Proxy ManagerへHTTPSでアクセスする全体構成図
担当使ったもの役割
DHCPKea DHCPIPアドレス、デフォルトゲートウェイ 192.168.11.1、DNSサーバー 192.168.11.15 を配布する
DNSAdGuard Homepve.example.duckdns.org などを 192.168.200.9 に向ける
リバースプロキシNginx Proxy Managerアクセスされたドメイン名に応じて各サービスへ振り分ける

Nginx Proxy Managerでの振り分けは、たとえば次のようになります。

アクセスするドメイン転送先
pve.example.duckdns.orgProxmox管理画面
npm.example.duckdns.orgNginx Proxy Manager
homepage.example.duckdns.orgHomepage

この構成にしたことで、DNS・DHCP・リバースプロキシの役割がそれぞれ分離され、どこで何をしているのか分かりやすくなりました。

AdGuard HomeでDNSを整える

最初にやったのはDNSまわりの整理です。 もともと pve.example.duckdns.org を引くと、LAN内で使いたいIPではなく、100.65.x.x のアドレスが返っていました。一方で、Nginx Proxy ManagerのローカルIPである 192.168.200.9 へ直接アクセスすると正常に応答していました。

このことから、次の状態だと考えました。

サービスとNginx Proxy Managerは動いている。名前解決だけが期待どおりではない。

そこで、LAN内ではAdGuard HomeにDNS Rewriteを持たせることにしました。 設定したのは、次のルールです。

||example.duckdns.org^$dnsrewrite=192.168.200.9

これにより、pve.example.duckdns.org、npm.example.duckdns.org、homepage.example.duckdns.org、prometheus.example.duckdns.org といった example.duckdns.org 配下のサブドメインを、まとめてNginx Proxy Managerへ向けられるようになりました。

複数のexample.duckdns.org配下の名前をAdGuard HomeのDNS Rewriteで192.168.200.9へ解決する図

LAN内では、クライアントがAdGuard Homeに問い合わせて 192.168.200.9 を取得し、そのアドレスにあるNginx Proxy Managerへアクセスします。

ここでポイントだったのは、DNSは「どのIPへ行くか」までしか決めないということです。pve.example.duckdns.org なのか homepage.example.duckdns.org なのかを見て、実際のバックエンドへ振り分けるのはNginx Proxy Managerです。

AdGuard Home: ドメイン名から行き先のIPアドレスを決める。
Nginx Proxy Manager: そのIPアドレスに届いたリクエストを、ドメイン名に応じて各サービスへ渡す。

この形にしたことで、新しいサービスを追加するときも、DNS側は基本的に同じNginx Proxy Managerへ向けたまま、Nginx Proxy Manager側にProxy Hostを追加するだけで済むようになりました。

Nginx Proxy Managerでサービスをドメイン化する

DNSで pve.example.duckdns.org をNginx Proxy ManagerのIPに解決できるようになったので、次はNginx Proxy Manager側でProxmoxへの振り分けを設定しました。

クライアントがAdGuard Homeから192.168.200.9を取得し、Nginx Proxy ManagerへHTTPS接続してProxmoxへ転送される2段階の流れ

Nginx Proxy Managerで追加したProxy Hostの設定は次のとおりです。

項目設定値
Domain Namespve.example.duckdns.org
Schemehttps
Forward Hostname / IP192.168.200.1
Forward Port8006
WebSocket Support有効

ProxmoxのWeb UIはHTTPSの8006番で待ち受けているため、バックエンド側のSchemeも https にしています。また、ProxmoxのコンソールなどではWebSocketを利用するため、WebSocket Supportも有効にしました。これでブラウザから https://pve.example.duckdns.org にアクセスして、Proxmoxへ到達できます。

ほかのサービスも同様に、npm.example.duckdns.org、homepage.example.duckdns.org、prometheus.example.duckdns.org、grafana.example.duckdns.org のProxy Hostを追加しました。IPアドレスやポート番号を直接覚えなくてもアクセスできます。

Nginx Proxy Manager側ではLet’s Encryptの証明書も設定しました。そのため、LAN内からも各サービスのドメイン名でHTTPSを使えます。

Kea DHCPを立てる

DNSまわりが整理できたので、次はDHCPも自分で管理することにしました。それまでは家庭用ルーターがDHCPサーバーとして動いていて、クライアントへIPアドレスを配布していました。

DHCPでは、IPアドレスだけでなく、サブネットマスク、デフォルトゲートウェイ、DNSサーバー、リース時間もクライアントへ渡します。今回はAdGuard HomeをDNSサーバーとして使いたかったので、192.168.11.15 を配布するようにしました。

DHCPサーバーにはKeaを選びました。AdGuard HomeにもDHCP機能はありますが、DHCPそのものを触ってみたかったので、DNSとDHCPを分離しています。

機器IPアドレス役割
ルーター192.168.11.1ゲートウェイ / NAT
AdGuard Home192.168.11.15DNS
Kea DHCP192.168.11.17DHCP

KeaはProxmox上に新しいDebian LXCを作って、その中で動かしました。 Kea自身には固定IPとして 192.168.11.17 を割り当てています。DHCPサーバー自身のIPが変わってしまうと困るので、こうしたネットワーク基盤系のサービスは固定IPにしています。

Kea DHCPv4をインストールした後、/etc/kea/kea-dhcp4.conf を設定しました。今回の基本設定は次のとおりです。

{
  "Dhcp4": {
    "interfaces-config": {
      "interfaces": [ "eth0" ]
    },

    "lease-database": {
      "type": "memfile",
      "persist": true
    },

    "valid-lifetime": 3600,

    "subnet4": [
      {
        "id": 1,
        "subnet": "192.168.11.0/24",

        "pools": [
          {
            "pool": "192.168.11.100 - 192.168.11.200"
          }
        ],

        "option-data": [
          {
            "name": "routers",
            "data": "192.168.11.1"
          },
          {
            "name": "domain-name-servers",
            "data": "192.168.11.15"
          }
        ]
      }
    ]
  }
}

これによって、クライアントには次の情報が配布されます。

項目配布する値
IPアドレス192.168.11.100 ~ 192.168.11.200
デフォルトゲートウェイ192.168.11.1
DNSサーバー192.168.11.15

設定を書いた後は、設定ファイルをチェックしてからサービスを起動しました。

sudo kea-dhcp4 -t /etc/kea/kea-dhcp4.conf
sudo systemctl enable --now isc-kea-dhcp4-server

起動後は、稼働状態を確認しました。

sudo systemctl status isc-kea-dhcp4-server

active (running) になっていることを確認できました。

ルーターのDHCPからKeaへ切り替える

Keaが起動できたら、家庭用ルーター側のDHCPサーバーを停止しました。 同じLAN内でルーターとKeaの両方がDHCPサーバーとして動くと、クライアントの DHCPDISCOVER に両方が応答する可能性があるためです。

切り替え前はルーターのDHCPが有効、切り替え後はルーターのDHCPを停止してKeaのDHCPを有効にする図

ルーターのDHCPを無効にし、Keaから配布する状態に切り替えました。その後、Windows側でDHCPリースを更新しました。

ipconfig /release
ipconfig /renew

ipconfig /all で確認した結果は次のとおりです。

IPv4 Address : 192.168.11.102
DHCP Server  : 192.168.11.17
DNS Servers  : 192.168.11.15

DHCPサーバーがKeaの 192.168.11.17、DNSサーバーがAdGuard Homeの 192.168.11.15 になっています。家庭用ルーターからKeaへの切り替えと、DNSサーバー情報の配布を確認できました。

DHCPやDNSの動作を確認する

せっかくDHCPサーバーを自分で立てたので、実際にどう通信しているのかも確認しました。Kea側で次のコマンドを実行した状態で、クライアントのDHCPリースを解放して再取得します。

sudo tcpdump -ni eth0 'udp port 67 or udp port 68'

確認できた通信の流れは次のとおりです。

クライアントとKeaの間でDHCPDISCOVER、DHCPOFFER、DHCPREQUEST、DHCPACKを順にやり取りする図
順番送信元 → 送信先メッセージ内容
1クライアント → KeaDHCPDISCOVERDHCPサーバーを探す
2Kea → クライアントDHCPOFFER利用可能なIPアドレスを提案する
3クライアント → KeaDHCPREQUEST提案されたIPアドレスを要求する
4Kea → クライアントDHCPACKリースを確定する

クライアントがDHCPサーバーを探し、KeaがIPアドレスを提案します。クライアントがそのIPアドレスを要求すると、KeaがACKを返してリースが成立します。実際にパケットを見ると、クライアントとサーバーのやり取りによってアドレスが決まることが分かりました。

完成した構成

最終的に、今回作ったネットワーク基盤は次のようになりました。

完成後の構成。Kea DHCP、AdGuard Home、Nginx Proxy Managerを経て各サービスにアクセスする
完成後の構成。DHCP・DNS・HTTPSの通信経路を分けて示している。

クライアントはKeaからIPアドレス・ゲートウェイ・DNSサーバーを受け取り、AdGuard Homeでサービス名を解決します。その後、Nginx Proxy Managerにアクセスして、Proxmox・Homepage・Grafanaなどのサービスへ振り分けられます。

以前は家庭用ルーターに任せていたDHCPをKeaに移し、DNSとリバースプロキシもそれぞれ分けて構築しました。新しいサービスを追加するときも、Nginx Proxy ManagerにProxy Hostを追加すれば、example.duckdns.org 配下の名前でアクセスできます。

このあと、KeaやAdGuard Home、Proxmoxなどの状態をPrometheusで収集してGrafanaで可視化する監視基盤も作りました。その部分は次の記事でまとめます。

まとめ

今回は、自宅のProxmox環境を少しずつNOCっぽくするために、DNS・DHCP・リバースプロキシをそれぞれ分けて構築しました。DHCPから受け取ったDNSサーバーで名前を解決し、Nginx Proxy Manager経由で各サービスへアクセスする流れを実際に作れたことで、それぞれの役割が具体的に理解できました。

tcpdump で DHCPDISCOVER / DHCPOFFER / DHCPREQUEST / DHCPACK を確認したり、Keaのリース情報を見たりすることで、設定だけでなく実際の通信も確認できました。

次の記事では、Prometheus・Grafana・kea-exporterを使って、Kea DHCPの状態を可視化する監視基盤を作ります。

Share