😇

ネットワーク構成図を作ってみた

に公開

はじめに

今回、自宅環境を拡張するべく、ネットワーク構成図を作ってみた。初めて作るので、色々拙い部分もあるとは思うが、よければ見ていってほしい。

使ったツール

今回はdraw.ioというツールを使ってネットワーク構成図を作成してみた。結構使い勝手が良かった。

https://qiita.com/G-awa/items/8fd414700b68b2bcafcc

上の記事を見て貰えばどんなツールかわかると思う

今回はネットワーク構成図に活用したがこれからは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-server 1台で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