AdGuard Home・Kea・Nginx Proxy Managerで自宅NOC基盤を作る
自宅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サーバー情報を配布する構成にしました。
全体構成
全体の流れは次のようになります。
| 担当 | 使ったもの | 役割 |
|---|---|---|
| DHCP | Kea DHCP | IPアドレス、デフォルトゲートウェイ 192.168.11.1、DNSサーバー 192.168.11.15 を配布する |
| DNS | AdGuard Home | pve.example.duckdns.org などを 192.168.200.9 に向ける |
| リバースプロキシ | Nginx Proxy Manager | アクセスされたドメイン名に応じて各サービスへ振り分ける |
Nginx Proxy Managerでの振り分けは、たとえば次のようになります。
| アクセスするドメイン | 転送先 |
|---|---|
pve.example.duckdns.org | Proxmox管理画面 |
npm.example.duckdns.org | Nginx Proxy Manager |
homepage.example.duckdns.org | Homepage |
この構成にしたことで、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へ向けられるようになりました。
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への振り分けを設定しました。
Nginx Proxy Managerで追加したProxy Hostの設定は次のとおりです。
| 項目 | 設定値 |
|---|---|
| Domain Names | pve.example.duckdns.org |
| Scheme | https |
| Forward Hostname / IP | 192.168.200.1 |
| Forward Port | 8006 |
| 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 Home | 192.168.11.15 | DNS |
| Kea DHCP | 192.168.11.17 | DHCP |
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を無効にし、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'
確認できた通信の流れは次のとおりです。
| 順番 | 送信元 → 送信先 | メッセージ | 内容 |
|---|---|---|---|
| 1 | クライアント → Kea | DHCPDISCOVER | DHCPサーバーを探す |
| 2 | Kea → クライアント | DHCPOFFER | 利用可能なIPアドレスを提案する |
| 3 | クライアント → Kea | DHCPREQUEST | 提案されたIPアドレスを要求する |
| 4 | Kea → クライアント | DHCPACK | リースを確定する |
クライアントがDHCPサーバーを探し、KeaがIPアドレスを提案します。クライアントがそのIPアドレスを要求すると、KeaがACKを返してリースが成立します。実際にパケットを見ると、クライアントとサーバーのやり取りによってアドレスが決まることが分かりました。
完成した構成
最終的に、今回作ったネットワーク基盤は次のようになりました。
クライアントは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の状態を可視化する監視基盤を作ります。