ネットワーク構成図を作ってみた
はじめに
今回、自宅環境を拡張するべく、ネットワーク構成図を作ってみた。初めて作るので、色々拙い部分もあるとは思うが、よければ見ていってほしい。
使ったツール
今回はdraw.ioというツールを使ってネットワーク構成図を作成してみた。結構使い勝手が良かった。
上の記事を見て貰えばどんなツールかわかると思う
今回はネットワーク構成図に活用したがこれからはER図とかUML図とか作成するときに活用しようと思う。
ネットワーク構成図

本体はこんな感じ、VLANは5層に分けていて、それぞれ、MGMT(監視・ログ)、DMZ(公開)、SERV(内部サーバー)、STO(ストレージ・データベース)、VPNに分けている。
それぞれ自宅環境の外側には、二つほどVPSを借りて、一つは権威DNSにもう一つはセキュリティゲートウェイにしようと思っている。
ということで以下からはちょっともろもろのVLAN層について解説
VLAN10:MGMT(管理層について)
MGMT(管理層)はネットワークの「裏方」で、運用・監視・自動化 のためのツールを集約する場所。物理サーバーは一台。コンテナでもろもろのアプリなどを管理。
前提条件
| 項目 | 値 |
|---|---|
| 物理サーバー名 | mgmt-server |
| 役割 | 監視、ログ、CI/CD、自動化の統合 |
| VLAN | MGMT VLAN (192.168.10.0/24) |
| OS | Ubuntu Server / Debian など |
| コンテナ基盤 | Docker(または Podman) |
MGMT層 コンテナ構成表
| コンテナ名 | サービス / 役割 | ツール | ポート | 備考 |
|---|---|---|---|---|
prometheus |
メトリクス収集 | Prometheus | 9090 | 各サーバーやK8sノードの状態を監視 |
grafana |
可視化ダッシュボード | Grafana | 3000 | Prometheusのデータをグラフ化 |
loki |
ログ集約 | Loki | 3100 | 各サーバーからのログを保存 |
promtail |
ログ転送エージェント | Promtail | 9080 | Lokiにログを送信(localhost or 外部) |
gitea |
Gitリポジトリ(コード管理) | Gitea | 3001 | GitHubの自前版(CI/CD起点) |
gitea-runner |
自動ビルド | Gitea Runner | - | CIパイプライン実行 |
argocd |
デプロイ自動化 | ArgoCD | 8080 | Git→K8s連携 |
registry |
コンテナイメージ保管 | Harbor or registry:2 | 5000 or 443 | 内部用レジストリとして使える |
alertmanager |
アラート通知 | Alertmanager | 9093 | メールやSlack連携可 |
blackbox-exporter |
外形監視 | Prometheus Blackbox | 9115 | 外部からサービス死活監視 |
役割の分類まとめ
| 分類 | コンテナ | ツール | 主な役割 |
|---|---|---|---|
| 🟢 監視 | prometheus |
Prometheus | サーバー・サービスのメトリクス収集 |
| 🟢 監視 | grafana |
Grafana | 状態の可視化 |
| 🟢 監視 | blackbox-exporter |
Blackbox | 外形監視(オプション) |
| 🟡 ログ |
loki, promtail
|
Loki + Promtail | ログ集約・解析 |
| 🟠 CI/CD | gitea |
Gitea | Gitリポジトリ |
| 🟠 CI/CD | gitea-runner |
Gitea Runner | ビルド・テスト |
| 🟠 CI/CD | argocd |
ArgoCD | 自動デプロイ(GitOps) |
| 🟠 CI/CD | registry |
Harbor / registry | イメージ保管 |
| 🔔 通知 | alertmanager |
Alertmanager | アラート通知(Slack/メールなど) |
運用のポイント
- 物理 1 台で十分(リソース目安:8〜16GB RAM、NVMe)
- 外部公開はしない → VPN経由でアクセス
- GrafanaやArgoCDなどの管理系UIは 認証をかける
- バックアップは別ストレージに定期転送
- 物理サーバーのアップグレードによってVMに移行も検討
VLAN20:MGMT(公開層について)
DMZ(公開)は実際にwebアプリやwebサイトを公開するための場所。物理サーバーは一台。コンテナでもろもろのアプリなどを管理。
前提条件
| 項目 | 値 |
|---|---|
| 物理サーバー名 | dmz-server |
| 役割 | 公開サービスの入口 |
| VLAN | MGMT VLAN (192.168.20.0/24) |
| OS | Ubuntu Server など |
| 備考 | LB / DNS / WAFなどをコンテナで運用 |
コンテナ構成(DMZ)
| コンテナ名 | サービス / 役割 | ツール | ポート | 備考 |
|---|---|---|---|---|
nginx-lb |
リバースプロキシ / LB | Nginx or Traefik | 80 / 443 | 外部の入口 |
waf |
WAF | ModSecurity + CRS | 80 / 443 | nginxの前段または内部チェイン |
dns-auth |
公開DNS(権威) | BIND9 / Knot | 53 UDP/TCP | NS応答(CDNなどと併用可能) |
certbot |
TLS証明書管理 | certbot(Let's Encrypt) | - | 自動更新 |
オプション
| コンテナ名 | 役割 | ツール |
|---|---|---|
blackbox-exporter |
外形監視 | Prometheus Blackbox |
fail2ban |
攻撃防御 | Fail2ban + IPTables |
役割の分類
| コンポーネント | 役割 | 例 |
|---|---|---|
| LB / Reverse Proxy | 外部 → 内部の振り分け | Nginx / Traefik |
| WAF | 攻撃防御・検知 | ModSecurity |
| DNS(権威) | NS応答 | BIND9 / Knot |
| 証明書管理 | HTTPS証明書自動更新 | certbot / ACME |
運用のポイント
-
dmz-server1台でLB・DNS・証明書管理をコンテナ分離 - Firewall/OPNsense は DMZ の外に置く(つまり DMZ は防御の後ろにある)
VLAN30:SERV(内部サーバー)について
SERV(内部サーバー)は外部公開はせず、内部システム・バックエンド処理・業務系・管理対象 のサービスをまとめる場所。
前提条件
| 項目 | 値 |
|---|---|
| 物理サーバー名 | serv-server |
| 役割 | 内部業務・バックエンド処理 |
| VLAN | MGMT VLAN (192.168.30.0/24) |
| OS | Ubuntu Server / Debian など |
SERV層コンテナ構成
| コンテナ名 | 役割 | ツール例 | ポート | 備考 |
|---|---|---|---|---|
internal-api |
内部用API / バックエンド | FastAPI / Django / Go / Node.js | 8000 | 外部公開しない |
job-runner |
バッチ・定期ジョブ処理 | Celery / cron / custom | - | 自動処理・集計・バックグラウンド |
auth-server |
認証・SSO | Keycloak / 自作Auth | 8081 | 内部SSOやVPN認証連携 |
internal-dashboard |
管理UI / 内部ツール | React / Next.js / Admin | 8082 | 社内向け画面(外部公開なし) |
promtail |
ログ転送 | Promtail | 9080 | MGMTのLokiへ転送 |
exporter |
メトリクス出力 | node_exporter など | 9100 | MGMTのPrometheus監視対象 |
オプション
| コンテナ名 | 役割 | 備考 |
|---|---|---|
cache |
Redis / Memcached | セッション・キューなど |
message-broker |
RabbitMQ / Kafka | バックエンド間連携 |
internal-registry |
内部コンテナレジストリ | CI/CD用にMGMTと連携 |
役割の分類まとめ
| 分類 | コンテナ | 役割 |
|---|---|---|
| 🧰 バックエンド処理 |
internal-api, job-runner
|
内部API・ジョブ処理 |
| 🔐 認証系 | auth-server |
社内SSO / Keycloakなど |
| 📊 管理UI | internal-dashboard |
管理ツール |
| 🟢 監視 |
promtail, exporter
|
監視・ログ連携 |
| 🚀 補助 |
cache, message-broker
|
高速化・連携強化 |
運用のポイント
- SERV 層は「本番の最前線」なので、セキュリティ・分離・可用性
- MGMT 層と役割をしっかり分けることで管理・監視が楽
VLAN40:STO(ストレージ)について
STO(ストレージ)はアプリの運用の土台になるデータ層
前提条件
| 項目 | 値 |
|---|---|
| 物理サーバー名 | sto-server |
| 役割 | データ・ファイル・レジストリ保管 |
| VLAN | MGMT VLAN (192.168.40.0/24) |
| OS | Ubuntu Server など |
STO層コンテナ構成
| コンテナ名 | 役割 | ツール | ポート | 備考 |
|---|---|---|---|---|
db |
RDBMS(本番データ) | PostgreSQL / MariaDB | 5432 / 3306 | アプリが利用するメインDB |
nfs-server |
ファイル共有 | NFS(または Samba) | 2049 | SERVやMGMTがマウント |
registry |
コンテナイメージ保管 | Harbor / registry:2 | 5000 or 443 | CI/CDと連携 |
backup-agent |
バックアップ管理 | borg / restic / PBS | - | MGMTからデータ転送 |
promtail |
ログ転送 | Promtail | 9080 | MGMTのLokiへログ送信 |
exporter |
メトリクス出力 | node_exporter / postgres_exporter | 9100 / 9187 | 監視用 |
役割の分類まとめ
| 分類 | コンテナ | 役割 |
|---|---|---|
| 🗄️ データ | db |
RDBMS(アプリのデータ格納) |
| 📂 ストレージ共有 | nfs-server |
ファイル共有 |
| 📦 レジストリ | registry |
CI/CD用コンテナイメージ保管 |
| 🧰 バックアップ | backup-agent |
データの保護 |
| 🟢 監視 |
promtail, exporter
|
ログ・メトリクス連携 |
🧭 運用のポイント
- DBとNFSは 同居
- バックアップは別HDD・NAS・外部にも複製
- STOは「守られる側」なので基本的に外向き通信は不要
- RAID / ZFSなどでディスク障害に備える
- CI/CDで使うコンテナイメージもここに置くとネットワーク効率が良
VPN
VPN(管理アクセス層)とは
VPN(Virtual Private Network)は、
MGMT 層などの管理ネットワークへ安全にアクセスするための唯一の入口となる「ゲートウェイ層」。
管理UI・CLI・SSH などへのアクセスはすべて VPN 経由に限定し、外部攻撃面(Attack Surface)を最小化
前提条件
| 項目 | 値 |
|---|---|
| サーバー名 | vpn-gateway |
| 役割 | 管理アクセスゲートウェイ(VPN接続のみでMGMTへアクセス可能) |
| VLAN | MGMT VLAN (192.168.10.0/24) |
| OS | Ubuntu Server / Debian など |
| コンテナ基盤 | Docker(または Podman) |
| 外部公開 | VPN ポートのみ |
| 管理者接続 | PC / Mac / iPhone / Android(WireGuard または OpenVPN クライアント) |
VPN層 コンテナ構成表
| コンテナ名 | サービス / 役割 | ツール | ポート | 備考 |
|---|---|---|---|---|
vpn-gateway |
VPNサーバー | WireGuard or OpenVPN | 51820/UDP(例) | 管理者専用のVPN。MGMT VLANへの入口 |
fw(任意) |
Firewall | nftables / ufw | - | VPN以外のアクセスをブロック。踏み台機能としても利用可能 |
役割の分類まとめ
| 分類 | コンテナ | ツール | 主な役割 |
|---|---|---|---|
| 🛡 VPN | vpn-gateway |
WireGuard / OpenVPN | 管理ネットワークへのセキュアな入口 |
| 🔥 Firewall |
fw(任意) |
nftables / ufw | VPN経由以外のアクセス制限 |
運用のポイント
- 外部公開は VPN ポートのみ(51820/UDP など)
- すべての管理アクセスは VPN 経由に限定
- 管理UI(Grafana, Gitea, ArgoCD など)は VPN 内部IPでアクセス
- VPN 鍵(WireGuard)または証明書(OpenVPN)は端末ごとに発行
- Firewall で VPNインターフェース以外のアクセスは遮断
- 定期的な鍵・証明書のローテーションを実施
- 接続ログを Loki 等へ転送して監査可能
- VPNサーバー自体は最小限の機能に絞り、他のサービスと混在させないのが理想
- VPN層は管理アクセスの「唯一の外部入り口」
- サービスを混在させず、ゲートウェイ専用として運用
- WireGuard なら軽量で高速・管理もシンプル
- すべての管理系ツールへのアクセスは VPN 内部に限定し、強固なセキュリティを実現
SecurityGateway
Firewallサーバー(edge-server)の役割まとめ
| 役割 | 内容 |
|---|---|
| 🧱 Firewall | VLAN 間通信や外部アクセスの制御(ACL) |
| 🌐 NAT / ルーティング | VLAN 間・外部への通信経路 |
| 🔐 VPN 終端 | WireGuard / OpenVPN など |
| 🧭 DHCP / DNS | VLANごとのIP払い出しと名前解決 |
| 🛡 IPS / IDS | 不正通信の検知(Suricata など) |
| 🚨 ログ・監視 | MGMT層に転送して可視化 |
物理構成(Firewall)
| 項目 | 内容 |
|---|---|
| 物理サーバー名 | edge-server |
| VLAN | 例:WAN + VLAN10〜90 |
| OS | OPNsense / pfSense / Ubuntu + nftables |
| NIC | 2ポート以上(WAN/LAN)、または trunk |
コンテナ構成(もし汎用Linuxで組むなら)
OPNsense のような専用FWではなく、Ubuntu などで手動構築する場合
コンテナで役割ごとに分ける構成が分かりやすいです。
| コンテナ名 | 役割 | ツール | ポート | 備考 |
|---|---|---|---|---|
firewall-core |
ルーティング / NAT / FW | iptables / nftables | - | メインのFirewall機能 |
dhcp-server |
DHCPサーバー | Kea / ISC dhcpd | 67/UDP | VLANごとにIP払い出し |
dns-server |
DNS(内部向け) | Unbound / BIND9 | 53 | ローカル名解決 |
vpn-server |
VPN終端 | WireGuard / OpenVPN | 51820/UDP | VLAN90着地点 |
ids-ips |
侵入検知・防御 | Suricata / Snort | - | FWの監視強化 |
promtail |
ログ収集 | Promtail | 9080 | MGMTのLokiに送信 |
exporter |
メトリクス | node_exporter | 9100 | MGMTから監視 |
🧠 運用のポイント
- 🧱 Firewallは1台で十分 → 複雑にしない方が安全
- 🔐 VPNも同じサーバーに → VLAN90で着地
- 📡 DHCP / DNS もここにまとめると VLAN 管理がシンプルになる
- 🧠 IDS(Suricata)を追加すると不審通信検知が可能
- 🪵 ログは MGMT(監視サーバー)へ送信(Promtail)
Discussion